summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/arraycols/arraycols.dtx148
-rw-r--r--macros/latex/contrib/arraycols/arraycols.ins4
-rw-r--r--macros/latex/contrib/arraycols/arraycols.pdfbin464654 -> 129129 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/latvian/README.md10
-rw-r--r--macros/latex/contrib/babel-contrib/latvian/latvian.dtx18
-rw-r--r--macros/latex/contrib/babel-contrib/latvian/latvian.pdfbin267036 -> 282377 bytes
-rw-r--r--macros/latex/contrib/babel-contrib/welsh/README.md (renamed from macros/latex/contrib/babel-contrib/welsh/README)13
-rw-r--r--macros/latex/contrib/babel-contrib/welsh/welsh.dtx12
-rw-r--r--macros/latex/contrib/babel-contrib/welsh/welsh.pdfbin111128 -> 119975 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md33
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty199
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdfbin161174 -> 164420 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex164
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt4
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md31
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty2
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty199
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdfbin177469 -> 178055 bytes
-rw-r--r--macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex198
-rw-r--r--macros/latex/contrib/easybook/easybook.dtx179
-rw-r--r--macros/latex/contrib/easybook/easybook.pdfbin639763 -> 627689 bytes
-rw-r--r--macros/latex/contrib/easybook/easybook.tex65
-rw-r--r--macros/latex/contrib/els-cas-templates/README2
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-common.sty11
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc-sample.pdfbin0 -> 909164 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc-sample.tex463
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc-template.tex61
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-dc.cls26
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-model2-names.bst8
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-refs.bib2
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc-sample.pdfbin0 -> 956878 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc-sample.tex457
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc-template.tex62
-rw-r--r--macros/latex/contrib/els-cas-templates/cas-sc.cls11
-rw-r--r--macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdfbin433973 -> 430989 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex6
-rw-r--r--macros/latex/contrib/els-cas-templates/doc/rvdtx.sty4
-rw-r--r--macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdfbin0 -> 8354 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpgbin0 -> 681950 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdfbin0 -> 2546 bytes
-rw-r--r--macros/latex/contrib/els-cas-templates/manifest.txt36
-rw-r--r--macros/latex/contrib/elteiktdk/LICENSE2
-rw-r--r--macros/latex/contrib/elteiktdk/README.md16
-rw-r--r--macros/latex/contrib/elteiktdk/README.pdfbin166760 -> 168708 bytes
-rw-r--r--macros/latex/contrib/elteiktdk/README_hu.md10
-rw-r--r--macros/latex/contrib/elteiktdk/README_hu.pdfbin169068 -> 170214 bytes
-rw-r--r--macros/latex/contrib/elteiktdk/elteiktdk.bib2
-rw-r--r--macros/latex/contrib/elteiktdk/elteiktdk.cls10
-rw-r--r--macros/latex/contrib/elteiktdk/elteiktdk_en.pdfbin306031 -> 326320 bytes
-rw-r--r--macros/latex/contrib/elteiktdk/elteiktdk_en.tex5
-rw-r--r--macros/latex/contrib/elteiktdk/elteiktdk_hu.pdfbin324742 -> 331537 bytes
-rw-r--r--macros/latex/contrib/elteiktdk/elteiktdk_hu.tex5
-rw-r--r--macros/latex/contrib/elteiktdk/images/elte_cimer_szines-eps-converted-to.pdfbin0 -> 119514 bytes
-rw-r--r--macros/latex/contrib/elteikthesis/LICENSE2
-rw-r--r--macros/latex/contrib/elteikthesis/README.md10
-rw-r--r--macros/latex/contrib/elteikthesis/README.pdfbin168297 -> 163898 bytes
-rw-r--r--macros/latex/contrib/elteikthesis/README_hu.md5
-rw-r--r--macros/latex/contrib/elteikthesis/README_hu.pdfbin172359 -> 167241 bytes
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis.bib2
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis.cls14
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis_en.pdfbin434374 -> 461564 bytes
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis_en.tex6
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis_hu.pdfbin463564 -> 489954 bytes
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis_hu.tex6
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis_minted.pdfbin93792 -> 43367 bytes
-rw-r--r--macros/latex/contrib/elteikthesis/elteikthesis_minted.tex2
-rw-r--r--macros/latex/contrib/elteikthesis/images/elte_cimer_szines-eps-converted-to.pdfbin0 -> 119514 bytes
-rw-r--r--macros/latex/contrib/esindex/README.md4
-rw-r--r--macros/latex/contrib/esindex/esindex.pdfbin62539 -> 68921 bytes
-rw-r--r--macros/latex/contrib/esindex/esindex.sty37
-rw-r--r--macros/latex/contrib/esindex/esindex.tex8
-rw-r--r--macros/latex/contrib/fadingimage/README.md18
-rw-r--r--macros/latex/contrib/fadingimage/doc/fadingimage.pdfbin138677 -> 137070 bytes
-rw-r--r--macros/latex/contrib/fadingimage/doc/fadingimage.tex29
-rw-r--r--macros/latex/contrib/fadingimage/tex/fadingimage.sty52
-rw-r--r--macros/latex/contrib/fontscale/CHANGELOG.md12
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual.pdfbin117119 -> 117113 bytes
-rw-r--r--macros/latex/contrib/fontscale/fontscale-manual.tex11
-rw-r--r--macros/latex/contrib/fontscale/fontscale.sty217
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.dtx719
-rw-r--r--macros/latex/contrib/frenchmath/frenchmath.pdfbin580908 -> 871342 bytes
-rw-r--r--macros/latex/contrib/huaz/README2
-rw-r--r--macros/latex/contrib/huaz/huaz.pdfbin323827 -> 371130 bytes
-rw-r--r--macros/latex/contrib/huaz/huaz.sty567
-rw-r--r--macros/latex/contrib/huaz/huaz.tex869
-rw-r--r--macros/latex/contrib/jsonparse/README.md9
-rw-r--r--macros/latex/contrib/jsonparse/jason/jason.pdf1662
-rw-r--r--macros/latex/contrib/jsonparse/jason/jason.svg67
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse-doc.pdfbin410605 -> 578489 bytes
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse-doc.tex50
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse.sty322
-rw-r--r--macros/latex/contrib/lastpage/README6
-rw-r--r--macros/latex/contrib/lastpage/lastpage-example.pdfbin130736 -> 130201 bytes
-rw-r--r--macros/latex/contrib/lastpage/lastpage.dtx320
-rw-r--r--macros/latex/contrib/lastpage/lastpage.pdfbin448061 -> 440278 bytes
-rw-r--r--macros/latex/contrib/litesolution/README.md20
-rw-r--r--macros/latex/contrib/litesolution/doc/figure/universe.pdfbin97187 -> 97170 bytes
-rw-r--r--macros/latex/contrib/litesolution/doc/figure/universe.tex10
-rw-r--r--macros/latex/contrib/litesolution/doc/litesolution.pdfbin628872 -> 269427 bytes
-rw-r--r--macros/latex/contrib/litesolution/doc/litesolution.tex84
-rw-r--r--macros/latex/contrib/litesolution/tex/litesolution.cls134
-rw-r--r--macros/latex/contrib/mathgreeks/README.md30
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.dtx1328
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.ins56
-rw-r--r--macros/latex/contrib/mathgreeks/mathgreeks.pdfbin0 -> 1716778 bytes
-rw-r--r--macros/latex/contrib/mismath/README.md8
-rw-r--r--macros/latex/contrib/mismath/mismath.dtx1097
-rw-r--r--macros/latex/contrib/mismath/mismath.ins2
-rw-r--r--macros/latex/contrib/mismath/mismath.pdfbin155495 -> 438746 bytes
-rw-r--r--macros/latex/contrib/nmbib/Makefile6
-rw-r--r--macros/latex/contrib/nmbib/README2
-rw-r--r--macros/latex/contrib/nmbib/nmbib-sample.pdf (renamed from macros/latex/contrib/nmbib/nmsample.pdf)bin96763 -> 101693 bytes
-rw-r--r--macros/latex/contrib/nmbib/nmbib-sample.tex (renamed from macros/latex/contrib/nmbib/nmsample.tex)0
-rw-r--r--macros/latex/contrib/nmbib/nmbib.dtx4
-rw-r--r--macros/latex/contrib/nmbib/nmbib.pdfbin347244 -> 368243 bytes
-rw-r--r--macros/latex/contrib/nmbib/nmbibtex.1135
-rw-r--r--macros/latex/contrib/notebeamer/README.md25
-rw-r--r--macros/latex/contrib/notebeamer/doc/notebeamer.pdfbin1357620 -> 907049 bytes
-rw-r--r--macros/latex/contrib/notebeamer/doc/notebeamer.tex21
-rw-r--r--macros/latex/contrib/notebeamer/tex/notebeamer.sty6
-rw-r--r--macros/latex/contrib/osda/README.md4
-rw-r--r--macros/latex/contrib/osda/example.pngbin162079 -> 186840 bytes
-rw-r--r--macros/latex/contrib/osda/osda.dtx111
-rw-r--r--macros/latex/contrib/osda/osda.ins4
-rw-r--r--macros/latex/contrib/osda/osda.pdfbin192843 -> 219701 bytes
-rw-r--r--macros/latex/contrib/ppt-slides/README.md9
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.dtx4
-rw-r--r--macros/latex/contrib/ppt-slides/ppt-slides.pdfbin935972 -> 935953 bytes
-rw-r--r--macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdfbin10283168 -> 10283638 bytes
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCAssemblagesSolides.tex14
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCCartographie.tex58
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex2
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex9
-rw-r--r--macros/latex/contrib/profcollege/latex/PfCStatistiques.tex10
-rw-r--r--macros/latex/contrib/profcollege/latex/ProfCollege.sty4
-rw-r--r--macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdfbin288578 -> 298965 bytes
-rw-r--r--macros/latex/contrib/profmaquette/latex/ProfMaquette.sty407
-rw-r--r--macros/latex/contrib/rpgicons/LICENSE415
-rw-r--r--macros/latex/contrib/rpgicons/README.md30
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-doc.pdfbin0 -> 490866 bytes
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-doc.tex831
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-l3.sty2025
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons-pgf.sty2596
-rw-r--r--macros/latex/contrib/rpgicons/rpgicons.sty33
-rw-r--r--macros/latex/contrib/siunitx/CHANGELOG.md9
-rw-r--r--macros/latex/contrib/siunitx/siunitx-code.pdfbin645251 -> 646201 bytes
-rw-r--r--macros/latex/contrib/siunitx/siunitx-quantity.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.dtx2
-rw-r--r--macros/latex/contrib/siunitx/siunitx.pdfbin703738 -> 703731 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.pdfbin95175 -> 95183 bytes
-rw-r--r--macros/latex/contrib/spbmark/spbmark.sty2
-rw-r--r--macros/latex/contrib/spbmark/spbmark.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/README.md136
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-circle.tex8
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-ellipse.tex133
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-line.tex70
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-classes-point.tex1
-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.tex225
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex308
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-main.tex30
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex150
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/doc/tkz-elements.pdfbin696762 -> 704147 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdfbin20611 -> 20614 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdfbin16392 -> 16396 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdfbin17158 -> 17162 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdfbin11343 -> 11341 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz-elements.sty4
-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.lua15
-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.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua13
-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.lua48
-rw-r--r--macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_vector.lua4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/README.md16
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex35
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex19
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex26
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex25
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex3
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex70
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex2
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex36
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex20
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex24
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex427
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex15
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex12
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex122
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex72
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex10
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex16
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex17
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdfbin1116500 -> 1103289 bytes
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex268
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex262
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex11
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex4
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg24
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty47
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex23
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex11
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex6
-rw-r--r--macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex6
-rw-r--r--macros/latex/required/l3backend/CHANGELOG.md (renamed from macros/latex/contrib/l3backend/CHANGELOG.md)11
-rw-r--r--macros/latex/required/l3backend/README.md (renamed from macros/latex/contrib/l3backend/README.md)2
-rw-r--r--macros/latex/required/l3backend/l3backend-basics.dtx (renamed from macros/latex/contrib/l3backend/l3backend-basics.dtx)14
-rw-r--r--macros/latex/required/l3backend/l3backend-box.dtx (renamed from macros/latex/contrib/l3backend/l3backend-box.dtx)2
-rw-r--r--macros/latex/required/l3backend/l3backend-code.pdf (renamed from macros/latex/contrib/l3backend/l3backend-code.pdf)bin908163 -> 907780 bytes
-rw-r--r--macros/latex/required/l3backend/l3backend-code.tex (renamed from macros/latex/contrib/l3backend/l3backend-code.tex)0
-rw-r--r--macros/latex/required/l3backend/l3backend-color.dtx (renamed from macros/latex/contrib/l3backend/l3backend-color.dtx)2
-rw-r--r--macros/latex/required/l3backend/l3backend-draw.dtx (renamed from macros/latex/contrib/l3backend/l3backend-draw.dtx)2
-rw-r--r--macros/latex/required/l3backend/l3backend-graphics.dtx (renamed from macros/latex/contrib/l3backend/l3backend-graphics.dtx)2
-rw-r--r--macros/latex/required/l3backend/l3backend-header.dtx (renamed from macros/latex/contrib/l3backend/l3backend-header.dtx)2
-rw-r--r--macros/latex/required/l3backend/l3backend-opacity.dtx (renamed from macros/latex/contrib/l3backend/l3backend-opacity.dtx)2
-rw-r--r--macros/latex/required/l3backend/l3backend-pdf.dtx (renamed from macros/latex/contrib/l3backend/l3backend-pdf.dtx)106
-rw-r--r--macros/latex/required/l3backend/l3backend.ins (renamed from macros/latex/contrib/l3backend/l3backend.ins)0
-rw-r--r--macros/latex/required/l3kernel/CHANGELOG.md (renamed from macros/latex/contrib/l3kernel/CHANGELOG.md)28
-rw-r--r--macros/latex/required/l3kernel/README.md (renamed from macros/latex/contrib/l3kernel/README.md)2
-rw-r--r--macros/latex/required/l3kernel/expl3.dtx (renamed from macros/latex/contrib/l3kernel/expl3.dtx)4
-rw-r--r--macros/latex/required/l3kernel/expl3.pdf (renamed from macros/latex/contrib/l3kernel/expl3.pdf)bin610363 -> 610060 bytes
-rw-r--r--macros/latex/required/l3kernel/interface3.pdf (renamed from macros/latex/contrib/l3kernel/interface3.pdf)bin1795605 -> 1801752 bytes
-rw-r--r--macros/latex/required/l3kernel/interface3.tex (renamed from macros/latex/contrib/l3kernel/interface3.tex)2
-rw-r--r--macros/latex/required/l3kernel/l3.ins (renamed from macros/latex/contrib/l3kernel/l3.ins)3
-rw-r--r--macros/latex/required/l3kernel/l3basics.dtx (renamed from macros/latex/contrib/l3kernel/l3basics.dtx)16
-rw-r--r--macros/latex/required/l3kernel/l3bitset.dtx (renamed from macros/latex/contrib/l3kernel/l3bitset.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3bootstrap.dtx (renamed from macros/latex/contrib/l3kernel/l3bootstrap.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3box.dtx (renamed from macros/latex/contrib/l3kernel/l3box.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3cctab.dtx (renamed from macros/latex/contrib/l3kernel/l3cctab.dtx)33
-rw-r--r--macros/latex/required/l3kernel/l3clist.dtx (renamed from macros/latex/contrib/l3kernel/l3clist.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3coffins.dtx (renamed from macros/latex/contrib/l3kernel/l3coffins.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3color.dtx (renamed from macros/latex/contrib/l3kernel/l3color.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3debug.dtx (renamed from macros/latex/contrib/l3kernel/l3debug.dtx)15
-rw-r--r--macros/latex/required/l3kernel/l3deprecation.dtx (renamed from macros/latex/contrib/l3kernel/l3deprecation.dtx)63
-rw-r--r--macros/latex/required/l3kernel/l3doc.dtx (renamed from macros/latex/contrib/l3kernel/l3doc.dtx)6
-rw-r--r--macros/latex/required/l3kernel/l3doc.pdf (renamed from macros/latex/contrib/l3kernel/l3doc.pdf)bin565279 -> 565282 bytes
-rw-r--r--macros/latex/required/l3kernel/l3docstrip.dtx (renamed from macros/latex/contrib/l3kernel/l3docstrip.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3docstrip.pdf (renamed from macros/latex/contrib/l3kernel/l3docstrip.pdf)bin151266 -> 150985 bytes
-rw-r--r--macros/latex/required/l3kernel/l3expan.dtx (renamed from macros/latex/contrib/l3kernel/l3expan.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3file.dtx (renamed from macros/latex/contrib/l3kernel/l3file.dtx)19
-rw-r--r--macros/latex/required/l3kernel/l3flag.dtx (renamed from macros/latex/contrib/l3kernel/l3flag.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-assign.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-assign.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-aux.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-aux.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-basics.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-basics.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-convert.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-convert.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-expo.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-expo.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-extended.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-extended.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-functions.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-functions.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-logic.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-logic.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-parse.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-parse.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-random.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-random.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-round.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-round.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-symbolic.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-symbolic.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-traps.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-traps.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-trig.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-trig.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp-types.dtx (renamed from macros/latex/contrib/l3kernel/l3fp-types.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fp.dtx (renamed from macros/latex/contrib/l3kernel/l3fp.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3fparray.dtx (renamed from macros/latex/contrib/l3kernel/l3fparray.dtx)57
-rw-r--r--macros/latex/required/l3kernel/l3int.dtx (renamed from macros/latex/contrib/l3kernel/l3int.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3intarray.dtx (renamed from macros/latex/contrib/l3kernel/l3intarray.dtx)75
-rw-r--r--macros/latex/required/l3kernel/l3kernel-functions.dtx (renamed from macros/latex/contrib/l3kernel/l3kernel-functions.dtx)29
-rw-r--r--macros/latex/required/l3kernel/l3keys.dtx (renamed from macros/latex/contrib/l3kernel/l3keys.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3legacy.dtx (renamed from macros/latex/contrib/l3kernel/l3legacy.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3luatex.dtx (renamed from macros/latex/contrib/l3kernel/l3luatex.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3msg.dtx (renamed from macros/latex/contrib/l3kernel/l3msg.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3names.dtx (renamed from macros/latex/contrib/l3kernel/l3names.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3news.pdf (renamed from macros/latex/contrib/l3kernel/l3news.pdf)bin396222 -> 396222 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news.tex (renamed from macros/latex/contrib/l3kernel/l3news.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news01.pdf (renamed from macros/latex/contrib/l3kernel/l3news01.pdf)bin122959 -> 122959 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news01.tex (renamed from macros/latex/contrib/l3kernel/l3news01.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news02.pdf (renamed from macros/latex/contrib/l3kernel/l3news02.pdf)bin150919 -> 150919 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news02.tex (renamed from macros/latex/contrib/l3kernel/l3news02.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news03.pdf (renamed from macros/latex/contrib/l3kernel/l3news03.pdf)bin148747 -> 148747 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news03.tex (renamed from macros/latex/contrib/l3kernel/l3news03.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news04.pdf (renamed from macros/latex/contrib/l3kernel/l3news04.pdf)bin114754 -> 114754 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news04.tex (renamed from macros/latex/contrib/l3kernel/l3news04.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news05.pdf (renamed from macros/latex/contrib/l3kernel/l3news05.pdf)bin112524 -> 112524 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news05.tex (renamed from macros/latex/contrib/l3kernel/l3news05.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news06.pdf (renamed from macros/latex/contrib/l3kernel/l3news06.pdf)bin151591 -> 151591 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news06.tex (renamed from macros/latex/contrib/l3kernel/l3news06.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news07.pdf (renamed from macros/latex/contrib/l3kernel/l3news07.pdf)bin128344 -> 128344 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news07.tex (renamed from macros/latex/contrib/l3kernel/l3news07.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news08.pdf (renamed from macros/latex/contrib/l3kernel/l3news08.pdf)bin163484 -> 163484 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news08.tex (renamed from macros/latex/contrib/l3kernel/l3news08.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news09.pdf (renamed from macros/latex/contrib/l3kernel/l3news09.pdf)bin250159 -> 250159 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news09.tex (renamed from macros/latex/contrib/l3kernel/l3news09.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news10.pdf (renamed from macros/latex/contrib/l3kernel/l3news10.pdf)bin150302 -> 150302 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news10.tex (renamed from macros/latex/contrib/l3kernel/l3news10.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news11.pdf (renamed from macros/latex/contrib/l3kernel/l3news11.pdf)bin170102 -> 170102 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news11.tex (renamed from macros/latex/contrib/l3kernel/l3news11.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3news12.pdf (renamed from macros/latex/contrib/l3kernel/l3news12.pdf)bin205020 -> 205020 bytes
-rw-r--r--macros/latex/required/l3kernel/l3news12.tex (renamed from macros/latex/contrib/l3kernel/l3news12.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3pdf.dtx (renamed from macros/latex/contrib/l3kernel/l3pdf.dtx)362
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.csv (renamed from macros/latex/contrib/l3kernel/l3prefixes.csv)0
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.pdf (renamed from macros/latex/contrib/l3kernel/l3prefixes.pdf)bin82720 -> 82720 bytes
-rw-r--r--macros/latex/required/l3kernel/l3prefixes.tex (renamed from macros/latex/contrib/l3kernel/l3prefixes.tex)0
-rw-r--r--macros/latex/required/l3kernel/l3prg.dtx (renamed from macros/latex/contrib/l3kernel/l3prg.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3prop.dtx (renamed from macros/latex/contrib/l3kernel/l3prop.dtx)40
-rw-r--r--macros/latex/required/l3kernel/l3quark.dtx (renamed from macros/latex/contrib/l3kernel/l3quark.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3regex.dtx (renamed from macros/latex/contrib/l3kernel/l3regex.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3seq.dtx (renamed from macros/latex/contrib/l3kernel/l3seq.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3skip.dtx (renamed from macros/latex/contrib/l3kernel/l3skip.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3sort.dtx (renamed from macros/latex/contrib/l3kernel/l3sort.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3str-convert.dtx (renamed from macros/latex/contrib/l3kernel/l3str-convert.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3str.dtx (renamed from macros/latex/contrib/l3kernel/l3str.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3styleguide.pdf (renamed from macros/latex/contrib/l3kernel/l3styleguide.pdf)bin296553 -> 296259 bytes
-rw-r--r--macros/latex/required/l3kernel/l3styleguide.tex (renamed from macros/latex/contrib/l3kernel/l3styleguide.tex)2
-rw-r--r--macros/latex/required/l3kernel/l3syntax-changes.pdf (renamed from macros/latex/contrib/l3kernel/l3syntax-changes.pdf)bin231402 -> 231103 bytes
-rw-r--r--macros/latex/required/l3kernel/l3syntax-changes.tex (renamed from macros/latex/contrib/l3kernel/l3syntax-changes.tex)2
-rw-r--r--macros/latex/required/l3kernel/l3sys.dtx (renamed from macros/latex/contrib/l3kernel/l3sys.dtx)21
-rw-r--r--macros/latex/required/l3kernel/l3term-glossary.pdf (renamed from macros/latex/contrib/l3kernel/l3term-glossary.pdf)bin242191 -> 241893 bytes
-rw-r--r--macros/latex/required/l3kernel/l3term-glossary.tex (renamed from macros/latex/contrib/l3kernel/l3term-glossary.tex)2
-rw-r--r--macros/latex/required/l3kernel/l3text-case.dtx (renamed from macros/latex/contrib/l3kernel/l3text-case.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3text-map.dtx (renamed from macros/latex/contrib/l3kernel/l3text-map.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3text-purify.dtx (renamed from macros/latex/contrib/l3kernel/l3text-purify.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3text.dtx (renamed from macros/latex/contrib/l3kernel/l3text.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3tl-analysis.dtx (renamed from macros/latex/contrib/l3kernel/l3tl-analysis.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3tl-build.dtx (renamed from macros/latex/contrib/l3kernel/l3tl-build.dtx)5
-rw-r--r--macros/latex/required/l3kernel/l3tl.dtx (renamed from macros/latex/contrib/l3kernel/l3tl.dtx)2
-rw-r--r--macros/latex/required/l3kernel/l3token.dtx (renamed from macros/latex/contrib/l3kernel/l3token.dtx)10
-rw-r--r--macros/latex/required/l3kernel/l3unicode.dtx (renamed from macros/latex/contrib/l3kernel/l3unicode.dtx)4
-rw-r--r--macros/latex/required/l3kernel/source3.pdf (renamed from macros/latex/contrib/l3kernel/source3.pdf)bin7574289 -> 7624172 bytes
-rw-r--r--macros/latex/required/l3kernel/source3.tex (renamed from macros/latex/contrib/l3kernel/source3.tex)2
-rw-r--r--macros/latex/required/l3kernel/source3body.tex (renamed from macros/latex/contrib/l3kernel/source3body.tex)0
394 files changed, 16847 insertions, 4363 deletions
diff --git a/macros/latex/contrib/arraycols/arraycols.dtx b/macros/latex/contrib/arraycols/arraycols.dtx
index b3a438be98..aebd0bb195 100644
--- a/macros/latex/contrib/arraycols/arraycols.dtx
+++ b/macros/latex/contrib/arraycols/arraycols.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+% Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%
% This file may be distributed and/or modified under the conditions of
% the LaTeX Project Public License, either version 1.3 of this license
@@ -20,16 +20,16 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{arraycols}
- [2023/09/13 v1.4 .dtx arraycols file]
+ [2024/05/04 v1.5 .dtx New column types for array and tabular]
%</package>
%<*driver>
\documentclass{ltxdoc}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[french,english]{babel}
-\usepackage{lmodern}
+\usepackage[charter]{mathdesign}
\usepackage{arraycols}
-
+\usepackage{spacingtricks}
\usepackage{sectsty}
\usepackage{xcolor}
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
@@ -56,7 +56,7 @@
%</driver>
% \fi
%
-% \CheckSum{46}
+% \CheckSum{42}
%
% \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
@@ -81,23 +81,29 @@
% minor changes in documentation}
% \changes{v1.2}{2021/09/20}{Incompatibility with siunitx package
% (called by pstricks-add) is solved}
-% \changes{v1.3}{2023/08/09}{Small changes in documentation}
-% \changes{v1.4}{2023/09/13}{More changes in documentation}
+% \changes{v1.3}{2023/08/09}{A few changes in the documentation}
+% \changes{v1.4}{2023/09/13}{More changes in the documentation}
+% \changes{v1.5}{2024/05/04}{Mention of the tabularray and mdwtab packages in the doc;
+% explanations about the gape and Gape macros from the makecell package}
%
% \GetFileInfo{arraycols.sty}
%
% \title{The \textsf{arraycols} package\thanks{This document
% corresponds to \textsf{arraycols}~\fileversion, dated \filedate.
-% Thanks to François Bastouil for assistance with the English translation.}}
+% Thanks to François Bastouil for initial assistance with the English translation.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{September 13, 2023}
+% \date{May 4, 2024}
% \maketitle
%
% \section{Introduction}
%
-% This package introduces new predefined column types for tables, in addition to
-% the \textsf{array} package by Frank Mittelbach and David Carlisle~\cite{ARRAY}.
-% It also includes a command for wide horizontal rule drawing.
+% Although the remarkable \textsf{tabularray} package by Jianrui Lyu~\cite{TABUL},
+% developed in \LaTeX 3, offers many new possibilities and great flexibility
+% in composing tables, many users are still familiar with
+% Frank Mittelbach and David Carlisle's \textsf{array} package~\cite{ARRAY}.
+% In addition to \textsf{array}, this modest \textsf{arraycols} package introduces
+% new predefined column types for tables and also includes a command
+% for wide horizontal rule drawing.
% Below is a summary of the column types and macro defined by \textsf{arraycols},
% which will be detailed in the following section.
%
@@ -142,7 +148,7 @@
% \end{tabular}
% \end{center}
%
-% Note that if a column type has been previously defined by another package,
+% If a column type has been previously defined by another package,
% using \textsf{arraycols} will overwrite it and display a warning message.
%
% In addition to loading the \textsf{array} package, \textsf{arraycols}
@@ -151,13 +157,10 @@
% Moreover it relies on
% \textsf{tabularx}~\cite{TABX} for \texttt{T} and \texttt{Z} column types and
% loads \textsf{makecell}~\cite{MKCELL} for creation of multilined tabular cells.
-% It's worth mentioning that the \textsf{tablestyles} package~\cite{TBLSTY}
-% also defines L, C, R and Z column types, but differently.
-% Nevertheless, \textsf{tablestyles} is incompatible with \textsf{makecell}
-% and consequently with \textsf{arraycols} as well.
-%
-% With its minimal code, \textsf{arraycols} makes no claim to develop new macros.
-% Its purpose is to combine and configure functionalities derived from other packages.
+% Note that the \textsf{tablestyles} package~\cite{TBLSTY}
+% also defines the column types L, C, R and Z, but differently.
+% However, \textsf{tablestyles} is incompatible with \textsf{makecell}
+% and therefore also with \textsf{arraycols} as well.
%
% \section{Usage}
%
@@ -171,14 +174,13 @@
% in a \texttt{tabular} environment.
% For instance, using the declaration "\begin{tabular}{|l|C|r|}" sets the second column
% in centered mathematical mode. Similarly, using the declaration "\begin{array}{|L|c|c|}"
-% sets the first column in text mode, left-aligned\footnote{The declarations
-% \texttt{L, C, R} do not work in a \texttt{tabularx} environment.
+% sets the first column in text mode, left-aligned
+% \footnote{The declarations \texttt{L, C, R} do not work in a \texttt{tabularx} environment.
% Additionally, the \mbox{\textsf{tabulary}} package by David Carlisle~\cite{TABY}
% already defines the \texttt{L, C, R} (and \texttt{J}) column types for specific alignments
% in tables of the same type as \texttt{tabularx}.
-% However, there is no incompatibility with \textsf{arraycols} because these column definitions
-% apply exclusively within \texttt{tabulary} environments.
-% }.
+% However, there is no incompatibility with \textsf{arraycols} because these
+% column definitions apply exclusively within \texttt{tabulary} environments.}.
%
% \medskip
% \DescribeEnv{t\marg{width}}
@@ -230,17 +232,18 @@
% \end{array}
% \]
%
-% The \textsf{cellspace} package is loaded with the \texttt{math} option\footnote{The
-% \texttt{math} option loads the \textsf{amsmath} package.
+% The \textsf{cellspace} package is loaded with the \texttt{math} option
+% \footnote{The \texttt{math} option loads the \textsf{amsmath} package.
% As mentionned in the \textsf{cellspace} package documentation:
% \og the \textsf{amsmath} package can be loaded beforehand with other
% packages (such as \texttt{empheq} or \texttt{mathtools}),
% were an incompatibility to arise from one’s loading it later\fg.}
% to efficiently manage row heights, including in matrices.
% Another option of \textsf{cellspace}, \texttt{column=Q}
-% (with \texttt{S} being the default in \textsf{cellspace})\footnote{The
-% letter Q is a substitute for the default column modifier S of the \textsf{cellspace}
-% package.}, was necessary to prevent any compatibility issues
+% (with \texttt{S} being the default in \textsf{cellspace})
+% \footnote{The letter Q is a substitute for the default column modifier
+% S of the \textsf{cellspace} package.},
+% was necessary to prevent any compatibility issues
% with the \textsf{siunitx} package (also loaded by \textsf{pstricks-add}).
% The \texttt{Q} declaration serves as a \og modifier \fg{}
% that, when placed before a column type declaration,
@@ -253,19 +256,44 @@
% excellent row height adjustment. However, regrettably, it doesn't handle the height
% of vertical separators ``"|"''.
% In order to achieve a similar vertical adjustment as \textsf{booktabs},
-% we set the \textsf{cellspace} parameters as follows:\\
-% \indent\indent"\setlength{\cellspacetoplimit}{3pt}", \\
-% \indent\indent"\setlength{\cellspacebottomlimit}{2pt}".
-%
-% Additionally, it's worth mentioning the \textsf{tabls} package by Donald Arneseau~\cite{TABLS}
-% that makes a good adjustment of row heights as well, but it is incompatible
-% with the \textsf{array} and \textsf{numprint} packages.
+% we set the \textsf{cellspace} parameters as follows:
+% \begin{center}
+% \begin{tabular}{l}
+% "\setlength{\cellspacetoplimit}{3pt}", \\
+% "\setlength{\cellspacebottomlimit}{2pt}".
+% \end{tabular}
+% \end{center}
%
% \medskip
-% Finally, manual adjustments can also be achieved using the "\vstrut" command
-% from the \textsf{spacingtricks} package~\cite{SPA}, or by utilizing "\gape" and "\Gape"
-% from the \textsf{makecell} package~\cite{MKCELL},
-% as well as employing "\bigstrut" from the \textsf{bigstrut} package~\cite{STRUT}.
+% A common issue with \LaTeX\ tables is that there isn’t enough space
+% around horizontal rules. As seen previously,
+% \textsf{cellspace} partially addresses this issue,
+% but if you want to add some more space around the horizontal rules, it's not straightforward.
+% First, note that Donald Arsenau's \textsf{tabls} package~\cite{TABLS} produces
+% a nice and automatic solution in this regard, but is not compatible with \textsf{array}
+% nor with \textsf{numprint}.
+%
+% Several other methods can be employed:
+% you can increase the space on top or bottom of a particular cell
+% by using
+% \begin{center}
+% "\gape"\oarg{\texttt{t} or \texttt{b}}\marg{text}
+% or "\Gape"\oarg{height}\oarg{depth}\marg{text}
+% \end{center}
+% from the \textsf{makecell} package~\cite{MKCELL}.
+% You have also the "\bigstrut" command from the \textsf{bigstrut} package~\cite{STRUT},
+% but it's less efficient and convenient.
+% An efficient method is provided by the \textsf{mdwtab} package
+% of Mark Wooding~\cite{MDWTAB} with its macros
+% "\vgap"\marg{length} or "\hlx"\marg{hlx-cmd},
+% where in \marg{hlx-cmd} you can place "h", representing "\hline", and "s"\oarg{length},
+% meaning "\vgap" (among others).
+% This package provides also many other interesting features.
+% Finally, manual adjustments of particular rows can be achieved using
+% the "\vstrut"\oarg{depth}\marg{height} command
+% from the \textsf{spacingtricks} package~\cite{SPA},
+% These packages are not loaded by \textsf{arraycols}, except \textsf{makecell}.
+% Have a look at their documentation.
%
% \medskip
% \DescribeEnv{z\marg{width}}
@@ -281,16 +309,19 @@
% the \texttt{X} column definition, which calculates its width in relation to
% the required width for the entire table. It aligns text to the left
% similar to \texttt{p}\marg{width}.
-% For instance, using "\begin{tabularx}{8cm}{|c|X|X|}"
+% Using "\begin{tabularx}{8cm}{|c|X|X|}"
% adjusts the width of the \texttt{X} columns
% to achieve a total width of 8\,cm. To complement this, we offer
% the \texttt{T} declaration, which performs a similar function
% but centers the content horizontally.
% Additionally the \texttt{Z} declaration activates mathematical
% mode and adjusts
-% line heights, comparable to \texttt{x} or \texttt{z}). Here's an example with
-% "\begin{tabularx}{\linewidth}{|T|y|x|Z|T|}".
+% line heights, comparable to \texttt{x} or \texttt{z}).
+% The following example is obtained with
% \begin{center}
+% "\begin{tabularx}{\linewidth}{|T|y|x|Z|T|}".
+%
+% \medskip
% \begin{tabularx}{\linewidth}{|T|y|x|Z|T|}
% \hline
% A good job &
@@ -301,6 +332,7 @@
% \hline
% \end{tabularx}
% \end{center}
+%
% Observe that cells 3 and 4 are not vertically centered to preserve
% the precise alignment of fraction bars within mathematical formulas
% across cells.
@@ -317,7 +349,8 @@
% compared to the one achieved
% with the standard declaration ``"|"''. For selecting the line thickness,
% we additionally provide the column
-% definition \texttt{V}\marg{thickness}\footnote{The definition of \texttt{V}
+% definition \texttt{V}\marg{thickness}
+% \footnote{The definition of \texttt{V}
% would have been simplified by utilizing an optional argument for \texttt{I},
% but unfortunately, this approach doesn't function.}.
%
@@ -334,14 +367,12 @@
% Horizontal rules at the beginning and end of the table are accomplished using "\whline",
% while a "\Xhline{0.8pt}" rule is employed after the legend rows.
% The formatting of header rows is achieved using the "\thead" command
-% from the \textsf{makecell} package. By default, \textsf{arraycols} sets:
-% "\renewcommand\theadfont{\footnotesize\sffamily}"
-% (in \textsf{makecell} it is |\footnotesize| only, without "\sffamily").
+% from the \textsf{makecell} package.
% Lastly, following a recommendation of the \textsf{array} package~\cite{ARRAY},
% an additional 1\,pt has been added to the standard height of each row within this table.
% This adjustment is implemented with the command
-% "\setlength{\extrarowheight}{1pt}"\footnote{As stated
-% in the \textsf{array} package documentation:
+% "\setlength{\extrarowheight}{1pt}"
+% \footnote{As stated in the \textsf{array} package documentation:
% \og This is important for tables with horizontal lines because those
% lines normally touch the capital letters\fg.}.
%
@@ -362,8 +393,8 @@
% The \textsf{cellspace} package provides the \texttt{S} modifier
% (we used \texttt{Q} instead), which,
% when placed before a column declaration, allows for the adjustment of cell content height
-% to prevent any overlap with horizontal rules. The spacing between the content and the rules
-% is governed by the parameters
+% to prevent any overlap with horizontal rules. The spacing between the content and the
+% horizontal rules is governed by the parameters
% "\cellspacetoplimit" and "\cellspacebottomlimit".
%
% \begin{macrocode}
@@ -400,32 +431,35 @@
\newcolumntype{V}[1]{!{\vrule width #1}}
\newlength\savedwidth
\newcommand{\whline}{%
- \noalign{\global\savedwidth\arrayrulewidth\global\arrayrulewidth 1pt}
+ \noalign{\global\savedwidth\arrayrulewidth
+ \global\arrayrulewidth 1pt}
\hline
\noalign{\global\arrayrulewidth\savedwidth}
}
-\renewcommand\theadfont{\footnotesize\sffamily}
% \end{macrocode}
%
% \bigskip
-% \begin{thebibliography}{11}
+% \begin{thebibliography}{13}
+% \bibitem{TABUL} \emph{Tabularray -- Typeset Tabulars and Arrays with \LaTeX 3},
+% Jianrui Lyu, CTAN, 2024A 2024/02/16.
% \bibitem{ARRAY} \emph{A new implementation of LATEX’s \textsf{tabular} and \textsf{array}
% environment}, Frank Mittelbach, David Carlisle, CTAN, v2.4k revised 2018/12/30.
% \bibitem{CELLSP} \emph{The \textsf{cellspace} package}, Josselin Noirel, CTAN,
% v1.8.1 2019/03/11.
% \bibitem{TABX} \emph{The \textsf{tabularx} package}, David Carlisle, CTAN, v2.11.b 2016/02/03.
% \bibitem{MKCELL} \emph{The \textsf{makecell} package}, Olga Lapko, CTAN, v0.1e 2009/08/03.
-% \bibitem{TABY} \emph{The \textsf{tabulary} package}, David Carlisle, CTAN, v1.10 2014/06/11.
% \bibitem{TBLSTY} \emph{The \textsf{tablestyles} package}, Matthias Pospiech, CTAN,
% v0.1 2014/06/27.
+% \bibitem{TABY} \emph{The \textsf{tabulary} package}, David Carlisle, CTAN, v1.10 2014/06/11.
% \bibitem{BOOK} \emph{Publication quality tables in \LaTeX}, package \textsf{booktabs} by
% Simon Fear, CTAN, v1.618033 2016/04/29.
% \bibitem{TABLS} \emph{The \textsf{tabls} package}, Donald Arseneau, CTAN, v3.5 2010/02/26.
% \bibitem{STRUT} \emph{The \textsf{multirow}, \textsf{bigstrut}
% and \textsf{bigdelim} packages},
% Piet van Oostrum, Øystein Bache, Jerry Leichter, CTAN, v2.4 2019/01/01.
+% \bibitem{MDWTAB} \emph{The \textsf{mdwtab} package}, Mark Wooding, CTAN, v1.9 1998/04/28.
% \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier,
-% CTAN, v1.3 2020/11/02.
+% CTAN, v1.8 2023/12/06.
% \bibitem{COMP} \emph{The \LaTeX\ Companion}. Frank Mittelbach, Michel Goossens,
% Johannes Braams, David Carlisle, Chris Rowley, 2nd edition, Pearson Education, 2004.
% \end{thebibliography}
diff --git a/macros/latex/contrib/arraycols/arraycols.ins b/macros/latex/contrib/arraycols/arraycols.ins
index 567b7a7540..66bf4af2f4 100644
--- a/macros/latex/contrib/arraycols/arraycols.ins
+++ b/macros/latex/contrib/arraycols/arraycols.ins
@@ -1,5 +1,5 @@
%%
-%% Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%% Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
%%
%% This file may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License, either version 1.3 of this license
@@ -21,7 +21,7 @@
This is a generated file.
-Copyright (C) 2019-2023 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+Copyright (C) 2019-2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
This file may be distributed and/or modified under the conditions of
the LaTeX Project Public License, either version 1.3 of this license
diff --git a/macros/latex/contrib/arraycols/arraycols.pdf b/macros/latex/contrib/arraycols/arraycols.pdf
index b42c461d36..d280a956f3 100644
--- a/macros/latex/contrib/arraycols/arraycols.pdf
+++ b/macros/latex/contrib/arraycols/arraycols.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/latvian/README.md b/macros/latex/contrib/babel-contrib/latvian/README.md
index dc9d7d99e9..6edd83b2a0 100644
--- a/macros/latex/contrib/babel-contrib/latvian/README.md
+++ b/macros/latex/contrib/babel-contrib/latvian/README.md
@@ -1,9 +1,15 @@
-## Latvian 2.0b
+## Latvian 2.0c
This is the babel style for Latvian. It bears the version number 2.0
because there were a 1.x, by Andris Lasis. Version 2.0 is heavily
based on the latter.
+### Changes 2.0c
+
+```
+* Fix an incompatibility with titlesec.
+```
+
### Changes 2.0b
```
@@ -17,5 +23,3 @@ based on the latter.
* Modififier t1composite, which redefines some T1 'composite commands'
related to the cedilla.
```
-
-2018-02-19 \ No newline at end of file
diff --git a/macros/latex/contrib/babel-contrib/latvian/latvian.dtx b/macros/latex/contrib/babel-contrib/latvian/latvian.dtx
index 82c44e2980..39555f81c4 100644
--- a/macros/latex/contrib/babel-contrib/latvian/latvian.dtx
+++ b/macros/latex/contrib/babel-contrib/latvian/latvian.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 1999 - 2000 Andris Lasis, 2014-2018 Javier Bezos and any
+% Copyright 1999 - 2000 Andris Lasis, 2014-2024 Javier Bezos and any
% individual authors listed elsewhere in this file. All rights
% reserved.
%
@@ -37,8 +37,8 @@
%</dtx>
%<code>\ProvidesLanguage{latvian}
% \fi
-% \ProvidesLanguage{latvian}
- [2018/02/19 v2.0b Latvian support from the babel system]
+% \ProvidesFile{latvian}
+ [2024/04/27 v2.0c Latvian support from the babel system]
% \iffalse
%<*filedriver>
\documentclass{ltxdoc}
@@ -58,7 +58,7 @@
% \section{The Latvian Language}
%
% The file \textsf{latvian.ldf}\footnote{The file described in this
-% section has version number 2.0a and was last revised on 2018/02/19.}
+% section has version number 2.0c and was last revised on 2024/04/27.}
% defines the language definition macros for the Latvian language. It
% is heavily based on the work by Andris Lasis, and this file just
% cleans the code up and adapts it to babel 3.9.
@@ -192,11 +192,13 @@
%
% \begin{macrocode}
\gdef\the@chapter{%
- \ifx\chapter\undefined\relax\else
- \ifnum\c@chapter>\z@\thechapter\fi\fi}
+ \ifx\c@chapter\@undefined\else
+ \ifnum\c@chapter>\z@\thechapter\fi
+ \fi}
\def\thechapter{%
- \ifx\chapter\undefined\relax\else
- \arabic{chapter}.\fi}
+ \ifx\c@chapter\@undefined\else
+ \arabic{chapter}.%
+ \fi}
\def\thesection{\the@chapter\arabic{section}.}
\def\thesubsection{\thesection\arabic{subsection}.}
\def\thesubsubsection{\thesubsection\arabic{subsubsection}.}
diff --git a/macros/latex/contrib/babel-contrib/latvian/latvian.pdf b/macros/latex/contrib/babel-contrib/latvian/latvian.pdf
index fce2fa1395..2897bcc5a7 100644
--- a/macros/latex/contrib/babel-contrib/latvian/latvian.pdf
+++ b/macros/latex/contrib/babel-contrib/latvian/latvian.pdf
Binary files differ
diff --git a/macros/latex/contrib/babel-contrib/welsh/README b/macros/latex/contrib/babel-contrib/welsh/README.md
index 65ac842dc9..4f975962cb 100644
--- a/macros/latex/contrib/babel-contrib/welsh/README
+++ b/macros/latex/contrib/babel-contrib/welsh/README.md
@@ -1,12 +1,13 @@
-Welsh 1.1a
+## Welsh 1.1b
------------
This is the babel style for Welsh.
-Changes 1.1
------------
+## Changes 1.1b
+
+* Removed extra space in \ccname in TU strings.
+
+## Changes 1.1a
+
* Date fixed
* UTF-8 encoded strings for XeTeX and LuaTeX
-
-----------
-2015-09-03 \ No newline at end of file
diff --git a/macros/latex/contrib/babel-contrib/welsh/welsh.dtx b/macros/latex/contrib/babel-contrib/welsh/welsh.dtx
index d39ced6622..9e59856b2b 100644
--- a/macros/latex/contrib/babel-contrib/welsh/welsh.dtx
+++ b/macros/latex/contrib/babel-contrib/welsh/welsh.dtx
@@ -1,6 +1,6 @@
% \iffalse meta-comment
%
-% Copyright 1989-2015 Johannes L. Braams, Javier Bezos and any
+% Copyright 1989-2024 Johannes L. Braams, Javier Bezos and any
% individual authors listed elsewhere in this file. All rights
% reserved.
%
@@ -38,16 +38,13 @@
%<code>\ProvidesLanguage{welsh}
%\fi
%\ProvidesFile{welsh.dtx}
- [2015/09/03 v1.1a Welsh support from the babel system]
+ [2024/04/27 v1.1b Welsh support from the babel system]
%\iffalse
%% File `welsh.dtx'
%% Babel package for LaTeX version 2e
-%% Copyright (C) 1989 -- 2015
+%% Copyright (C) 1989 -- 2024
%% by Johannes Braams, TeXniek
% by Javier Bezos
-%
-% This file is part of the babel system, it provides the source
-% code for the Welsh language definition file.
%<*filedriver>
\documentclass{ltxdoc}
\newcommand*{\TeXhax}{\TeX hax}
@@ -126,11 +123,12 @@
% of \cs{today}}
% \changes{welsh-1.1a}{2015/09/03}{Strings are defined in the 3.9 way.
% Also Unicode strings}
+% \changes{welsh-1.1b}{2024/04/27}{Remove extra space in \cs{ccname}}
% \begin{macrocode}
\StartBabelCommands*{welsh}{captions}
[unicode, charset=utf8, fontenc=EU1 EU2]
\SetString{\enclname}{amgaeëdig}
- \SetString{\ccname}{copï au}
+ \SetString{\ccname}{copïau}
% \end{macrocode}
%
% And now, the generic branch, using the LICR and assuming T1.
diff --git a/macros/latex/contrib/babel-contrib/welsh/welsh.pdf b/macros/latex/contrib/babel-contrib/welsh/welsh.pdf
index fcac31cc60..6c8a9fc97c 100644
--- a/macros/latex/contrib/babel-contrib/welsh/welsh.pdf
+++ b/macros/latex/contrib/babel-contrib/welsh/welsh.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt
new file mode 100644
index 0000000000..c8cacfa6a5
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/DEPENDS.txt
@@ -0,0 +1,2 @@
+hard beamer
+hard tools
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md
index 3d8f35fb39..c5c10200dd 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/README.md
@@ -1,9 +1,34 @@
# beamertheme-rainbow
-A beamer colour theme which alternates theme colours on every frame
+[![GitHub](https://img.shields.io/github/license/samcarter/beamertheme-rainbow.svg?color=blue)](http://www.latex-project.org/lppl.txt)
+[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/samcarter/beamertheme-rainbow.svg?label=current%20version)](https://github.com/samcarter/beamertheme-rainbow/releases/latest)
+[![CTAN](https://img.shields.io/ctan/v/beamertheme-rainbow.svg)](https://ctan.org/pkg/beamertheme-rainbow)
-Current version: 2023/07/04 version v0.1
+A beamer colour theme which alternates theme colours on every frame.
-This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt .
-The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-rainbow/issues
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-rainbow/issues .
+
+### Usage
+
+```latex
+\documentclass{beamer}
+
+\usetheme{Berkeley}
+\usecolortheme{rainbow}
+
+\begin{document}
+
+\begin{frame}
+content...
+\end{frame}
+
+\begin{frame}
+content...
+\end{frame}
+
+\end{document}
+```
+
+For more details, please consult the [package documentation](https://github.com/samcarter/beamertheme-rainbow/blob/main/DOCUMENTATION.pdf).
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty
index 94e9a0f10c..f4f9a162ee 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamercolorthemerainbow.sty
@@ -12,7 +12,7 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesPackage{beamercolorthemerainbow}[2023/07/04 version v0.1 Beamer colour theme with alternating theme colours]
+\ProvidesPackage{beamercolorthemerainbow}[2024/04/28 version v0.2 Beamer colour theme with alternating theme colours]
\mode<presentation>
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty
new file mode 100644
index 0000000000..777cedba6e
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc-settings.sty
@@ -0,0 +1,199 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Personal helper theme for package documentations
+% Copyright samcarter
+%
+% This file may be distributed and/or modified
+% under the LaTeX Project Public License 1.3c or later
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty
+% \usepackage[
+% themecolor=samdblue
+% ]{\jobname-settings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Colours
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xcolor}
+\definecolor{samyellow}{RGB}{246,193,65}
+\definecolor{samorange}{RGB}{241,147,45}
+\definecolor{samred}{RGB}{191,26,46}% TikZbricks
+\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots
+\definecolor{samviolet}{RGB}{136,46,114}% TikZlings
+\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme
+\definecolor{samdblue}{RGB}{0,51,134}% beamer theme
+\definecolor{samlblue}{RGB}{22,89,155}% TikZducks
+\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme
+\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw
+\definecolor{samdgreen}{RGB}{78,178,125}
+\definecolor{samlgray}{RGB}{160,160,185}
+\definecolor{samdgray}{RGB}{60,60,85}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package options
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xkeyval}
+\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}}
+\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}}
+\ExecuteOptionsX{themecolor,listingcolor}
+\ProcessOptionsX
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Packages
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{beamer}{}{%
+ \RequirePackage[english]{babel}
+ \RequirePackage[paper=a4paper,margin=2.9cm]{geometry}
+ \RequirePackage{scrlayer-scrpage}
+ \let\hrulefillx\hrulefill
+ \RequirePackage[bitstream-charter]{mathdesign}
+ \let\hrulefill\hrulefillx
+ \RequirePackage[hang,flushmargin,bottom]{footmisc}
+ \RequirePackage{footnotehyper}
+ \makesavenoteenv{tcolorbox}
+ \RequirePackage[all]{nowidow}
+ \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref}
+}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{xspace}
+\RequirePackage{inconsolata}% mono font with bold, but italic is missing
+% \RequirePackage[scale=0.85]{cascadia-code}
+% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}}
+\RequirePackage{iexec}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Listings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage[
+ cachedir=$TMPDIR/minted/
+]{minted}
+
+% smuggling custom pygmentize style in cache folder
+% (a real pygmentise style would need installtion in some python folder)
+\begin{filecontents*}[noheader]{./sam.pygstyle}
+\makeatletter
+\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
+ \let\PYG@ul=\relax \let\PYG@tc=\relax%
+ \let\PYG@bc=\relax \let\PYG@ff=\relax}
+\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
+\def\PYG@toks#1+{\ifx\relax#1\empty\else%
+ \PYG@tok{#1}\expandafter\PYG@toks\fi}
+\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
+ \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
+\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
+
+% optional arguments
+\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}}
+
+% macros
+\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+% curly brakets
+\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+
+% comments (italics won't work with the inconsolata font)
+\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{##1}}}
+
+\def\PYGZbs{\char`\\}
+\def\PYGZus{\char`\_}
+\def\PYGZob{\char`\{}
+\def\PYGZcb{\char`\}}
+\def\PYGZca{\char`\^}
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsh{\char`\#}
+\def\PYGZpc{\char`\%}
+\def\PYGZdl{\char`\$}
+\def\PYGZhy{\char`\-}
+\def\PYGZsq{\char`\'}
+\def\PYGZdq{\char`\"}
+\def\PYGZti{\char`\~}
+% for compatibility with earlier versions
+\def\PYGZat{@}
+\def\PYGZlb{[}
+\def\PYGZrb{]}
+\makeatother
+\end{filecontents*}
+
+\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.}
+
+\usemintedstyle{sam}
+\setminted{
+ breaksymbolleft={},
+ tabsize=2,
+ breaklines=true,
+}
+\newminted[samcode]{latex}{}
+\newmintinline[saminline]{latex}{}
+
+% use non-bold and all coloured for inline code in articles
+\ifdefined\insertaspectratio\else
+ \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{}
+\fi
+
+\RequirePackage[most]{tcolorbox}
+\tcbuselibrary{minted}
+\tcbset{%
+ colframe=themecolor,
+ fonttitle=\bfseries,
+ sidebyside,
+ center lower,
+ righthand width=5.7cm,
+ bottom=2pt,
+ top=2pt,
+ left=3pt,
+ right=3pt,
+ sidebyside gap=10pt,
+ lower separated=false,
+ listing engine=minted,
+ minted language=latex,
+ colback=themecolor!10,
+ sharp corners,
+ boxrule=0pt,
+ before title={\strut}
+}
+
+% avoid page breaks right in front of the tcolorbox
+\@ifclassloaded{beamer}{}{
+ \tcbuselibrary{hooks}
+ \tcbset{before pre={\nopagebreak[4]}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% document settings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{scrartcl}{%
+ \KOMAoptions{parskip=half}
+ \addtokomafont{sectioning}{\color{themecolor}}
+ \addtokomafont{date}{\normalsize}
+ \addtokomafont{author}{\normalsize}
+ \setlength{\footnotemargin}{0.7em}
+}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Custom macros
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand*{\CTAN}{\textsc{CTAN}\xspace}
+\providecommand*{\TikZ}{Ti\emph{k}Z\xspace}
+\providecommand*{\miktex}{MiK\TeX\xspace}
+\providecommand*{\texlive}{\TeX{}Live\xspace}
+\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace}
+\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace}
+\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf
index beb9295d5f..78442b5a99 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
index 14f84a1b1a..e5819e54b9 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-rainbow/beamertheme-rainbow-doc.tex
@@ -1,5 +1,3 @@
-% !TeX TS-program = latexmk -time -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %%O %%S" % | txs:///view-log | txs:///view-pdf
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Documentation for the rainbow colour theme
@@ -13,82 +11,81 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\documentclass[parskip=half]{scrartcl}
-
-% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[english]{babel}
-\let\hrulefillx\hrulefill
-\usepackage[bitstream-charter]{mathdesign}
-\let\hrulefill\hrulefillx
-\usepackage[most]{tcolorbox}
-\usepackage[paper=a4paper,hmargin=2.9cm,vmargin=2.5cm]{geometry}
-\usepackage{scrlayer-scrpage}
-\usepackage{gradient-text}
-\usepackage[colorlinks=true,breaklinks=true,urlcolor=blendedblue,linkcolor=blendedblue,citecolor=blendedblue,filecolor=blendedblue]{hyperref}
+% !TeX program = txs:///arara
+% arara: latexmk: {
+% arara: --> engine: pdflatex,
+% arara: --> options: [
+% arara: --> '-shell-escape',
+% arara: --> '-synctex=1',
+% arara: --> '-interaction=nonstopmode',
+% arara: --> ]
+% arara: --> }
+\documentclass{scrartcl}
-% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\definecolor{blendedblue}{rgb}{0.2,0.2,0.7}
-\addtokomafont{sectioning}{\color{blendedblue}}
-\addtokomafont{date}{\normalsize}
-\addtokomafont{author}{\normalsize}
-\renewcommand*\dictumwidth{0.35\linewidth}
-\renewcommand*{\dictumrule}{\vskip1ex}
-\renewcommand*{\dictumauthorformat}[1]{#1}
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{\texorpdfstring{\gradient{HSB}{The rainbow beamer colour theme}{0,240,200}{240,240,200}}{The rainbow beamer colour theme}}
+\subtitle{A beamer colour theme which alternates theme colours on every frame}
+\author{%
+ \texorpdfstring{
+ \texttt{samcarter}\\
+ \url{https://github.com/samcarter/beamertheme-rainbow}\\
+ \url{https://www.ctan.org/pkg/beamertheme-rainbow}
+ }{samcarter}}
+\date{Version v0.2 \textendash{} 2024/04/28}
-\lstdefinestyle{tcolorboxstyle}{%
- language={[latex]TeX},
- tabsize=2,
- breaklines,
- basicstyle=\ttfamily,
- columns=fullflexible,
-}
+\usepackage[
+ themecolor=samlila
+]{\jobname-settings}
+
+\colorlet{orange}{samorange}
-\tcbset{%
- toptitle=1mm,
- left=2mm,
- title={Example},
- fonttitle=\large\sffamily,
- colbacktitle=blendedblue!75!black,
- colframe=blendedblue!75!black,
- colback=blendedblue!75!black!10!white,
- boxrule=0cm,
- frame hidden,
- arc=1.3mm,
- arc=2mm,
- sidebyside,
- listing options={style=tcolorboxstyle},
- bottom=0pt,
- top=0pt,
- lower separated=false,
- comment style={scale=2},
- enhanced,
- drop fuzzy shadow=black!90,
- title code app={
- \shade[top color=blendedblue!75!black,bottom color=blendedblue!75!black!10!white] (title.south west) rectangle ([yshift=-1mm]title.south east);
- }
+% rainbow text (based on the gradient-text package) %%%%%%%%%%%%%%%%%
+\makeatletter
+\ExplSyntaxOn
+\clist_new:N\l_gtext_First_clist
+\clist_new:N\l_gtext_Last_clist
+\int_new:N\l_gtext_MaxIndex_int
+\int_new:N\l_gtext_Ratio_int
+\newcommand{\gr@dient}[8]{
+ \int_set:Nn\l_gtext_MaxIndex_int{\int_eval:n{\str_count:n{#1}}}
+ \int_step_inline:nnn{1}{\l_gtext_MaxIndex_int}{
+ \exp_args:Ne\str_if_eq:nnTF{\str_item:Nn{#1}{##1}}{~}{}{
+ \int_set:Nn\l_gtext_Ratio_int{\int_eval:n{\l_gtext_Ratio_int+1}}
+ }
+ \color_select:nn{#8}{
+ \int_eval:n{(\int_use:N\l_gtext_Ratio_int*#5+(\l_gtext_MaxIndex_int-##1)*#2)/\l_gtext_MaxIndex_int},
+ \int_eval:n{(\int_use:N\l_gtext_Ratio_int*#6+(\l_gtext_MaxIndex_int-##1)*#3)/\l_gtext_MaxIndex_int},
+ \int_eval:n{(\int_use:N\l_gtext_Ratio_int*#7+(\l_gtext_MaxIndex_int-##1)*#4)/\l_gtext_MaxIndex_int}
+ }\str_item:Nn{#1}{##1}
+ }
}
-\lstset{style=tcolorboxstyle}
+\NewDocumentCommand\gradient{mmmm}{{
+ \clist_set:Nn\l_gtext_First_clist {#3}
+ \clist_set:Nn\l_gtext_Last_clist {#4}
+ \gr@dient{#2}
+ {\clist_item:Nn\l_gtext_First_clist{1}}
+ {\clist_item:Nn\l_gtext_First_clist{2}}
+ {\clist_item:Nn\l_gtext_First_clist{3}}
+ {\clist_item:Nn\l_gtext_Last_clist{1}}
+ {\clist_item:Nn\l_gtext_Last_clist{2}}
+ {\clist_item:Nn\l_gtext_Last_clist{3}}
+ {#1}
+}}
+\ExplSyntaxOff
+\makeatother
-\newcommand{\prefix}{./build}
+% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\renewcommand*\dictumwidth{0.35\linewidth}
+\renewcommand*{\dictumrule}{\vskip1ex}
+\renewcommand*{\dictumauthorformat}[1]{#1}
+
+\newcommand{\prefix}{./include}
\tcbset{
compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}},
run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},%
}
-% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\title{\texorpdfstring{\gradientRGB{The rainbow beamer colour theme}{255,128,51}{51,51,255}}{The rainbow beamer coloir theme}}
-\subtitle{A beamer colour theme which alternates theme colours on every frame}
-\author{%
- \texorpdfstring{
- \texttt{samcarter}\\
- \url{https://github.com/samcarter/beamertheme-rainbow}\\
-% \url{https://www.ctan.org/pkg/beamertheme-rainbow}
- }{samcarter}}
-\date{Version v0.1 \textendash{} 2023/07/04}
-
\begin{document}
\maketitle
@@ -97,29 +94,28 @@
\section{Introduction}
\label{intro}
-The rainbow beamer colour theme will bring more colours to your presentation. It works similarly to the structure beamer colour theme, but instead of having just one theme colour throughout the whole presentation, the rainbow beamer colour theme will cycle through a list of colors and change the theme colour on every frame.
+The rainbow beamer colour theme will bring more colours to your presentation. It works similarly to the structure beamer colour theme, but instead of having just one theme colour throughout the whole presentation, the rainbow beamer colour theme will cycle through a list of colors and change the theme colour on every frame.
By default, it will cycle through colours of the rainbow (hence the name), but a custom set of colours is also possible.
-%The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
+The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
The development version of this package is located at \url{https://github.com/samcarter/beamertheme-rainbow}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker.
Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
\section{Usage}
-The basic usage is fairly simple. After choosing a beamer theme, one can load the rainbow beamer colour theme via
-\begin{tcolorbox}[title={}]
-\begin{lstlisting}
+The basic usage is fairly simple. After choosing a beamer theme, one can load the rainbow beamer colour theme via
+\begin{tcolorbox}[title={Usage}]
+\begin{samcode}
\usecolortheme{rainbow}
-\end{lstlisting}
+\end{samcode}
\end{tcolorbox}
-This will work with most of the themes which are provided by the beamer class as well some third party themes. Notable exceptions are the \lstinline|AnnArbor| and \lstinline|CambridgeUS| themes.
-
-\newpage
+This will work with most of the themes which are provided by the beamer class as well some third party themes. Notable exceptions are the \saminline|AnnArbor| and \saminline|CambridgeUS| themes.
This basic usage will colour frames in alternating rainbow colours:
+\nopagebreak
\begin{tcblisting}{
listing and comment,
pdf comment,
@@ -129,7 +125,7 @@ This basic usage will colour frames in alternating rainbow colours:
comment={
\begin{tikzpicture}
\foreach \i in {1,...,6}{%
- \node at (0.4*\i,-0.7*\i) {\includegraphics[page=\i,width=4cm]{beamertheme-rainbow-doc-listing-1.pdf}};
+ \node at (0.35*\i,-0.7*\i) {\includegraphics[page=\i,width=3.7cm]{beamertheme-rainbow-doc-listing-1.pdf}};
}
\end{tikzpicture}
},
@@ -150,7 +146,7 @@ This basic usage will colour frames in alternating rainbow colours:
\end{document}
\end{tcblisting}
-As pretty as rainbow colours are, there might be some users who would like to choose their own colours. This can be done with the \lstinline|colors={...}| option which accepts a comma separated list of colours. The colours can be predefined colours e.g. from the \lstinline|xcolor| package, user-defined colours or (for more fun) from the \lstinline|xkcdcolors| package.
+As pretty as rainbow colours are, there might be some users who would like to choose their own colours. This can be done with the \saminline|colors={...}| option which accepts a comma separated list of colours. The colours can be predefined colours e.g. from the \saminline|xcolor| package, user-defined colours or (for more fun) from the \saminline|xkcdcolors| package.
\begin{tcblisting}{
listing and comment,
@@ -161,7 +157,7 @@ As pretty as rainbow colours are, there might be some users who would like to ch
comment={
\begin{tikzpicture}
\foreach \i in {1,...,6}{%
- \node at (0.4*\i,-0.7*\i) {\includegraphics[page=\i,width=4cm]{beamertheme-rainbow-doc-listing-2.pdf}};
+ \node at (0.35*\i,-0.7*\i) {\includegraphics[page=\i,width=3.7cm]{beamertheme-rainbow-doc-listing-2.pdf}};
}
\end{tikzpicture}
},
@@ -172,12 +168,12 @@ As pretty as rainbow colours are, there might be some users who would like to ch
\usetheme{Copenhagen}
\usepackage{xkcdcolors}
\definecolor{mycolor}
- {RGB}{127,0,127}
+ {RGB}{101,67,159}
\usecolortheme[
colors={
orange,
mycolor,
- xkcdVibrantBlue
+ xkcdMediumBlue
}
]{rainbow}
@@ -185,9 +181,11 @@ As pretty as rainbow colours are, there might be some users who would like to ch
% just for this test example
\ExplSyntaxOn
-\prg_replicate:nn{6}{\frame{\frametitle{title}}}
+\prg_replicate:nn{6}{
+ \frame{\frametitle{title}}
+}
\ExplSyntaxOff
-
+
\end{document}
\end{tcblisting}
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt
new file mode 100644
index 0000000000..09e806e193
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/DEPENDS.txt
@@ -0,0 +1,4 @@
+hard beamer
+hard tools
+hard tcolorbox
+hard tikzfill
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md
index 91f07c7663..b8501189d6 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/README.md
@@ -1,9 +1,32 @@
# beamertheme-tcolorbox
-A beamer inner theme which reproduces standard beamer blocks using tcolorboxes
+[![GitHub](https://img.shields.io/github/license/samcarter/beamertheme-tcolorbox.svg?color=blue)](http://www.latex-project.org/lppl.txt)
+[![GitHub tag (latest SemVer)](https://img.shields.io/github/tag/samcarter/beamertheme-tcolorbox.svg?label=current%20version)](https://github.com/samcarter/beamertheme-tcolorbox/releases/latest)
+[![CTAN](https://img.shields.io/ctan/v/beamertheme-tcolorbox.svg)](https://ctan.org/pkg/beamertheme-tcolorbox)
-Current version: 2023/05/03 version v0.6
+A beamer inner theme which reproduces standard beamer blocks using tcolorboxes.
-This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+This project is licensed under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt .
-The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-tcolorbox/issues
+The project repository, including a bug tracker, can be found at https://github.com/samcarter/beamertheme-tcolorbox .
+
+### Usage
+
+```latex
+\documentclass{beamer}
+
+\usecolortheme{orchid}
+\useinnertheme{tcolorbox}
+
+\begin{document}
+
+\begin{frame}
+ \begin{block}{Title}
+ Content
+ \end{block}
+\end{frame}
+
+\end{document}
+```
+
+For more details, please consult the [package documentation](https://github.com/samcarter/beamertheme-tcolorbox/blob/main/DOCUMENTATION.pdf).
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty
index 770a00d0b5..9469f0591e 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamerinnerthemetcolorbox.sty
@@ -12,7 +12,7 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\ProvidesPackage{beamerinnerthemetcolorbox}[2023/05/03 version v0.6 Beamer blocks with tcolorboxes]
+\ProvidesPackage{beamerinnerthemetcolorbox}[2024/04/29 version v0.7 Beamer blocks with tcolorboxes]
\RequirePackage{tcolorbox}
\tcbuselibrary{skins,hooks}
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty
new file mode 100644
index 0000000000..777cedba6e
--- /dev/null
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc-settings.sty
@@ -0,0 +1,199 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Personal helper theme for package documentations
+% Copyright samcarter
+%
+% This file may be distributed and/or modified
+% under the LaTeX Project Public License 1.3c or later
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Usage:
+% ln ~/Life/latex/beamertheme-sam/themesam.sty package-doc-settings.sty
+% \usepackage[
+% themecolor=samdblue
+% ]{\jobname-settings}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Colours
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xcolor}
+\definecolor{samyellow}{RGB}{246,193,65}
+\definecolor{samorange}{RGB}{241,147,45}
+\definecolor{samred}{RGB}{191,26,46}% TikZbricks
+\definecolor{sammagenta}{RGB}{170,42,104}% TikZmarmots
+\definecolor{samviolet}{RGB}{136,46,114}% TikZlings
+\definecolor{samlila}{RGB}{101,67,159}% Rainbow beamer theme
+\definecolor{samdblue}{RGB}{0,51,134}% beamer theme
+\definecolor{samlblue}{RGB}{22,89,155}% TikZducks
+\definecolor{samteal}{RGB}{25,143,157}% Tcolorbox beamer theme
+\definecolor{samlgreen}{RGB}{68,170,153}% Jigsaw
+\definecolor{samdgreen}{RGB}{78,178,125}
+\definecolor{samlgray}{RGB}{160,160,185}
+\definecolor{samdgray}{RGB}{60,60,85}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Package options
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage{xkeyval}
+\DeclareOptionX{themecolor}[samdblue]{\colorlet{themecolor}{#1}}
+\DeclareOptionX{listingcolor}[samlblue]{\colorlet{listingcolor}{#1}}
+\ExecuteOptionsX{themecolor,listingcolor}
+\ProcessOptionsX
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Packages
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{beamer}{}{%
+ \RequirePackage[english]{babel}
+ \RequirePackage[paper=a4paper,margin=2.9cm]{geometry}
+ \RequirePackage{scrlayer-scrpage}
+ \let\hrulefillx\hrulefill
+ \RequirePackage[bitstream-charter]{mathdesign}
+ \let\hrulefill\hrulefillx
+ \RequirePackage[hang,flushmargin,bottom]{footmisc}
+ \RequirePackage{footnotehyper}
+ \makesavenoteenv{tcolorbox}
+ \RequirePackage[all]{nowidow}
+ \RequirePackage[colorlinks=true,breaklinks=true,allcolors=themecolor,hyperfootnotes=false]{hyperref}
+}
+\RequirePackage[T1]{fontenc}
+\RequirePackage{xspace}
+\RequirePackage{inconsolata}% mono font with bold, but italic is missing
+% \RequirePackage[scale=0.85]{cascadia-code}
+% \AddToHook{cmd/ttfamily/before}{\fontseries{sl}}
+\RequirePackage{iexec}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Listings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\RequirePackage[
+ cachedir=$TMPDIR/minted/
+]{minted}
+
+% smuggling custom pygmentize style in cache folder
+% (a real pygmentise style would need installtion in some python folder)
+\begin{filecontents*}[noheader]{./sam.pygstyle}
+\makeatletter
+\def\PYG@reset{\let\PYG@it=\relax \let\PYG@bf=\relax%
+ \let\PYG@ul=\relax \let\PYG@tc=\relax%
+ \let\PYG@bc=\relax \let\PYG@ff=\relax}
+\def\PYG@tok#1{\csname PYG@tok@#1\endcsname}
+\def\PYG@toks#1+{\ifx\relax#1\empty\else%
+ \PYG@tok{#1}\expandafter\PYG@toks\fi}
+\def\PYG@do#1{\PYG@bc{\PYG@tc{\PYG@ul{%
+ \PYG@it{\PYG@bf{\PYG@ff{#1}}}}}}}
+\def\PYG#1#2{\PYG@reset\PYG@toks#1+\relax+\PYG@do{#2}}
+
+% optional arguments
+\expandafter\def\csname PYG@tok@na\endcsname{\def\PYG@tc##1{\textcolor{black}{##1}}}
+
+% macros
+\expandafter\def\csname PYG@tok@k\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+% curly brakets
+\expandafter\def\csname PYG@tok@nb\endcsname{\def\PYG@tc##1{\textcolor{listingcolor}{\bfseries ##1}}}
+
+% comments (italics won't work with the inconsolata font)
+\expandafter\def\csname PYG@tok@c\endcsname{\def\PYG@tc##1{\textcolor{gray}{##1}}}
+
+\def\PYGZbs{\char`\\}
+\def\PYGZus{\char`\_}
+\def\PYGZob{\char`\{}
+\def\PYGZcb{\char`\}}
+\def\PYGZca{\char`\^}
+\def\PYGZam{\char`\&}
+\def\PYGZlt{\char`\<}
+\def\PYGZgt{\char`\>}
+\def\PYGZsh{\char`\#}
+\def\PYGZpc{\char`\%}
+\def\PYGZdl{\char`\$}
+\def\PYGZhy{\char`\-}
+\def\PYGZsq{\char`\'}
+\def\PYGZdq{\char`\"}
+\def\PYGZti{\char`\~}
+% for compatibility with earlier versions
+\def\PYGZat{@}
+\def\PYGZlb{[}
+\def\PYGZrb{]}
+\makeatother
+\end{filecontents*}
+
+\iexec{mkdir -p $TMPDIR/minted && mv sam.pygstyle $TMPDIR/minted/.}
+
+\usemintedstyle{sam}
+\setminted{
+ breaksymbolleft={},
+ tabsize=2,
+ breaklines=true,
+}
+\newminted[samcode]{latex}{}
+\newmintinline[saminline]{latex}{}
+
+% use non-bold and all coloured for inline code in articles
+\ifdefined\insertaspectratio\else
+ \patchcmd{\minted@inputpyg@inline}{\minted@input}{\color{listingcolor}\renewcommand\textcolor[3][]{##3}\renewcommand\bfseries{}\minted@input}{}{}
+\fi
+
+\RequirePackage[most]{tcolorbox}
+\tcbuselibrary{minted}
+\tcbset{%
+ colframe=themecolor,
+ fonttitle=\bfseries,
+ sidebyside,
+ center lower,
+ righthand width=5.7cm,
+ bottom=2pt,
+ top=2pt,
+ left=3pt,
+ right=3pt,
+ sidebyside gap=10pt,
+ lower separated=false,
+ listing engine=minted,
+ minted language=latex,
+ colback=themecolor!10,
+ sharp corners,
+ boxrule=0pt,
+ before title={\strut}
+}
+
+% avoid page breaks right in front of the tcolorbox
+\@ifclassloaded{beamer}{}{
+ \tcbuselibrary{hooks}
+ \tcbset{before pre={\nopagebreak[4]}}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% document settings
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\@ifclassloaded{scrartcl}{%
+ \KOMAoptions{parskip=half}
+ \addtokomafont{sectioning}{\color{themecolor}}
+ \addtokomafont{date}{\normalsize}
+ \addtokomafont{author}{\normalsize}
+ \setlength{\footnotemargin}{0.7em}
+}{}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% Custom macros
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\providecommand*{\CTAN}{\textsc{CTAN}\xspace}
+\providecommand*{\TikZ}{Ti\emph{k}Z\xspace}
+\providecommand*{\miktex}{MiK\TeX\xspace}
+\providecommand*{\texlive}{\TeX{}Live\xspace}
+\providecommand*{\tikzbrick}{Ti\emph{k}Zbrick\xspace}
+\providecommand*{\tikzducks}{Ti\emph{k}Zducks\xspace}
+\providecommand*{\tikzlings}{Ti\emph{k}Zlings\xspace}
+\providecommand*{\tikzmarmots}{Ti\emph{k}Zmarmots\xspace}
+\providecommand*{\ConTeXt}{C\kern-.0333emon\-\kern-.0667em\TeX\kern-.0333emt} \ No newline at end of file
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf
index db3b354834..fe64e72639 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex
index 8bd7fc2fa4..c17e7fc17e 100644
--- a/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex
+++ b/macros/latex/contrib/beamer-contrib/themes/beamertheme-tcolorbox/beamertheme-tcolorbox-doc.tex
@@ -1,5 +1,3 @@
-% !TeX TS-program = latexmk -time -pdf -pdflatex="pdflatex -synctex=1 -interaction=nonstopmode -shell-escape %%O %%S" % | txs:///view-log | txs:///view-pdf
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Documentation for the tcolorbox inner theme
@@ -13,80 +11,37 @@
% See http://www.latex-project.org/lppl.txt
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\documentclass[parskip=half]{scrartcl}
-
-% packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\usepackage[T1]{fontenc}
-\usepackage[utf8]{inputenc}
-\usepackage[english]{babel}
-\usepackage[bitstream-charter]{mathdesign}
-\usepackage[most]{tcolorbox}
-\usepackage[paper=a4paper,hmargin=2.9cm,vmargin=2.5cm]{geometry}
-\usepackage{scrlayer-scrpage}
-\usepackage[colorlinks=true,breaklinks=true,urlcolor=blendedblue,linkcolor=blendedblue,citecolor=blendedblue,filecolor=blendedblue]{hyperref}
-
-% customisation %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\definecolor{blendedblue}{rgb}{0.2,0.2,0.7}
-\addtokomafont{sectioning}{\color{blendedblue}}
-\addtokomafont{date}{\normalsize}
-\addtokomafont{author}{\normalsize}
-
-\lstdefinestyle{tcolorboxstyle}{%
- language={[latex]TeX},
- tabsize=2,
- breaklines,
- basicstyle=\ttfamily,
- columns=fullflexible,
-% texcsstyle=*\color{blendedblue}\bfseries,
-% moretexcs={usetheme,useinnertheme},
-}
-
-\tcbset{%
- toptitle=1mm,
- left=2mm,
- title={Example},
- fonttitle=\large\sffamily,
- colbacktitle=blendedblue!75!black,
- colframe=blendedblue!75!black,
- colback=blendedblue!75!black!10!white,
- boxrule=0cm,
- frame hidden,
- arc=1.3mm,
- arc=2mm,
- sidebyside,
- listing options={style=tcolorboxstyle},
- bottom=0pt,
- top=0pt,
- lower separated=false,
- comment style={scale=2},
- enhanced,
- drop fuzzy shadow=black!90,
- title code app={
- \shade[top color=blendedblue!75!black,bottom color=blendedblue!75!black!10!white] (title.south west) rectangle ([yshift=-1mm]title.south east);
- }
-}
+% !TeX program = txs:///arara
+% arara: latexmk: {
+% arara: --> engine: pdflatex,
+% arara: --> options: [
+% arara: --> '-shell-escape',
+% arara: --> '-synctex=1',
+% arara: --> '-interaction=nonstopmode',
+% arara: --> ]
+% arara: --> }
+\documentclass{scrartcl}
-\lstset{style=tcolorboxstyle}
-
-%\makeatletter
-\newcommand{\prefix}{./build}
+% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\title{The tcolorbox beamer inner theme}
+\subtitle{A beamer inner theme to replicate standard beamer blocks with tcolorboxes}
+\author{%
+ \texorpdfstring{
+ \texttt{samcarter}\\
+ \url{https://github.com/samcarter/beamertheme-tcolorbox}\\
+ \url{https://www.ctan.org/pkg/beamertheme-tcolorbox}
+ }{samcarter}}
+\date{Version v0.7 \textendash{} 2024/04/29}
+
+\usepackage[
+ themecolor=samteal
+]{\jobname-settings}
+
+\newcommand{\prefix}{./include}
\tcbset{
compilable listing/.style={listing file={\prefix/\jobname-listing-\thetcblistingcount.tex}},
run pdflatex/.style={run@system@command={cd\space \prefix;\space pdflatex}{\jobname-listing-\thetcblistingcount.tex}},%
}
-%\makeatother
-
-
-% meta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\title{The tcolorbox beamer inner theme}
-\subtitle{A beamer inner theme to reproduce standard beamer blocks using tcolorboxes}
-\author{%
- \texorpdfstring{
- \texttt{samcarter}\\
- \url{https://github.com/samcarter/beamertheme-tcolorbox}\\
- \url{https://www.ctan.org/pkg/beamertheme-tcolorbox}
- }{samcarter}}
-\date{Version v0.6 \textendash{} 2023/05/03}
\begin{document}
\maketitle
@@ -94,77 +49,81 @@
\section{Introduction}
\label{intro}
-Over the last decade of answering beamer problems and more recently also being one of the maintainers of the beamer class, I saw countless of requests about beamer blocks. There were users who were looking for sometimes smaller, sometimes larger tweaks to the blocks in their document, for example "How to use the rectangular blocks with sharp corners, but with the shadows from the rounded beamer blocks". Other users encountered various tiny or something bigger problems with the default beamer blocks, like issues with some pdf viewers in which the seams of the underlying colorboxes would become visible.
+Over the last decade of answering beamer problems and more recently also being one of the maintainers of the beamer class, I saw countless of requests about beamer blocks. There were users who were looking for sometimes smaller, sometimes larger tweaks to the blocks in their document, for example "How to use the rectangular blocks with sharp corners, but with the shadows from the rounded beamer blocks". Other users encountered various tiny or something bigger problems with the default beamer blocks, like issues with some pdf viewers in which the seams of the underlying colorboxes would become visible.
For all these cases, there is now an alternative to the default beamer blocks: The tcolorbox inner beamer theme will replace the usual beamer mechanism to draw blocks with tcolorboxes. The tcolorboxes will automatically adopt the look and feel (round vs.\ sharp corners and shadows) as well as the colours of the normal beamer blocks.
-The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
+The package is included in \TeX{}Live and MiK\TeX\ and available from \textsc{CTAN} (\url{https://www.ctan.org/pkg/beamertheme-tcolorbox}).
The development version of this package is located at \url{https://github.com/samcarter/beamertheme-tcolorbox}. If you have any problems, ideas or other feedback, please make constructive use of the issue tracker.
Copyright \raisebox{0.2em}{\tiny\fontfamily{cmr}\selectfont\textcopyright} \texttt{samcarter}. Permission is granted to copy, distribute and\slash or modify this software under the terms of the LaTeX project public licence, version 1.3c or later \url{http://www.latex-project.org/lppl.txt}.
\section{Usage}
-The basic usage is fairly simple. One just needs to load the theme via
-\begin{tcolorbox}[title={}]
-\begin{lstlisting}
+The basic usage is fairly simple. One just needs to load the theme via
+\begin{tcolorbox}[lower separated=false,title={Usage}]
+\begin{samcode}
\useinnertheme{tcolorbox}
-\end{lstlisting}
+\end{samcode}
\end{tcolorbox}
-and after that, one can use the normal beamer \lstinline|block| environment as usual.
+and after that, one can use the normal beamer \saminline|block| environment as usual.
-Behind the scenes, this will replace the default mechanism of puzzling together the block from two separate \lstinline|beamercolorboxes|, with one tcolorbox.
+Behind the scenes, this will replace the default mechanism of puzzling together the block from two separate \saminline|beamercolorboxes|, with one tcolorbox.
In this simple configuration, the look and feel of the new blocks will be taken from other themes loaded in the presentation. For example if the Madrid theme is loaded, the resulting tcolorbox will have the usual colours, rounded corners and a shadow:
\begin{tcblisting}{
+ title={Example},
listing and comment,
pdf comment,
freeze pdf,
compilable listing,
run pdflatex,
+ comment style={scale=2}
}
\documentclass{beamer}
\usetheme{Madrid}
\useinnertheme{tcolorbox}
\begin{document}
\begin{frame}
-\begin{block}{Title}
- Body
-\end{block}
-\begin{alertblock}{Title}
- Body
-\end{alertblock}
-\begin{exampleblock}{Title}
- Body
-\end{exampleblock}
+ \begin{block}{Title}
+ Body
+ \end{block}
+ \begin{alertblock}{Title}
+ Body
+ \end{alertblock}
+ \begin{exampleblock}{Title}
+ Body
+ \end{exampleblock}
\end{frame}
\end{document}
\end{tcblisting}
-Additional settings done by user, like e.g. \lstinline|\setbeamertemplate{blocks}[rounded]|, won't be taken into account and the \lstinline|tcolorbox| inner theme should be loaded after such modifications.
+Additional settings done by user, like e.g. \saminline|\setbeamertemplate{blocks}[rounded]|, won't be taken into account and the \saminline|tcolorbox| inner theme should be loaded after such modifications.
\section{Options}
In addition to automatically adopting settings from other themes, one can also explicitly influence the look and feel via these options:
\begin{description}
-\item[blocks] controls if tcolorboxes should be used for beamer blocks (default: \lstinline|true|)
-\item[inmargin] controls if the block titles are placed in the left sidebar instead of the top of the block, e.g. for themes like \lstinline|Bergen| (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|inmargin| inner theme is detected)
-\item[rounded] controls if corners are rounded or sharp (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|rounded| inner theme is detected)
-\item[shaded] controls if there is a short colour gradient between the title and the body (default: \lstinline|false|, but set to \lstinline|true| if the block corners are rounded)
-\item[shadow] controls if the block has a shadow (default: \lstinline|false|, but set to \lstinline|true| if the \lstinline|shadow| outer theme is detected)
-\item[showtitle] controls if a small coloured stripe is shown for blocks with empty title (default: \lstinline|true|, but set to \lstinline|false| if the block has rounded corners)
-\item[titlepage] controls if tcolorboxes should be used for the title page, section page etc. (default: \lstinline|true|)
+\item[blocks] controls if tcolorboxes should be used for beamer blocks (default: \saminline|true|)
+\item[inmargin] controls if the block titles are placed in the left sidebar instead of the top of the block, e.g. for themes like \saminline|Bergen| (default: \saminline|false|, but set to \saminline|true| if the \saminline|inmargin| inner theme is detected)
+\item[rounded] controls if corners are rounded or sharp (default: \saminline|false|, but set to \saminline|true| if the \saminline|rounded| inner theme is detected)
+\item[shaded] controls if there is a short colour gradient between the title and the body (default: \saminline|false|, but set to \saminline|true| if the block corners are rounded)
+\item[shadow] controls if the block has a shadow (default: \saminline|false|, but set to \saminline|true| if the \saminline|shadow| outer theme is detected)
+\item[showtitle] controls if a small coloured stripe is shown for blocks with empty title (default: \saminline|true|, but set to \saminline|false| if the block has rounded corners)
+\item[titlepage] controls if tcolorboxes should be used for the title page, section page etc. (default: \saminline|true|)
\end{description}
-These options can be set to \lstinline|true| or \lstinline|false| (calling either option without explicit \lstinline|true| or \lstinline|false| will set it to \lstinline|true|).
+These options can be set to \saminline|true| or \saminline|false| (calling either option without explicit \saminline|true| or \saminline|false| will set it to \saminline|true|).
-If one for example likes the Antibes theme, but prefers the blocks to have shadows, they can now easily be added: \nopagebreak
+If one, for example, likes the Antibes theme, but prefers the blocks to have shadows, they can now easily be added: \nopagebreak
\begin{tcblisting}{
+ title={Example},
listing and comment,
pdf comment,
freeze pdf,
compilable listing,
run pdflatex,
+ comment style={scale=2}
}
\documentclass{beamer}
\usetheme{Antibes}
@@ -173,46 +132,47 @@ If one for example likes the Antibes theme, but prefers the blocks to have shado
]{tcolorbox}
\begin{document}
\begin{frame}
-\begin{block}{Title}
- Body
-\end{block}
-\begin{alertblock}{Title}
- Body
-\end{alertblock}
-\begin{exampleblock}{Title}
- Body
-\end{exampleblock}
+ \begin{block}{Title}
+ Body
+ \end{block}
+ \begin{alertblock}{Title}
+ Body
+ \end{alertblock}
+ \begin{exampleblock}{Title}
+ Body
+ \end{exampleblock}
\end{frame}
\end{document}
\end{tcblisting}
-Beyond these two options, the users also has the myriads of options of the tcolobox package to their disposal, e.g.\ via \lstinline|\tcbset{...}| or \lstinline|\tcbsetforeverylayer{...}|:
+Beyond these two options, the users also has the myriads of options of the tcolobox package to their disposal, e.g.\ via \saminline|\tcbset{...}| or \saminline|\tcbsetforeverylayer{...}|:
\begin{tcblisting}{
+ title={Example},
listing and comment,
pdf comment,
freeze pdf,
compilable listing,
run pdflatex,
+ comment style={scale=2}
}
\documentclass{beamer}
\usetheme{Ilmenau}
\useinnertheme{tcolorbox}
\tcbsetforeverylayer{
- borderline={1pt}{0pt}{
- black,dashed}
+ borderline={1pt}{0pt}{black,dashed}
}
\begin{document}
\begin{frame}
-\begin{block}{Title}
- Body
-\end{block}
-\begin{alertblock}{Title}
- Body
-\end{alertblock}
-\begin{exampleblock}{Title}
- Body
-\end{exampleblock}
+ \begin{block}{Title}
+ Body
+ \end{block}
+ \begin{alertblock}{Title}
+ Body
+ \end{alertblock}
+ \begin{exampleblock}{Title}
+ Body
+ \end{exampleblock}
\end{frame}
\end{document}
\end{tcblisting}
diff --git a/macros/latex/contrib/easybook/easybook.dtx b/macros/latex/contrib/easybook/easybook.dtx
index 08b7136aac..9a3be61a81 100644
--- a/macros/latex/contrib/easybook/easybook.dtx
+++ b/macros/latex/contrib/easybook/easybook.dtx
@@ -14,8 +14,7 @@
% This work has the LPPL maintenance status `maintained'.
%<*class>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e}
-\ProvidesExplClass{easybook}{2024/04/24}{2024az}
+\ProvidesExplClass{easybook}{2024/05/06}{2024bj}
{Easily typesetting Chinese theses or books}
\bool_new:N \l__eb_compile_draft_bool
@@ -47,7 +46,12 @@
unknown .code:n = \clist_gput_right:NV \g__eb_doc_options_clist \CurrentOption
}
-\ProcessKeysOptions{easybook}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybook] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybook}
+ }
\PassOptionsToPackage{no-math,quiet,CJKmath}{xeCJK}
\eb_put_ctexbook:V \g__eb_doc_options_clist
\LoadClass[UTF8]{ctexbook}
@@ -296,8 +300,8 @@
%</class>
%<*package>
\NeedsTeXFormat{LaTeX2e}[2021/11/15]
-\RequirePackage{l3keys2e,etoolbox}
-\ProvidesExplPackage{easybase}{2024/04/24}{2024az}
+\RequirePackage{etoolbox}
+\ProvidesExplPackage{easybase}{2024/05/06}{2024bj}
{Easily typesetting Chinese theses or books}
\cs_generate_variant:Nn \dim_set:Nn { NV }
@@ -421,7 +425,12 @@
\PassOptionsToPackage{list = off}{bicaption}
\PassOptionsToPackage{svgnames}{xcolor}
\PassOptionsToPackage{many}{tcolorbox}
-\ProcessKeysOptions{easybase}
+\cs_if_exist:NTF \ProcessKeyOptions
+ { \ProcessKeyOptions[easybase] }
+ {
+ \RequirePackage{l3keys2e}
+ \ProcessKeysOptions{easybase}
+ }
\PassOptionsToPackage{\g__eb_ctex_options_clist}{ctex}
\IfClassLoadedTF{ctexbook}{}
{
@@ -1145,18 +1154,17 @@
\bool_set_true:N \l__eb_normal_footnote_bool
\bool_new:N \l__eb_fnmarktext_format_match_bool
\bool_new:N \l__eb_fncustom_format_match_bool
+\cs_new:Npn \eb_fnmarktext_format_clear:n #1
+ {
+ \bool_if:cTF { l__eb_fn#1_format_match_bool }
+ { \tl_clear:N \l__eb_fnmarktext_format_tl }
+ { \spbset{spcmd = { }} }
+ }
\cs_new_protected:Npn \eb_fnmarktext_format_initial:
{
\bool_if:NTF \l__eb_normal_footnote_bool
- {
- \bool_if:NT \l__eb_fnmarktext_format_match_bool
- { \tl_clear:N \l__eb_fnmarktext_format_tl }
- }
- {
- \bool_if:NT \l__eb_fncustom_format_match_bool
- { \tl_clear:N \l__eb_fnmarktext_format_tl }
- }
- \bool_if:NF \l__eb_fnmarktext_format_match_bool { \spbset{spcmd = { }} }
+ { \eb_fnmarktext_format_clear:n { marktext } }
+ { \eb_fnmarktext_format_clear:n { custom } }
\eb@font@footnote
}
\cs_new_protected:Npn \defupfntmark #1
@@ -1204,7 +1212,7 @@
\l__eb_fnmarktext_format_tl \l__eb_fncustom_format_tl
}
}
-\NewDocumentCommand{\Footnote}{O{#2}mm}
+\NewDocumentCommand{\Footnote}{O{#2}m+m}
{
\group_begin:
\eb_fncustom_format_initial:
@@ -1292,7 +1300,6 @@
\use:c {#1}*{\phantomsection ##3}
\CTEX@addtocline{#1}{##2}
\tl_if_empty:oF {##4} { \CTEX@addbitocline{#1}{##4} }
- \tl_set:Nn \l__eb__bitoc_mark_title_level_tl {#1}
\use:c { #1mark }{##2}
}{
\stepcounter{bi#1}
@@ -1309,25 +1316,43 @@
\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 \NewTitleCommand #1#2
- {
- \newcounter{#1}
- \cs_set_eq:cN { #1mark } \use_none:n
+\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 }
+ }
+\NewDocumentCommand{\NewTitleCommand}{omm}
+ {
+ \newcounter{#2}
+ \cs_set_eq:cN { #2mark } \use_none:n
\tl_clear:N \l__ctex_tmp_tl
- \__ctex_initial_heading:n {#1}
- \__ctex_def_heading_keys:n {#1}
+ \__ctex_initial_heading:n {#2}
+ \__ctex_def_heading_keys:n {#2}
\exp_args:No \ctex_define:n { \l__ctex_tmp_tl }
- \cs_gset_protected:cpx {#1}
+ \cs_gset_protected:cpx {#2}
{
- \exp_not:N \@startsection{#1}{#2}
- {\exp_not:c { CTEX@#1@indent }}
- {\exp_not:c { CTEX@#1@beforeskip }}
- {\exp_not:c { CTEX@#1@afterskip }}
- {\exp_not:N \normalfont\exp_not:c { CTEX@#1@format }}
+ \exp_not:N \@startsection{#2}{#3}
+ {\exp_not:c { CTEX@#2@indent }}
+ {\exp_not:c { CTEX@#2@beforeskip }}
+ {\exp_not:c { CTEX@#2@afterskip }}
+ {\exp_not:N \normalfont\exp_not:c { CTEX@#2@format }}
}
- \cs_new:cpn { CTEX@#1@tocline } ##1##2
+ \cs_new:cpn { CTEX@#2@tocline } ##1##2
{ \CTEXnumberline{##1}##2 }
- \exp_args:Nc \providecommand { toclevel@#1 }{#2}
+ \exp_args:Nc \providecommand { toclevel@#2 }{#3}
+ \IfValueT{#1}{\eb_title_base_set_eq:nn {#1} {#2}}
}
\NewDocumentCommand{\NewTitleEntryCommand}{O{toc}m}
{
@@ -1419,14 +1444,14 @@
\tl_gset:Nn \g__eb_bilist_permute_value_tl {#1}
\str_if_eq:nnTF {#1} { mix }
{
- \eb_preto_cmd:nn { CTEX@addtocline }
- { \addtocontents{toc}{\boolfalse{bitoc}} }
- \eb_preto_cmd:nn { CTEX@addbitocline }
- { \addtocontents{toc}{\booltrue{bitoc}} }
+ \AddToHook{cmd/CTEX@addtocline/before}[bitoc]
+ {\addtocontents{toc}{\boolfalse{bitoc}}}
+ \AddToHook{cmd/CTEX@addbitocline/before}[bitoc]
+ {\addtocontents{toc}{\booltrue{bitoc}}}
}
{
- \RemoveFromHook{cmd/CTEX@addtocline/before}
- \RemoveFromHook{cmd/CTEX@addbitocline/before}
+ \RemoveFromHook{cmd/CTEX@addtocline/before}[bitoc]
+ \RemoveFromHook{cmd/CTEX@addbitocline/before}[bitoc]
}
},
name .tl_set:N = \l__eb_print_index_name_tl,
@@ -1470,7 +1495,7 @@
{ \par }
}
}
-\cs_new_protected:Npn \eb_toc_float_list_parse:nnnnn #1#2#3#4#5
+\cs_new_protected:Npn \eb_toc_list_struct_parse:nnnnn #1#2#3#4#5
{
\group_begin:
\tl_set_eq:Nc \eb@toc@title { list#4name }
@@ -1491,7 +1516,7 @@
\cs_new_protected:Npn \DeclareFloatList #1#2
{
\exp_args:Nc \DeclareDocumentCommand { listof#1s }{st+o}
- {\eb_toc_float_list_parse:nnnnn {##1} {##2} {##3} {#1} {#2}}
+ {\eb_toc_list_struct_parse:nnnnn {##1} {##2} {##3} {#1} {#2}}
\ctex_define:n
{
#1 .meta:nn = { ctex/#1 } {##1},
@@ -1538,7 +1563,7 @@
\bool_if:NT \l__eb_toc_plan_cn_bool
{
\IfBooleanF{#1}{\eb@toc@title@level{\eb@toc@title}{}}
- \eb_toc_if_title_between_hook:nn {#1} { main }
+ \eb_toc_if_title_between_hook:nn {#1} { title }
\eb_toc_start_multi_column_ext:n { toc }#4
}
\bool_if:NT \l__eb_toc_plan_bi_bool
@@ -1546,7 +1571,7 @@
\tl_if_eq:NnF \g__eb_bilist_permute_value_tl { mix }
{
\IfBooleanF{#1}{\eb@toc@title@level{\eb@bitoc@title}{}}
- \eb_toc_if_title_between_hook:nn {#1} { bimain }
+ \eb_toc_if_title_between_hook:nn {#1} { bititle }
\eb_toc_start_multi_column_ext:n { tec }
}
}
@@ -1667,13 +1692,30 @@
}
}
}
+\NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
+ {
+ \normalsize\normalfont
+ \titlerule*[#3]{\IfValueTF{#4}{\scalebox{#4}{#5}}{#5}}#6
+ {
+ \IfBooleanF{#2}
+ {
+ \IfBooleanTF{#1}
+ {\thecontentspage}
+ {
+ \bool_if:NTF \l__eb_toc_dot_align_bool
+ { \contentspage }
+ { \thecontentspage }
+ }
+ }
+ }
+ }
\ctex_define:nn { toc }
{
lolskip .skip_set:N = \eb@toc@lol@skip,
lolskip .initial:n = 10pt,
- between .tl_set:N = \l__eb_toc_main_between_hook_tl,
+ between .tl_set:N = \l__eb_toc_title_between_hook_tl,
between .initial:n = \bool_if:NT \l__eb_class_mode_book_bool { \vspace*{-1pc} },
- bibetween .tl_set:N = \l__eb_toc_bimain_between_hook_tl,
+ bibetween .tl_set:N = \l__eb_toc_bititle_between_hook_tl,
bibetween .initial:n = \bool_if:NT \l__eb_class_mode_book_bool { \vspace*{-1pc} },
dotalign .bool_set:N = \l__eb_toc_dot_align_bool,
dotalign .default:n = true,
@@ -1685,23 +1727,32 @@
pagenumwd .initial:n = 1.55em,
unknown .code:n = \eb_msg_deprecated_option:n { toc }
}
-\NewDocumentCommand{\tocrule}{st-O{0.7pc}d()mO{}}
+
+\NewHookWithArguments{starttoc/after}{1}
+\AddToHookWithArguments{starttoc/after}[aux]
{
- \normalsize\normalfont
- \titlerule*[#3]{\IfValueTF{#4}{\scalebox{#4}{#5}}{#5}}#6
+ \ifbool{@filesw}
{
- \IfBooleanF{#2}
- {
- \IfBooleanTF{#1}
- {\thecontentspage}
- {
- \bool_if:NTF \l__eb_toc_dot_align_bool
- { \contentspage }
- { \thecontentspage }
- }
- }
+ \tl_if_exist:cF { tf@#1 }
+ { \iow_new:c { tf@#1 }\iow_open:cn { tf@#1 } { \jobname.#1 } }
}
+ {}
+ }
+\cs_set:Npn \@starttoc #1
+ {
+ \group_begin:
+ \makeatletter
+ \file_if_exist_input:n { \jobname.#1 }
+ \UseHookWithArguments{starttoc/after}{1}{#1}
+ \boolfalse{@nobreak}
+ \group_end:
}
+\AddToHook{enddocument/afterlastpage}
+ {
+ \IfHookEmptyTF{starttoc/after}{}
+ {\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }}
+ }
+
\cs_set_eq:NN \eb@ctexsetii \ctex_set:nn
\cs_new_protected:Npn \SetTocStyle #1#2#3
{
@@ -1716,6 +1767,7 @@
}
\msg_new:nnn { easybase } { undefined-toc-style }
{ The~contents~style~'#1'~of~'#2'~is~not~defined. }
+
\ctex_set:n
{
part =
@@ -1823,7 +1875,7 @@
}
\cs_new_protected:Npn \ebaddtofont #1#2
{
- \str_case:nnF {#1}
+ \str_case:nn {#1}
{
{ table }
{ \tl_put_right:Nn \l__eb_font_caption_table_tl {#2} }
@@ -1837,8 +1889,11 @@
\tl_put_right:Nn \l__eb_font_caption_figure_tl {#2}
\tl_put_right:Nn \l__eb_font_caption_listing_tl {#2}
}
+ { footnote }
+ { \tl_put_right:Nn \eb@font@footnote {#2} }
+ { marginpar }
+ { \tl_put_right:Nn \marginfont {#2} }
}
- { \tl_put_right:cn { l__eb_font_#1_tl } {#2} }
}
\ctex_define:nn { spread }
{
@@ -2185,7 +2240,7 @@
bibstyle .initial:n = numerical,
citestyle .tl_set:N = \l__eb_bib_cite_style_tl,
datafile .clist_set:N = \l__eb_bib_datafile_clist,
- bititle .tl_set:N = \eb@bib@bitoc@title,
+ bititle .tl_set:N = \bibibname,
bititle .initial:n = Bibliography,
unknown .code:n = \eb_msg_deprecated_option:n { bib }
}
@@ -2230,8 +2285,8 @@
\cs_new_protected:Npn \eb_biber_toc_title:n #1
{
\bool_if:NTF \l__eb_class_mode_book_bool
- { \bichapter*{#1}{\eb@bib@bitoc@title} }
- { \bisection*{#1}{\eb@bib@bitoc@title} }
+ { \bichapter*{#1}{\bibibname} }
+ { \bisection*{#1}{\bibibname} }
}
\cs_new_protected:Npn \eb_biber_biblatex_set:
{
@@ -2479,7 +2534,7 @@
}
%</package>
%<*tcolorbox>
-\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/24}{2024az}
+\ProvidesExplFile{eb-tcolorbox.cfg}{2024/05/06}{2024bj}
{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 eb2bc6422e..a2114bab15 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 a00aeb12d0..46e37747a0 100644
--- a/macros/latex/contrib/easybook/easybook.tex
+++ b/macros/latex/contrib/easybook/easybook.tex
@@ -4,8 +4,8 @@
\usepackage[fontset = fandol]{ctex}
\usepackage
{
- enumitem,newtxmath,indentfirst,tabularray,
- fancyvrb,geometry,hologo,pifont,changelog,calc
+ enumitem,indentfirst,tabularray,fancyvrb,
+ geometry,hologo,pifont,changelog,calc
}
\definecolorscheme{blue}
{
@@ -23,8 +23,8 @@
name = easybook,
color-scheme = blue,
title = EASYBOOK使用手册,
- version = v2024az,
- date = 2024/04/24,
+ version = v2024bj,
+ date = 2024/05/06,
authors = 瞿毅,
info = 简便地排版中文学ä½è®ºæ–‡æˆ–书ç±,
email = toquyi@163.com,
@@ -53,7 +53,7 @@
\setlist[1]{labelindent = \parindent}
\setlist[itemize,1]{label = smallbullet,leftmargin = *}
\setcounter{tocdepth}{2}
-\SetTblrInner[longtblr]{hline{1,Z} = {1pt,DarkBlue}}
+\SetTblrInner[longtblr]{columns = c,hline{1,Z} = {1pt,DarkBlue}}
\SetTblrOuter[longtblr]{presep = \bigskipamount,postsep = \bigskipamount}
\DefTblrTemplate{caption-tag}{default}{表\thetable}
\DefTblrTemplate{caption-sep}{default}{\quad}
@@ -242,7 +242,6 @@
\begin{longtblr}
[caption = ä¾èµ–çš„å®åŒ…清å•,label = table:package list]
{
- colspec = *{5}{c},
cells = {cmd = \pkg*},
cell{1}{3,4} = PaleTurquoise,
cell{2}{5} = PaleTurquoise,
@@ -294,18 +293,15 @@
\setCJKmonofont{FangSong}
\newCJKfontfamily[song]\songti{SimSun}
\end{ctexexam}
-\end{options}
-
-\begin{options}
\keychoice{font}{noto,times,times*,ebgaramond,libertine,palatino,\fbox{auto}}\dtag
预置的英文字体相关é…置方案如\ref{table:english font} 所示。这些字体已ç»åŒ…å«åœ¨äº† \hologo{TeXLive} å‘行版中,所以通常ä¸éœ€è¦å†ä¸“门安装。如果您想使用其它英文字体,å¯ä»¥ä½¿ç”¨ \pkg*{fontspec} å®åŒ…的相关命令进行设置。
\begin{longtblr}
[
caption = 英文字体预设方案,
label = table:english font,
- remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。
+ remark{\ding{72}} = \code{times*} 方案为 \textsf{windows} 系统的预置字体。,
+ postsep = \bigskipamount-\itemsep
]{
- colspec = @{}*{4}{c}@{},
hline{2} = {0.5pt,DarkBlue},
row{1} = {font = \sffamily},
column{1} = {cmd = \code}
@@ -318,9 +314,6 @@
palatino & TG Pagella & Libertinus Sans & LM Mono \\
libertine & Libertinus Serif & Libertinus Sans & LM Mono
\end{longtblr}
-\end{options}
-
-\begin{options}
\keychoice{mathfont}{\fbox{times},noto,notosans,nc,ncf,stix2,charter,ebgaramond,libertine}\dtag
\leftfillchoice{mathfont}{minion,garamondx,baskervaldx,baskerville,none} \\
选择åˆé€‚的数学字体,将会加载 \pkg*{newtxmath} å’Œ \pkg*{bm} å®åŒ…。使用选项 \code{none} æ—¶å¯ä»¥ä½¿ç”¨ \pkg*{unicode-math} 等其它数学字体å®åŒ…定义字体。
@@ -344,12 +337,11 @@
\begin{longtblr}
[caption = 模å—功能和å称清å•,label = table:module List]
{
- colspec = @{}*{5}{c}@{},
hline{3} = {0.5pt,DarkBlue},
- row{1,3} = {font = \sffamily,belowsep = 0pt},
+ row{1,3} = {font = \sffamily},
row{2,4} = {cmd = \module*}
}
- \hyperref[subsec:tools]{工具} & \hyperref[subsec:font]{字体} & \hyperref[subsec:spread]{è¡Œè·} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{å‚考文献} \\
+ \hyperref[subsec:tools]{工具} & \hyperref[subsec:font]{部件字体} & \hyperref[subsec:spread]{è¡Œè·} & \hyperref[subsec:hyperlinks]{超链接} & \hyperref[subsec:reference]{å‚考文献} \\
tools & font & spread & ref & bib \\
\hyperref[subsec:theorem]{定ç†} & \hyperref[subsec:page margins]{页é¢å°ºå¯¸} & \hyperref[subsec:header and footer]{页眉页脚} & \hyperref[subsec:catalog]{目录} & \\
thmt & geo & hdr & toc &
@@ -499,7 +491,7 @@
行间公å¼ä¸Žä¸‹é¢æ­£æ–‡é—´çš„é¢å¤–è·ç¦»ã€‚
\end{options}
-\subsection[其它字体]{其它字体\smodule{font}}
+\subsection[部件字体]{部件字体\smodule{font}}
\label{subsec:font}
\begin{options}
\keyval{caption-table}{字体命令}\Default{\cs*{sffamily}\cs*{small}}
@@ -639,8 +631,8 @@
\begin{commands}\noitemsep
\command{listoftheorems}[\sarg\oarg{键值列表}]\default{}
\item\key{listoftheorems}{定ç†ç›®å½•æ ‡é¢˜å}
- \command{settheoremtocline}[\sarg\marg{环境å}\marg{标题定义}]\newtagv{2024az}%
- 对 \pkg*{thmtools} å®åŒ…的定ç†çŽ¯å¢ƒç›®å½•å‘½ä»¤ \cs{listoftheorems} 进行了兼容调整,\ref{subsec:directory command} å’Œ\ref{subsec:catalog} 中的选项机制å‡å¯ç”¨ï¼Œä½†æ ‡é¢˜å®šä¹‰é€‰é¡¹ \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令å•ç‹¬è®¾ç½®ã€‚在 \meta{标题定义} 中有三个命令 \cs{thmtname}ã€\cs{thmtenvname} å’Œ \cs{thmtnote} 分别代表定ç†åã€å®šç†çŽ¯å¢ƒå和题注用于排版目录æ¡ç›®ã€‚
+ \command{settheoremtocline}[\sarg\marg{环境å}\marg{标题定义}]\newtagv{2024bb}%
+ 对 \pkg*{thmtools} å®åŒ…的定ç†çŽ¯å¢ƒç›®å½•å‘½ä»¤ \cs{listoftheorems} 进行了适é…调整,\ref{subsec:directory command} å’Œ\ref{subsec:catalog} 中的选项机制å‡å¯ç”¨ï¼Œä½†æ ‡é¢˜å®šä¹‰é€‰é¡¹ \option{tocline} 较为特殊,需用 \cs{settheoremtocline} 命令å•ç‹¬è®¾ç½®ã€‚在 \meta{标题定义} 中有三个命令 \cs{thmtname}ã€\cs{thmtenvname} å’Œ \cs{thmtnote} 分别代表定ç†åã€å®šç†çŽ¯å¢ƒå和题注用于排版目录æ¡ç›®ã€‚
\end{commands}
\begin{commands}
@@ -707,11 +699,11 @@
\kvsplit-{subsec-label}{\oarg{ç¼–å·è¾“出命令}\marg{è·ç¦»å‘½ä»¤}}\Default{\cs*{hspace}\Marg{0.5em}}
\code{subsection} 级别标题标记的标签,用法与 \option{chap-label} 类似。
\keyval{headrule}{横线命令}
- 绘制页眉横线的选项,å¯ä»¥ä½¿ç”¨ \cs*{hrule} 或下述 \cs{markrule} 等画线命令æ¥ç»˜åˆ¶æ¨ªçº¿ã€‚
+ 绘制页眉横线的选项,å¯ä»¥ä½¿ç”¨ \cs*{hrule} 或\ref{exam:markrule} 所述 \cs{markrule} 等画线命令æ¥ç»˜åˆ¶æ¨ªçº¿ã€‚
\keyval{footrule}{横线命令}
- 绘制页脚横线的选项,å¯ä»¥ä½¿ç”¨ \cs*{hrule} 或下述 \cs{markrule} 等画线命令æ¥ç»˜åˆ¶æ¨ªçº¿ã€‚
+ 绘制页脚横线的选项,å¯ä»¥ä½¿ç”¨ \cs*{hrule} 或\ref{exam:markrule} 所述 \cs{markrule} 等画线命令æ¥ç»˜åˆ¶æ¨ªçº¿ã€‚
\keyval{footnoterule}{横线命令}
- 绘制脚注横线的选项,å¯ä»¥ä½¿ç”¨ \cs*{hrule} 或下述 \cs{markrule} 等画线命令æ¥ç»˜åˆ¶æ¨ªçº¿ã€‚
+ 绘制脚注横线的选项,å¯ä»¥ä½¿ç”¨ \cs*{hrule} 或\ref{exam:markrule} 所述 \cs{markrule} 等画线命令æ¥ç»˜åˆ¶æ¨ªçº¿ã€‚
\keyval{headrulewd}{刚性长度}\Default{0.5pt}
页眉横线默认的粗细,使用 \option{headrule} 选项绘制横线åŽå¤±æ•ˆã€‚
\keyval{footnoterulewd}{刚性长度}\Default{0.5pt}
@@ -719,7 +711,7 @@
\end{options}
\begin{commands}\noitemsep
- \command{fancyhead}[\marg{风格å}\oarg{基础风格}\marg{风格定义}]
+ \command{fancypagestyle}[\marg{风格å}\oarg{基础风格}\marg{风格定义}]
定义å为 \meta{风格å} 的页é¢é£Žæ ¼ã€‚\meta{风格定义} 中å¯åŒ…å«è®¾ç½®é¡µçœ‰é¡µè„šä¸åŒä½ç½®æ ¼å¼çš„命令,如果为空则等于 \code{fancy} 风格。如果存在 \meta{基础风格},则在它的基础上进行定义。
\begin{ctexexam}
\fancypagestyle{plain}
@@ -744,7 +736,7 @@
\begin{commands}
\command{markrule}[\oarg{长度}\darg{颜色å}\marg{线宽}\baroarg{上间è·,下间è·}]
实线命令 \cs{markrule} æ—¢å¯åœ¨ \meta{横线命令} 中用于绘制页眉页脚横线,也å¯ä»¥åœ¨æ­£æ–‡ä¸­ä½¿ç”¨ã€‚\meta{长度} 默认为版心的宽度,上下间è·ä¸ºæ¨ªçº¿ä¸Žä¸Šä¸‹æ–¹éƒ¨ä»¶çš„é—´è·ï¼Œå¸¦æœ‰é•¿åº¦å•ä½ï¼Œä¸Šä¸‹é—´è·ä¹‹é—´ç”¨ç¬¦å· \code{|} 分开,若åªæœ‰ä¸€éƒ¨åˆ†åˆ™è¡¨ç¤º \meta{上间è·}。下é¢ä¸¾ä¸€ä¸ªè®¾ç½®é¡µçœ‰å†…容的例å­ï¼š
- \begin{ctexexam}
+ \begin{ctexexam}[labelref = exam:markrule]
\ebhdrset{headrule = \markrule(DarkOrchid){0.5pt}[2pt|2pt]}
\fancyhead[ER]{\leftmark}
\fancyhead[OL]{\rightmark}
@@ -861,7 +853,7 @@
\subsection[目录]{目录\smodule{toc}}
\label{subsec:catalog}
-æ¨¡å— \module*{toc} 将使用 \pkg*{titletoc} å®åŒ…处ç†ç›®å½•æ ·å¼ã€‚默认包括 \module*{part}ã€\module*{chapter}ã€\module*{section}ã€\module*{subsection}ã€\module*{figure}ã€\module*{table} å’Œ \module*{lstlisting} æ¡ç›®å的键路径,而使用 \module*{float} 路径å¯ä»¥ç»Ÿä¸€è®¾ç½®å›¾ç‰‡ã€è¡¨æ ¼å’Œä»£ç ç›®å½•çš„æ ·å¼ã€‚选项å‰å¸¦æœ‰ \ding{73} 符å·è¡¨ç¤ºæ”¯æŒæ‰€æœ‰ç›¸åº”\textbf{æ¡ç›®å}的路径,其它选项则处于 \module*{toc} 键路径下。目å‰æ”¯æŒå¤šæ•°å­¦æœ¯è®ºæ–‡ç›®å½•æ ·å¼ï¼Œæ›´å¤æ‚çš„æ ·å¼å¯ä»¥æŸ¥çœ‹ \pkg*{titletoc} 的相关用法。
+æ¨¡å— \module*{toc} 将使用 \pkg*{titletoc} å®åŒ…处ç†ç›®å½•æ ·å¼ã€‚默认包括 \module*{part}$\longrightarrow$\module*{subparagraph}ã€\module*{figure}ã€\module*{table} å’Œ \module*{lstlisting} æ¡ç›®å的键路径,而使用 \module*{float} 路径å¯ä»¥ç»Ÿä¸€è®¾ç½®å›¾ç‰‡ã€è¡¨æ ¼å’Œä»£ç ç›®å½•çš„æ ·å¼ã€‚选项å‰å¸¦æœ‰ \ding{73} 符å·è¡¨ç¤ºæ”¯æŒæ‰€æœ‰ç›¸åº”\textbf{æ¡ç›®å}的路径,其它选项则处于 \module*{toc} 键路径下。目å‰æ”¯æŒå¤šæ•°å­¦æœ¯è®ºæ–‡ç›®å½•æ ·å¼ï¼Œæ›´å¤æ‚çš„æ ·å¼å¯ä»¥æŸ¥çœ‹ \pkg*{titletoc} 的相关用法。
\begin{options}
\keyval{tocformat}{æ¡ç›®æ ¼å¼}\dtag
目录中å„类型æ¡ç›®çš„æ ¼å¼ã€‚å¯ä»¥è®¾ç½®æ¡ç›®å­—体和加入垂直间è·ç­‰ï¼Œåž‚ç›´é—´è·æœ€å¥½ä½¿ç”¨é˜²æ­¢åž‚ç›´é—´è·é‡åˆçš„ \cs*{addvspace} 命令。如果是段è½åž‹ç›®å½•ï¼Œæ ¼å¼ä»£ç ä»…在段è½ä¸­å½“å‰çº§åˆ«æ¡ç›®å‰æ‰§è¡Œä¸€æ¬¡ã€‚
@@ -872,10 +864,10 @@
\keyval{tocindent}{刚性长度}\dtag
目录æ¡ç›®å·¦è¾¹çš„缩进è·ç¦»ï¼Œé€šå¸¸æ ‡é¢˜çº§åˆ«è¶Šä½Žç¼©è¿›è¶Šå¤§ã€‚如果是段è½åž‹ç›®å½•ï¼Œä»…在当å‰æ¡ç›®çº§åˆ«ä¸ºæ®µè½ä¸­æœ€é«˜æ—¶æœ‰æ•ˆã€‚
\keyval{tocrule}{引导线命令}\dtag
- 引导线选项 \option{tocrule} 中一般å¯ä»¥ä½¿ç”¨åŸºäºŽ \cs*{xleaders} 命令的 \cs{tocrule} 绘制引导线。
+ 目录æ¡ç›®çš„引导线和页ç ã€‚引导线å¯ä»¥ä½¿ç”¨åŸºäºŽ \cs*{xleaders} 命令的 \cs{tocrule} 绘制(åŒæ—¶è¾“出页ç ï¼‰ï¼Œå¦‚果是一般ä¸éœ€è¦å¼•å¯¼çº¿çš„段è½åž‹ç›®å½•ï¼Œå¯ä»¥ä½¿ç”¨ \cs{thecontentspage} 命令输出页ç ã€‚
\begin{commands}
\command{tocrule}[\sarg\harg\oarg{引导点间è·}\darg{放大因å­}\marg{引导点}\oarg{页ç æ ¼å¼}]
- 生æˆç›®å½•å¼•å¯¼çº¿çš„命令,需è¦åœ¨å¼•å¯¼çº¿é€‰é¡¹ \option{tocrule} 中使用。带有星å·çš„命令与 \keyis{dotalign}{false} 效果相åŒã€‚命令带 \harg{} å·å‚æ•°ä¸æ·»åŠ ç›®å½•é¡µç ï¼Œæ­¤æ—¶æ— æ ¼å¼çš„页ç è¢«ä¿å­˜åœ¨ \cs{thecontentspage} 命令中,å¯ä»¥é…åˆç›’å­å‘½ä»¤è®¾ç½®ä¸åŒçš„页ç å·¦å³é—´è·å’Œå¯¹é½æ–¹å¼ã€‚\meta{引导点间è·} 需带有长度å•ä½ï¼Œ\meta{放大因å­} 为 \meta{引导点} 的放大å€æ•°ã€‚\meta{页ç æ ¼å¼} 中最åŽä¸€ä¸ªå‘½ä»¤å¯ä»¥å¸¦æœ‰ä¸€ä¸ªå‚数为页ç ç¼–å·ã€‚
+ 生æˆç›®å½•å¼•å¯¼çº¿çš„命令,需è¦åœ¨å¼•å¯¼çº¿é€‰é¡¹ \option{tocrule} 中使用。带有星å·çš„命令与 \keyis{dotalign}{false} 效果相åŒã€‚命令带 \harg{} å·å‚æ•°ä¸è¾“出目录页ç ï¼Œæ­¤æ—¶æ— æ ¼å¼çš„页ç è¢«ä¿å­˜åœ¨ \cs{thecontentspage} 命令中,å¯ä»¥é…åˆç›’å­å‘½ä»¤è®¾ç½®ä¸åŒçš„页ç å·¦å³é—´è·å’Œå¯¹é½æ–¹å¼ã€‚\meta{放大因å­} 为 \meta{引导点} 的放大å€æ•°ã€‚\meta{页ç æ ¼å¼} 中最åŽä¸€ä¸ªå‘½ä»¤å¯ä»¥å¸¦æœ‰ä¸€ä¸ªå‚数用于接å—页ç ã€‚
\end{commands}
\keyval{toclabel}{标题标签定义}\dtag\newtagv{2024as}%
目录中å„类型æ¡ç›®æ ‡é¢˜æ ‡ç­¾çš„定义,å¯ä¸Ž \option{tocline} 选项è”用设置标题。其中å‚æ•° \code{\#1} ä»£è¡¨æ ‡ç­¾çš„ç¼–å· \cs{thecontentslabel},å‚æ•° \code{\#2} 代表 \meta{æ¡ç›®å}。定义最åŽçš„命令å¯å¸¦æœ‰ä¸€ä¸ªå‚数,用于接å—标题内容,一些特殊情况例如需è¦å°†æ ‡é¢˜å†…容放在标签åŽï¼Œå¯ä»¥é€šè¿‡å®šä¹‰å‘½ä»¤å®žçŽ°ï¼š
@@ -907,7 +899,7 @@
\begin{commands}
\command{RegisterTocName}[\sarg\marg{æ¡ç›®å}]\newtagv[Changed]{2024as}%
- ç»™æ¡ç›®ç±»åž‹å称为 \meta{æ¡ç›®å} 的标题注册用于设置目录样å¼çš„选项,å³é€‰é¡¹å‰æœ‰ç¬¦å· \ding{73} 表示需è¦æ³¨å†ŒåŽä½¿ç”¨ã€‚å‰é¢æ到的æ¡ç›®ç±»åž‹å‡å·²æ³¨å†Œï¼Œæ–°ç±»åž‹çš„æ¡ç›®æ³¨å†ŒåŽé€‰é¡¹åˆå§‹å€¼ä¸Žå›¾è¡¨æ¡ç›®ç›¸åŒã€‚带有星å·å‚数的命令使注册目录的æ¡ç›®å½¢æˆä¸€ä¸ªæ®µè½ï¼Œæ­¤æ—¶å¤šå‡ºä¸‹é¢ä¸‰ä¸ªé€‰é¡¹å¯ç”¨ï¼š
+ ç»™æ¡ç›®ç±»åž‹å称为 \meta{æ¡ç›®å} 的标题注册用于设置目录样å¼çš„选项,å³é€‰é¡¹å‰æœ‰ç¬¦å· \ding{73} 表示需è¦æ³¨å†ŒåŽä½¿ç”¨ã€‚å‰é¢æ到的æ¡ç›®ç±»åž‹å‡å·²æ³¨å†Œï¼Œæ–°ç±»åž‹çš„æ¡ç›®æ³¨å†ŒåŽé»˜è®¤æ ¼å¼ä¸Žå›¾è¡¨æ¡ç›®ç›¸åŒã€‚这个命令å¯ä»¥é‡å¤ä½¿ç”¨ï¼Œä¼šé‡ç½®ç›®å½•æ¡ç›®ä¸ºé»˜è®¤æ ¼å¼ã€‚带有星å·å‚数的命令使注册目录的æ¡ç›®å½¢æˆä¸€ä¸ªæ®µè½ï¼Œæ­¤æ—¶å¤šå‡ºä¸‹é¢ä¸‰ä¸ªé€‰é¡¹å¯ç”¨ï¼š
\begin{options}
\keyval{tocbegin}{开始代ç }\dtag\newtagv{2024as}%
当å‰çº§åˆ«ç›®å½•æ¡ç›®ç¬¬ä¸€ä¸ªæ ‡é¢˜å‰çš„代ç ï¼Œä»…在存在更高级别的æ¡ç›®æ—¶æœ‰æ•ˆã€‚
@@ -996,6 +988,7 @@
\subsection{目录命令}
\label{subsec:directory command}
+\easybook{} 改进了标准文档类中定制性较低的章节标题和图表标题目录命令。现在目录命令带有å¯é€‰å‚数用于设置标题格å¼å’Œæ æ•°ç­‰ï¼Œå¹¶ä¸”与标准文档类ä¸åŒçš„是目录命令å¯åœ¨æ­£æ–‡ä¸­\textbf{é‡å¤}使用。更多目录命令的创建和样å¼è®¾ç½®å¯å‚考\ref{subsec:catalog}。
\begin{commands}
\command{tableofcontents}[\sarg\oarg{键值列表}\darg{代ç é’©å­}]
章节标题目录命令,支æŒä¸­è‹±æ–‡åŒè¯­æ ‡é¢˜ç›®å½•è¾“出。带有星å·å‚æ•°ä¸è¾“出目录æ¡ç›®ä¸Šæ–¹çš„标题。\meta{代ç é’©å­} 是当输出方案 \keyis{plan}{both} 时中文与英文目录之间执行的代ç ï¼Œå¯ä»¥æ’入设置目录样å¼å’Œæ¢é¡µç­‰å‘½ä»¤ã€‚
@@ -1097,16 +1090,20 @@
\end{commands}
\begin{commands}
- \command{NewTitleCommand}[\marg{æ¡ç›®å}\marg{章节层次}]\newtagv{2024aw}%
- 创建一个命令å为 \meta{æ¡ç›®å} æ–°ç« èŠ‚æ ‡é¢˜ï¼Œå¹¶ä¸”æ”¯æŒ \CTeX 中的标题样å¼é€‰é¡¹æœºåˆ¶ï¼Œé»˜è®¤çš„标题格å¼ä¸ºç©ºã€‚åŒæ—¶åˆ›å»ºä¸€ä¸ªå为 \meta{æ¡ç›®å} 的计数器和标记命令 \code{\textbackslash}\meta{æ¡ç›®å}\code{\textcolor{cs}{mark}}。åŒæ—¶è¿˜éœ€æŒ‡å®šæ ‡é¢˜çš„ \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。
+ \command{NewTitleCommand}[\oarg{基础标题}\marg{æ¡ç›®å}\marg{章节层次}]\newtagv{2024aw}%
+ 创建一个命令å为 \meta{æ¡ç›®å} æ–°ç« èŠ‚æ ‡é¢˜ï¼Œå¹¶ä¸”æ”¯æŒ \CTeX 中的标题样å¼é€‰é¡¹æœºåˆ¶ã€‚指定å¯é€‰å‚æ•°åŽæ ‡é¢˜æ ¼å¼é™¤äº†ç¼–å·/å字会与 \meta{基础标题} 相åŒï¼Œå¦åˆ™é»˜è®¤ä¸ºç©ºã€‚åŒæ—¶åˆ›å»ºä¸€ä¸ªå为 \meta{æ¡ç›®å} 的计数器和标记命令 \code{\textbackslash}\meta{æ¡ç›®å}\code{\textcolor{cs}{mark}}。åŒæ—¶è¿˜éœ€æŒ‡å®šæ ‡é¢˜çš„ \meta{章节层次},例如标准文档类中 \code{chapter} 级别为 \code{0}。
\command{NewTitleEntryCommand}[\oarg{扩展å}\marg{æ¡ç›®å}]\newtagv{2024aw}%
创建一个命令 \code{\textbackslash}\meta{æ¡ç›®å}\code{\textcolor{cs}{entry}}\marg{标题},仅将 \meta{标题} 加入文件扩展å为 \meta{扩展å} 的目录中,而ä¸åœ¨æ­£æ–‡ä¸­è¾“出标题,默认扩展å为 \code{toc}。
\begin{ctexexam}
- \NewTitleCommand{lchapter}{0}
+ \NewTitleCommand[chapter]{lchapter}{0}
\NewTitleEntryCommand{lchapter}
\contentsuse{lchapter}{toc}
\RegisterTocName{lchapter}
- \ctexset{lchapter/number = \thechapter}
+ \ctexset
+ {
+ lchapter/runin = true,
+ lchapter/number = \thelchapter
+ }
\lchapter{正常标题}
\lchapterentry{加入目录的标题}
\end{ctexexam}
@@ -1509,7 +1506,7 @@
\item 新增段è½åž‹ç›®å½•æ¡ç›®é™„加代ç çš„选项 \option{tocbegin}ã€\option{tocsep} å’Œ \option{tocend}。
\end{version}
\shortversion{v = 2024aw,date = 2022/04/22,changes = 新增新建章节标题命令 \cs{NewTitleCommand} 和 \cs{NewTitleEntryCommand}。}
- \shortversion{v = 2024az,date = 2022/04/24,changes = 增加对 \pkg*{thmtools} å®åŒ…定ç†çŽ¯å¢ƒç›®å½• \cs{listoftheorems} 的支æŒã€‚}
+ \shortversion{v = 2024bb,date = 2022/04/26,changes = 增加对 \pkg*{thmtools} å®åŒ…定ç†çŽ¯å¢ƒç›®å½• \cs{listoftheorems} 的支æŒã€‚}
\end{changelog}
\nocite{*}
diff --git a/macros/latex/contrib/els-cas-templates/README b/macros/latex/contrib/els-cas-templates/README
index c925f30042..ffc9f6d112 100644
--- a/macros/latex/contrib/els-cas-templates/README
+++ b/macros/latex/contrib/els-cas-templates/README
@@ -1,3 +1,5 @@
+Version 2.4
+
This bundle provides two classfiles, namely cas-sc.cls and cas-dc.cls
and corresponding template files for typesetting journal articles
supposed to go through Elsevier's updated workflow. cas-sc.cls is meant
diff --git a/macros/latex/contrib/els-cas-templates/cas-common.sty b/macros/latex/contrib/els-cas-templates/cas-common.sty
index 3ffe3ea218..e3e4154b7f 100644
--- a/macros/latex/contrib/els-cas-templates/cas-common.sty
+++ b/macros/latex/contrib/els-cas-templates/cas-common.sty
@@ -15,11 +15,11 @@
%% given in the file `manifest.txt'.
%%
-% $Id: cas-common.sty 66 2021-05-11 14:17:42Z rishi $
+% $Id: cas-common.sty 94 2024-05-04 09:27:09Z rishi $
\def\RCSfile{cas-common}%
- \def\RCSversion{2.3}%
- \def\RCSdate{2021/05/11}%
+ \def\RCSversion{2.4}%
+ \def\RCSdate{2024/05/04}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\pretolerance=-1
@@ -1537,7 +1537,7 @@
\ifnum\theblind>0\relax
\vspace*{\the\baselineskip}
\else
- \seq_use:Nn \g_stm_prelimsau_seq { , }
+ \seq_use:Nn \g_stm_prelimsau_seq { ,~ }
\fi
\vskip12pt
\par
@@ -2628,7 +2628,7 @@
\xspaceaddexceptions{]}
-\ABD{\bibsep=0pt}
+\ABD{\@ifundefined{bibsep}{}{\bibsep=0pt}}
%\ifbool{casfinallayout}
% {%
\ABD{\gdef\bibfont{\fontsize{8pt}{10pt}\selectfont}%
@@ -2638,3 +2638,4 @@
% {}
\endinput
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-sample.pdf b/macros/latex/contrib/els-cas-templates/cas-dc-sample.pdf
new file mode 100644
index 0000000000..aeaa27f1a3
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-dc-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-sample.tex b/macros/latex/contrib/els-cas-templates/cas-dc-sample.tex
new file mode 100644
index 0000000000..aeaa9e565c
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-dc-sample.tex
@@ -0,0 +1,463 @@
+%%
+%% Copyright 2019-2024 Elsevier Ltd
+%%
+%% Version 2.4
+%%
+%% This file is part of the 'CAS Bundle'.
+%% --------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% The list of all files belonging to the 'CAS Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% Template article for cas-dc documentclass for
+%% double column output.
+
+%\documentclass[a4paper,fleqn,longmktitle]{cas-dc}
+\documentclass[a4paper,fleqn]{cas-dc}
+
+%\usepackage[authoryear,longnamesfirst]{natbib}
+%\usepackage[authoryear]{natbib}
+\usepackage[numbers]{natbib}
+
+%%%Author definitions
+\def\tsc#1{\csdef{#1}{\textsc{\lowercase{#1}}\xspace}}
+\tsc{WGM}
+\tsc{QE}
+\tsc{EP}
+\tsc{PMS}
+\tsc{BEC}
+\tsc{DE}
+%%%
+
+\begin{document}
+\let\WriteBookmarks\relax
+\def\floatpagepagefraction{1}
+\def\textpagefraction{.001}
+\shorttitle{Leveraging social media news}
+\shortauthors{J.K. Krishnan et~al.}
+
+\title [mode = title]{This is a specimen $a_b$ title}
+\tnotemark[1,2]
+
+\tnotetext[1]{This document is the results of the research
+ project funded by the National Science Foundation.}
+
+\tnotetext[2]{The second title footnote which is a longer text matter
+ to fill through the whole text width and overflow into
+ another line in the footnotes area of the first page.}
+
+
+\author[1,3]{J.K. Krishnan}[type=editor,
+ auid=000,bioid=1,
+ prefix=Sir,
+ role=Researcher,
+ orcid=0000-0001-0000-0000]
+\cormark[1]
+\fnmark[1]
+\ead{jkk@example.in}
+\ead[url]{www.jkkrishnan.in}
+
+\credit{Conceptualization of this study, Methodology, Software}
+
+%\address[1]{, Street 129, 1043 NX Amsterdam, The Netherlands}
+\affiliation[1]{organization={Department of Physics, J.K. Institute of Science},
+ addressline={Jawahar Nagar},
+ city={Trivandrum},
+% citysep={}, % Uncomment if no comma needed between city and postcode
+ postcode={695013},
+ state={Kerala},
+ country={India}}
+
+\author[2,4]{Han Thane}[style=chinese]
+
+\author[2,3]{William {J. Hansen}}[%
+ role=Co-ordinator,
+ suffix=Jr,
+ ]
+\fnmark[2]
+\ead{wjh@example.org}
+\ead[URL]{https://www.university.org}
+
+\credit{Data curation, Writing - Original draft preparation}
+
+\affiliation[2]{organization={World Scientific University},
+ addressline={Street 29},
+ postcode={1011 NX},
+ postcodesep={},
+ city={Amsterdam},
+ country={The Netherlands}}
+
+\author[1,3]{T. Rafeeq}
+\cormark[2]
+\fnmark[1,3]
+\ead{t.rafeeq@example.in}
+\ead[URL]{www.campus.in}
+
+\affiliation[3]{organization={University of Intelligent Studies},
+ addressline={Street 15},
+ city={Jabaldesh},
+ postcode={825001},
+ state={Orissa},
+ country={India}}
+
+\cortext[cor1]{Corresponding author}
+\cortext[cor2]{Principal corresponding author}
+\fntext[fn1]{This is the first author footnote, but is common to third
+ author as well.}
+\fntext[fn2]{Another author footnote, this is a very long footnote and
+ it should be a really long footnote. But this footnote is not yet
+ sufficiently long enough to make two lines of footnote text.}
+
+\nonumnote{This note has no numbers. In this work we demonstrate $a_b$
+ the formation Y\_1 of a new type of polariton on the interface
+ between a cuprous oxide slab and a polystyrene micro-sphere placed
+ on the slab.
+ }
+
+\begin{abstract}
+This template helps you to create a properly formatted \LaTeX\ manuscript.
+
+\noindent\texttt{\textbackslash begin{abstract}} \dots
+\texttt{\textbackslash end{abstract}} and
+\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+
+which
+contain the abstract and keywords respectively.
+
+\noindent Each keyword shall be separated by a \verb+\sep+ command.
+\end{abstract}
+
+\begin{graphicalabstract}
+\includegraphics{figs/cas-grabs.pdf}
+\end{graphicalabstract}
+
+\begin{highlights}
+\item Research highlights item 1
+\item Research highlights item 2
+\item Research highlights item 3
+\end{highlights}
+
+\begin{keywords}
+quadrupole exciton \sep polariton \sep \WGM \sep \BEC
+\end{keywords}
+
+
+\maketitle
+
+\section{Introduction}
+
+The Elsevier cas-dc class is based on the
+standard article class and supports almost all of the functionality of
+that class. In addition, it features commands and options to format the
+\begin{itemize} \item document style \item baselineskip \item front
+matter \item keywords and MSC codes \item theorems, definitions and
+proofs \item lables of enumerations \item citation style and labeling.
+\end{itemize}
+
+This class depends on the following packages
+for its proper functioning:
+
+\begin{enumerate}
+\itemsep=0pt
+\item {natbib.sty} for citation processing;
+\item {geometry.sty} for margin settings;
+\item {fleqn.clo} for left aligned equations;
+\item {graphicx.sty} for graphics inclusion;
+\item {hyperref.sty} optional packages if hyperlinking is
+ required in the document;
+\end{enumerate}
+
+All the above packages are part of any
+standard \LaTeX{} installation.
+Therefore, the users need not be
+bothered about downloading any extra packages.
+
+\section{Installation}
+
+The package is available at author resources page at Elsevier
+(\url{http://www.elsevier.com/locate/latex}).
+The class may be moved or copied to a place, usually,\linebreak
+\verb+$TEXMF/tex/latex/elsevier/+, %$%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+or a folder which will be read
+by \LaTeX{} during document compilation. The \TeX{} file
+database needs updation after moving/copying class file. Usually,
+we use commands like \verb+mktexlsr+ or \verb+texhash+ depending
+upon the distribution and operating system.
+
+\section{Front matter}
+
+The author names and affiliations could be formatted in two ways:
+\begin{enumerate}[(1)]
+\item Group the authors per affiliation.
+\item Use footnotes to indicate the affiliations.
+\end{enumerate}
+See the front matter of this document for examples.
+You are recommended to conform your choice to the journal you
+are submitting to.
+
+\section{Bibliography styles}
+
+There are various bibliography styles available. You can select the
+style of your choice in the preamble of this document. These styles are
+Elsevier styles based on standard styles like Harvard and Vancouver.
+Please use Bib\TeX\ to generate your bibliography and include DOIs
+whenever available.
+
+Here are two sample references:
+\cite{Fortunato2010}
+\cite{Fortunato2010,NewmanGirvan2004}
+\cite{Fortunato2010,Vehlowetal2013}
+
+\section{Floats}
+{Figures} may be included using the command,\linebreak
+\verb+\includegraphics+ in
+combination with or without its several options to further control
+graphic. \verb+\includegraphics+ is provided by {graphic[s,x].sty}
+which is part of any standard \LaTeX{} distribution.
+{graphicx.sty} is loaded by default. \LaTeX{} accepts figures in
+the postscript format while pdf\LaTeX{} accepts {*.pdf},
+{*.mps} (metapost), {*.jpg} and {*.png} formats.
+pdf\LaTeX{} does not accept graphic files in the postscript format.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\columnwidth]{figs/cas-munnar-2024.jpg}
+ \caption{The beauty of Munnar, Kerala. (See also Table \protect\ref{tbl1}).}
+ \label{FIG:1}
+\end{figure}
+
+
+The \verb+table+ environment is handy for marking up tabular
+material. If users want to use {multirow.sty},
+{array.sty}, etc., to fine control/enhance the tables, they
+are welcome to load any package of their choice and
+{cas-dc.cls} will work in combination with all loaded
+packages.
+
+\begin{table}[width=.9\linewidth,cols=4,pos=h]
+\caption{This is a test caption. This is a test caption. This is a test
+caption. This is a test caption. Use \{table*\} instead of \{table\} if you
+want a two column spanned table.}\label{tbl1}
+\begin{tabular*}{\tblwidth}{@{} LLLL@{} }
+\toprule
+Col 1 & Col 2 & Col 3 & Col4\\
+\midrule
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+\bottomrule
+\end{tabular*}
+\end{table}
+
+\section[Theorem and ...]{Theorem and theorem like environments}
+
+{cas-dc.cls} provides a few shortcuts to format theorems and
+theorem-like environments with ease. In all commands the options that
+are used with the \verb+\newtheorem+ command will work exactly in the same
+manner. {cas-dc.cls} provides three commands to format theorem or
+theorem-like environments:
+
+\begin{verbatim}
+ \newtheorem{theorem}{Theorem}
+ \newtheorem{lemma}[theorem]{Lemma}
+ \newdefinition{rmk}{Remark}
+ \newproof{pf}{Proof}
+ \newproof{pot}{Proof of Theorem \ref{thm2}}
+\end{verbatim}
+
+
+The \verb+\newtheorem+ command formats a
+theorem in \LaTeX's default style with italicized font, bold font
+for theorem heading and theorem number at the right hand side of the
+theorem heading. It also optionally accepts an argument which
+will be printed as an extra heading in parentheses.
+
+\begin{verbatim}
+ \begin{theorem}
+ For system (8), consensus can be achieved with
+ $\|T_{\omega z}$ ...
+ \begin{eqnarray}\label{10}
+ ....
+ \end{eqnarray}
+ \end{theorem}
+\end{verbatim}
+
+
+\newtheorem{theorem}{Theorem}
+
+\begin{theorem}
+For system (8), consensus can be achieved with
+$\|T_{\omega z}$ ...
+\begin{eqnarray}\label{10}
+....
+\end{eqnarray}
+\end{theorem}
+
+The \verb+\newdefinition+ command is the same in
+all respects as its \verb+\newtheorem+ counterpart except that
+the font shape is roman instead of italic. Both
+\verb+\newdefinition+ and \verb+\newtheorem+ commands
+automatically define counters for the environments defined.
+
+The \verb+\newproof+ command defines proof environments with
+upright font shape. No counters are defined.
+
+\begin{figure*}
+ \centering
+ \includegraphics[width=.9\textwidth]{figs/cas-munnar-2024.jpg}
+ \caption{The beauty of Munnar, Kerala. (See also Table \protect\ref{tbl1}).}
+ \label{FIG:2}
+\end{figure*}
+
+
+\section[Enumerated ...]{Enumerated and Itemized Lists}
+{cas-dc.cls} provides an extended list processing macros
+which makes the usage a bit more user friendly than the default
+\LaTeX{} list macros. With an optional argument to the
+\verb+\begin{enumerate}+ command, you can change the list counter
+type and its attributes.
+
+\begin{verbatim}
+ \begin{enumerate}[1.]
+ \item The enumerate environment starts with an optional
+ argument `1.', so that the item counter will be suffixed
+ by a period.
+ \item You can use `a)' for alphabetical counter and '(i)'
+ for roman counter.
+ \begin{enumerate}[a)]
+ \item Another level of list with alphabetical counter.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+\end{verbatim}
+
+Further, the enhanced list environment allows one to prefix a
+string like `step' to all the item numbers.
+
+\begin{verbatim}
+ \begin{enumerate}[Step 1.]
+ \item This is the first step of the example list.
+ \item Obviously this is the second step.
+ \item The final step to wind up this example.
+ \end{enumerate}
+\end{verbatim}
+
+\section{Cross-references}
+In electronic publications, articles may be internally
+hyperlinked. Hyperlinks are generated from proper
+cross-references in the article. For example, the words
+\textcolor{black!80}{Fig.~1} will never be more than simple text,
+whereas the proper cross-reference \verb+\ref{tiger}+ may be
+turned into a hyperlink to the figure itself:
+\textcolor{blue}{Fig.~1}. In the same way,
+the words \textcolor{blue}{Ref.~[1]} will fail to turn into a
+hyperlink; the proper cross-reference is \verb+\cite{Knuth96}+.
+Cross-referencing is possible in \LaTeX{} for sections,
+subsections, formulae, figures, tables, and literature
+references.
+
+\section{Bibliography}
+
+Two bibliographic style files (\verb+*.bst+) are provided ---
+{model1-num-names.bst} and {model2-names.bst} --- the first one can be
+used for the numbered scheme. This can also be used for the numbered
+with new options of {natbib.sty}. The second one is for the author year
+scheme. When you use model2-names.bst, the citation commands will be
+like \verb+\citep+, \verb+\citet+, \verb+\citealt+ etc. However when
+you use model1-num-names.bst, you may use only \verb+\cite+ command.
+
+\verb+thebibliography+ environment. Each reference is a\linebreak
+\verb+\bibitem+ and each \verb+\bibitem+ is identified by a label,
+by which it can be cited in the text:
+
+\noindent In connection with cross-referencing and
+possible future hyperlinking it is not a good idea to collect
+more that one literature item in one \verb+\bibitem+. The
+so-called Harvard or author-year style of referencing is enabled
+by the \LaTeX{} package {natbib}. With this package the
+literature can be cited as follows:
+
+\begin{enumerate}[\textbullet]
+\item Parenthetical: \verb+\citep{WB96}+ produces (Wettig \& Brown, 1996).
+\item Textual: \verb+\citet{ESG96}+ produces Elson et al. (1996).
+\item An affix and part of a reference:\break
+\verb+\citep[e.g.][Ch. 2]{Gea97}+ produces (e.g. Governato et
+al., 1997, Ch. 2).
+\end{enumerate}
+
+In the numbered scheme of citation, \verb+\cite{<label>}+ is used,
+since \verb+\citep+ or \verb+\citet+ has no relevance in the numbered
+scheme. {natbib} package is loaded by {cas-dc} with
+\verb+numbers+ as default option. You can change this to author-year
+or harvard scheme by adding option \verb+authoryear+ in the class
+loading command. If you want to use more options of the {natbib}
+package, you can do so with the \verb+\biboptions+ command. For
+details of various options of the {natbib} package, please take a
+look at the {natbib} documentation, which is part of any standard
+\LaTeX{} installation.
+
+\appendix
+\section{My Appendix}
+Appendix sections are coded under \verb+\appendix+.
+
+\verb+\printcredits+ command is used after appendix sections to list
+author credit taxonomy contribution roles tagged using \verb+\credit+
+in frontmatter.
+
+\printcredits
+
+%% Loading bibliography style file
+%\bibliographystyle{model1-num-names}
+\bibliographystyle{cas-model2-names}
+
+% Loading bibliography database
+\bibliography{cas-refs}
+
+
+%\vskip3pt
+
+\bio{}
+Author biography without author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\end{document}
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc-template.tex b/macros/latex/contrib/els-cas-templates/cas-dc-template.tex
index 5cefee69db..609fc3005c 100644
--- a/macros/latex/contrib/els-cas-templates/cas-dc-template.tex
+++ b/macros/latex/contrib/els-cas-templates/cas-dc-template.tex
@@ -1,14 +1,14 @@
%%
-%% Copyright 2019-2021 Elsevier Ltd
+%% Copyright 2019-2024 Elsevier Ltd
%%
%% This file is part of the 'CAS Bundle'.
%% --------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% 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.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'CAS Bundle' is
@@ -47,21 +47,21 @@
\def\textpagefraction{.001}
% Short title
-\shorttitle{<short title of the paper for running head>}
+\shorttitle{}
% Short author
-\shortauthors{<short author list for running head>}
+\shortauthors{}
% Main title of the paper
-\title [mode = title]{<main title>}
+\title [mode = title]{}
% Title footnote mark
% eg: \tnotemark[1]
-\tnotemark[<tnote number>]
+\tnotemark[1]
% Title footnote 1.
% eg: \tnotetext[1]{Title footnote text}
-\tnotetext[<tnote number>]{<tnote text>}
+\tnotetext[1]{}
% First author
%
@@ -77,26 +77,26 @@
% linkedin=<linkedin id>,
% gplus=<gplus id>]
-\author[<aff no>]{<author name>}[<options>]
+\author[1]{}%[<options>]
% Corresponding author indication
-\cormark[<corr mark no>]
+\cormark[1]
% Footnote of the first author
-\fnmark[<footnote mark no>]
+\fnmark[1]
% Email id of the first author
-\ead{<email address>}
+\ead{}
% URL of the first author
-\ead[url]{<URL>}
+\ead[url]{}
% Credit authorship
% eg: \credit{Conceptualization of this study, Methodology, Software}
-\credit{<Credit authorship details>}
+\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[1]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -104,7 +104,7 @@
state={},
country={}}
-\author[<aff no>]{<author name>}[<options>]
+\author[2]{}%[]
% Footnote of the second author
\fnmark[2]
@@ -119,7 +119,7 @@
\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[2]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -138,7 +138,7 @@
% Here goes the abstract
\begin{abstract}
-
+Here goes the abstract \nocite{*}%% Remove this line from your manuscript.
\end{abstract}
% Use if graphical abstract is present
@@ -153,6 +153,9 @@
\item
\end{highlights}
+
+%\nocite{*}
+
% Keywords
% Each keyword is seperated by \sep
\begin{keywords}
@@ -187,15 +190,17 @@
%\item[]
%\end{description}
+\clearpage %%Remove this from your manuscript
+
% Figure
-\begin{figure}[<options>]
- \centering
- \includegraphics[<options>]{}
- \caption{}\label{fig1}
+\begin{figure}%[]
+ \centering
+% \includegraphics{}
+ \caption{}\label{fig1}
\end{figure}
-\begin{table}[<options>]
+\begin{table}%[]
\caption{}\label{tbl1}
\begin{tabular*}{\tblwidth}{@{}LL@{}}
\toprule
@@ -231,16 +236,16 @@
\bibliographystyle{cas-model2-names}
% Loading bibliography database
-\bibliography{}
+\bibliography{cas-refs}
% Biography
-\bio{}
+%\bio{}
% Here goes the biography details.
-\endbio
+%\endbio
-\bio{pic1}
+%\bio{pic1}
% Here goes the biography details.
-\endbio
+%\endbio
\end{document}
diff --git a/macros/latex/contrib/els-cas-templates/cas-dc.cls b/macros/latex/contrib/els-cas-templates/cas-dc.cls
index a96661bd27..674299c7f7 100644
--- a/macros/latex/contrib/els-cas-templates/cas-dc.cls
+++ b/macros/latex/contrib/els-cas-templates/cas-dc.cls
@@ -15,11 +15,11 @@
%% given in the file `manifest.txt'.
%%
-%% $Id: cas-dc.cls 66 2021-05-11 14:17:42Z rishi $
+%% $Id: cas-dc.cls 96 2024-05-04 09:29:44Z rishi $
\def\RCSfile{cas-dc}%
- \def\RCSversion{2.3}%
- \def\RCSdate{2021/05/11}%
+ \def\RCSversion{2.4}%
+ \def\RCSdate{2024/05/04}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Formatting class
for CAS double column articles]
@@ -48,7 +48,7 @@
\DeclareOption{final}{\global\casfinallayouttrue}
\DeclareOption{review}{\global\casreviewlayouttrue}
-\ExecuteOptions{a4paper,10pt,oneside,fleqn,review}
+\ExecuteOptions{a4paper,10pt,oneside,fleqn}
\DeclareOption*{\PassOptionsToClass{\CurrentOption}{article}}
\ProcessOptions
\LoadClass{article}
@@ -64,6 +64,8 @@
\RequirePackage{xspace,xstring,footmisc}
\RequirePackage[svgnames,dvipsnames]{xcolor}
+\ifbool{casreviewlayout}{\RequirePackage{setspace}}{}
+
\RequirePackage[colorlinks]{hyperref}
\colorlet{scolor}{black}
\colorlet{hscolor}{DarkSlateGrey}
@@ -112,17 +114,26 @@
\thispagestyle{first}
\ifbool{longmktitle}
{
- \LongMaketitleBox
+ \ifnum\theblind>0\relax
+ \LongMaketitleBox[Blind]
+ \else
+ \LongMaketitleBox
+ \fi
\ProcessLongTitleBox
}
{
- \twocolumn[\MaketitleBox]
+ \ifnum\theblind>0\relax
+ \twocolumn[{\MaketitleBox[blind]}]
+ \else
+ \twocolumn[\MaketitleBox]
+ \fi
\printFirstPageNotes
}
\setcounter{footnote}{\int_use:N \g_stm_fnote_int}
\renewcommand\thefootnote{\arabic{footnote}}
\gdef\@pdfauthor{\infoauthors}
\gdef\@pdfsubject{Complex ~STM ~Content}
+ \ifbool{casreviewlayout}{\doublespacing}{}
}
%
@@ -170,6 +181,7 @@
\endinput
%
-% End of class 'cas-sc'
+% End of class 'cas-dc'
%
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-model2-names.bst b/macros/latex/contrib/els-cas-templates/cas-model2-names.bst
index 503b2b7a34..726b5f6acf 100644
--- a/macros/latex/contrib/els-cas-templates/cas-model2-names.bst
+++ b/macros/latex/contrib/els-cas-templates/cas-model2-names.bst
@@ -1,16 +1,16 @@
%%
-%% This is file `cas-model2-names.bst' (Version 2.3),
+%% This is file `cas-model2-names.bst' (Version 2.4),
%%
-%% Copyright 2009-2021 Elsevier Ltd
+%% Copyright 2009-2024 Elsevier Ltd
%%
%% This file is part of the 'Elsarticle Bundle'.
%% ---------------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% 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.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% $Id: cas-model2-names.bst$
diff --git a/macros/latex/contrib/els-cas-templates/cas-refs.bib b/macros/latex/contrib/els-cas-templates/cas-refs.bib
index ba1cb22d73..867e4283f7 100644
--- a/macros/latex/contrib/els-cas-templates/cas-refs.bib
+++ b/macros/latex/contrib/els-cas-templates/cas-refs.bib
@@ -205,7 +205,7 @@
}
@ARTICLE{Havensetal2013,
- author = {Havens, T. C. and Bezdek, J. C. and Leckie, C., Ramamohanarao, K. and Palaniswami, M.},
+ author = {Havens, T. C. and Bezdek, J. C. and Leckie, C. and Ramamohanarao, K. and Palaniswami, M.},
title = {A Soft Modularity Function For Detecting Fuzzy Communities in Social Networks},
journal = {IEEE Trans. Fuzzy Syst.},
volume = {21},
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-sample.pdf b/macros/latex/contrib/els-cas-templates/cas-sc-sample.pdf
new file mode 100644
index 0000000000..2e9931d2b0
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-sc-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-sample.tex b/macros/latex/contrib/els-cas-templates/cas-sc-sample.tex
new file mode 100644
index 0000000000..8f7a3343c7
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/cas-sc-sample.tex
@@ -0,0 +1,457 @@
+%%
+%% Copyright 2019-2024 Elsevier Ltd
+%%
+%% Version 2.4
+%%
+%% This file is part of the 'CAS Bundle'.
+%% --------------------------------------
+%%
+%% It may be distributed under the conditions of the LaTeX Project Public
+%% License, either version 1.2 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.2 or later is part of all distributions of LaTeX
+%% version 1999/12/01 or later.
+%%
+%% The list of all files belonging to the 'CAS Bundle' is
+%% given in the file `manifest.txt'.
+%%
+%% Template article for cas-sc documentclass for
+%% single column output.
+
+%\documentclass[a4paper,fleqn,longmktitle]{cas-sc}
+\documentclass[a4paper,fleqn]{cas-sc}
+
+%\usepackage[numbers]{natbib}
+%\usepackage[authoryear]{natbib}
+\usepackage[authoryear,longnamesfirst]{natbib}
+
+%%%Author macros
+\def\tsc#1{\csdef{#1}{\textsc{\lowercase{#1}}\xspace}}
+\tsc{WGM}
+\tsc{QE}
+\tsc{EP}
+\tsc{PMS}
+\tsc{BEC}
+\tsc{DE}
+%%%
+
+\begin{document}
+\let\WriteBookmarks\relax
+\def\floatpagepagefraction{1}
+\def\textpagefraction{.001}
+\shorttitle{Leveraging social media news}
+\shortauthors{J.K. Krishnan et~al.}
+%\begin{frontmatter}
+
+\title [mode = title]{This is a specimen $a_b$ title}
+\tnotemark[1,2]
+
+\tnotetext[1]{This document is the results of the research
+ project funded by the National Science Foundation.}
+
+\tnotetext[2]{The second title footnote which is a longer text matter
+ to fill through the whole text width and overflow into
+ another line in the footnotes area of the first page.}
+
+
+\author[1,3]{J.K. Krishnan}[type=editor,
+ auid=000,bioid=1,
+ prefix=Sir,
+ role=Researcher,
+ orcid=0000-0001-0000-0000]
+\cormark[1]
+\fnmark[1]
+\ead{jkk@example.in}
+\ead[url]{www.jkkrishnan.in}
+
+\credit{Conceptualization of this study, Methodology, Software}
+
+\affiliation[1]{organization={Department of Physics, J.K. Institute of Science},
+ addressline={Jawahar Nagar},
+ city={Trivandrum},
+% citysep={}, % Uncomment if no comma needed between city and postcode
+ postcode={695013},
+ state={Kerala},
+ country={India}}
+
+\author[2,4]{Han Thane}[style=chinese]
+
+\author[2,3]{William {J. Hansen}}[%
+ role=Co-ordinator,
+ suffix=Jr,
+ ]
+\fnmark[2]
+\ead{wjh@example.org}
+\ead[URL]{https://www.university.org}
+
+\credit{Data curation, Writing - Original draft preparation}
+
+\affiliation[2]{organization={World Scientific University},
+ addressline={Street 29},
+ postcode={1011 NX},
+ postcodesep={},
+ city={Amsterdam},
+ country={The Netherlands}}
+
+\author[1,3]{T. Rafeeq}
+\cormark[2]
+\fnmark[1,3]
+\ead{t.rafeeq@example.in}
+\ead[URL]{www.campus.in}
+
+\affiliation[3]{organization={University of Intelligent Studies},
+ addressline={Street 15},
+ city={Jabaldesh},
+ postcode={825001},
+ state={Orissa},
+ country={India}}
+
+\cortext[cor1]{Corresponding author}
+\cortext[cor2]{Principal corresponding author}
+\fntext[fn1]{This is the first author footnote, but is common to third
+ author as well.}
+\fntext[fn2]{Another author footnote, this is a very long footnote and
+ it should be a really long footnote. But this footnote is not yet
+ sufficiently long enough to make two lines of footnote text.}
+
+\nonumnote{This note has no numbers. In this work we demonstrate $a_b$
+ the formation Y\_1 of a new type of polariton on the interface
+ between a cuprous oxide slab and a polystyrene micro-sphere placed
+ on the slab.
+ }
+
+\begin{abstract}
+This template helps you to create a properly formatted \LaTeX\ manuscript.
+
+\noindent\texttt{\textbackslash begin{abstract}} \dots
+\texttt{\textbackslash end{abstract}} and
+\verb+\begin{keyword}+ \verb+...+ \verb+\end{keyword}+
+which
+contain the abstract and keywords respectively.
+Each keyword shall be separated by a \verb+\sep+ command.
+\end{abstract}
+
+\begin{graphicalabstract}
+\includegraphics{figs/cas-grabs.pdf}
+\end{graphicalabstract}
+
+\begin{highlights}
+\item Research highlights item 1
+\item Research highlights item 2
+\item Research highlights item 3
+\end{highlights}
+
+\begin{keywords}
+quadrupole exciton \sep polariton \sep \WGM \sep \BEC
+\end{keywords}
+
+
+\maketitle
+
+
+\section{Introduction}
+
+The Elsevier cas-sc class is based on the
+standard article class and supports almost all of the functionality of
+that class. In addition, it features commands and options to format the
+\begin{itemize} \item document style \item baselineskip \item front
+matter \item keywords and MSC codes \item theorems, definitions and
+proofs \item lables of enumerations \item citation style and labeling.
+\end{itemize}
+
+This class depends on the following packages
+for its proper functioning:
+
+\begin{enumerate}
+\itemsep=0pt
+\item {natbib.sty} for citation processing;
+\item {geometry.sty} for margin settings;
+\item {fleqn.clo} for left aligned equations;
+\item {graphicx.sty} for graphics inclusion;
+\item {hyperref.sty} optional packages if hyperlinking is
+ required in the document;
+\end{enumerate}
+
+All the above packages are part of any
+standard \LaTeX{} installation.
+Therefore, the users need not be
+bothered about downloading any extra packages.
+
+\section{Installation}
+
+The package is available at author resources page at Elsevier
+(\url{http://www.elsevier.com/locate/latex}).
+The class may be moved or copied to a place, usually,
+\verb+$TEXMF/tex/latex/elsevier/+, %$%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+or a folder which will be read
+by \LaTeX{} during document compilation. The \TeX{} file
+database needs updation after moving/copying class file. Usually,
+we use commands like \verb+mktexlsr+ or \verb+texhash+ depending
+upon the distribution and operating system.
+
+\section{Front matter}
+
+The author names and affiliations could be formatted in two ways:
+\begin{enumerate}[(1)]
+\item Group the authors per affiliation.
+\item Use footnotes to indicate the affiliations.
+\end{enumerate}
+See the front matter of this document for examples.
+You are recommended to conform your choice to the journal you
+are submitting to.
+
+\section{Bibliography styles}
+
+There are various bibliography styles available. You can select the
+style of your choice in the preamble of this document. These styles are
+Elsevier styles based on standard styles like Harvard and Vancouver.
+Please use Bib\TeX\ to generate your bibliography and include DOIs
+whenever available.
+
+Here are two sample references:
+See \citet{Fortunato2010}. Also refer \citet{Fortunato2010,NewmanGirvan2004}.
+More citations are here \citep{Fortunato2010,Vehlowetal2013}.
+
+\section{Floats}
+{Figures} may be included using the command, \verb+\includegraphics+ in
+combination with or without its several options to further control
+graphic. \verb+\includegraphics+ is provided by {graphic[s,x].sty}
+which is part of any standard \LaTeX{} distribution.
+{graphicx.sty} is loaded by default. \LaTeX{} accepts figures in
+the postscript format while pdf\LaTeX{} accepts {*.pdf},
+{*.mps} (metapost), {*.jpg} and {*.png} formats.
+pdf\LaTeX{} does not accept graphic files in the postscript format.
+
+\begin{figure}
+ \centering
+ \includegraphics[width=.9\textwidth]{figs/cas-munnar-2024.jpg}
+ \caption{The beauty of Munnar, Kerala. (See also Table \protect\ref{tbl1}).}
+ \label{FIG:1}
+\end{figure}
+
+
+The \verb+table+ environment is handy for marking up tabular
+material. If users want to use {multirow.sty},
+{array.sty}, etc., to fine control/enhance the tables, they
+are welcome to load any package of their choice and
+{cas-sc.cls} will work in combination with all loaded
+packages.
+
+\begin{table}[width=.9\linewidth,cols=4,pos=h]
+\caption{This is a test caption. This is a test caption. This is a test
+caption. This is a test caption.}\label{tbl1}
+\begin{tabular*}{\tblwidth}{@{} LLLL@{} }
+\toprule
+Col 1 & Col 2 & Col 3 & Col4\\
+\midrule
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+12345 & 12345 & 123 & 12345 \\
+\bottomrule
+\end{tabular*}
+\end{table}
+
+\section[Theorem and ...]{Theorem and theorem like environments}
+
+{cas-sc.cls} provides a few shortcuts to format theorems and
+theorem-like environments with ease. In all commands the options that
+are used with the \verb+\newtheorem+ command will work exactly in the same
+manner. {cas-sc.cls} provides three commands to format theorem or
+theorem-like environments:
+
+\begin{verbatim}
+ \newtheorem{theorem}{Theorem}
+ \newtheorem{lemma}[theorem]{Lemma}
+ \newdefinition{rmk}{Remark}
+ \newproof{pf}{Proof}
+ \newproof{pot}{Proof of Theorem \ref{thm2}}
+\end{verbatim}
+
+
+The \verb+\newtheorem+ command formats a
+theorem in \LaTeX's default style with italicized font, bold font
+for theorem heading and theorem number at the right hand side of the
+theorem heading. It also optionally accepts an argument which
+will be printed as an extra heading in parentheses.
+
+\begin{verbatim}
+ \begin{theorem}
+ For system (8), consensus can be achieved with
+ $\|T_{\omega z}$ ...
+ \begin{eqnarray}\label{10}
+ ....
+ \end{eqnarray}
+ \end{theorem}
+\end{verbatim}
+
+\newtheorem{theorem}{Theorem}
+
+\begin{theorem}
+For system (8), consensus can be achieved with
+$\|T_{\omega z}$ ...
+\begin{eqnarray}\label{10}
+....
+\end{eqnarray}
+\end{theorem}
+
+The \verb+\newdefinition+ command is the same in
+all respects as its \verb+\newtheorem+ counterpart except that
+the font shape is roman instead of italic. Both
+\verb+\newdefinition+ and \verb+\newtheorem+ commands
+automatically define counters for the environments defined.
+
+The \verb+\newproof+ command defines proof environments with
+upright font shape. No counters are defined.
+
+
+\section[Enumerated ...]{Enumerated and Itemized Lists}
+{cas-sc.cls} provides an extended list processing macros
+which makes the usage a bit more user friendly than the default
+\LaTeX{} list macros. With an optional argument to the
+\verb+\begin{enumerate}+ command, you can change the list counter
+type and its attributes.
+
+\begin{verbatim}
+ \begin{enumerate}[1.]
+ \item The enumerate environment starts with an optional
+ argument `1.', so that the item counter will be suffixed
+ by a period.
+ \item You can use `a)' for alphabetical counter and '(i)' for
+ roman counter.
+ \begin{enumerate}[a)]
+ \item Another level of list with alphabetical counter.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+ \item One more item before we start another.
+\end{verbatim}
+
+Further, the enhanced list environment allows one to prefix a
+string like `step' to all the item numbers.
+
+%\pagebreak
+\begin{verbatim}
+ \begin{enumerate}[Step 1.]
+ \item This is the first step of the example list.
+ \item Obviously this is the second step.
+ \item The final step to wind up this example.
+ \end{enumerate}
+\end{verbatim}
+
+\section{Cross-references}
+In electronic publications, articles may be internally
+hyperlinked. Hyperlinks are generated from proper
+cross-references in the article. For example, the words
+\textcolor{black!80}{Fig.~1} will never be more than simple text,
+whereas the proper cross-reference \verb+\ref{tiger}+ may be
+turned into a hyperlink to the figure itself:
+\textcolor{blue}{Fig.~1}. In the same way,
+the words \textcolor{blue}{Ref.~[1]} will fail to turn into a
+hyperlink; the proper cross-reference is \verb+\cite{Knuth96}+.
+Cross-referencing is possible in \LaTeX{} for sections,
+subsections, formulae, figures, tables, and literature
+references.
+
+\section{Bibliography}
+
+Two bibliographic style files (\verb+*.bst+) are provided ---
+{model1-num-names.bst} and {model2-names.bst} --- the first one can be
+used for the numbered scheme. This can also be used for the numbered
+with new options of {natbib.sty}. The second one is for the author year
+scheme. When you use model2-names.bst, the citation commands will be
+like \verb+\citep+, \verb+\citet+, \verb+\citealt+ etc. However when
+you use model1-num-names.bst, you may use only \verb+\cite+ command.
+
+\verb+thebibliography+ environment. Each reference is a
+\verb+\bibitem+ and each \verb+\bibitem+ is identified by a label,
+by which it can be cited in the text:
+
+\noindent In connection with cross-referencing and
+possible future hyperlinking it is not a good idea to collect
+more that one literature item in one \verb+\bibitem+. The
+so-called Harvard or author-year style of referencing is enabled
+by the \LaTeX{} package {natbib}. With this package the
+literature can be cited as follows:
+
+
+\begin{enumerate}[\textbullet]
+\item Parenthetical: \verb+\citep{WB96}+ produces (Wettig \& Brown, 1996).
+\item Textual: \verb+\citet{ESG96}+ produces Elson et al. (1996).
+\item An affix and part of a reference:
+\verb+\citep[e.g.][Ch. 2]{Gea97}+ produces (e.g. Governato et
+al., 1997, Ch. 2).
+\end{enumerate}
+
+In the numbered scheme of citation, \verb+\cite{<label>}+ is used,
+since \verb+\citep+ or \verb+\citet+ has no relevance in the numbered
+scheme. {natbib} package is loaded by {cas-sc} with
+\verb+numbers+ as default option. You can change this to author-year
+or harvard scheme by adding option \verb+authoryear+ in the class
+loading command. If you want to use more options of the {natbib}
+package, you can do so with the \verb+\biboptions+ command. For
+details of various options of the {natbib} package, please take a
+look at the {natbib} documentation, which is part of any standard
+\LaTeX{} installation.
+
+\appendix
+\section{My Appendix}
+Appendix sections are coded under \verb+\appendix+.
+
+\verb+\printcredits+ command is used after appendix sections to list
+author credit taxonomy contribution roles tagged using \verb+\credit+
+in frontmatter.
+
+\printcredits
+
+%% Loading bibliography style file
+%\bibliographystyle{model1-num-names}
+\bibliographystyle{cas-model2-names}
+
+% Loading bibliography database
+\bibliography{cas-refs}
+
+
+%\vskip3pt
+
+\bio{}
+Author biography without author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+\vskip3pc
+
+\bio{figs/cas-pic1}
+Author biography with author photo.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+Author biography. Author biography. Author biography.
+\endbio
+
+
+\end{document}
+
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc-template.tex b/macros/latex/contrib/els-cas-templates/cas-sc-template.tex
index 909bcdd024..c2cd7e58de 100644
--- a/macros/latex/contrib/els-cas-templates/cas-sc-template.tex
+++ b/macros/latex/contrib/els-cas-templates/cas-sc-template.tex
@@ -1,21 +1,21 @@
%%
-%% Copyright 2019-2021 Elsevier Ltd
+%% Copyright 2019-2024 Elsevier Ltd
%%
%% This file is part of the 'CAS Bundle'.
%% --------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% 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.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'CAS Bundle' is
%% given in the file `manifest.txt'.
%%
%% Template article for cas-sc documentclass for
-%% single column output.
+%% double column output.
\documentclass[a4paper,fleqn]{cas-sc}
@@ -47,21 +47,21 @@
\def\textpagefraction{.001}
% Short title
-\shorttitle{<short title of the paper for running head>}
+\shorttitle{}
% Short author
-\shortauthors{<short author list for running head>}
+\shortauthors{}
% Main title of the paper
-\title [mode = title]{<main title>}
+\title [mode = title]{}
% Title footnote mark
% eg: \tnotemark[1]
-\tnotemark[<tnote number>]
+\tnotemark[1]
% Title footnote 1.
% eg: \tnotetext[1]{Title footnote text}
-\tnotetext[<tnote number>]{<tnote text>}
+\tnotetext[1]{}
% First author
%
@@ -77,26 +77,26 @@
% linkedin=<linkedin id>,
% gplus=<gplus id>]
-\author[<aff no>]{<author name>}[<options>]
+\author[1]{}%[<options>]
% Corresponding author indication
-\cormark[<corr mark no>]
+\cormark[1]
% Footnote of the first author
-\fnmark[<footnote mark no>]
+\fnmark[1]
% Email id of the first author
-\ead{<email address>}
+\ead{}
% URL of the first author
-\ead[url]{<URL>}
+\ead[url]{}
% Credit authorship
% eg: \credit{Conceptualization of this study, Methodology, Software}
-\credit{<Credit authorship details>}
+\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[1]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -104,7 +104,7 @@
state={},
country={}}
-\author[<aff no>]{<author name>}[<options>]
+\author[2]{}%[]
% Footnote of the second author
\fnmark[2]
@@ -119,7 +119,7 @@
\credit{}
% Address/affiliation
-\affiliation[<aff no>]{organization={},
+\affiliation[2]{organization={},
addressline={},
city={},
% citysep={}, % Uncomment if no comma needed between city and postcode
@@ -138,7 +138,7 @@
% Here goes the abstract
\begin{abstract}
-
+Here goes the abstract \nocite{*}%% Remove this line from your manuscript.
\end{abstract}
% Use if graphical abstract is present
@@ -153,6 +153,7 @@
\item
\end{highlights}
+
% Keywords
% Each keyword is seperated by \sep
\begin{keywords}
@@ -187,15 +188,18 @@
%\item[]
%\end{description}
+\clearpage %%Remove this from your manuscript
+
+
% Figure
-\begin{figure}[<options>]
- \centering
- \includegraphics[<options>]{}
- \caption{}\label{fig1}
+\begin{figure}%[]
+ \centering
+% \includegraphics{}
+ \caption{}\label{fig1}
\end{figure}
-\begin{table}[<options>]
+\begin{table}%[]
\caption{}\label{tbl1}
\begin{tabular*}{\tblwidth}{@{}LL@{}}
\toprule
@@ -231,16 +235,16 @@
\bibliographystyle{cas-model2-names}
% Loading bibliography database
-\bibliography{}
+\bibliography{cas-refs}
% Biography
-\bio{}
+%\bio{}
% Here goes the biography details.
-\endbio
+%\endbio
-\bio{pic1}
+%\bio{pic1}
% Here goes the biography details.
-\endbio
+%\endbio
\end{document}
diff --git a/macros/latex/contrib/els-cas-templates/cas-sc.cls b/macros/latex/contrib/els-cas-templates/cas-sc.cls
index d84d03c2f2..51f829742e 100644
--- a/macros/latex/contrib/els-cas-templates/cas-sc.cls
+++ b/macros/latex/contrib/els-cas-templates/cas-sc.cls
@@ -15,11 +15,11 @@
%% given in the file `manifest.txt'.
%%
-%% $Id: cas-sc.cls 66 2021-05-11 14:17:42Z rishi $
+%% $Id: cas-sc.cls 96 2024-05-04 09:29:44Z rishi $
\def\RCSfile{cas-sc}%
- \def\RCSversion{2.3}%
- \def\RCSdate{2021/05/11}%
+ \def\RCSversion{2.4}%
+ \def\RCSdate{2024/05/04}%
\NeedsTeXFormat{LaTeX2e}[1995/12/01]
\ProvidesClass{\RCSfile}[\RCSdate, \RCSversion: Formatting class
for CAS single column articles]
@@ -64,6 +64,8 @@
\RequirePackage{xspace,xstring,footmisc}
\RequirePackage[svgnames,dvipsnames]{xcolor}
+\ifbool{casreviewlayout}{\RequirePackage{setspace}}{}
+
\RequirePackage[colorlinks]{hyperref}
\colorlet{scolor}{black}
\colorlet{hscolor}{DarkSlateGrey}
@@ -161,8 +163,6 @@
{ \RequirePackage[scaled=.85]{inconsolata} }
{ \tex_gdef:D \ttdefault { cmtt } }
-\ifbool{casreviewlayout}{\RequirePackage{setspace}}{}
-
\ExplSyntaxOff
%
@@ -186,3 +186,4 @@
% End of class 'cas-sc'
%
+
diff --git a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
index 606232b3e3..b5ac0efabc 100644
--- a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
+++ b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
index 6b5b7186eb..2128780862 100644
--- a/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
+++ b/macros/latex/contrib/els-cas-templates/doc/elsdoc-cas.tex
@@ -5,16 +5,16 @@
%% ---------------------------------------------
%%
%% It may be distributed under the conditions of the LaTeX Project Public
-%% License, either version 1.2 of this license or (at your option) any
+%% 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.2 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
%% version 1999/12/01 or later.
%%
%% The list of all files belonging to the 'CAS Bundle' is
%% given in the file `manifest.txt'.
%%
-%% $Id: elsdoc-cas.tex 71 2021-05-12 06:14:05Z rishi $
+%% $Id: elsdoc-cas.tex 76 2021-05-12 14:42:29Z rishi $
%%
\documentclass[a4paper,12pt]{article}
diff --git a/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty b/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
index 06bb30edf6..0d94ff20a4 100644
--- a/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
+++ b/macros/latex/contrib/els-cas-templates/doc/rvdtx.sty
@@ -7,13 +7,13 @@
% Copyright (c) 2008-2021 CV Radhakrishnan <cvr@stmdocs.in>,
%
% This file may be distributed and/or modified under the conditions
-% of the LaTeX Project Public License, either version 1.2 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.2 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
%
diff --git a/macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdf b/macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdf
new file mode 100644
index 0000000000..a1ff5be7a5
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/figs/cas-grabs.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpg b/macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpg
new file mode 100644
index 0000000000..14b57f7be0
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/figs/cas-munnar-2024.jpg
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdf b/macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdf
new file mode 100644
index 0000000000..97471d0bdd
--- /dev/null
+++ b/macros/latex/contrib/els-cas-templates/figs/cas-pic1.pdf
Binary files differ
diff --git a/macros/latex/contrib/els-cas-templates/manifest.txt b/macros/latex/contrib/els-cas-templates/manifest.txt
index 2ab9dfa0f1..a7443de7b8 100644
--- a/macros/latex/contrib/els-cas-templates/manifest.txt
+++ b/macros/latex/contrib/els-cas-templates/manifest.txt
@@ -1,14 +1,16 @@
-% Copyright 2019-2021 Elsevier Ltd
+% Copyright 2019-2024 Elsevier Ltd
+%
+% Version 2.4
%
% This file is part of the 'CAS Bundle'.
% --------------------------------------
%
% It may be distributed and/or modified under the
-% conditions of the LaTeX Project Public License, either version 1.2
+% 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.2 or later is part of all distributions of LaTeX
+% and version 1.3c or later is part of all distributions of LaTeX
% version 1999/12/01 or later.
%
% The list of all files belonging to the LaTeX 'CAS Bundle' is
@@ -19,6 +21,12 @@
Directory elsevier-cas-template/
+manifest.txt
+ This file
+
+README
+ A brief readme documentation
+
cas-sc.cls
Classfile to be used for single column format
@@ -29,21 +37,21 @@ cas-model2-names.bst
BibTeX style file
cas-sc-template.tex
- TeX template
+ TeX template to be used for manuscript preparation (single column).
cas-dc-template.tex
- TeX template
+ TeX template to be used for manuscript preparation (double column).
-manifest.txt
- this file
+cas-sc-sample.tex
+ Minimum working exmple (MWE) file - single column.
-README
- small readme documentation
+cas-dc-sample.tex
+ Minimum working exmple (MWE) file - double column.
Directory doc/
The following files are graphic files needed for creating pdf output
-of the documentation from elsdoc.tex:
+of the documentation from elsdoc-cas.tex:
dc-sample.pdf
sc-sample.pdf
@@ -76,3 +84,11 @@ Auxiliary packages needed to generate pdf output from elsdoc.tex:
pdfwidgets.sty
glyphtounicode.tex
+
+Directory figs/
+
+Contains images used in the sample PDF.
+
+ cas-grabs.pdf
+ cas-munnar-2024.jpg
+ cas-pic1.pdf
diff --git a/macros/latex/contrib/elteiktdk/LICENSE b/macros/latex/contrib/elteiktdk/LICENSE
index bc752874d2..57a02bc510 100644
--- a/macros/latex/contrib/elteiktdk/LICENSE
+++ b/macros/latex/contrib/elteiktdk/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2013-2023 Máté Cserép
+Copyright (c) 2013-2024 Máté Cserép
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/elteiktdk/README.md b/macros/latex/contrib/elteiktdk/README.md
index fc5c76f0a1..bb64bd061e 100644
--- a/macros/latex/contrib/elteiktdk/README.md
+++ b/macros/latex/contrib/elteiktdk/README.md
@@ -1,3 +1,9 @@
+![CI status](https://github.com/mcserep/elteiktdk/workflows/Build%20LaTeX%20document/badge.svg)
+[![Overleaf template](https://img.shields.io/badge/Overleaf-TDK%20Thesis%20Template%20(ELTE%20FI)-brightgreen)](https://www.overleaf.com/latex/templates/tdk-thesis-template-elte-fi/mxnndxkmdmkd)
+
+
+See [Hungarian version](README_hu.md).
+
# ELTE FI TDK thesis template
The [elteiktdk_en.tex](elteiktdk_en.tex) and the produced [elteiktdk_en.pdf](elteiktdk_en.pdf) serves as an example of usage.
@@ -14,17 +20,14 @@ The template supports producing both Hungarian and English theses, which can be
# (PDF file contains incorrect references yet)
pdflatex elteiktdk_en.tex
# Generate bibliography
-bibtex elteiktdk
+biber elteiktdk_en
# Generate nomenclature (optional)
makeindex -s nomencl.ist -t elteiktdk_en.nlg \
-o elteiktdk_en.nls elteiktdk_en.nlo
# Generate final PDF file
pdflatex elteiktdk_en.tex
-pdflatex elteiktdk_en.tex
```
-**Note:** in case the bibliography changes, executing `bibtex`, then `pdflatex` _twice_ is required to generate to correct references in the PDF output.
-
Compilation might be carried out through a preferred IDE (e.g. [TexStudio](https://www.texstudio.org/)), given the same commands should be executed.
## Syntax highlighting of code blocks
@@ -32,6 +35,11 @@ Compilation might be carried out through a preferred IDE (e.g. [TexStudio](https
The minted package is also supported for syntax highlighting, for details see the [documentation](https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted).
For its usage the Python interpreter and the `Pygments` package must be installed as a prerequisite, then you should uncomment its loading at the beginning of `elteiktdk_en.tex`.
+## Overleaf
+
+*Overleaf* is a free, easy to use online, collaborative LaTeX editor; similar like e.g. Google Docs, but for LateX documents.
+You can also find the latest release of this thesis template [on Overleaf](https://www.overleaf.com/latex/templates/tdk-thesis-template-elte-fi/mxnndxkmdmkd).
+
## Required packages (without completeness)
**Image handling:**
diff --git a/macros/latex/contrib/elteiktdk/README.pdf b/macros/latex/contrib/elteiktdk/README.pdf
index 2eed2928ac..68821eacfe 100644
--- a/macros/latex/contrib/elteiktdk/README.pdf
+++ b/macros/latex/contrib/elteiktdk/README.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteiktdk/README_hu.md b/macros/latex/contrib/elteiktdk/README_hu.md
index 93c807602d..b3637d76aa 100644
--- a/macros/latex/contrib/elteiktdk/README_hu.md
+++ b/macros/latex/contrib/elteiktdk/README_hu.md
@@ -14,17 +14,14 @@ A sablon magyar és angol nyelvű dokumentumok elkészítését is támogatja (l
# (PDF fájl még hibás hivatkozásokat fog tartalmazni)
pdflatex elteiktdk_hu.tex
# Irodalomjegyzék generálása
-bibtex tdk
+biber elteiktdk_hu
# Jelölésjegyzék generálása (ha szükséges)
makeindex -s nomencl.ist -t elteiktdk_hu.nlg \
-o elteiktdk_hu.nls elteiktdk_hu.nlo
# Végleges PDF fájl generálása
pdflatex elteiktdk_hu.tex
-pdflatex elteiktdk_hu.tex
```
-**Megjegyzés:** az irodalomjegyzék változása esetén a `bibtex`, majd a `pdflatex` _kétszeri_ futtatása szükséges a helyes hivatkozások előállításához.
-
A fordításhoz tetszőleges fejlesztő környezet is használható (pl. [TexStudio](https://www.texstudio.org/)), ugyanezen utasítások kiadásával.
## Kódblokkok szintaxis kiemelése
@@ -32,6 +29,11 @@ A fordításhoz tetszőleges fejlesztő környezet is használható (pl. [TexStu
A *minted* csomag támogatott a forráskódok szedésére és szintaxis kiemelésére, részletekért ld. a [dokumentációt](https://www.overleaf.com/learn/latex/Code_Highlighting_with_minted).
Használatához szükséges a Python interpreter és a `Pygments` csomag telepítése, majd `elteiktdk_hu.tex` fájl elején a betöltésének az engedélyezése.
+## Overleaf
+
+Az *Overleaf* egy ingyenes, könnyen használható, kollaboratív, online LaTeX szerkesztő. Hasonló, mint például a Google Docs, de LateX dokumentumokhoz.
+Az ELTE IK TDK-dolgozat sablon legfrissebb kiadását [Overleafen is megtalálod](https://www.overleaf.com/latex/templates/tdk-thesis-template-elte-fi/mxnndxkmdmkd).
+
## Fontosabb függőségi csomagok
**Képkezelés:**
diff --git a/macros/latex/contrib/elteiktdk/README_hu.pdf b/macros/latex/contrib/elteiktdk/README_hu.pdf
index 9545a2b10e..86d0f55b84 100644
--- a/macros/latex/contrib/elteiktdk/README_hu.pdf
+++ b/macros/latex/contrib/elteiktdk/README_hu.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteiktdk/elteiktdk.bib b/macros/latex/contrib/elteiktdk/elteiktdk.bib
index 1e0ae403e3..4f5518ca4f 100644
--- a/macros/latex/contrib/elteiktdk/elteiktdk.bib
+++ b/macros/latex/contrib/elteiktdk/elteiktdk.bib
@@ -12,7 +12,7 @@
author = {Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford},
title = {Introduction to Algorithms, Third Edition},
year = {2009},
- isbn = {0262033844, 9780262033848},
+ isbn = {978-0-262-53305-8},
edition = {3rd},
publisher = {The MIT Press},
}
diff --git a/macros/latex/contrib/elteiktdk/elteiktdk.cls b/macros/latex/contrib/elteiktdk/elteiktdk.cls
index 4e3ef4741f..4bd604bab0 100644
--- a/macros/latex/contrib/elteiktdk/elteiktdk.cls
+++ b/macros/latex/contrib/elteiktdk/elteiktdk.cls
@@ -1,7 +1,7 @@
%% MIT License
%%
-%% Version 2.0, 2023/04/10
-%% Copyright (c) 2013-2023 Máté Cserép <mcserep@inf.elte.hu>
+%% Version 2.1, 2024/04/26
+%% Copyright (c) 2013-2024 Máté Cserép <mcserep@inf.elte.hu>
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy
%% of this software and associated documentation files (the "Software"), to deal
@@ -22,10 +22,10 @@
%% SOFTWARE.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{elteiktdk}[2023/04/10 ELTE FI TDK thesis template]
+\ProvidesClass{elteiktdk}[2024/04/26 ELTE FI TDK thesis template]
% Load document class
-\LoadClassWithOptions{elteikthesis}[2023/04/10]
+\LoadClassWithOptions{elteikthesis}[2024/04/26]
% ------------------------------
% ------------------------------
@@ -72,7 +72,7 @@
\newcommand{\lstcodelabel}{Forráskódjegyzék}
\newcommand{\lstnomencl}{Jelölésjegyzék}
\newcommand{\todolabel}{Teendők listája}
- \newcommand{\acklabel}{Köszönyetnyilvánítás}
+ \newcommand{\acklabel}{Köszönetnyilvánítás}
}
{ % English
\newcommand{\covertitle}{TDK-thesis}
diff --git a/macros/latex/contrib/elteiktdk/elteiktdk_en.pdf b/macros/latex/contrib/elteiktdk/elteiktdk_en.pdf
index 555c128d00..276a5139ec 100644
--- a/macros/latex/contrib/elteiktdk/elteiktdk_en.pdf
+++ b/macros/latex/contrib/elteiktdk/elteiktdk_en.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteiktdk/elteiktdk_en.tex b/macros/latex/contrib/elteiktdk/elteiktdk_en.tex
index 1b83d16753..9cb07d9ca3 100644
--- a/macros/latex/contrib/elteiktdk/elteiktdk_en.tex
+++ b/macros/latex/contrib/elteiktdk/elteiktdk_en.tex
@@ -5,15 +5,14 @@
%twoside, % Double sided format
%draft, % Quicker draft compilation without rendering images
%final, % Set final to hide todos
-]{elteiktdk}[2023/04/10]
+]{elteiktdk}[2024/04/26]
% The minted package is also supported for source highlighting
-% See minted-intregration.tex for example
%\usepackage[newfloat]{minted}
% Document's metadata
\title{TDK-dolgozat címe}
-\date{2023}
+\date{2024}
% Author(s)' metadata
\author{John Smith}
diff --git a/macros/latex/contrib/elteiktdk/elteiktdk_hu.pdf b/macros/latex/contrib/elteiktdk/elteiktdk_hu.pdf
index 216b52b3ba..c9924b2e64 100644
--- a/macros/latex/contrib/elteiktdk/elteiktdk_hu.pdf
+++ b/macros/latex/contrib/elteiktdk/elteiktdk_hu.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteiktdk/elteiktdk_hu.tex b/macros/latex/contrib/elteiktdk/elteiktdk_hu.tex
index 58e0168c8d..c87c9b07e3 100644
--- a/macros/latex/contrib/elteiktdk/elteiktdk_hu.tex
+++ b/macros/latex/contrib/elteiktdk/elteiktdk_hu.tex
@@ -5,15 +5,14 @@
%twoside, % Double sided format
%draft, % Quicker draft compilation without rendering images
%final, % Set final to hide todos
-]{elteiktdk}[2023/04/10]
+]{elteiktdk}[2024/04/26]
% The minted package is also supported for source highlighting
-% See minted-intregration.tex for example
%\usepackage[newfloat]{minted}
% Document's metadata
\title{TDK-dolgozat címe}
-\date{2023}
+\date{2024}
% Author(s)' metadata
\author{Hallgató Hanga}
diff --git a/macros/latex/contrib/elteiktdk/images/elte_cimer_szines-eps-converted-to.pdf b/macros/latex/contrib/elteiktdk/images/elte_cimer_szines-eps-converted-to.pdf
new file mode 100644
index 0000000000..7a0a7a2d61
--- /dev/null
+++ b/macros/latex/contrib/elteiktdk/images/elte_cimer_szines-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteikthesis/LICENSE b/macros/latex/contrib/elteikthesis/LICENSE
index 94e8bc6f6a..b355e209d0 100644
--- a/macros/latex/contrib/elteikthesis/LICENSE
+++ b/macros/latex/contrib/elteikthesis/LICENSE
@@ -1,6 +1,6 @@
MIT License
-Copyright (c) 2013-2023 Máté Cserép <mcserep@inf.elte.hu>, Bálint Bognár
+Copyright (c) 2013-2024 Máté Cserép <mcserep@inf.elte.hu>, Bálint Bognár
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/elteikthesis/README.md b/macros/latex/contrib/elteikthesis/README.md
index f00a96dccd..a6cb6bc591 100644
--- a/macros/latex/contrib/elteikthesis/README.md
+++ b/macros/latex/contrib/elteikthesis/README.md
@@ -1,3 +1,8 @@
+[![CI status](https://github.com/mcserep/elteikthesis/actions/workflows/ci.yml/badge.svg)](https://github.com/mcserep/elteikthesis/actions/workflows/ci.yml)
+[![Overleaf template](https://img.shields.io/badge/Overleaf-ELTE%20FI%20Thesis%20Template-brightgreen)](https://www.overleaf.com/latex/templates/elte-fi-thesis-template/scjzzzbjvwfz)
+
+See [Hungarian version](README_hu.md).
+
# ELTE FI bachelor and master thesis template
The [elteikthesis_en.tex](elteikthesis_en.tex) and the produced [elteikthesis_en.pdf](elteikthesis_en.pdf) serves as an example of usage.
@@ -14,17 +19,14 @@ The template supports producing both Hungarian and English theses, which can be
# (PDF file contains incorrect references yet)
pdflatex elteikthesis_en.tex
# Generate bibliography
-bibtex elteikthesis_en
+biber elteikthesis_en
# Generate nomenclature (optional)
makeindex -s nomencl.ist -t elteikthesis_en.nlg \
-o elteikthesis_en.nls elteikthesis_en.nlo
# Generate final PDF file
pdflatex elteikthesis_en.tex
-pdflatex elteikthesis_en.tex
```
-**Note:** in case the bibliography changes, executing `bibtex`, then `pdflatex` _twice_ is required to generate to correct references in the PDF output.
-
Compilation might be carried out through a preferred IDE (e.g. [TexStudio](https://www.texstudio.org/)), given the same commands should be executed.
## Syntax highlighting of code blocks
diff --git a/macros/latex/contrib/elteikthesis/README.pdf b/macros/latex/contrib/elteikthesis/README.pdf
index 9578eacba5..8303259f35 100644
--- a/macros/latex/contrib/elteikthesis/README.pdf
+++ b/macros/latex/contrib/elteikthesis/README.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteikthesis/README_hu.md b/macros/latex/contrib/elteikthesis/README_hu.md
index 5a8fe1e666..bfa56e3b7b 100644
--- a/macros/latex/contrib/elteikthesis/README_hu.md
+++ b/macros/latex/contrib/elteikthesis/README_hu.md
@@ -14,17 +14,14 @@ A sablon magyar és angol nyelvű dokumentumok elkészítését is támogatja (l
# (PDF fájl még hibás hivatkozásokat fog tartalmazni)
pdflatex elteikthesis_hu.tex
# Irodalomjegyzék generálása
-bibtex elteikthesis_hu
+biber elteikthesis_hu
# Jelölésjegyzék generálása (ha szükséges)
makeindex -s nomencl.ist -t elteikthesis_hu.nlg \
-o elteikthesis_hu.nls elteikthesis_hu.nlo
# Végleges PDF fájl generálása
pdflatex elteikthesis_hu.tex
-pdflatex elteikthesis_hu.tex
```
-**Megjegyzés:** az irodalomjegyzék változása esetén a `bibtex`, majd a `pdflatex` _kétszeri_ futtatása szükséges a helyes hivatkozások előállításához.
-
A fordításhoz tetszőleges fejlesztő környezet is használható (pl. [TexStudio](https://www.texstudio.org/)), ugyanezen utasítások kiadásával.
## Kódblokkok szintaxis kiemelése
diff --git a/macros/latex/contrib/elteikthesis/README_hu.pdf b/macros/latex/contrib/elteikthesis/README_hu.pdf
index 33bdac7c47..36b1fae83f 100644
--- a/macros/latex/contrib/elteikthesis/README_hu.pdf
+++ b/macros/latex/contrib/elteikthesis/README_hu.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis.bib b/macros/latex/contrib/elteikthesis/elteikthesis.bib
index 1e0ae403e3..4f5518ca4f 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis.bib
+++ b/macros/latex/contrib/elteikthesis/elteikthesis.bib
@@ -12,7 +12,7 @@
author = {Cormen, Thomas H. and Leiserson, Charles E. and Rivest, Ronald L. and Stein, Clifford},
title = {Introduction to Algorithms, Third Edition},
year = {2009},
- isbn = {0262033844, 9780262033848},
+ isbn = {978-0-262-53305-8},
edition = {3rd},
publisher = {The MIT Press},
}
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis.cls b/macros/latex/contrib/elteikthesis/elteikthesis.cls
index dbd181f9a5..d735972439 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis.cls
+++ b/macros/latex/contrib/elteikthesis/elteikthesis.cls
@@ -1,7 +1,7 @@
%% MIT License
%%
-%% Version 2.3.1, 2023/04/10
-%% Copyright (c) 2013-2023 Máté Cserép <mcserep@inf.elte.hu>, Bálint Bognár
+%% Version 2.4, 2024/04/26
+%% Copyright (c) 2013-2024 Máté Cserép <mcserep@inf.elte.hu>, Bálint Bognár
%%
%% Permission is hereby granted, free of charge, to any person obtaining a copy
%% of this software and associated documentation files (the "Software"), to deal
@@ -29,7 +29,7 @@
%% to the original package.
\NeedsTeXFormat{LaTeX2e}
-\ProvidesClass{elteikthesis}[2023/04/10 ELTE FI bachelor and master thesis template]
+\ProvidesClass{elteikthesis}[2024/04/26 ELTE FI bachelor and master thesis template]
% LaTeX programming tools
\RequirePackage{etoolbox}
@@ -120,7 +120,7 @@
\newcommand{\lstcodelabel}{Forráskódjegyzék}
\newcommand{\lstnomencl}{Jelölésjegyzék}
\newcommand{\todolabel}{Teendők listája}
- \newcommand{\acklabel}{Köszönyetnyilvánítás}
+ \newcommand{\acklabel}{Köszönetnyilvánítás}
}
{ % English
\newcommand{\authorlabel}{Author}
@@ -394,7 +394,7 @@
% Bibliography
\RequirePackage[autostyle=true]{csquotes}
\RequirePackage[
- backend=bibtex,
+ backend=biber,
style=numeric, % style of bibliography
sorting=none % sorting of references
]{biblatex}
@@ -464,8 +464,8 @@
% ------------------------------
% List of TODOs
-% http://www.tex.ac.uk/tex-archive/help/Catalogue/entries/todonotes.html
-\RequirePackage[textwidth=30mm, textsize=small, color=todobackg, linecolor=orange, colorinlistoftodos, shadow, obeyFinal]{todonotes}
+% http://tug.ctan.org/macros/latex/contrib/todonotes/todonotes.pdf
+\RequirePackage[textwidth=30mm, textsize=small, color=todobackg, linecolor=orange, colorinlistoftodos, loadshadowlibrary, shadow, obeyFinal]{todonotes}
\RequirePackage[displaymath, tightpage]{preview}
% Place TODOs on the left margin
\reversemarginpar
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis_en.pdf b/macros/latex/contrib/elteikthesis/elteikthesis_en.pdf
index fee7fc0084..ec31001cea 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis_en.pdf
+++ b/macros/latex/contrib/elteikthesis/elteikthesis_en.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis_en.tex b/macros/latex/contrib/elteikthesis/elteikthesis_en.tex
index 8a405c74c3..e7af40ddfa 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis_en.tex
+++ b/macros/latex/contrib/elteikthesis/elteikthesis_en.tex
@@ -5,15 +5,15 @@
%twoside, % Double sided format
%draft, % Quicker draft compilation without rendering images
%final, % Set final to hide todos
-]{elteikthesis}[2023/04/10]
+]{elteikthesis}[2024/04/26]
% The minted package is also supported for source highlighting
-% See minted-intregration.tex for example
+% See elteikthesis_minted.tex for example
%\usepackage[newfloat]{minted}
% Document's metadata
\title{Title of the thesis} % title
-\date{2023} % year of defense
+\date{2024} % year of defense
% Author's metadata
\author{John Smith}
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis_hu.pdf b/macros/latex/contrib/elteikthesis/elteikthesis_hu.pdf
index 495413b49e..d4c3feb44d 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis_hu.pdf
+++ b/macros/latex/contrib/elteikthesis/elteikthesis_hu.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis_hu.tex b/macros/latex/contrib/elteikthesis/elteikthesis_hu.tex
index 9dd6d9a74c..11a730db2d 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis_hu.tex
+++ b/macros/latex/contrib/elteikthesis/elteikthesis_hu.tex
@@ -5,15 +5,15 @@
%twoside, % Double sided format
%draft, % Quicker draft compilation without rendering images
%final, % Set final to hide todos
-]{elteikthesis}[2023/04/10]
+]{elteikthesis}[2024/04/26]
% The minted package is also supported for source highlighting
-% See minted-intregration.tex for example
+% See elteikthesis_minted.tex for example
%\usepackage[newfloat]{minted}
% Document's metadata
\title{Dolgozat címe} % title
-\date{2023} % year of defense
+\date{2024} % year of defense
% Author's metadata
\author{Hallgató Hanga}
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis_minted.pdf b/macros/latex/contrib/elteikthesis/elteikthesis_minted.pdf
index a6e500ef59..dc4c7ed210 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis_minted.pdf
+++ b/macros/latex/contrib/elteikthesis/elteikthesis_minted.pdf
Binary files differ
diff --git a/macros/latex/contrib/elteikthesis/elteikthesis_minted.tex b/macros/latex/contrib/elteikthesis/elteikthesis_minted.tex
index e48693a45a..a214d95d92 100644
--- a/macros/latex/contrib/elteikthesis/elteikthesis_minted.tex
+++ b/macros/latex/contrib/elteikthesis/elteikthesis_minted.tex
@@ -1,4 +1,4 @@
-\documentclass{elteikthesis}[2023/04/10]
+\documentclass{elteikthesis}[2024/04/26]
\usepackage[newfloat]{minted}
diff --git a/macros/latex/contrib/elteikthesis/images/elte_cimer_szines-eps-converted-to.pdf b/macros/latex/contrib/elteikthesis/images/elte_cimer_szines-eps-converted-to.pdf
new file mode 100644
index 0000000000..7a0a7a2d61
--- /dev/null
+++ b/macros/latex/contrib/elteikthesis/images/elte_cimer_szines-eps-converted-to.pdf
Binary files differ
diff --git a/macros/latex/contrib/esindex/README.md b/macros/latex/contrib/esindex/README.md
index 6ebd7e4c79..b1163025c4 100644
--- a/macros/latex/contrib/esindex/README.md
+++ b/macros/latex/contrib/esindex/README.md
@@ -18,6 +18,10 @@ in the document.
### Recent changes
```
+1.8 2024-04-27
+ - Fix - Some replacements stopped working in pdflatex with utf8
+ because of a change the LaTeX LICR.
+
1.7 2019-10-10
- Fix - because of a change in a macro name, it stopped
working with xe/lua
diff --git a/macros/latex/contrib/esindex/esindex.pdf b/macros/latex/contrib/esindex/esindex.pdf
index bc78b36c15..9272dd8291 100644
--- a/macros/latex/contrib/esindex/esindex.pdf
+++ b/macros/latex/contrib/esindex/esindex.pdf
Binary files differ
diff --git a/macros/latex/contrib/esindex/esindex.sty b/macros/latex/contrib/esindex/esindex.sty
index a63bdba6eb..72a0937c4d 100644
--- a/macros/latex/contrib/esindex/esindex.sty
+++ b/macros/latex/contrib/esindex/esindex.sty
@@ -1,5 +1,5 @@
%
-% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+% Copyright (C) 1998-2024 Javier Bezos http://www.texnia.com
%
% This file may be distributed and/or modified under the conditions of
% the MIT License. A version can be found at the end of this file.
@@ -7,7 +7,7 @@
% Repository: https://github.com/jbezos/esindex
%
-\ProvidesPackage{esindex}[2019/10/10 v1.7 Spanish indexes (and more)]
+\ProvidesPackage{esindex}[2024/04/27 v1.8 Spanish indexes (and more)]
\def\esx@level{`\!}
\def\esx@actual{`\@}
@@ -92,15 +92,40 @@
\gdef\esx@bar@eat#1|{\def\esx@a{|#1}}
}
-\gdef\esindexexpandkey{%
- \protected@edef\esindexkey{\esindexkey}}
+\gdef\esx@tolicr#1#2{%
+ \@ifundefined{u8\string:\string#1\string#2}%
+ {\unexpanded{#1#2}}%
+ {\@nameuse{u8\string:\string#1\string#2}}}
+
+\begingroup
+ \catcode`\^^c2=\active
+ \catcode`\^^c3=\active
+ \gdef\esx@expandkey#1{%
+ \ifnum\catcode`\^^c2=\active \ifnum\catcode`\^^c3=\active
+ \def\esx@a{^^c2^^c3}%
+ \protected@edef\esx@b{\esx@a}%
+ \ifx\esx@a\esx@b
+ \let\esx@cii ^^c2%
+ \let\esx@ciii ^^c3%
+ \def ^^c2{\esx@tolicr ^^c2}%
+ \def ^^c3{\esx@tolicr ^^c3}%
+ \protected@edef#1{#1}%
+ \let ^^c2\esx@cii
+ \let ^^c3\esx@ciii
+ \else
+ \protected@edef#1{#1}%
+ \fi
+ \fi\fi}
+\endgroup
+
+\gdef\esindexexpandkey{\esx@expandkey\esindexkey}
\gdef\esindexexpandsubkey{%
\ifx\esindexsubkey\relax\else
- \protected@edef\esindexsubkey{\esindexsubkey}%
+ \esx@expandkey\esindexsubkey
\fi}
\gdef\esindexexpandsubsubkey{%
\ifx\esindexsubsubkey\relax\else
- \protected@edef\esindexsubsubkey{\esindexsubsubkey}%
+ \esx@expandkey\esindexsubsubkey
\fi}
\gdef\esindexexpandkeys{%
diff --git a/macros/latex/contrib/esindex/esindex.tex b/macros/latex/contrib/esindex/esindex.tex
index 03d0b24386..64a6f18735 100644
--- a/macros/latex/contrib/esindex/esindex.tex
+++ b/macros/latex/contrib/esindex/esindex.tex
@@ -1,5 +1,5 @@
%
-% Copyright (C) 1998-2019 Javier Bezos http://www.texnia.com
+% Copyright (C) 1998-2024 Javier Bezos http://www.texnia.com
%
% This file may be distributed and/or modified under the conditions of
% the MIT License. A version can be found at the end of this file.
@@ -14,7 +14,7 @@
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
-\title{\textsf{esindex}\\\large 1.7\quad 2019-10-10}
+\title{\textsf{esindex}\\\large 1.8\quad 2024-04-27}
\author{Javier Bezos}
@@ -46,7 +46,7 @@
{\LARGE Generating automatically sort keys for \textit{MakeIndex}
with \LaTeX\par}
\vspace*{1ex}
-Version 1.7 (2019-10-10)\par
+Version 1.8 (2024-04-27)\par
\texttt{https://github.com/jbezos/esindex}\par
Javier Bezos (\texttt{http://www.texnia.com})
@@ -100,6 +100,8 @@ three-level key use \verb|\esindexreplacesubsub| (with 4 arguments). With
with the definitions above the key for \verb|ràpid| is
\verb|rapid^^Ar1pid|.)
+(Version 1.8 is just a bug fix.)
+
\section{Spanish}
Este paquete ha sido diseñado para facilitar la escritura de índices
diff --git a/macros/latex/contrib/fadingimage/README.md b/macros/latex/contrib/fadingimage/README.md
index d62c0a6078..9ed33c1695 100644
--- a/macros/latex/contrib/fadingimage/README.md
+++ b/macros/latex/contrib/fadingimage/README.md
@@ -1,17 +1,19 @@
# The `fadingimage` package
-This package provides three commands for adding fading full width picture at the top or bottom of a page.
+This package provides macros for inputting full width picture at the edges of pages quickly.
-**Welcome to pull requests
-[here](https://github.com/xiamyphys/fadingimage).**
+**Welcome to pull requests [here](https://github.com/xiamyphys/fadingimage/pulls).**
## License
-This work may be distributed and/or modified under the conditions of the
-[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-either version 1.3c of this license or (at your option) any later version.
+This work may be distributed and/or modified under the conditions of the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), either version 1.3c of this license or (at your option) any later version.
This work has the LPPL maintenance status `maintained`.
-The Current Maintainer of this work is
-[Mingyu Hsia](https://www.ctan.org/author/xia-my). \ No newline at end of file
+The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my).
+
+## Derivative Works
+
+- [notebeamer](https://ctan.org/pkg/notebeamer): Package provides macros for inputting slides on note papers quickly.
+
+- [litesolution](https://ctan.org/pkg/litesolution): Class designed for typesetting solutions of problems in exams, textbooks, etc.
diff --git a/macros/latex/contrib/fadingimage/doc/fadingimage.pdf b/macros/latex/contrib/fadingimage/doc/fadingimage.pdf
index 85856e112f..ad4ab7eb7f 100644
--- a/macros/latex/contrib/fadingimage/doc/fadingimage.pdf
+++ b/macros/latex/contrib/fadingimage/doc/fadingimage.pdf
Binary files differ
diff --git a/macros/latex/contrib/fadingimage/doc/fadingimage.tex b/macros/latex/contrib/fadingimage/doc/fadingimage.tex
index 2aa6637e95..ad1ebbc3ae 100644
--- a/macros/latex/contrib/fadingimage/doc/fadingimage.tex
+++ b/macros/latex/contrib/fadingimage/doc/fadingimage.tex
@@ -1,5 +1,5 @@
\documentclass[11pt,svgnames]{article}
-\usepackage{geometry,titlesec,authblk,hyperref,hologo}
+\usepackage{geometry,indentfirst,titlesec,authblk,hyperref,hologo}
\titleformat*{\section}{\bfseries\large}
\hologoFontSetup{general=\sffamily}
\usepackage{datetime}\yyyymmdddate
@@ -11,19 +11,19 @@
\def\cmd#1{\textcolor{MidnightBlue}{\texttt{\string#1}}}
\title{\bfseries The \pkg{fadingimage} Package}
-\author{Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com}}
+\author{Mingyu Hsia, \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn}}
\affil{Hangzhou Dianzi University}
-\date{\today\quad Version 0.2a\thanks{\url{https://github.com/xiamyphys/fadingimage}}}
+\date{\today\quad Version 0.3a\thanks{\url{https://github.com/xiamyphys/fadingimage}}}
\begin{document}
\maketitle
-\UPFadingImage[trim={0 {.96\paperheight} 0 0},clip]{Beautiful-realities}
-\LOWFadingImage[trim={0 0 0 {.96\paperheight}},clip]{Beautiful-realities}
+\UPFadingImage*[trim={0 {.96\paperheight} 0 0},clip]{Beautiful-realities}
+\LOWFadingImage*[trim={0 0 0 {.96\paperheight}},clip]{Beautiful-realities}
\vspace{-6ex}
\begin{abstract}
-This is \textsf{\textbf{not only the document but also the demo}} for the \pkg{fadingimage} package, which provides three commands for adding fading full width picture at the top, bottom or both of them on a page. This package is contained in the \pkg{LiteBook} and \pkg{LiteSolution} class.
+This is \textsf{\textbf{not only the document but also the demo}} for the \pkg{fadingimage} package, which provides macros for inputting full width picture at the edges of pages quickly. This package is contained in the \pkg{LiteBook} and \pkg{LiteSolution} class.
Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/fadingimage}{GitHub}.
@@ -41,15 +41,18 @@ Simply download \verb|fadingimage.cls| file from \href{https://github.com/xiamyp
To learn more, please refer to \href{https://tex.stackexchange.com/questions/55437/how-do-i-update-my-tex-distribution}{How do I update my \hologo{TeX} distribution?}
-\section{Commands \cmd{UPFadingImage}, \cmd{LOWFadingImage} and \cmd{UPLOWFadingImage}}
+\section{Macros in this package}
-\begin{small}\begin{verbatim}
- \UPFadingImage [<keyval list>]{<file>} \LOWFadingImage[<keyval list>]{<file>}
- \UPLOWFadingImage[<keyval list>]{<file>}[<keyval list>]{<file>}
-\end{verbatim}\end{small}
+\begin{verbatim}
+ \UPFadingImage <*> [<keyval list>] {<file>} <!> % fading from top
+ \LOWFadingImage <*> [<keyval list>] {<file>} <!> % fading from bottom
+ \LTFadingImage <*> [<keyval list>] {<file>} <!> % fading from left
+ \RITFadingImage <*> [<keyval list>] {<file>} <!> % fading from right
+\end{verbatim}
+
+The four commands all have 2 variables and the first one is optional. The second variable can assign the image that you want to insert and the first one can assign the parameters of command \cmd{includegraphics}, such as clip to the inserted image.
-The first two commands all have 2 variables and the first one is optional. The second variable of the commands can assign the image that you want to insert, and the first one can assign the parameters of command \cmd{includegraphics}, such as clip to the inserted image.
+If an exclamation \verb|<!>| is added at the end of the commands, the image inserted won't be faded. If a star \verb|<*>| is added after the commands it will automatically exit vertical mode \verb|\leavevmode| after inserting the image.
-The third command is just a combination of the first two commands. If a star (*) is added after the commands above, the image you inserted won't be faded.
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/fadingimage/tex/fadingimage.sty b/macros/latex/contrib/fadingimage/tex/fadingimage.sty
index 6cfceced3b..a4147cd3cf 100644
--- a/macros/latex/contrib/fadingimage/tex/fadingimage.sty
+++ b/macros/latex/contrib/fadingimage/tex/fadingimage.sty
@@ -1,5 +1,5 @@
%% ***********************************************************
-%% Copyright 2024 by Mingyu Hsia <xiamyphys@gmail.com> *
+%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> *
%% *
%% This work may be distributed and/or modified under *
%% the conditions of the LaTeX Project Public License *
@@ -13,48 +13,48 @@
%% *
%% The Current Maintainer of this work is Mingyu Hsia. *
%% *
-%% This work consists of the files fadingimage.cls, *
+%% This work consists of the files fadingimage.sty, *
%% and README.md. *
%% available at https://github.com/xiamyphys/fadingimage *
%% ***********************************************************
% !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesPackage{fadingimage}[2024/04/19/ v0.2a Package for adding fading full width picture at the top and bottom of a page.]
+\ProvidesPackage{fadingimage}[2024/05/06/ v0.3a Package provides macros for inputting full width picture at the edges of pages quickly.]
-\RequirePackage{tikz,xcolor}
-\usetikzlibrary{fadings}
-\NewDocumentCommand{\UPFadingImage}{ s O{} m }{
- \IfBooleanTF{#1}
- {
+\RequirePackage{tikz}\usetikzlibrary{fadings}
+\NewDocumentCommand{\UPFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
\tikz[remember picture,overlay]
\node[below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
}{
\tikz[remember picture,overlay]
\node[scope fading=south,below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
- }
+ }\IfBooleanT{#1}{\leavevmode}
}
-\NewDocumentCommand{\LOWFadingImage}{ s O{} m }{
- \IfBooleanTF{#1}
- {
+\NewDocumentCommand{\LOWFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
\tikz[remember picture,overlay]
\node[above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#2]{#3}};
}{
\tikz[remember picture,overlay]
\node[scope fading=north,above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#2]{#3}};
- }
+ }\IfBooleanT{#1}{\leavevmode}
}
-
-\NewDocumentCommand{\UPLOWFadingImage}{ s O{} m O{} m }{
- \IfBooleanTF{#1}
- {
- \tikz[remember picture,overlay]{
- \node[below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
- \node[above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#4]{#5}};
- }
+\NewDocumentCommand{\LTFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
+ \tikz[remember picture,overlay]
+ \node[right,inner sep=0pt,outer sep=auto] at (current page.west) {\includegraphics[height=\paperheight,#2]{#3}};
}{
- \tikz[remember picture,overlay]{
- \node[scope fading=south,below,inner sep=0pt,outer sep=auto] at (current page.north) {\includegraphics[width=\paperwidth,#2]{#3}};
- \node[scope fading=north,above,inner sep=0pt,outer sep=auto] at (current page.south) {\includegraphics[width=\paperwidth,#4]{#5}};
- }
- }
+ \tikz[remember picture,overlay]
+ \node[scope fading=east,right,inner sep=0pt,outer sep=auto] at (current page.west) {\includegraphics[height=\paperheight,#2]{#3}};
+ }\IfBooleanT{#1}{\leavevmode}
+}
+\NewDocumentCommand{\RITFadingImage}{ s O{} m t! }{
+ \IfBooleanTF{#4}{
+ \tikz[remember picture,overlay]
+ \node[left,inner sep=0pt,outer sep=auto] at (current page.east) {\includegraphics[height=\paperheight,#2]{#3}};
+ }{
+ \tikz[remember picture,overlay]
+ \node[scope fading=west,left,inner sep=0pt,outer sep=auto] at (current page.east) {\includegraphics[height=\paperheight,#2]{#3}};
+ }\IfBooleanT{#1}{\leavevmode}
} \ No newline at end of file
diff --git a/macros/latex/contrib/fontscale/CHANGELOG.md b/macros/latex/contrib/fontscale/CHANGELOG.md
index 304749e825..615f5ef448 100644
--- a/macros/latex/contrib/fontscale/CHANGELOG.md
+++ b/macros/latex/contrib/fontscale/CHANGELOG.md
@@ -7,6 +7,18 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v1.2.2] - 2024-04-29
+
+### Changed
+- Improved package messages when issuing errors and warnings.
+- Code improvements.
+
+### Fixed
+- The documentation no longer incorrectly compares `\ScaleFont` with
+ `\scalefont` from the `scalefnt` package.
+- The internal function for the key `reset=preamble` now correctly initializes
+ to `\prg_do_nothing:`.
+
## [v1.2.1] - 2024-04-21
### Changed
diff --git a/macros/latex/contrib/fontscale/fontscale-manual.pdf b/macros/latex/contrib/fontscale/fontscale-manual.pdf
index c21ffd29a9..8739ca48ae 100644
--- a/macros/latex/contrib/fontscale/fontscale-manual.pdf
+++ b/macros/latex/contrib/fontscale/fontscale-manual.pdf
Binary files differ
diff --git a/macros/latex/contrib/fontscale/fontscale-manual.tex b/macros/latex/contrib/fontscale/fontscale-manual.tex
index db839a0fd2..04493d50c2 100644
--- a/macros/latex/contrib/fontscale/fontscale-manual.tex
+++ b/macros/latex/contrib/fontscale/fontscale-manual.tex
@@ -13,7 +13,7 @@ A user interface for setting document font sizes
Oliver Beery
-Version 1.2.1\quad{}21 April 2024
+Version 1.2.2\quad{}29 April 2024
\section{Introduction}
@@ -285,7 +285,6 @@ For example, \cs{SetFontSize*}\marg{1} and \cs{SetFontSize*}\marg{-1pt} increase
\KeepNextPar*
Scales the current font size and the current font baselineskip by a factor of \meta{fp expr}.
-\cs{ScaleFont} resembles the \cs{scalefont} command provided by the \pkg{scalefnt} package, except that it uses floating point calculations and clears the stretch and shrink components of the font baselineskip.
For example, if the current font size and font baselineskip are \qty{10}{pt} and \qty{12}{pt}, using \cs{ScaleFont}\marg{0.8} will reduce them proportionally to \qty{8}{pt} and \qty{9.6}{pt}.
\cs{SetFontSizeBaselineskip}\marg{\meta{dim expr}}\marg{\meta{skip expr}}
@@ -321,11 +320,12 @@ The default \meta{text} is \enquote{The \texttt{fontscale} package: A user inter
\cs{PrintFontSizeCommand}
\KeepNextPar*
-\cs{PrintFontSizeCommand} tests whether the current font size and font baselineskip match that of any font size command.
+\cs{PrintFontSizeCommand} tests whether the current font size and the current font baselineskip match that of any font size command from \cs{tiny} to \cs{Huge}.
If so, it prints the name of that font size command.
If not, it instead prints \enquote{UNDEFINED\@}.
One useful way of printing example text is by using
\cs{PrintSampleText}\oarg{\cs{PrintFontSizeCommand}:\textvisiblespace{}\cs{PrintFontParameters}}.
+\vfill%manual
\subsection
{%
@@ -336,7 +336,8 @@ One useful way of printing example text is by using
\label{subsec:fontscalesetup}
\cs{fontscalesetup}\marg{\meta{keyval list}}
-\KeepNextPar*
+\nopagebreak\newline
+\Key{reset}[initial, preamble]
Sets and processes the \pkg{fontscale} package keys and uses \cs{normalsize}.
\cs{fontscalesetup} can be applied mid\-/document or locally within the current \TeX{} group.
@@ -351,7 +352,7 @@ The key \Key{reset}[preamble] sets all the keys to their values at the end of th
This section is relevant to \LaTeX3 programmers.
-The user commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}.
+The document commands \cs{SetFontStep}, \cs{SetFontScale}, \cs{SetFontSize}, \cs{ScaleFont}, and \cs{SetFontSizeBaselineskip} are set up to work with \cs{text_purify:n}.
\cs{text_purify:n} will correctly remove these commands and their arguments.
This includes the starred versions \cs{SetFontStep*}, \cs{SetFontScale*}, and \cs{SetFontSize*}.
diff --git a/macros/latex/contrib/fontscale/fontscale.sty b/macros/latex/contrib/fontscale/fontscale.sty
index 7aa22fdd73..afeeefa966 100644
--- a/macros/latex/contrib/fontscale/fontscale.sty
+++ b/macros/latex/contrib/fontscale/fontscale.sty
@@ -8,8 +8,8 @@
\NeedsTeXFormat{LaTeX2e}[2022-06-01]
\ProvidesExplPackage
{fontscale}
- {2024-04-21}
- {1.2.1}
+ {2024-04-29}
+ {1.2.2}
{A user interface for setting document font sizes}
% The 2023-10-10 l3kernel update added many 'e'-variants.
@@ -25,7 +25,7 @@
\msg_critical:nn { fontscale } { expl3-out-of-date }
}
-% SOME VARIABLES
+% DECLARE FONT PARAMETERS
\fp_const:Nn \c_fontscale_tiny_step_fp { -4 }
\fp_const:Nn \c_fontscale_scriptsize_step_fp { -3 }
@@ -40,41 +40,6 @@
\fp_const:Nn \c_fontscale_normalsize_scale_fp { 1 }
-\tl_const:Nn \c__fontscale_names_tl
- {
- {tiny} {scriptsize} {footnotesize} {small} {normalsize}
- {large} {Large} {LARGE} {huge} {Huge}
- }
-\tl_const:Nn \c__fontscale_names_other_tl
- {
- {tiny} {scriptsize} {footnotesize} {small}
- {large} {Large} {LARGE} {huge} {Huge}
- }
-
-\prop_new:N \l_fontscale_tiny_prop
-\prop_new:N \l_fontscale_scriptsize_prop
-\prop_new:N \l_fontscale_footnotesize_prop
-\prop_new:N \l_fontscale_small_prop
-\prop_new:N \l_fontscale_normalsize_prop
-\prop_new:N \l_fontscale_large_prop
-\prop_new:N \l_fontscale_Large_prop
-\prop_new:N \l_fontscale_LARGE_prop
-\prop_new:N \l_fontscale_huge_prop
-\prop_new:N \l_fontscale_Huge_prop
-
-\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 }
-\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 }
-\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 }
-\prop_put:Nnn \l_fontscale_small_prop { step } { -1 }
-\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 }
-\prop_put:Nnn \l_fontscale_large_prop { step } { 1 }
-\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 }
-\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 }
-\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 }
-\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 }
-
-\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 }
-
\fp_new:N \l_fontscale_tiny_scale_fp
\fp_new:N \l_fontscale_scriptsize_scale_fp
\fp_new:N \l_fontscale_footnotesize_scale_fp
@@ -107,21 +72,41 @@
\skip_new:N \l_fontscale_huge_baselineskip_skip
\skip_new:N \l_fontscale_Huge_baselineskip_skip
-\str_new:N \l__fontscale_typographic_scale_str
+\prop_new:N \l_fontscale_tiny_prop
+\prop_new:N \l_fontscale_scriptsize_prop
+\prop_new:N \l_fontscale_footnotesize_prop
+\prop_new:N \l_fontscale_small_prop
+\prop_new:N \l_fontscale_normalsize_prop
+\prop_new:N \l_fontscale_large_prop
+\prop_new:N \l_fontscale_Large_prop
+\prop_new:N \l_fontscale_LARGE_prop
+\prop_new:N \l_fontscale_huge_prop
+\prop_new:N \l_fontscale_Huge_prop
-% Used in floating point expressions for speed.
-\fp_new:N \l__fontscale_normalsize_size_fp
-\fp_new:N \l__fontscale_musical_notes_fp
+\prop_put:Nnn \l_fontscale_tiny_prop { step } { -4 }
+\prop_put:Nnn \l_fontscale_scriptsize_prop { step } { -3 }
+\prop_put:Nnn \l_fontscale_footnotesize_prop { step } { -2 }
+\prop_put:Nnn \l_fontscale_small_prop { step } { -1 }
+\prop_put:Nnn \l_fontscale_normalsize_prop { step } { 0 }
+\prop_put:Nnn \l_fontscale_large_prop { step } { 1 }
+\prop_put:Nnn \l_fontscale_Large_prop { step } { 2 }
+\prop_put:Nnn \l_fontscale_LARGE_prop { step } { 3 }
+\prop_put:Nnn \l_fontscale_huge_prop { step } { 4 }
+\prop_put:Nnn \l_fontscale_Huge_prop { step } { 5 }
-% Temporary variables
-\tl_new:N \l__fontscale_step_tl
-\tl_new:N \l__fontscale_scale_tl
-\dim_new:N \l__fontscale_size_dim
-\skip_new:N \l__fontscale_baselineskip_skip
+\prop_put:Nnn \l_fontscale_normalsize_prop { scale } { 1 }
-% INITIAL FONT PARAMETERS
+% INITIALIZE FONT PARAMETERS
-\fp_set:Nn \l__fontscale_normalsize_size_fp { 10 }
+\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 }
+\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 }
+\fp_set:Nn \l_fontscale_footnotesize_scale_fp { 0.8 }
+\fp_set:Nn \l_fontscale_small_scale_fp { 0.9 }
+\fp_set:Nn \l_fontscale_large_scale_fp { 1.1 }
+\fp_set:Nn \l_fontscale_Large_scale_fp { 1.2 }
+\fp_set:Nn \l_fontscale_LARGE_scale_fp { 1.4 }
+\fp_set:Nn \l_fontscale_huge_scale_fp { 1.6 }
+\fp_set:Nn \l_fontscale_Huge_scale_fp { 1.8 }
\dim_set:Nn \l_fontscale_tiny_size_dim { 6pt }
\dim_set:Nn \l_fontscale_scriptsize_size_dim { 7pt }
@@ -134,16 +119,6 @@
\dim_set:Nn \l_fontscale_huge_size_dim { 16pt }
\dim_set:Nn \l_fontscale_Huge_size_dim { 18pt }
-\fp_set:Nn \l_fontscale_tiny_scale_fp { 0.6 }
-\fp_set:Nn \l_fontscale_scriptsize_scale_fp { 0.7 }
-\fp_set:Nn \l_fontscale_footnotesize_scale_fp { 0.8 }
-\fp_set:Nn \l_fontscale_small_scale_fp { 0.9 }
-\fp_set:Nn \l_fontscale_large_scale_fp { 1.1 }
-\fp_set:Nn \l_fontscale_Large_scale_fp { 1.2 }
-\fp_set:Nn \l_fontscale_LARGE_scale_fp { 1.4 }
-\fp_set:Nn \l_fontscale_huge_scale_fp { 1.6 }
-\fp_set:Nn \l_fontscale_Huge_scale_fp { 1.8 }
-
\skip_set:Nn \l_fontscale_tiny_baselineskip_skip { 7.2pt }
\skip_set:Nn \l_fontscale_scriptsize_baselineskip_skip { 8.4pt }
\skip_set:Nn \l_fontscale_footnotesize_baselineskip_skip { 9.6pt }
@@ -187,21 +162,48 @@
\prop_put:Nnn \l_fontscale_huge_prop { baselineskip } { 19.2pt }
\prop_put:Nnn \l_fontscale_Huge_prop { baselineskip } { 21.6pt }
+% SOME VARIABLES
+
+% Used for mapping.
+\tl_const:Nn \c__fontscale_names_tl
+ {
+ {tiny} {scriptsize} {footnotesize} {small} {normalsize}
+ {large} {Large} {LARGE} {huge} {Huge}
+ }
+\tl_const:Nn \c__fontscale_names_other_tl
+ {
+ {tiny} {scriptsize} {footnotesize} {small}
+ {large} {Large} {LARGE} {huge} {Huge}
+ }
+
+% Used to speed up floating point calculations.
+\fp_new:N \l__fontscale_normalsize_size_fp
+\fp_set:Nn \l__fontscale_normalsize_size_fp
+ { \l_fontscale_normalsize_size_dim }
+\fp_new:N \l__fontscale_musical_notes_fp
+
+% Temporary variables
+\tl_new:N \l__fontscale_step_tl
+\tl_new:N \l__fontscale_scale_tl
+\dim_new:N \l__fontscale_size_dim
+\skip_new:N \l__fontscale_baselineskip_skip
+
% SOME HELPER FUNCTIONS
-% Sets a dimen or skip variable, supplying a default unit of pt.
-\cs_new_protected:Npn \__fontscale_dim_set_with_default_unit:Nn #1#2
+% Sets a dimen/skip variable from a dimen/skip expression, supplying a default
+% unit of pt.
+\cs_new_protected:Npn \__fontscale_dim_set_with_default_pt:Nn #1#2
{ \@defaultunits #1 = \dimexpr #2 pt \relax \relax \@nnil }
-\cs_generate_variant:Nn \__fontscale_dim_set_with_default_unit:Nn { c }
-\cs_new_protected:Npn \__fontscale_skip_set_with_default_unit:Nn #1#2
+\cs_generate_variant:Nn \__fontscale_dim_set_with_default_pt:Nn { c }
+\cs_new_protected:Npn \__fontscale_skip_set_with_default_pt:Nn #1#2
{ \@defaultunits #1 = \glueexpr #2 pt \relax \@nnil }
-\cs_generate_variant:Nn \__fontscale_skip_set_with_default_unit:Nn { c }
+\cs_generate_variant:Nn \__fontscale_skip_set_with_default_pt:Nn { c }
% MESSAGES
\msg_new:nnn { fontscale } { key-font-scale-ignored }
{
- Key~ #1 / scale~
+ Key~ '#1 / scale'~
\msg_line_context: \c_space_tl
ignored.~
Setting~ the~ scale~ and~ size~ keys~ for~ the~ same~
@@ -213,7 +215,8 @@
\msg_line_context: \c_space_tl
are~ not~ in~ the~ correct~ order.~
The~ magnitude~ of~ the~ font~ sizes~ should~ be~ ordered~ from~
- \iow_char:N \\tiny~ to~ \iow_char:N \\normalsize~ to~ \iow_char:N \\Huge .
+ '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~
+ '\iow_char:N \\Huge' .
}
\msg_new:nnn { fontscale } { font-baselineskips-out-of-order }
{
@@ -221,18 +224,20 @@
\msg_line_context: \c_space_tl
are~ not~ in~ the~ correct~ order.~
The~ magnitude~ of~ the~ font~ baselineskips~ should~ be~ ordered~ from~
- \iow_char:N \\tiny~ to~ \iow_char:N \\normalsize~ to~ \iow_char:N \\Huge .
+ '\iow_char:N \\tiny'~ to~ '\iow_char:N \\normalsize'~ to~
+ '\iow_char:N \\Huge' .
}
\msg_new:nnn { fontscale } { font-step-out-of-bounds }
{
The~ font~ step~
\msg_line_context: \c_space_tl
must~ be~ an~ integer~ from~ -4~ to~ 5,~
- unless~ the~ choice~ of~ typographic~ scale~ is~ modular~ or~ musical.
+ unless~ the~ choice~ key~ 'typographic-scale'~
+ is~ set~ to~ 'modular'~ or~ 'musical'.
}
\msg_new:nnn { fontscale } { current-font-step-out-of-bounds }
{
- \iow_char:N \\SetFontStep*~
+ '\iow_char:N \\SetFontStep*'~
\msg_line_context: \c_space_tl
could~ not~ calculate~ the~ new~ font~ step~ because~
the~ current~ font~ step~ is~ undefined.
@@ -240,6 +245,8 @@
% DEFINE KEYS
+\str_new:N \l__fontscale_typographic_scale_str
+
\keys_define:nn { fontscale }
{
reset .choices:nn = { initial , preamble }
@@ -484,7 +491,7 @@
% Pre-compiles the keys with their values at the end of the preamble. The keys
% are pre-compiled by hand for speed.
-\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing
+\cs_new_eq:NN \__fontscale_keys_precompile_preamble: \prg_do_nothing:
\AddToHook { begindocument / before }
{ \__fontscale_keys_precompile_preamble_set: }
\cs_new_protected:Npn \__fontscale_keys_precompile_preamble_set:
@@ -579,11 +586,12 @@
\cs_new_protected:Npn \__fontscale_keys_process:
{
\__fontscale_keys_process_normalsize:
+ \normalsize
\__fontscale_keys_process_other:
\__fontscale_keys_process_props:
\__fontscale_keys_process_check_order:
}
-% Sets the size and baselineskip of \normalsize and uses \normalsize.
+% Sets the size and baselineskip of \normalsize.
\cs_new_protected:Npn \__fontscale_keys_process_normalsize:
{
\quark_if_no_value:NTF \l__fontscale_normalsize_size_tl
@@ -601,7 +609,7 @@
}
}
{
- \__fontscale_dim_set_with_default_unit:Nn
+ \__fontscale_dim_set_with_default_pt:Nn
\l_fontscale_normalsize_size_dim { \l__fontscale_normalsize_size_tl }
}
\fp_set:Nn \l__fontscale_normalsize_size_fp
@@ -618,11 +626,10 @@
}
}
{
- \__fontscale_skip_set_with_default_unit:Nn
+ \__fontscale_skip_set_with_default_pt:Nn
\l_fontscale_normalsize_baselineskip_skip
{ \l__fontscale_normalsize_baselineskip_tl }
}
- \normalsize
}
% Sets the size, scale, and baselineskip of the other font size commands.
% Issues a warning if the user sets both the scale and size keys for the same
@@ -728,7 +735,7 @@
{
\quark_if_no_value:cF { l__fontscale_#1_size_tl }
{
- \__fontscale_dim_set_with_default_unit:cn { l_fontscale_#1_size_dim }
+ \__fontscale_dim_set_with_default_pt:cn { l_fontscale_#1_size_dim }
{ \use:c { l__fontscale_#1_size_tl } }
\quark_if_no_value:cF { l__fontscale_#1_scale_tl }
{ \msg_warning:nnn { fontscale } { key-font-scale-ignored } {#1} }
@@ -764,7 +771,7 @@
}
}
{
- \__fontscale_skip_set_with_default_unit:cn
+ \__fontscale_skip_set_with_default_pt:cn
{ l_fontscale_#1_baselineskip_skip }
{ \use:c { l__fontscale_#1_baselineskip_tl } }
}
@@ -834,8 +841,8 @@
\prop_put:Nno \l_fontscale_Huge_prop { baselineskip }
{ \skip_use:N \l_fontscale_Huge_baselineskip_skip }
}
-% Issues a warning if the font sizes or font baselineskips are not in the
-% correct order.
+% Issues a warning if the font sizes or font baselineskips (ignoring the
+% stretch and shrink components) are not in the correct order.
\cs_new_protected:Npn \__fontscale_keys_process_check_order:
{
\bool_if:NF \l__fontscale_ignore_order_bool
@@ -1094,14 +1101,14 @@
}
\cs_new_protected:Npn \__fontscale_set_font_size:n #1
{
- \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1}
+ \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1}
\fontsize \l__fontscale_size_dim
{ \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
\selectfont
}
\cs_new_protected:Npn \__fontscale_add_font_size:n #1
{
- \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1}
+ \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1}
\dim_add:Nn \l__fontscale_size_dim { \f@size pt }
\fontsize \l__fontscale_size_dim
{ \fp_to_dim:n { \f@size * \l__fontscale_baselineskip_size_ratio_fp } }
@@ -1121,8 +1128,8 @@
{ \__fontscale_set_font_size_baselineskip:nn {#1} {#2} }
\cs_new_protected:Npn \__fontscale_set_font_size_baselineskip:nn #1#2
{
- \__fontscale_dim_set_with_default_unit:Nn \l__fontscale_size_dim {#1}
- \__fontscale_skip_set_with_default_unit:Nn \l__fontscale_baselineskip_skip
+ \__fontscale_dim_set_with_default_pt:Nn \l__fontscale_size_dim {#1}
+ \__fontscale_skip_set_with_default_pt:Nn \l__fontscale_baselineskip_skip
{#2}
\fontsize \l__fontscale_size_dim \l__fontscale_baselineskip_skip
\selectfont
@@ -1197,70 +1204,72 @@
\NewDocumentCommand \PrintFontSizeCommand { } { \__fontscale_print_name: }
\cs_new_protected:Npn \__fontscale_print_name:
{
- \dim_case:nnF { \f@size pt }
+ \dim_case:nn { \f@size pt }
{
{ \l_fontscale_tiny_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_tiny_baselineskip_skip }
- { \token_to_str:N \tiny } { UNDEFINED \@ }
+ { \token_to_str:N \tiny \prg_break: }
}
{ \l_fontscale_scriptsize_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_scriptsize_baselineskip_skip }
- { \token_to_str:N \scriptsize } { UNDEFINED \@ }
+ { \token_to_str:N \scriptsize \prg_break: }
}
{ \l_fontscale_footnotesize_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_footnotesize_baselineskip_skip }
- { \token_to_str:N \footnotesize } { UNDEFINED \@ }
+ { \token_to_str:N \footnotesize \prg_break: }
}
{ \l_fontscale_small_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_small_baselineskip_skip }
- { \token_to_str:N \small } { UNDEFINED \@ }
+ { \token_to_str:N \small \prg_break: }
}
{ \l_fontscale_normalsize_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_normalsize_baselineskip_skip }
- { \token_to_str:N \normalsize } { UNDEFINED \@ }
+ { \token_to_str:N \normalsize \prg_break: }
}
{ \l_fontscale_large_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_large_baselineskip_skip }
- { \token_to_str:N \large } { UNDEFINED \@ }
+ { \token_to_str:N \large \prg_break: }
}
{ \l_fontscale_Large_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_Large_baselineskip_skip }
- { \token_to_str:N \Large } { UNDEFINED \@ }
+ { \token_to_str:N \Large \prg_break: }
}
{ \l_fontscale_LARGE_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_LARGE_baselineskip_skip }
- { \token_to_str:N \LARGE \@ } { UNDEFINED \@ }
+ { \token_to_str:N \LARGE \@ \prg_break: }
}
{ \l_fontscale_huge_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_huge_baselineskip_skip }
- { \token_to_str:N \huge } { UNDEFINED \@ }
+ { \token_to_str:N \huge \prg_break: }
}
{ \l_fontscale_Huge_size_dim }
{
- \skip_if_eq:nnTF { \f@baselineskip }
+ \skip_if_eq:nnT { \f@baselineskip }
{ \l_fontscale_Huge_baselineskip_skip }
- { \token_to_str:N \Huge } { UNDEFINED \@ }
+ { \token_to_str:N \Huge \prg_break: }
}
}
- { UNDEFINED \@ }
+ UNDEFINED \@
+ \prg_break:
+ \prg_break_point:
}
% TEXT PURIFY
diff --git a/macros/latex/contrib/frenchmath/frenchmath.dtx b/macros/latex/contrib/frenchmath/frenchmath.dtx
index edd050c10a..6af5bc2038 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.dtx
+++ b/macros/latex/contrib/frenchmath/frenchmath.dtx
@@ -20,7 +20,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{frenchmath}
- [2024/02/25 v2.10 .dtx Typesetting mathematics according to French rules]
+ [2024/05/04 v3.0 .dtx Typesetting mathematics according to French rules]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -28,26 +28,21 @@
\usepackage[T1]{fontenc}
\usepackage[french]{babel}
\usepackage{lmodern}
-\usepackage[lgrmath]{frenchmath}
-\usepackage[Euler]{upgreek}
-\usepackage{textalpha}
+\usepackage[lgrmath,savegreeks,otherfonts]{frenchmath}
\usepackage{metalogo} % pour les logos XeLaTeX et LuaLaTeX
\usepackage{sectsty}
\usepackage{xcolor}
+%\usepackage{textalpha}
+\usepackage{tabls}
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
\allsectionsfont{\color{darkbrown}}
-% pour les lettres de upgreek avec l'option Symbol :
-\DeclareSymbolFont{ugrfm}{U}{psy}{m}{n}
-\DeclareMathSymbol{\upalphasym}{\mathord}{ugrfm}{`a}
-\DeclareMathSymbol{\upbetasym}{\mathord}{ugrfm}{`b}
-\DeclareMathSymbol{\uppisym}{\mathord}{ugrfm}{`p}
-% symbole \emptyset de computer modern au cas où veut changer la police de ce doc :
-\DeclareSymbolFont{cmsymbols}{OMS}{cmsy}{m}{n}
-\DeclareMathSymbol{\cmemptyset}{\mathord}{cmsymbols}{'73} % code octal dans cmsy
+
+% symbole \emptyset de computer modern au cas où on change la police de ce doc :
+\def\CMemptyset{\mathord{\text{\usefont{OMS}{cmsy}{m}{n}\symbol{'73}}}}
% pour avoir le mu de micro :
\DeclareTextSymbol{\textmicro}{TS1}{181}
-\DeclareTextSymbolDefault{\textmicro}{TS1}
+%\DeclareTextSymbolDefault{\textmicro}{TS1}
\DisableCrossrefs
%\CodelineIndex
@@ -62,6 +57,7 @@
pdfauthor={Antoine Missier}
}
\begin{document}
+%\MakeShortVerb" % incompatible si placé avant
\DocInput{frenchmath.dtx}
%\PrintChanges
%\PrintIndex
@@ -69,7 +65,7 @@
%</driver>
% \fi
%
-% \CheckSum{594}
+% \CheckSum{320}
%
% \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
@@ -118,7 +114,7 @@
% - ajout des macros pour les bases (i,j) et (i,j,k).}
%
% \changes{v1.6}{2022/10/16}{
-% - Remplacement de icomma par ncccomma, grâce à une proposition de J. F. Burnol,
+% - Remplacement de icomma par ncccomma, grâce à un "patch" de J. F. Burnol,
% - amélioration du code redéfinissant les majuscules mathématiques,
% - suppression de l'option capsup (capsit à false suffit),
% - remplacement de tgh par th pour la tangente hyperbolique.}
@@ -182,17 +178,28 @@
% - compatibilité des options de lettres grecques avec unicode-math (XeLaTeX uniquement)
% -> nouvelles macros SaveGreekItalics et upgreekUndefined,
% - commentaires dans la doc pour la compatibilité avec unicode-math.}
-
+%
% \changes{v2.10}{22/02/2024}{
% - Changements dans la doc concernant la gestion des lettres grecques et unicode-math.}
%
+% \changes{v3.0}{04/03/2024}{
+% - Redéfinition de cmod qui correspond au pod de amsmath,
+% - Modification du chargement conditionnel de dotlessj,
+% - Copie du code de legslant, geqslant, varnothing sans importer amssymb,
+% - Utilisation de AtEndPreamble pour pouvoir charger frenchmath avant unicode-math,
+% - Ajout d'une table des matières.}
+% \changes{v3.0}{12/04/2024}{
+% - Développement et intégration de l'extension mathgreeks
+% - Mise à jour de la documentation}
+%
% \GetFileInfo{frenchmath.sty}
%
% \title{L'extension \textsf{frenchmath}\thanks{Ce document
-% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 25/02/2024.}}
+% correspond à \textsf{frenchmath}~\fileversion, dernière modification le 04/05/2024.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{25 février 2024}
+% \date{4 mai 2024}
% \maketitle
+% \tableofcontents
%
% \section{Introduction}
% Cette extension, inspirée à l'origine de \textsf{mafr} de Christian Obrecht~\cite{MAFR},
@@ -206,19 +213,20 @@
% \footnote{Contrairement à \textsf{mafr} nous avons choisi de ne pas
% conserver le même nom de commande pour substituer
% des symboles français aux symboles anglais.}.
-% Depuis la version 2.0, \textsf{frenchmath} propose en outre deux options permettant
+% Depuis la version 2.0, \textsf{frenchmath} propose en outre des options permettant
% de composer les minuscules grecques du mode mathématique en forme droite.
%
% \medskip
% D'autres solutions existent pour composer les majuscules mathématiques en romain,
% par exemple avec \XeLaTeX\ ou \LuaLaTeX\ et l'extension \textsf{unicode-math}~\cite{UNIC}.
-% Celle-ci peut être utilisée avec \textsf{frenchmath} à condition d'être chargée \emph{avant}.
% Pour pdf\LaTeX\, nous avons les extensions \textsf{fourier} de Michel Bovani~\cite{FOUR}
-% (avec la famille des fontes Adobe Utopia)
-% ou encore \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN}
-% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter).
+% (avec la famille des fontes Adobe Utopia),
+% \textsf{mathdesign} de Paul Pichaureau~\cite{DESIGN}
+% (avec les polices Adobe Utopia, URW Garamond ou Bitstream Charter)
+% ou encore \textsf{kpfonts} de Christophe Caignaert~\cite{KPF}.
% Mais \textsf{frenchmath} fournit une solution générique
-% s'adaptant à n'importe quelle police de caractères.
+% s'adaptant à n'importe quelle police de caractères
+% (et compatible avec \textsf{unicode-math}).
%
% \medskip
% Certaines préconisations, telles que composer en lettre droite
@@ -250,10 +258,11 @@
% (cf. \cite{RTIN} p.107, voir aussi~\cite{IGEN}).
% En utilisant \XeLaTeX\ ou \LuaLaTeX,
% avec l'option \texttt{math-style=french} de l'extension \textsf{unicode-math},
-% cette convention est assez commode à mettre en œuvre,
-% y compris avec les polices TrueType ou OpenType ;
+% cette convention est commode à mettre en œuvre,
% par contre, avec \LaTeX\ ou pdf\LaTeX, elle est peu respectée
-% et les extensions précitées ne fonctionnent qu'avec des polices particulières.
+% et les extensions comme \textsf{mathdesign} (avec \texttt{uppercase=upright}),
+% \textsf{fourier} (avec \texttt{upright}) ou \textsf{kpfonts} (avec \texttt{uprightRoman})
+% ne fonctionnent qu'avec des polices particulières.
% Par défaut \textsf{frenchmath} compose automatiquement les majuscules
% mathématiques latines en romain,
% quelle que soit la police utilisée.
@@ -302,28 +311,30 @@
% (sans espace), sinon c'est un caractère de ponctuation.
% \end{itemize}
%
-% Cette deuxième approche parait meilleure, néanmoins \textsf{ncccomma}
+% Cette deuxième approche est plus souple, néanmoins \textsf{ncccomma}
% ne fonctionne pas avec \textsf{babel-french} utilisé conjointement avec
-% l'extension \textsf{numprint} et son option \texttt{autolanguage}
+% l'option \texttt{autolanguage}
% \footnote{L'option \texttt{autolanguage} de \textsf{numprint} utilisée
% conjointement avec l'option \texttt{french} de \textsf{babel} garantit un espacement
% correct entre les groupes de trois chiffres dans les grands nombres,
% qui doit être une espace insécable et non dilatable~\cite{RTIN},
-% légèrement plus grande que l'espace que l'on obtient sans cette option.}.
+% légèrement plus grande que l'espace que l'on obtient sans cette option.}
+% de l'extension \textsf{numprint}.
% En outre \textsf{ncccomma} ne fonctionne pas non plus
% avec l'extension \textsf{unicode-math} (et bugue à l'appel |\setmathfont|).
% Dans son article \emph{Intelligent commas}~\cite{BECC},
% Claudio Beccari propose une autre solution,
% voisine de \textsf{ncccomma}, mais qui produit le même type d'incompatibilités.
-% Le code a donc été revu et simplifié afin de régler proprement ces incompatibilités.
-% Comme bien des pays utilisent la virgule comme
+% Le code a donc été revu afin de régler ces incompatibilités.
+% Comme de nombreux pays utilisent la virgule comme
% séparateur décimal, il fait l'objet d'une extension séparée,
% \mbox{\textsf{decimalcomma}}~\cite{DECC}, qui est chargée par \textsf{frenchmath}
% (depuis la version 2.7).
-% Mais, si on utilise \textsf{unicode-math}, il est alors impératif de charger
-% \textsf{frenchmath} \emph{après}.
+% Bien que \textsf{decimalcomma} ne fonctionne avec \textsf{unicode-math}
+% que s'il est chargé après
% \footnote{L'extension \textsf{icomma} présente la même limitation et doit être chargée
-% après \textsf{unicode-math}.}.
+% après \textsf{unicode-math}.},
+% \textsf{frenchmath} s'est affranchi de cette contrainte (depuis la version 2.11).
%
% \medskip
% Lorsque l'on utilise l'extension \textsf{pstricks-add} de \textsf{PSTricks}
@@ -340,7 +351,7 @@
% avec \textsf{frenchmath} ;
% le comportement de \og ;\fg devient identique à celui de \og:\fg.
%
-% \medskip
+% \bigskip
% \DescribeMacro{crochets}
% Alors que les Anglais utilisent généralement les parenthèses
% pour les intervalles ouverts $(0, +\infty)$, l'usage en français est d'utiliser
@@ -349,7 +360,7 @@
% Nous avons redéfini les crochets dans l'extension \textsf{ibrackets}~\cite{BRACKETS}
% qui est chargée par \textsf{frenchmath},
% \DescribeMacro{[noibrackets]}
-% sauf si l'on active l'option \texttt{noibrackets}
+% sauf si on la désactive avec l'option \texttt{noibrackets}
% \footnote{D'autres solutions existent,
% par exemple avec l'extension \textsf{interval}
% ou encore avec la macro \texttt{\string\DeclarePairedDelimiter}
@@ -374,8 +385,8 @@
% et le signe}: par exemple |$x \in ] -\infty, 0]$| produit
% $x \in ] -\infty, 0]$ au lieu de $x \in ]-\infty, 0]$.
% Mais au contraire lorsque l'on veut faire de l'algèbre sur les intervalles,
-% \emph{il faut laisser une espace entre le second crochet et l'opération} + ou -,
-% par exemple, |$[a,b] + [c,d]$| produit $[a,b] + [c,d]$
+% \emph{il faut laisser une espace entre le second crochet et l'opération} + ou --,
+% par exemple, |$[a,b] +[c,d]$| donne $[a,b] +[c,d]$
% mais |$[a,b]+ [c,d]$| produit $[a,b]+ [c,d]$.
%
% En cas de comportement problématique, par exemple si
@@ -405,15 +416,23 @@
% \DescribeMacro{\infeg} \DescribeMacro{\supeg}
% Les relations $\infeg$ et $\supeg$ s'obtiennent avec les commandes |\infeg| et |\supeg|
% et diffèrent des versions anglaises de |\leq| ($\leq$) et |\geq| ($\geq$).
-% Ce sont des alias de |\leqslant| et |\geqslant| de l'extension \textsf{amssymb},
-% chargée par \textsf{frenchmath}.
+% Ce sont des alias de |\leqslant| et |\geqslant| de l'extension \textsf{amssymb}
+% (non chargée par \textsf{frenchmath}).
%
% \medskip
% \DescribeMacro{\vide}
% Le symbole de l'ensemble vide $\vide$
-% s'obtient avec |\vide| (alias de la commande |\varnothing| de l'extension \textsf{amssymb}) ;
+% s'obtient avec |\vide| (alias de la commande |\varnothing|
+% de l'extension \textsf{amssymb}) ;
% il diffère de celui obtenu avec |\emptyset|,
-% particulièrement laid dans la fonte classique Latin Modern : $\cmemptyset$.
+% particulièrement laid dans la fonte classique Latin Modern : $\CMemptyset$.
+%
+% \DescribeMacro{\AMSvarnothing}
+% Avec \textsf{unicode-math} et la fonte mathématique Latin Modern Math
+% (appelée avec |\setmathfont|), |\varnothing| produit le même glyphe
+% laid que |\emptyset|. Pour corriger cela, on dispose de la commande
+% |\AMSvarnothing|, qui doit être appelée dans le préambule
+% et permet d'obtenir le même glyphe que celui de \textsf{amssymb}.
%
% \medskip
% \DescribeMacro{\paral}
@@ -431,10 +450,10 @@
%
% \medskip
% \DescribeMacro{\cmod}
-% Le modulo se compose normalement entre parenthèses, avec |\pmod|,
-% mais on rencontre aussi, en français, le modulo entre crochets,
-% ce que permet la commande |\cmod| en respectant le bon espacement
-% propre au modulo : $ 53 \equiv 5 \cmod{12}$.
+% Le modulo se compose normalement entre parenthèses, avec |\pod| ou |\pmod|,
+% mais, en français, on le rencontre aussi entre crochets,
+% ce que permet la commande |\cmod|, en respectant le bon espacement
+% propre au modulo : $53 \equiv 5 \cmod{12}$.
%
% \subsection{Identifiants de \og fonctions\fg classiques}
%
@@ -492,8 +511,9 @@
% Les repères classiques du plan ou de l'espace seront composés
% avec des hauteurs de flèches homogénéisées :
% |\Oij| compose \Oij, |\Oijk| compose \Oijk et |\Ouv| compose \Ouv
-% (utilisé dans le plan complexe). \DescribeMacro{\Ouv}
-% On peut écrire ces commandes en mode texte, sans les délimiteurs du mode mathématique.
+% (utilisé dans le plan complexe).
+% \DescribeMacro{\Ouv}
+% Ces commandes peuvent être utilisées sans expliciter les délimiteurs du mode mathématique.
%
% \DescribeMacro{\Oij*} \DescribeMacro{\Oijk*} \DescribeMacro{\Ouv*}
% Les versions étoilées utilisent le point-virgule et non la virgule
@@ -503,9 +523,10 @@
% \medskip
% \DescribeMacro{\ij} \DescribeMacro{\ijk}
% Enfin les macros |\ij|
-% \footnote{Notons que la macro \texttt{\string\ij} existait déjà
-% (ligature entre i et j pour le hollandais) et a été redéfinie.}
-% et |\ijk| composent les bases du plan et de l'espace, \ij
+% \footnote{Notons que la macro \texttt{\string\ij} existe déjà
+% (ligature entre i et j pour le hollandais) ; elle a été redéfinie pour le mode
+% mathématique uniquement, qui doit donc ici être explicite : \texttt{\$\string\ij \$}.}
+% et |\ijk| composent les bases du plan et de l'espace, $\ij$
% et \ijk, en homogénéisant la hauteur des flèches.
%
% Signalons que, pour l'extension \textsf{mathptmx} (basée sur la police de texte Times),
@@ -514,8 +535,9 @@
% ce qui permet aux macros ci-dessus de fonctionner normalement.
%
% \subsection{Lettres grecques}
-% La norme concernant l'usage des lettres grecques en italique ou en forme droite
-% pour les mathématiques françaises ne semble pas aussi claire que pour les lettres romaines
+% Dans les mathématiques françaises, la norme concernant l'usage
+% des lettres grecques minuscules en italique ou en forme droite
+% ne semble pas aussi claire que pour les lettres romaines
% et il y a parfois divergence sur ce point.
% Beaucoup recommandent l'usage des lettres grecques
% minuscules en forme droite (\cite{FOUR}~\cite{DESIGN}~\cite{PMISO}), mais certains
@@ -538,29 +560,17 @@
% la documentation de \textsf{isomath} de Günter Milde~\cite{ISOM}
% expose différentes méthodes pour obtenir les lettres grecques
% en forme droite.
-% Par exemple les extensions \textsf{mathdesign}~\cite{DESIGN},
-% \textsf{fourier}~\cite{FOUR}
+% Par exemple les extensions \textsf{fourier}~\cite{FOUR}
+% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
% ou \textsf{kpfonts}~\cite{KPF} disposent d'options permettant
% l'écriture automatique des lettres grecques minuscules en forme droite
-% (ou des majuscules en italique).
+% (et aussi des majuscules en italique) dans la police donnée.
% Citons également \textsf{newpxmath}, \textsf{newtxmath}
-% \footnote{L'extension \textsf{newtxmath} doit être chargée
-% après \textsf{frenchmath} qui utilise \textsf{amssymb} car la compilation
-% produit sinon un message d'erreur ;
-% ou sinon on peut ajouter \texttt{\string\let\string\Bbbk\string\relax}
-% avant de charger \textsf{frenchmath}.}
-% et \textsf{libertinust1math}
-% de Michael Sharpe,
+% et \textsf{libertinust1math} de Michael Sharpe ou
% \textsf{pxgreeks}, \textsf{txgreeks}
-% \footnote{Si on utilise \textsf{amsmath} (ou \textsf{mismath}),
-% \textsf{pxgreeks} ou \textsf{txgreeks} doit être chargée
-% \emph{après} \textsf{amsmath} (ou \textsf{mismath}),
-% pour éviter une erreur de compilation due à la redéfinition des commandes
-% \texttt{\string\iint}, \texttt{\string\iiint}, \texttt{\string\iiiint},
-% \texttt{\string\idotsint}.}
% et \textsf{libgreek} de Jean-François Burnol,
-% qui donnent de beaux résultats pour une utilisation avec
-% respectivement les polices Palatino, Times et Libertinus.
+% qui fournissent les formes droites avec
+% les polices Palatino, Times et Libertine respectivement.
%
% Jean-François Burnol a également développé l'extension \textsf{lgrmath}~\cite{LGR}
% qui permet d'utiliser, en mode mathématique, les différentes fontes de lettres
@@ -571,171 +581,206 @@
% \medskip
% Enfin, comme pour les majuscules, l'extension \textsf{unicode-math}
% réalise cette tâche automatiquement avec l'option \texttt{math-style=french},
-% mais nécessite une compilation avec \XeLaTeX\ ou \LuaLaTeX.
-%
-% \medskip
-% L'extension \textsf{frenchmath} fournit les options décrites ci-dessous
-% qui permettent d'obtenir les lettres grecques en forme droite.
-% Ces options peuvent être utilisées y compris avec \textsf{unicode-math},
-% mais \textsf{frenchmath} doit toujours être chargé
-% \emph{après} \textsf{unicode-math}.
+% mais nécessite une compilation \XeLaTeX\ ou \LuaLaTeX.
%
% \medskip
-% \DescribeEnv{[lgrmath]}
-% En activant l'option \texttt{lgrmath}, \textsf{frenchmath}
-% charge l'extension du même nom avec son option \texttt{style=french}
-% et la fonte \texttt{fcm} (de l'extension \textsf{cm-lgc})
-% \footnote{Évidemment il faut que \textsf{cm-lgc} soit installée
-% sur votre distribution sans quoi la fonte de substitution LGR/cmr/m/n sera utilisée.}.
-% Celle-ci se marie particulièrement bien avec la police usuelle Latin Modern.
-% Les commandes |\alpha|, |\beta|, etc.
-% produisent alors les lettres en forme droite
-% $\alphaup$, $\betaup$, \ldots, $\piup$, etc.,
-% tandis que |\alphait|, |\betait|, etc. produisent des formes italiques
-% $\alphait$, $\betait$, \ldots, $\piit$, etc.
-% Ces dernières sont peu à notre goût, mais on conserve les lettres
-% d'origine avec |\italpha|, |\itbeta| : $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
-%
-% \DescribeMacro{\SaveGreekItalics}
-% On peut aussi choisir d'autres fontes en chargeant l'extension
-% \textsf{lgrmath} indépendamment de \textsf{frenchmath}
-% (voir par exemple les options \texttt{font=Alegreya-LF} ou \texttt{font=Cochineal-LF}
-% de \textsf{lgrmath}).
-% Dans ce cas, il ne faut pas activer l'option \texttt{lgrmath} de \textsf{frenchmath}
-% et, si l'on veut conserver les lettres italiques d'origine,
-% il faut précéder le chargement
-% de \textsf{lgrmath} de la commande |\SaveGreekItalics| ;
-% avec \textsf{unicode-math}, il faut en outre placer cette commande
-% dans un |\AtBeginDocument| avec |\usepackage[style=french,font=...]{lgrmath}|
-% et \emph{après} le chargement de \textsf{unicode-math}.
+% Avant la version 3.0, \textsf{frenchmath} disposait de deux options pour composer
+% les lettres grecques en forme droite : \texttt{lgrmath} et \texttt{upgreek}
+% \footnote{En fait il y avait une troisième option, \texttt{Upgreek}, mais celle-ci
+% est désormais obsolète.}.
+% Inspiré par le travail de Jean-François Burnol, nous avons développé, et intégré
+% à \textsf{frenchmath}, l'extension \textsf{mathgreeks}~\cite{MGREEK}
+% qui permet d'utiliser de nombreuses fontes de lettres grecques
+% sans modifier les autres caractères et symboles.
+% Il suffit d'appeler \textsf{frenchmath} avec une des options de fonte de
+% \textsf{mathgreeks}, de la forme \texttt{clé=valeur}.
+% Par exemple, les lettres grecques droites de la police Utopia,
+% telles que fournies par l'extension \textsf{mathdesign}, s'obtiennent avec
+% \begin{center}
+% |\usepackage[mathdesign=Utopia]{frenchmath}|.
+% \end{center}
+% L'extension \textsf{mathdesign} elle-même ne sera pas chargée.
+% Lorsqu'une valeur n'est pas précisée, il y a toujours une valeur par défaut.
+% Par exemple pour \texttt{mathdesign}, nous avons choisi \texttt{Charter}.
+% Pour \texttt{upgreek}, la fonte par défaut est \texttt{Symbol}.
+% Pour \texttt{lgrmath}, nous avons choisi \texttt{fcm}
+% \footnote{Il faut que l'extension \textsf{cm-lgc} (développée par Alexej Kryukov)
+% soit installée sur votre distribution,
+% sans quoi la fonte de substitution LGR/lmr/m/n sera utilisée.
+% Les formes italiques du thêta $\ittheta$ ou du rho $\itrho$ de \texttt{fcm}
+% ne sont pas vraiment ceux d'usage en mathématiques, mais les formes droites
+% sont bien adaptées.
+% \texttt{Alegreya-LF} est une autre fonte assez élégante pour \texttt{lgrmath},
+% {\mathgreeksfont{enc=LGR,fam=Alegreya-LF,shape=n}\
+% mais produit un \texttt{\string \phi} $\phi$} moins courant et sans la variante
+% $\phi$.
+% }
+% qui se marie particulièrement bien avec la police usuelle Latin Modern.
+%
+% Les commandes |\alpha|, |\beta|, \ldots |\pi|, etc.
+% produisent alors les lettres en forme droite $\alpha$, $\beta$, \ldots, $\pi$, etc.
+% tandis que |\italpha|, |\itbeta|, \ldots, |\itpi|, etc. produisent les formes italiques
+% $\italpha$, $\itbeta$, \ldots, $\itpi$, etc.
+% Si ces dernières déplaisent, on peut activer l'option \texttt{savegreeks}
+% (option booléenne passée à \textsf{mathgreeks}) pour conserver les lettres
+% d'origine avec |\backalpha|, |\backbeta|, \ldots, |\backpi|, etc. :
+% $\backalpha$, $\backbeta$, \ldots, $\backpi$, etc.
%
% \medskip
-% \DescribeEnv{[upgreek]}
-% Avec la même philosophie, \textsf{frenchmath} fournit aussi l'option \texttt{upgreek}
-% basée sur l'extension \textsf{upgreek} de Walter Schmidt~\cite{UPGREEK} qui donne
-% accès à d'autres fontes de lettres grecques minuscules en forme droite avec
-% |\upalpha|, |\upbeta|, etc.
-% L'extension \textsf{upgreek} sera chargée avec son option \texttt{Symbol}
-% \footnote{L'option \texttt{Symbol} de \textsf{upgreek} se marie bien
-% avec une police comme Times par exemple.}
-% utilisant la police Adobe Symbol et qui produit des lettres grecques assez grasses :
-% $\upalphasym$, $\upbetasym$, \ldots, $\uppisym$, etc.
-%
-% Si l'on veut utiliser l'extension \textsf{upgreek}
-% avec l'une des deux autres options disponibles, \texttt{Euler}
-% (qui produit $\upalpha, \upbeta, \ldots, \uppi$, etc.)
-% ou \texttt{Symbolsmallscale},
-% il faut charger l'extension \textsf{upgreek} avec l'option souhaitée
-% indépendamment de \mbox{\textsf{frenchmath}}.
-% Par contre, pour que les commandes |\alpha|, |\beta|\ldots correspondent
-% aux formes droites (comme alias de |\upalpha|, |\upbeta|\ldots),
-% il faut ici conserver l'option \texttt{upgreek} de \textsf{frenchmath}.
-% Comme pour \textsf{lgrmath}, si l'on veut que les formes italiques d'origine
-% restent toujours disponibles avec les commandes
-% |\italpha|, |\itbeta|, etc.,
-% il faut précéder le chargement de l'extension \textsf{upgreek} de la commande
-% |\SaveGreekItalics| ;
-% \DescribeMacro{\upgreekUndefined}
-% et si l'on utilise \textsf{unicode-math}, il faut en outre ajouter la commande
-% |\upgreekUndefined| avant le |\usepackage[...]{upgreek}| et les trois
-% dans un |\AtBeginDocument| placé \emph{entre} le chargement de \textsf{unicode-math}
-% et celui de \textsf{frenchmath}
-% \footnote{Tout cela est bien contraignant, mais c'est lié au fonctionnement capricieux
-% de \textsf{unicode-math} qui génère de nombreuses incompatibilités. Ceci dit,
-% on n'a en principe besoin de nos options de lettres grecques droites que si l'on n'est
-% pas satisfait de celles fournies par \textsf{unicode-math}.}.
+% Nous présentons ci-après quelques unes des nombreuses options possibles.
+% On se référera à la documentation de \textsf{mathgreeks}~\cite{MGREEK}
+% pour d'autres exemples ou pour les formes italiques correspondantes.
+% La seconde ligne de chaque exemple contient, outre les majuscules,
+% des variantes obtenues avec |\varpepsilon|, |\vartheta|, etc.
+% (sans effet avec la clé \texttt{lgrmath}, excepté pour |\varsigma|).
+% Les clés sans valeur sont en fait des booléens dont la valeur par défaut est \texttt{true}.
%
% \medskip
-% \DescribeEnv{[Upgreek]}
-% Avec \LaTeX, les lettres grecques majuscules sont automatiquement composées
-% en forme droite et l'option \texttt{upgreek} ne concerne que les minuscules.
-% Cependant l'extension \textsf{upgreek}
-% propose aussi |\Upgamma|, \ldots, |Upomega| : $\Upgamma, \ldots, \Upomega$.
-% Afin de conserver majuscules et minuscules dans le même style,
-% \textsf{frenchmath} fournit l'option \texttt{Upgreek} qui redéfinit les majuscules
-% |\Gamma|, \ldots, |\Omega| pour correspondre à ces variantes.
-% Par contre l'on n'a alors plus accès aux caractères d'origine : $\Gamma, \ldots, \Omega$.
-% L'option \texttt{Upgreek} reprend aussi
-% les minuscules grecques de l'option \texttt{upgreek}, qu'il est donc
-% inutile d'invoquer simultanément.
+% \DeleteShortVerb{\|}
+% \newcommand\eg{\texttt{=}}
+% \noindent\begin{tabular}{|l|c|}
+% \hline
+% Option \texttt{clé=valeur} & Résultat \\
+% \hline
+% \textbf{lgrmath\eg Cochineal-LF} &
+% \mathgreeksfont{enc=LGR, fam=Cochineal-LF, shape=n}
+% \greektable \\
+% \hline
+% \textbf{lgrmath\eg fcm} &
+% \mathgreeksfont{enc=LGR, fam=fcm, shape=n}
+% \greektable \\
+% \hline
+% \textbf{upgreek\eg Euler} &
+% \mathgreeksfont{enc=U, fam=eur, shape=n}
+% \greektable \\
+% \hline
+% \textbf{upgreek\eg Symbol} &
+% \mathgreeksfont{enc=U, fam=psy, shape=n}
+% \greektable \\
+% \hline
+% \textbf{mathdesign\eg Charter} &
+% \mathgreeksfont{enc=OML, fam=mdbch, shape=n}
+% \greektable \\
+% \hline
+% \textbf{fourier} &
+% \mathgreeksfont{enc=FML, fam=futm}
+% \greektable \\
+% \hline
+% \textbf{pxfonts} &
+% \mathgreeksfont{enc=U, fam=pxmia}
+% \greektable \\
+% \hline
+% \textbf{txfonts} &
+% \mathgreeksfont{enc=U, fam=txmia}
+% \greektable \\
+% \hline
+% \textbf{libertinus} &
+% \mathgreeksfont{enc=LS1, fam=libertinust1math, shape=n}
+% \greektable \\
+% \hline
+% \end{tabular}
+% \MakeShortVerb{|}
+
+% \bigskip
+% Une option spéciale, \texttt{libsans} (booléen), permet d'obtenir une fonte
+% sans empattement pour \texttt{libertinus}.
+% Une autre option, non présentée dans le tableau, est \textbf{kpfonts},
+% avec deux valeurs possibles. Enfin
+% deux autres options sont disponibles, mais pour une compilation avec
+% \LuaLaTeX\ (ou \XeLaTeX):
+% \begin{description}
+% \item[fontspec\eg \ldots] De nombreuses valeurs sont possibles, par exemple
+% \texttt{FreeSerif},
+% \texttt{LiberationSerif},
+% \texttt{GFS Artemisia},
+% \texttt{GFS Didot} (valeur par défaut)\ldots
+% mais aussi des polices non libres comme \texttt{Cambria}, \texttt{Arial},
+% \texttt{Palatino Linotype}, \texttt{Times New Roman}\ldots\
+% si elles sont installées sur votre système ;
+% nécessite de charger l'extension \textsf{fontspec}
+% \footnote{L'extension \textsf{fontspec} est chargée automatiquement par
+% \textsf{unicode-math} ou \textsf{mathspec} (cette dernière étant spécifique à
+% \XeLaTeX), mais l'option \texttt{fontspec} permet une variété de polices
+% TrueType ou OpenType bien plus grande que l'option \texttt{unicode-math}.}.
+%
+% \item[unicode-math\eg \ldots]
+% Donne un beau résultat avec \texttt{Latin Modern Math} (valeur par défaut)
+% ou \texttt{STIX Two Math} ; nécessite le module \textsf{unicode-math}.
+%
+% \end{description}
%
% \medskip
-% Signalons aussi l'extension \textsf{textalpha} de Günter Milde~\cite{ALPHA} qui
-% donne accès aux lettres en forme droite \textalpha, \textbeta, \ldots,
-% \textpi, etc.,
-% mais en mode texte avec |\textalpha|, |\textbeta|, etc.
-% Ces glyphes, semblables à celles de la fonte \texttt{lmr} accessible avec \textsf{lgrmath},
-% se marient également bien avec la police Latin Modern,
-% par contre le thêta produit, \texttheta, n'est pas vraiment
-% celui qui est d'usage en mathématiques.
+% Par défaut \LaTeX\ compose les majuscules grecques en forme droite et il
+% n'est donc pas indispensable de recoder celles-ci. L'option \texttt{uppercase=false}
+% permet de conserver les majuscules d'origine : $\backGamma$, $\backDelta$, \ldots,
+% $\backOmega$ (sans le préfixe |\back...|).
%
% \medskip
% Mentionnons pour finir ce commentaire de Walter Schmidt~\cite{UPGREEK} que le mu
-% utilisé pour le préfixe des unités physiques, \textmicro, doit se composer avec |\textmu|
+% utilisé pour le préfixe des unités physiques, \textmu, doit se composer avec |\textmu|
% \footnote{L'extension \textsf{textalpha} fournit à la place \texttt{\string\textmicro}
% (depuis 2020) car elle redéfinit \texttt{\string\textmu}.},
% disponible en mode texte dans beaucoup de fontes (ou avec \textsf{textcomp}) ;
-% il diffère du $\mu$ droit mathématique.
+% il diffère du $\mu$ droit mathématique, obtenu avec |$\mu$| si l'on a activé
+% une des options de fonte précédentes.
+%
%
% \StopEventually{}
%
% \section{Le code}
%
+% Les seules options de \textsf{frenchmath} sont \texttt{capsit} et \texttt{noibrackets}.
+% Tout le travail sur les lettre grecques est dorénavant géré par \textsf{mathgreeks}
+% et toute option inconnue de \textsf{frenchmath} sera passée à \textsf{mathgreeks}.
+% Auquel cas, l'on y ajoute automatiquement l'option \texttt{upright}
+% pour composer les lettres grecques en forme droite.
+% Si l'on donne une clé ou une valeur invalide, c'est alors \textsf{mathgreeks} qui produira
+% un message d'erreur.
+%
% \begin{macrocode}
-\newif\ifcapsit
-\DeclareOption{capsit}{\capsittrue}
-\newif\iflgrmath
-\DeclareOption{lgrmath}{\lgrmathtrue}
-\newif\ifupgreek
-\DeclareOption{upgreek}{\upgreektrue}
-\newif\ifUpgreek
-\DeclareOption{Upgreek}{\Upgreektrue\upgreektrue}
-\newif\ifnoibrackets
-\DeclareOption{noibrackets}{\noibracketstrue}
+\newif\iffrenchmath@capsit
+\DeclareOption{capsit}{\frenchmath@capsittrue}
+\newif\iffrenchmath@noibrackets
+\DeclareOption{noibrackets}{\frenchmath@noibracketstrue}
+\newif\iffrenchmath@mathgreeks
+\DeclareOption*{\frenchmath@mathgreekstrue
+ \PassOptionsToPackage{\CurrentOption,upright}{mathgreeks}}
\ProcessOptions \relax
-\@ifpackageloaded{unicode-math}{
- \@ifpackageloaded{mathdesign}{
- \PackageInfo{frenchmath}{Package mathdesign
- is loaded, \MessageBreak
- I don't load mathrsfs and amssymb}
- }{
- %\let\circledS\relax % utilisé uniquement par mathdesign
- \let\eth\relax % 3 incompatibilités unicode-math / amssymb
- \let\digamma\relax
- \let\backepsilon\relax
- \RequirePackage{amssymb}
- \PackageInfo{frenchmath}{Package unicode-math
- is loaded, \MessageBreak
- I don't load mathrsfs}
- }
- \let\vide\varnothing % \varnothing sera écrasé par unicode-math
-}{
- \AtBeginDocument{
- \@ifpackageloaded{mathdesign}{
- \PackageInfo{frenchmath}{Package mathdesign
- is loaded, \MessageBreak
- I don't load mathrsfs and amssymb}
- }{
- \RequirePackage{amssymb} % \leqslant, \geqslant, \varnothing
- \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
- \PackageInfo{frenchmath}{Command \string\mathscr\space
- already defined, \MessageBreak
- I don't load mathrsfs}
- }
- }
- }
-}
+% \end{macrocode}
+% Assurer une bonne compatibilité avec \textsf{unicode-math} est un peu compliqué
+% car \textsf{unicode-math} définit ou redéfinit de nombreux symboles, lettres,
+% signes dans |\AtBeginDocument|. Les extensions \textsf{decimalcomma}
+% et \textsf{ibrackets} font déjà appel à |\AtBeginDocument| mais pour garantir
+% que leur action soit bien postérieure à celle de \textsf{unicode-math}
+% leur appel a été placé dans un |\AtEndPreamble|, fourni par l'extension \textsf{etoolbox}.
+% Il y a par contre un problème si on utilise une instruction comme |\MakeShortVerb"| du
+% module \textsf{shortvrb} ou |\lstMakeShortInline"| du module \mbox{\textsf{listings}}.
+% Ce type d'instruction doit agir \emph{après} \textsf{frenchmath}, donc être
+% placée après |\begin{document}| ou bien dans un |\AtBeginDocument{...}|.
+%
+% L'extension \textsf{mathptmx} ne fournit pas de |\jmath| mais considère néanmoins
+% cette commande comme existante. Dans ce cas, nous la rendons donc \og indéfinie \fg
+% pour la définir ensuite dans une commande générale faisant appel
+% à l'extension \textsf{dotlessj}.
+% \begin{macrocode}
\RequirePackage{amsopn} % fournit \DeclareMathOperator
-\@ifpackageloaded{mathptmx}{\RequirePackage{dotlessj}}{}
\RequirePackage{xspace} % utile pour les commandes \ssi, \Oij
-\ifnoibrackets\else\RequirePackage{ibrackets}\fi % intelligent brackets
-\RequirePackage{decimalcomma} % depuis frenchmath 2.7
+\RequirePackage{etoolbox} % fournit \AtEndPreamble
+\iffrenchmath@mathgreeks \RequirePackage{mathgreeks} \fi
+\AtEndPreamble{
+ \RequirePackage{decimalcomma}
+ \iffrenchmath@noibrackets\else\RequirePackage{ibrackets}\fi
+ \@ifpackageloaded{mathptmx}{\let\jmath\@undefined}{}
+ \@ifundefined{jmath}{\RequirePackage{dotlessj}}{}
+ \@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}
+}
% \end{macrocode}
%
% \DescribeMacro{\DeclareMathUp}
-% Sauf si l'option \texttt{capsit} est activée, on redéfinit toutes les lettres majuscules
+% Sauf si l'on a invoqué l'option \texttt{capsup=false} (ou \texttt{capsit}),
+% on redéfinit toutes les lettres majuscules
% du mode mathématique grâce à la commande |\DeclareMathUp|.
% Contrairement aux bascules |\MathUp| et |\MathIt| de l'extension \textsf{mismath},
% |\DeclareMathUp| ne fonctionne que dans le préambule, mais son code est bien plus simple
@@ -753,14 +798,14 @@
% se trouve sur le forum de discussion \texttt{iterate190.rssing.com},
% en réponse à \og TeX How to iterate over a comma separated list$?$\fg.
% Que son auteur, Petr Olšák, soit remercié.
-% Cette macro a été définie de manière identique dans \textsf{mismath},
+% Cette macro a d'ailleurs été utilisée de manière identique dans \textsf{mismath},
% mais cela ne génère pas d'incompatibilité.}.
% |\AtBeginDocument| est nécessaire pour que ces définitions
% soient prises en compte avec la classe \textsf{beamer} par exemple,
% ou avec \textsf{unicode-math}.
% \smallskip
% \begin{macrocode}
-\newcommand*\DeclareMathUp[1]{
+\providecommand*\DeclareMathUp[1]{
\DeclareMathSymbol{#1}{\mathalpha}{operators}{`#1}}
\def\apply#1#2{\apply@#1#2,\apply@,}
@@ -768,33 +813,102 @@
\else #1{#2}\afterfi@{\apply@#1}\fi}
\def\afterfi@#1#2\fi{\fi#1}
-\ifcapsit\else\AtBeginDocument{
+\AtEndPreamble{\iffrenchmath@capsit\else\AtBeginDocument{
\apply\DeclareMathUp{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}
- }
-\fi
+ }\fi
+}
-\AtBeginDocument{\@ifpackageloaded{pstricks-add}{\psset{comma=true}}{}}
-\DeclareMathSymbol{;}{\mathbin}{operators}{'73} % \mathpunct à l'origine
+% \end{macrocode}
+% En utilisant |\AtEndPreamble| (de l'extension \mbox{\textsf{etoolbox}}),
+% avec |\AtBeginDocument| à l'intérieur, on garantit que certaines actions
+% auront bien lieu après celles de \textsf{unicode-math},
+% même si \textsf{frenchmath} est chargé avant \mbox{\textsf{unicode-math}}.
+%
+% Certains symboles, provenant de \textsf{amssymb} sont déjà définis par certaines
+% extensions (\textsf{mathdesign} ou \textsf{unicode-math}) et ne seront pas redéfinis.
+% Un avertissement sera affiché dans ce cas. Comme \textsf{amssymb}
+% (qui utilise \textsf{amsfonts}) charge plusieurs fontes mathématiques et un grand
+% nombre de symboles pas forcément nécessaires, nous n'avons extrait que les
+% trois symboles dont nous avons besoin dans cette extension :
+% |\leqslant|, |\geqslant| et |\varnothing|.
+% \begin{macrocode}
+\AtEndPreamble{% au cas où frenchmath est chargé avant unicode-math
+ \AtBeginDocument{% après actions de unicode-math
+ \DeclareMathSymbol{;}{\mathbin}{operators}{'73} % et non \mathpunct
+ \@ifundefined{mathscr}{\RequirePackage{mathrsfs}}{
+ \PackageWarningNoLine{frenchmath}{Command \string\mathscr\space
+ already defined, \MessageBreak
+ I don't load mathrsfs}
+ }
+ \@ifundefined{leqslant}{
+ \DeclareSymbolFont{AMSa}{U}{msa}{m}{n}% de amsfonts
+ \DeclareMathSymbol{\leqslant}{\mathrel}{AMSa}{"36}% de amssymb
+ \DeclareMathSymbol{\geqslant}{\mathrel}{AMSa}{"3E}
+ }{
+ \PackageWarningNoLine{frenchmath}{\string\leqslant\space
+ and \string\geqslant\space already defined,
+ \MessageBreak
+ they will not be redefined}
+ }
+ \@ifundefined{varnothing}{% de amssymb
+ \newcommand\varnothing{% \usefont évite de déclarer AMSb
+ \mathord{\text{\usefont{U}{AMSb}{m}{n}\symbol{"3F}}}}
+ }{
+ \PackageWarningNoLine{frenchmath}{\string\varnothing\space
+ already defined,
+ \MessageBreak
+ it will not be redefined,
+ \MessageBreak
+ except by using \string\AMSvarnothing}
+ }
+ }
+}
% \end{macrocode}
-% Passons aux alias et identifiants de fonctions classiques.
+% Voyons les alias et quelques commandes particulières.
+%
+% La commande |\varnothing| produit $\varnothing$ mais par contre,
+% le symbole fournit par \textsf{unicode-math}, avec \textsf{Latin Modern Math},
+% est très laid et malheureusement identique à |\emptyset| : $\CMemptyset$.
+% Afin de récupérer le symbole de \textsf{amssymb}, sans être obligé de charger
+% cette extension, nous proposons la commande |\AMSvarnothing|,
+% à placer dans le préambule, après l'appel de \textsf{unicode-math}.
% \begin{macrocode}
\newcommand\curs{\mathscr}
\newcommand\infeg{\leqslant}
\newcommand\supeg{\geqslant}
-\@ifundefined{vide}{\newcommand\vide{\varnothing}}{}
+\newcommand\vide{\varnothing}
+\newcommand\AMSvarnothing{% doit être appelé après \setmathfont ?
+ \AtEndPreamble{\AtBeginDocument{% après actions de unicode-math
+ \renewcommand\varnothing{%
+ \mathord{\text{\usefont{U}{AMSb}{m}{n}\symbol{"3F}}}}
+ }}
+}
% \end{macrocode}
% La définition de |\paral| remplace, depuis la version 2.2,
% l'ancienne définition plus simple |\mathrel{/\!\!/}|, mais qui donnait des barres
-% trop serrées avec \textsf{mathastext} + \textsf{times} ou avec \textsf{libertinust1math}.
+% trop serrées avec \mbox{\textsf{mathastext}} + \textsf{times}
+% ou avec \textsf{libertinust1math}.
% Merci à Jean-François Burnol de me l'avoir fait remarquer
% et pour ses suggestions dans la mise au point d'une macro plus efficace.
+%
+% La macro |\cmod|, copiée du |\pod| de \textsf{amsmath} (depuis v2.11),
+% permet de gérer différemment
+% l'espacement en mode \og mathématiques centrées \fg (hors-ligne)
+% ou en mode \og en ligne \fg.
% \begin{macrocode}
\newcommand\paral{\mathrel{\ooalign{$\mkern-1.75mu/\mkern1.75mu$\cr%
$\mkern1.75mu/\mkern-1.75mu$}}}
\newcommand\ssi{si, et seulement si,\xspace}
-\newcommand*\cmod[1]{\quad[#1]}
+%\newcommand*\cmod[1]{\quad[#1]}
+\newif\if@display % provient de amsmath, peut être appelé 2 fois
+\everydisplay\@xp{\the\everydisplay \@displaytrue}
+\newcommand*\cmod[1]{\penalty \z@ % similaire à amsmath \allowbreak
+ \if@display\mkern 18mu\else\mkern 8mu\fi [#1]}
+% \end{macrocode}
+% Passons aux identifiants de fonctions classiques.
+% \begin{macrocode}
\DeclareMathOperator{\pgcd}{pgcd}
\DeclareMathOperator{\ppcm}{ppcm}
\DeclareMathOperator{\card}{card}
@@ -811,7 +925,7 @@
\DeclareMathOperator{\cosech}{cosech}
% \end{macrocode}
-% Présentons les commandes pour les bases et repères, qui peuvent être utilisées
+% Les commandes pour les bases et repères peuvent être utilisées
% en mode texte grâce à |\ensuremath| (et |\xspace| qui garantit le bon espacement).
% \begin{macrocode}
\newcommand\@Oij{%
@@ -838,9 +952,10 @@
\ensuremath{\left(O ; \vec{u}, \vec{v}\,\right)}\xspace}
\newcommand\Ouv{\@ifstar{\@@Ouv}{\@Ouv}}
-\AtBeginDocument{
- \renewcommand\ij{%
- \ensuremath{\left(\vec{\imath}, \vec{\jmath}\,\right)}\xspace}}
+\AtBeginDocument{\let\oldij\ij %\ij existe déjà (mode texte)
+ \renewcommand\ij{\TextOrMath{\oldij}{%
+ \left(\vec{\imath}, \vec{\jmath}\,\right)}}
+}
\newcommand\ijk{%
\ensuremath{%
\left(\vec{\vphantom{t}\imath}, \vec{\vphantom{t}\jmath},
@@ -848,141 +963,9 @@
\xspace}
% \end{macrocode}
-% Ce n'est qu'à la fin du préambule, donc avec |\AtBeginDocument|, que l'on examine
-% les options \texttt{lgrmath} ou \texttt{upgreek},
-% pour que cela fonctionne avec \textsf{unicode-math} et
-% pour laisser à l'utilisateur la possibilité de charger \textsf{upgreek}
-% après \textsf{frenchmath} et éviter un conflit d'option.
-% On sauvegarde les lettres grecques d'origine dans les macros |\italpha|, \ldots,
-% |\itomega|, grâce à la commande |\SavedGreekItalics|.
-% La macro |\upgreekUndefined| ne sert que si l'on veut utiliser \textsf{upgreek}
-% avec \textsf{unicode-math} : elle permet de \og vider \fg la définition
-% de |\upalpha|, |\upbeta|\ldots, car sinon leur redéfinition par \textsf{upgreek}
-% est impossible.
-% \begin{macrocode}
-\providecommand\SaveGreekItalics{% pourrait être définie ailleurs
- \let\italpha\alpha
- \let\itbeta\beta
- \let\itgamma\gamma
- \let\itdelta\delta
- \let\itepsilon\epsilon
- \let\itzeta\zeta
- \let\iteta\eta
- \let\ittheta\theta
- \let\itiota\iota
- \let\itkappa\kappa
- \let\itlambda\lambda
- \let\itmu\mu
- \let\itnu\nu
- \let\itxi\xi
- \let\itpi\pi
- \let\itrho\rho
- \let\itsigma\sigma
- \let\ittau\tau
- \let\itupsilon\upsilon
- \let\itphi\phi
- \let\itchi\chi
- \let\itpsi\psi
- \let\itomega\omega
- \let\itvarepsilon\varepsilon
- \let\itvartheta\vartheta
- \let\itvarpi\varpi
- \let\itvarsigma\varsigma
- \let\itvarphi\varphi
-}
-
-\providecommand\upgreekUndefined{
- \let\upalpha\@undefined
- \let\upbeta\@undefined
- \let\upgamma\@undefined
- \let\updelta\@undefined
- \let\upepsilon\@undefined
- \let\upzeta\@undefined
- \let\upeta\@undefined
- \let\uptheta\@undefined
- \let\upiota\@undefined
- \let\upkappa\@undefined
- \let\uplambda\@undefined
- \let\upmu\@undefined
- \let\upnu\@undefined
- \let\upxi\@undefined
- \let\uppi\@undefined
- \let\uprho\@undefined
- \let\upsigma\@undefined
- \let\uptau\@undefined
- \let\upupsilon\@undefined
- \let\upphi\@undefined
- \let\upchi\@undefined
- \let\uppsi\@undefined
- \let\upomega\@undefined
- \let\upvarepsilon\@undefined
- \let\upvartheta\@undefined
- \let\upvarpi\@undefined
- \let\upvarrho\@undefined
- \let\upvarsigma\@undefined
- \let\upvarphi\@undefined
-}
-
-\AtBeginDocument{
- \iflgrmath
- \SaveGreekItalics
- \RequirePackage[font=fcm,style=french]{lgrmath}
- \fi
- \ifupgreek
- \@ifpackageloaded{upgreek}{}{
- \@ifpackageloaded{unicode-math}{\upgreekUndefined}{}
- \SaveGreekItalics
- \RequirePackage[Symbol]{upgreek}
- }
- \renewcommand\alpha{\upalpha}
- \renewcommand\beta{\upbeta}
- \renewcommand\gamma{\upgamma}
- \renewcommand\delta{\updelta}
- \renewcommand\epsilon{\upepsilon}
- \renewcommand\zeta{\upzeta}
- \renewcommand\eta{\upeta}
- \renewcommand\theta{\uptheta}
- \renewcommand\iota{\upiota}
- \renewcommand\kappa{\upkappa}
- \renewcommand\lambda{\uplambda}
- \renewcommand\mu{\upmu}
- \renewcommand\nu{\upnu}
- \renewcommand\xi{\upxi}
- \renewcommand\pi{\uppi}
- \renewcommand\rho{\uprho}
- \renewcommand\sigma{\upsigma}
- \renewcommand\tau{\uptau}
- \renewcommand\upsilon{\upupsilon}
- \renewcommand\phi{\upphi}
- \renewcommand\chi{\upchi}
- \renewcommand\psi{\uppsi}
- \renewcommand\omega{\upomega}
- \renewcommand\varepsilon{\upvarepsilon}
- \renewcommand\vartheta{\upvartheta}
- \renewcommand\varpi{\upvarpi}
- \renewcommand\varrho{\upvarrho}
- \renewcommand\varsigma{\upvarsigma}
- \renewcommand\varphi{\upvarphi}
- \fi
- \ifUpgreek
- % unicode-math utilise \upGamma, \upDelta...
- \renewcommand\Gamma{\Upgamma}
- \renewcommand\Delta{\Updelta}
- \renewcommand\Theta{\Uptheta}
- \renewcommand\Lambda{\Uplambda}
- \renewcommand\Xi{\Upxi}
- \renewcommand\Pi{\Uppi}
- \renewcommand\Sigma{\Upsigma}
- \renewcommand\Upsilon{\Upupsilon}
- \renewcommand\Phi{\Upphi}
- \renewcommand\Psi{\Uppsi}
- \renewcommand\Omega{\Upomega}
- \fi
-}
-% \end{macrocode}
%
% \medskip
-% \begin{thebibliography}{31}
+% \begin{thebibliography}{32}
% \begin{raggedright}
% \bibitem{RTIN} \emph{Lexique des règles typographiques en usage à l’Imprimerie Nationale},
% édition du 26/08/2002.
@@ -1010,6 +993,12 @@
% Claudio Beccari, CTAN, v1.2.00 2021/08/04.
% \bibitem{MAFR} \emph{La distribution \textsf{mafr}}, Christian Obrecht,
% CTAN, v1.0 17/09/2006.
+% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\
+% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
+% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel,
+% CTAN, v1.3 22/06/2009.
+% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
+% CTAN, v2.0 23/12/2023.
% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
% Khaled Hosny, and others, CTAN, v0.8r 13/08/2023.
@@ -1017,16 +1006,12 @@
% Michel Bovani, CTAN, v1.3 30/01/2005.
% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
% Paul Pichaureau, CTAN, v2.31 29/08/2013.
-% \bibitem{MIS} \emph{\textsf{mismath} -- Miscellaneous mathematical macros},
-% Antoine Missier, CTAN, v2.10 20/02/2024.
+% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
+% Christophe Caignaert, CTAN, v3.34 20/09/2022.
+% \bibitem{MIS} \emph{Miscellaneous mathematical macros -- The \textsf{mismath} package},
+% Antoine Missier, CTAN, v3.0 04/05/2024.
% \bibitem{VECT} \emph{\textsf{esvect} -- Typesetting vectors with beautiful
% arrow with \LaTeXe}, Eddie Saudrais, CTAN, v1.3 11/07/2013.
-% \bibitem{FRM} \emph{L'extension \textsf{tdsfrmath}}, Yvon Henel,
-% CTAN, v1.3 22/06/2009.
-% \bibitem{TABL} \emph{L'extension \textsf{tablvar}}, Antoine Missier,
-% CTAN, v2.0 23/12/2023.
-% \bibitem{BABEL} \emph{A Babel language definition file for French}, extension \LaTeX\
-% \textsf{babel-french} de Daniel Flipo, CTAN, v3.5c 14/09/2018.
% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe}.
% Walter Schmidt, CTAN, v2.0 10/03/2002.
% \bibitem{NCC} \emph{The \textsf{ncccomma} package}. Alexander I.~Rozhenko,
@@ -1043,12 +1028,12 @@
% \bibitem{MATAL} \emph{The \textsf{mathalpha}, \textsc{aka} \textsf{mathalfa} package},
% Michael Sharpe, CTAN, v1.143 18/11/2021.
% \bibitem{DLJ} \emph{\textsf{dotlessj}}, David Carlisle, CTAN, v0.03 09/12/1998.
-% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
-% Christophe Caignaert, CTAN, v3.34 20/09/2022.
% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN,
% v1.0 16/11/2022.
% \bibitem{UPGREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt, CTAN,
% v2.0 12/03/2003.
+% \bibitem{MGREEK} \emph{The \textsf{mathgreeks} package}, Antoine Missier, CTAN,
+% v1.1 04/05/2024.
% \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
% (partie de l'extension \textsf{greek-fontenc}), Günter Milde, CTAN, v2.1 14/06/2022.
% \bibitem{COMP} \emph{\LaTeX\ Companion}, Frank Mittelbach, Michel Goossens,
diff --git a/macros/latex/contrib/frenchmath/frenchmath.pdf b/macros/latex/contrib/frenchmath/frenchmath.pdf
index 566efe4362..390f22cede 100644
--- a/macros/latex/contrib/frenchmath/frenchmath.pdf
+++ b/macros/latex/contrib/frenchmath/frenchmath.pdf
Binary files differ
diff --git a/macros/latex/contrib/huaz/README b/macros/latex/contrib/huaz/README
index b37490a04a..4e8306629f 100644
--- a/macros/latex/contrib/huaz/README
+++ b/macros/latex/contrib/huaz/README
@@ -14,7 +14,7 @@ version 2005/12/01 or later.
This work has the LPPL maintenance status `maintained'.
-The Current Maintainer of this work is Tibor Tomacs.
+The Current Maintainer of this work is Tibor Tómács.
This work consists of the files
diff --git a/macros/latex/contrib/huaz/huaz.pdf b/macros/latex/contrib/huaz/huaz.pdf
index fe31b1cfad..1de65fbd30 100644
--- a/macros/latex/contrib/huaz/huaz.pdf
+++ b/macros/latex/contrib/huaz/huaz.pdf
Binary files differ
diff --git a/macros/latex/contrib/huaz/huaz.sty b/macros/latex/contrib/huaz/huaz.sty
index 1a9435bfff..19ae1dacba 100644
--- a/macros/latex/contrib/huaz/huaz.sty
+++ b/macros/latex/contrib/huaz/huaz.sty
@@ -3,7 +3,7 @@
%%
%% Automatic Hungarian definite articles
%%
-%% Copyright 2022-2024 by Tibor Tomacs
+%% Copyright 2022-2024 by Tibor Tómács
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -15,10 +15,10 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is Tibor Tomacs.
+%% The Current Maintainer of this work is Tibor Tómács.
%%
\NeedsTeXFormat{LaTeX2e}[2021/10/10]
-\ProvidesPackage{huaz}[2024/04/20 v1.2 Automatic Hungarian definite articles]
+\ProvidesPackage{huaz}[2024/05/05 v2.1 Automatic Hungarian definite articles]
\RequirePackage{xstring,refcount,iftex}
@@ -33,36 +33,62 @@
%=================================================
%
% utf8:
-% \huaz@list@A = ö,ü,ó,Å‘,ú,é,á,ű,í,Ö,Ãœ,Ó,Å,Ú,É,Ã,Å°,Ã,Ä,À,Ã,Â,Ä‚,Ã…,Ä„,Æ,ä,à,ã,â,ă,Ã¥,Ä…,æ,Ë,È,Ê,Äš,Ę,ë,è,ê,Ä›,Ä™,Ã,Ã,ÃŒ,ÃŽ,ï,ì,î,Ã’,Õ,Ô,Ø,OE,ò,õ,ô,ø,Ù,Û,Å®,ù,û,ů
-% \huaz@list@X = Ĺ,Å,ļ,ĺ,Å‚,Å…,Ń,Ñ,Ň,ÅŠ,Å„,ñ,ň,Å‹,Å–,Å”,Ř,Å—,Å•,Å™,Åž,Ș,Åš,Å ,ÅŸ,È™,Å›,Å¡,Ÿ,Ã,ÿ,ý
+% \huaz@list@A = ö,ü,ó,Å‘,ú,é,á,ű,í,Ö,Ãœ,Ó,Å,Ú,É,Ã,Å°,Ã,Ä,À,Ã,Â,Ä‚,Ã…,Ä„,Æ,ä,à,ã,â,ă,Ã¥,Ä…,æ,
+% Ë,È,Ê,Äš,Ę,ë,è,ê,Ä›,Ä™,Ã,Ã,ÃŒ,ÃŽ,ï,ì,î,Ã’,Õ,Ô,Ø,OE,ò,õ,ô,ø,Ù,Û,Å®,ù,û,ů
+% \huaz@list@S = Ĺ,Å,ļ,ĺ,Å‚,Å…,Ń,Ñ,Ň,ÅŠ,Å„,ñ,ň,Å‹,Å–,Å”,Ř,Å—,Å•,Å™,Åž,Ș,Åš,Å ,ÅŸ,È™,Å›,Å¡,Ÿ,Ã,ÿ,ý
%
% latin2:
% \huaz@list@A = Ä„,Ä…,Ã,Â,Ä‚,Ä,É,Ę,Ë,Äš,Ã,ÃŽ,Ó,Ô,Å,Ö,Å®,Ú,Å°,Ãœ,á,â,ă,ä,é,Ä™,ë,Ä›,í
-% \huaz@list@X = Ľ,Åš,Å ,Åž,Å›,Å¡,ÅŸ,Å”,Ĺ,Ń,Ň,Ř,Ã,ĺ
+% \huaz@list@S = Ľ,Åš,Å ,Åž,Å›,Å¡,ÅŸ,Å”,Ĺ,Ń,Ň,Ř,Ã,ĺ
%
%=================================================
-\ifpdftex
+\ifpdftex% latex, pdflatex
\def\huaz@utfviii{utf8}
\ifx\inputencodingname\huaz@utfviii
- \def\huaz@list@A{^^c3^^b6,^^c3^^bc,^^c3^^b3,^^c5^^91,^^c3^^ba,^^c3^^a9,^^c3^^a1,^^c5^^b1,^^c3^^ad,^^c3^^96,^^c3^^9c,^^c3^^93,^^c5^^90,^^c3^^9a,^^c3^^89,^^c3^^81,^^c5^^b0,^^c3^^8d,^^c3^^84,^^c3^^80,^^c3^^83,^^c3^^82,^^c4^^82,^^c3^^85,^^c4^^84,^^c3^^86,^^c3^^a4,^^c3^^a0,^^c3^^a3,^^c3^^a2,^^c4^^83,^^c3^^a5,^^c4^^85,^^c3^^a6,^^c3^^8b,^^c3^^88,^^c3^^8a,^^c4^^9a,^^c4^^98,^^c3^^ab,^^c3^^a8,^^c3^^aa,^^c4^^9b,^^c4^^99,^^c3^^8f,^^c3^^8d,^^c3^^8c,^^c3^^8e,^^c3^^af,^^c3^^ac,^^c3^^ae,^^c3^^92,^^c3^^95,^^c3^^94,^^c3^^98,^^4f^^45,^^c3^^b2,^^c3^^b5,^^c3^^b4,^^c3^^b8,^^c3^^99,^^c3^^9b,^^c5^^ae,^^c3^^b9,^^c3^^bb,^^c5^^af}
- \def\huaz@list@X{^^c4^^b9,^^c5^^81,^^c4^^bc,^^c4^^ba,^^c5^^82,^^c5^^85,^^c5^^83,^^c3^^91,^^c5^^87,^^c5^^8a,^^c5^^84,^^c3^^b1,^^c5^^88,^^c5^^8b,^^c5^^96,^^c5^^94,^^c5^^98,^^c5^^97,^^c5^^95,^^c5^^99,^^c5^^9e,^^c8^^98,^^c5^^9a,^^c5^^a0,^^c5^^9f,^^c8^^99,^^c5^^9b,^^c5^^a1,^^c5^^b8,^^c3^^9d,^^c3^^bf,^^c3^^bd}
+ \def\huaz@list@A{%
+ ^^c3^^b6,^^c3^^bc,^^c3^^b3,^^c5^^91,^^c3^^ba,^^c3^^a9,^^c3^^a1,^^c5^^b1,^^c3^^ad,%
+ ^^c3^^96,^^c3^^9c,^^c3^^93,^^c5^^90,^^c3^^9a,^^c3^^89,^^c3^^81,^^c5^^b0,^^c3^^8d,%
+ ^^c3^^84,^^c3^^80,^^c3^^83,^^c3^^82,^^c4^^82,^^c3^^85,^^c4^^84,^^c3^^86,^^c3^^a4,%
+ ^^c3^^a0,^^c3^^a3,^^c3^^a2,^^c4^^83,^^c3^^a5,^^c4^^85,^^c3^^a6,^^c3^^8b,^^c3^^88,%
+ ^^c3^^8a,^^c4^^9a,^^c4^^98,^^c3^^ab,^^c3^^a8,^^c3^^aa,^^c4^^9b,^^c4^^99,^^c3^^8f,%
+ ^^c3^^8d,^^c3^^8c,^^c3^^8e,^^c3^^af,^^c3^^ac,^^c3^^ae,^^c3^^92,^^c3^^95,^^c3^^94,%
+ ^^c3^^98,^^4f^^45,^^c3^^b2,^^c3^^b5,^^c3^^b4,^^c3^^b8,^^c3^^99,^^c3^^9b,^^c5^^ae,%
+ ^^c3^^b9,^^c3^^bb,^^c5^^af}
+ \def\huaz@list@S{%
+ ^^c4^^b9,^^c5^^81,^^c4^^bc,^^c4^^ba,^^c5^^82,^^c5^^85,^^c5^^83,^^c3^^91,^^c5^^87,%
+ ^^c5^^8a,^^c5^^84,^^c3^^b1,^^c5^^88,^^c5^^8b,^^c5^^96,^^c5^^94,^^c5^^98,^^c5^^97,%
+ ^^c5^^95,^^c5^^99,^^c5^^9e,^^c8^^98,^^c5^^9a,^^c5^^a0,^^c5^^9f,^^c8^^99,^^c5^^9b,%
+ ^^c5^^a1,^^c5^^b8,^^c3^^9d,^^c3^^bf,^^c3^^bd}
\huaz@must@oneunit@false
\fi
\def\huaz@latinii{latin2}
\ifx\inputencodingname\huaz@latinii
- \def\huaz@list@A{^^a1,^^b1,^^c1,^^c2,^^c3,^^c4,^^c9,^^ca,^^cb,^^cc,^^cd,^^ce,^^d3,^^d4,^^d5,^^d6,^^d9,^^da,^^db,^^dc,^^e1,^^e2,^^e3,^^e4,^^e5,^^e9,^^ea,^^eb,^^ec,^^ed,^^ee,^^f3,^^f4,^^f5,^^f6,^^f9,^^fa,^^fb,^^fc}
- \def\huaz@list@X{^^a3,^^a5,^^a6,^^a9,^^aa,^^b3,^^b6,^^b9,^^ba,^^c0,^^c5,^^d1,^^d2,^^d8,^^dd,^^df,^^e0,^^f1,^^f2,^^f8,^^fd}
+ \def\huaz@list@A{%
+ ^^a1,^^b1,^^c1,^^c2,^^c3,^^c4,^^c9,^^ca,^^cb,^^cc,^^cd,^^ce,^^d3,^^d4,^^d5,^^d6,%
+ ^^d9,^^da,^^db,^^dc,^^e1,^^e2,^^e3,^^e4,^^e5,^^e9,^^ea,^^eb,^^ec,^^ed,^^ee,^^f3,%
+ ^^f4,^^f5,^^f6,^^f9,^^fa,^^fb,^^fc}
+ \def\huaz@list@S{%
+ ^^a3,^^a5,^^a6,^^a9,^^aa,^^b3,^^b6,^^b9,^^ba,^^c0,^^c5,^^d1,^^d2,^^d8,^^dd,^^df,%
+ ^^e0,^^f1,^^f2,^^f8,^^fd}
\huaz@must@oneunit@true
\fi
- \ifx\inputencodingname\huaz@utfviii\else
- \ifx\inputencodingname\huaz@latinii\else
- \PackageError{huaz}{You should use utf8 or latin2 inputenc}{}
- \fi
- \fi
-\else
- \def\huaz@list@A{^^^^00f6,^^^^00fc,^^^^00f3,^^^^0151,^^^^00fa,^^^^00e9,^^^^00e1,^^^^0171,^^^^00ed,^^^^00d6,^^^^00dc,^^^^00d3,^^^^0150,^^^^00da,^^^^00c9,^^^^00c1,^^^^0170,^^^^00cd,^^^^00c4,^^^^00c0,^^^^00c3,^^^^00c2,^^^^0102,^^^^00c5,^^^^0104,^^^^00c6,^^^^00e4,^^^^00e0,^^^^00e3,^^^^00e2,^^^^0103,^^^^00e5,^^^^0105,^^^^00e6,^^^^00cb,^^^^00c8,^^^^00ca,^^^^011a,^^^^0118,^^^^00eb,^^^^00e8,^^^^00ea,^^^^011b,^^^^0119,^^^^00cf,^^^^00cd,^^^^00cc,^^^^00ce,^^^^00ef,^^^^00ec,^^^^00ee,^^^^00d2,^^^^00d5,^^^^00d4,^^^^00d8,^^^^004f,^^^^0045,^^^^00f2,^^^^00f5,^^^^00f4,^^^^00f8,^^^^00d9,^^^^00db,^^^^016e,^^^^00f9,^^^^00fb,^^^^016f}
- \def\huaz@list@X{^^^^0139,^^^^0141,^^^^013c,^^^^013a,^^^^0142,^^^^0145,^^^^0143,^^^^00d1,^^^^0147,^^^^014a,^^^^0144,^^^^00f1,^^^^0148,^^^^014b,^^^^0156,^^^^0154,^^^^0158,^^^^0157,^^^^0155,^^^^0159,^^^^015e,^^^^0218,^^^^015a,^^^^0160,^^^^015f,^^^^0219,^^^^015b,^^^^0161,^^^^0178,^^^^00dd,^^^^00ff,^^^^00fd}
+ \ifdefined\huaz@list@A\else\PackageError{huaz}{You should use utf8 or latin2 inputenc}{}\fi
+\else% xelatex lualatex
+ \def\huaz@list@A{%
+ ^^^^00f6,^^^^00fc,^^^^00f3,^^^^0151,^^^^00fa,^^^^00e9,^^^^00e1,^^^^0171,^^^^00ed,%
+ ^^^^00d6,^^^^00dc,^^^^00d3,^^^^0150,^^^^00da,^^^^00c9,^^^^00c1,^^^^0170,^^^^00cd,%
+ ^^^^00c4,^^^^00c0,^^^^00c3,^^^^00c2,^^^^0102,^^^^00c5,^^^^0104,^^^^00c6,^^^^00e4,%
+ ^^^^00e0,^^^^00e3,^^^^00e2,^^^^0103,^^^^00e5,^^^^0105,^^^^00e6,^^^^00cb,^^^^00c8,%
+ ^^^^00ca,^^^^011a,^^^^0118,^^^^00eb,^^^^00e8,^^^^00ea,^^^^011b,^^^^0119,^^^^00cf,%
+ ^^^^00cd,^^^^00cc,^^^^00ce,^^^^00ef,^^^^00ec,^^^^00ee,^^^^00d2,^^^^00d5,^^^^00d4,%
+ ^^^^00d8,^^^^004f,^^^^0045,^^^^00f2,^^^^00f5,^^^^00f4,^^^^00f8,^^^^00d9,^^^^00db,%
+ ^^^^016e,^^^^00f9,^^^^00fb,^^^^016f}
+ \def\huaz@list@S{%
+ ^^^^0139,^^^^0141,^^^^013c,^^^^013a,^^^^0142,^^^^0145,^^^^0143,^^^^00d1,^^^^0147,%
+ ^^^^014a,^^^^0144,^^^^00f1,^^^^0148,^^^^014b,^^^^0156,^^^^0154,^^^^0158,^^^^0157,%
+ ^^^^0155,^^^^0159,^^^^015e,^^^^0218,^^^^015a,^^^^0160,^^^^015f,^^^^0219,^^^^015b,%
+ ^^^^0161,^^^^0178,^^^^00dd,^^^^00ff,^^^^00fd}
\huaz@must@oneunit@true
\fi
@@ -74,15 +100,27 @@
\NewHook{huaz}
-\AddToHook{huaz}{% In \StrChar, these commands will be considered as one syntax unit.
- \let\"\relax\let\'\relax\let\H\relax\let\`\relax\let\~\relax\let\^\relax\let\v\relax\let\u\relax%
- \let\=\relax\let\k\relax\let\.\relax\let\AA\relax\let\aa\relax\let\AE\relax\let\ae\relax\let\&\relax%
- \let\#\relax\let\_\relax}
-
-\def\huaz@y@#1#{\@gobble}
-\def\huaz@deloptparam{\huaz@y@\relax}% \def\textcolor{\huaz@deloptparam} --> \textcolor[RGB]{0,255,0}{text} --> text; \textcolor{red}{text} --> text
-
-\AddToHook{huaz}{% Ignored commands
+\AddToHook{huaz}{%
+ %
+ % Accent commands are considered as one unit
+ \let\"\relax\let\'\relax\let\`\relax\let\~\relax% \def\'{} ==> \az*{\'{X}}=\az*{X}=\az*{10}=a is not correct
+ \let\^\relax\let\=\relax\let\.\relax%
+ \let\b\relax\let\B\relax\let\c\relax\let\d\relax%
+ \let\H\relax\let\k\relax\let\r\relax\let\u\relax\let\v\relax%
+ %
+ % Redefining letter commands
+ \def\AA{a}\def\aa{a}\def\AE{a}\def\ae{a}%
+ \def\IJ{a}\def\ij{a}\def\i{a}% \def\i{i} ==> \az*{\i x}=\az*{ix}=\az*{9}=a is not correct
+ \def\O{a}\def\o{a}\def\OE{a}\def\oe{a}%
+ \def\l{s}\def\NG{s}\def\ng{s}\def\SS{s}\def\ss{s}%
+ %
+ % Redefinition of punctuation commands to period
+ \def\&{.}\def\#{.}\def\%{.}\def\_{.}%
+ %
+ % Redefinition of space commands to normal space
+ \def\,{ }\def\:{ }\def\;{ }\def\enspace{ }\def\enskip{ }\def\quad{ }\def\qquad{ }%
+ %
+ % Ignore commands
\def\usefont#1#2#3#4{}%
\def\fontsize#1#2{}%
\def\fontencoding#1{}%
@@ -108,19 +146,106 @@
\def\tiny{}\def\scriptsize{}\def\footnotesize{}\def\small{}\def\normalsize{}%
\def\large{}\def\Large{}\def\LARGE{}\def\huge{}\def\Huge{}%
\def\uppercase{}\def\lowercase{}\def\MakeUppercase{}\def\MakeLowercase{}%
- \def\textcolor{\huaz@deloptparam}\def\color{\huaz@deloptparam}%
- \def\mbox{}\def\fbox{}%
+ \def\textcolor#1#{\@gobble}% \textcolor[...]{...}{text} and \textcolor{...}{text} --> text
+ \def\color#1#{\@gobble}% \color[...]{...}text and \color{...}text --> text
+ \def\href#1#{\@gobble}% \href{URL}{text} --> text
+ \def\mbox{}\def\fbox{}\def\hbox{}%
\def\makebox#1#{}% \makebox{text} and \makebox[opt]{text} --> text
\def\framebox#1#{}% \framebox{text} and \framebox[opt]{text} --> text
\def\textqq{}%
\def\enquote#1#{}% \enquote{text} and \enquote*{text} --> text
- \def\told{}}
-
-\AddToHook{huaz}{% Expandable cross-references commands
+ \def\told{}%
+ \def\num#1#{}% (siunitx package) \num[...]{1000000} --> 1000000
+ \def\negthinspace{}\def\!{}%
+ %
+ % Expandable cross-references commands
\def\ref#1#{\getrefnumber}% \ref{...} and \ref*{...} --> \getrefnumber{...}
\def\pageref#1#{\getpagerefnumber}% \pageref{...} and \pageref*{...} --> \getpagerefnumber{...}
- \def\eqref#1{\getrefnumber{#1}}%
- \def\cite{\huaz@cite}}
+ \def\eqref#1#{\getrefnumber}% \eqref{...} (amsmath) and \eqref*{...} (!!) --> \getrefnumber{...}
+ \def\refeq#1#{\getrefnumber}% \refeq{...} (mathtools) and \refeq*{...} (!!) --> \getrefnumber{...}
+ \def\cite{\huaz@cite}%
+ \def\citeauthor{\huaz@citeauthor}%
+ \def\textcite{\huaz@citeauthor}%
+ \def\citeyear{\huaz@citeyear}%
+ }
+
+%=================================================
+%
+% \huazignorecmd[option]{\command}
+% option: 0,1,...,9
+%
+% \huazignorecmd{\foo} = \AddToHook{huaz}{\def\foo{}}
+% ignored: \foo
+% for example: \huazignorecmd{\rmfamily}
+% \rmfamily text --> text
+%
+% \huazignorecmd[0]{\foo} = \AddToHook{huaz}{\def\foo#1#{}}
+% ignored: \foo, \foo*, \foo[...], \foo*[...]
+% for example: \huazignorecmd{\textrm}
+% \textrm{text} --> text
+% \huazignorecmd{\makebox}
+% \makebox[5cm]{text} --> text
+%
+% \huazignorecmd[1]{\foo} = \AddToHook{huaz}{\def\foo#1#{\@gobble}}
+% ignored: \foo{...}, \foo[...]{...}, \foo*[...]{...}
+% for example: \huazignorecmd{\textcolor}
+% \textcolor[RGB]{0,255,0}{text} --> text
+%
+% \huazignorecmd[2]{\foo} = \AddToHook{huaz}{\def\foo#1#{\huaz@gobble@ii}}
+% ignored: \foo{...}{...}, \foo[...]{...}{...}, \foo*[...]{...}{...}
+% for example: \huazignorecmd{\fontsize}
+% \fontsize{12pt}{12pt}text --> text
+%
+%=================================================
+
+\newcommand{\huaz@gobble@ii}[2]{}
+\newcommand{\huaz@gobble@iii}[3]{}
+\newcommand{\huaz@gobble@iv}[4]{}
+\newcommand{\huaz@gobble@v}[5]{}
+\newcommand{\huaz@gobble@vi}[6]{}
+\newcommand{\huaz@gobble@vii}[7]{}
+\newcommand{\huaz@gobble@viii}[8]{}
+\newcommand{\huaz@gobble@ix}[9]{}
+
+\def\huaz@check@opt#1{%
+ \def\huaz@opt{#1}%
+ \huaz@temp@if@false%
+ \@for\huaz@list:={,0,1,2,3,4,5,6,7,8,9,10}%
+ \do{\IfStrEq{\huaz@opt}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \IfStrEq{\huaz@opt}{}{\def\huaz@opt{10}}{}%
+ \ifhuaz@temp@if@\else
+ \def\huaz@opt{10}%
+ \PackageWarning{huaz}{Valid options for \string\huazignorecmd: 0,1,...,9. The '[#1]' has been removed.}\fi}
+
+\NewDocumentCommand{\huazignorecmd}{>{\TrimSpaces}O{10}m}{%
+ \huaz@check@opt{#1}%
+ \ifcase\huaz@opt%
+ \AddToHook{huaz}{\def#2##1##{}}\or
+ \AddToHook{huaz}{\def#2##1##{\@gobble}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@ii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@iii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@iv}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@v}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@vi}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@vii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@viii}}\or
+ \AddToHook{huaz}{\def#2##1##{\huaz@gobble@ix}}\or
+ \AddToHook{huaz}{\def#2{}}\fi}
+
+%=================================================
+%
+% \huazrefcmd{\foo} = \AddToHook{huaz}{\def\foo#1#{\getrefnumber}}
+% --> \foo{...}, \foo[...]{...}, \foo*[...]{...} --> \getrefnumber{...}
+%
+% \huazpagerefcmd{\foo} = \AddToHook{huaz}{\def\foo#1#{\getpagerefnumber}}
+% --> \foo{...}, \foo[...]{...}, \foo*[...]{...} --> \getpagerefnumber{...}
+%
+% \huazdefcmd{...} = \AddToHook{huaz}{...}
+%=================================================
+
+\NewDocumentCommand{\huazrefcmd}{m}{\AddToHook{huaz}{\def#1##1##{\getrefnumber}}}
+\NewDocumentCommand{\huazpagerefcmd}{m}{\AddToHook{huaz}{\def#1##1##{\getpagerefnumber}}}
+\NewDocumentCommand{\huazdefcmd}{m}{\AddToHook{huaz}{#1}}
%=================================================
%
@@ -136,75 +261,141 @@
\UseHook{huaz}%
\huaz@must@z@false%
%
- % 1. syntax unit \AA,\aa,\AE,\ae,e,u,i,o,a,E,U,I,O,A,5
+ % 1. unit: e,u,i,o,a,E,U,I,O,A,5
+ %
\StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={\AA,\aa,\AE,\ae,e,u,i,o,a,E,U,I,O,A,5}%
+ \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A,5}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
%
- % 1. syntax unit accent command and 2. character e,u,i,o,a,E,U,I,O,A (e.g. "\'A")
+ % 1. unit: accent command
+ % 2. unit: e,u,i,o,a,E,U,I,O,A
+ % "\'A" "\'{A}"
+ %
+ \ifhuaz@must@z@\else%
+ \huaz@temp@if@false%
+ \StrChar{#1}{1}[\huaz@temp]%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.,\b,\B,\c,\d,\H,\k,\r,\u,\v}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{2}[\huaz@temp]%
+ \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
+ \fi%
+ \fi%
+ %
+ % 1. unit: \",\',\`,\~,\^,\=,\.
+ % 2. unit: space(s)
+ % 3. unit: e,u,i,o,a,E,U,I,O,A
+ % "\' A", "\' A", "\' {A}"
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={\",\',\H,\`,\~,\^,\v,\u,\=,\k}%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
+ \huaz@temp@if@false%
\StrChar{#1}{2}[\huaz@temp]%
- \@for\huaz@list:={e,u,i,a,E,U,I,O,A}%
+ \IfStrEq{\huaz@temp}{ }{\huaz@temp@if@true}{}%
+ \fi%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{3}[\huaz@temp]%
+ \@for\huaz@list:={e,u,i,o,a,E,U,I,O,A}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
%
- % 1. character ö,ü,ó,Å‘,ú,é,á,ű,í,Ö,Ãœ,Ó,Å,Ú,É,Ã,Å°,Ã,...
+ % 1. unit: \huaz@list@A
+ %
\ifhuaz@must@z@\else%
- \ifhuaz@must@oneunit@\StrLeft{#1}{1}[\huaz@tempa]\else\StrLeft{#1}{2}[\huaz@tempa]\fi% in pdflatex(utf8) Å is two syntax units; in pdflatex(latin2)/xelatex/lualatex Å is one syntax unit
+ \ifhuaz@must@oneunit@\StrLeft{#1}{1}[\huaz@tempa]\else\StrLeft{#1}{2}[\huaz@tempa]\fi% in pdflatex(utf8) Å is two units; in pdflatex(latin2)/xelatex/lualatex Å is one unit
\@for\huaz@list:=\huaz@list@A%
\do{\StrLeft{\huaz@list}{2}[\huaz@tempb]%
\IfStrEq{\huaz@tempa}{\huaz@tempb}{\huaz@must@z@true}{}}%
\fi%
%
- % 1. character f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y and the 2. character is not letter (e.g. "M-10")
+ % 1. unit: f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y,\huaz@list@S(one unit)
+ % 2. unit: punctuation
+ % "M-10"
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{2}[\huaz@temp]%
- \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
\StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y}%
+ \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\ifhuaz@must@oneunit@%
\ifhuaz@must@z@\else%
- \@for\huaz@list:=\huaz@list@X% in pdflatex(latin2)/xelatex/lualatex Å  is one syntax unit
+ \@for\huaz@list:=\huaz@list@S% in pdflatex(latin2)/xelatex/lualatex Å  is one unit
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
\fi%
\fi%
%
- % 1. syntax unit accent command, 2. character f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y and the 3. character is not letter (e.g. "\^Y.")
+ % 1. unit: accent command
+ % 2. unit: f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y
+ % 3. unit: punctuation
+ % "\^Y."
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{3}[\huaz@temp]%
- \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
\huaz@temp@if@false%
\StrChar{#1}{2}[\huaz@temp]%
- \@for\huaz@list:={f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y}%
+ \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}%
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
- \ifhuaz@temp@if@%
- \StrChar{#1}{1}[\huaz@temp]%
- \@for\huaz@list:={\",\',\H,\`,\~,\^,\v,\u,\=,\k}%
- \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
- \fi%
+ \fi%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{1}[\huaz@temp]%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.,\b,\B,\c,\d,\H,\k,\r,\u,\v}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
%
- % first two characters ly,Ly,LY,ny,Ny,NY,sz,Sz,SZ,... and the 3. character is not letter (e.g. "NY" or "SZ-2")
+ % 1. unit: \",\',\`,\~,\^,\=,\.
+ % 2. unit: space(s)
+ % 3. unit: f,l,m,n,r,x,y,F,L,M,N,S,R,X,Y
+ % 4. unit: punctuation
+ % "\^ Y."
+ %
+ \ifhuaz@must@z@\else%
+ \huaz@temp@if@false%
+ \StrChar{#1}{4}[\huaz@temp]%
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \ifhuaz@temp@if@%
+ \huaz@temp@if@false%
+ \StrChar{#1}{3}[\huaz@temp]%
+ \@for\huaz@list:={f,l,m,n,s,r,x,y,F,L,M,N,S,R,X,Y}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \fi%
+ \ifhuaz@temp@if@%
+ \huaz@temp@if@false%
+ \StrChar{#1}{2}[\huaz@temp]%
+ \IfStrEq{\huaz@temp}{ }{\huaz@temp@if@true}{}%
+ \fi%
+ \ifhuaz@temp@if@%
+ \StrChar{#1}{1}[\huaz@temp]%
+ \@for\huaz@list:={\",\',\`,\~,\^,\=,\.}%
+ \do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
+ \fi%
+ \fi%
+ %
+ % 1-2. units: ly,Ly,LY,ny,Ny,NY,sz,Sz,SZ,\huaz@list@S(two units)
+ % 3. unit: punctuation
+ % "NY" "SZ-2"
+ %
\ifhuaz@must@z@\else%
\huaz@temp@if@false%
\StrChar{#1}{3}[\huaz@temp]%
- \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\&,\#,\_,\unskip,\kern}% \kern, \unskip for active characters
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,0,1,2,3,4,5,6,7,8,9,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@temp@if@true}{}}%
\ifhuaz@temp@if@%
\StrLeft{#1}{2}[\huaz@temp]%
@@ -212,14 +403,17 @@
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\ifhuaz@must@oneunit@\else%
\ifhuaz@must@z@\else%
- \@for\huaz@list:=\huaz@list@X% in pdflatex(utf8) Å  is two syntax units
+ \@for\huaz@list:=\huaz@list@S% in pdflatex(utf8) Å  is two units
\do{\IfStrEq{\huaz@temp}{\huaz@list}{\huaz@must@z@true}{}}%
\fi%
\fi%
\fi%
\fi%
%
- % 1. character 1 and the 2. character is not number (e.g. "1H")
+ % 1. unit: 1
+ % 2. unit: not digit
+ % "1H"
+ %
\ifhuaz@must@z@\else%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
@@ -228,14 +422,17 @@
}{}%
\fi%
%
- % 1000,...,1999 and the 5. character is not number ("ezer...")
+ % 1000,...,1999
+ % 5. unit: not digit
+ % "1000. sor" --> ezredik sor
+ %
\ifhuaz@must@z@\else%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\ifnum\value{huaz@temp@count}>3%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
- \StrMid{#1}{2}{4}[\huaz@temp]%
+ \StrLeft{#1}{4}[\huaz@temp]%
\IfInteger{\huaz@temp}{%
\StrChar{#1}{5}[\huaz@temp]%
\IfInteger{\huaz@temp}{}{\huaz@must@z@true}%
@@ -244,14 +441,17 @@
\fi%
\fi%
%
- % 1000000,...,1999999 and the 8. character is not number ("egymillió...")
+ % 1000000,...,1999999
+ % 8. unit: not digit
+ % "1000000 ember" --> egymillió ember
+ %
\ifhuaz@must@z@\else%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\ifnum\value{huaz@temp@count}>6%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
- \StrMid{#1}{2}{7}[\huaz@temp]%
+ \StrLeft{#1}{7}[\huaz@temp]%
\IfInteger{\huaz@temp}{%
\StrChar{#1}{8}[\huaz@temp]%
\IfInteger{\huaz@temp}{}{\huaz@must@z@true}%
@@ -260,14 +460,17 @@
\fi%
\fi%
%
- % 1000000000,...,1999999999 and the 11. character is not number ("egymilliárd...")
+ % 1000000000,...,1999999999
+ % 11. unit: not digit
+ % "1000000000 ember" --> egymilliárd ember
+ %
\ifhuaz@must@z@\else%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\ifnum\value{huaz@temp@count}>9%
\StrChar{#1}{1}[\huaz@temp]%
\IfStrEq{\huaz@temp}{1}{%
- \StrMid{#1}{2}{10}[\huaz@temp]%
+ \StrLeft{#1}{10}[\huaz@temp]%
\IfInteger{\huaz@temp}{%
\StrChar{#1}{11}[\huaz@temp]%
\IfInteger{\huaz@temp}{}{\huaz@must@z@true}%
@@ -302,36 +505,49 @@
%=================================================
%
-% \huaz@try@roman{<...>}
-% Collect the characters i,v,x,l,c,d,m,I,V,X,L,C,D,M from the beginning of <...>.
-% This string is saved into \huaz@try@roman@result.
-% If this string is empty, then \huaz@try@roman@result is <...>. E.g.
-% \huaz@try@roman{XIV.6}\huaz@try@roman@result --> "XIV"
-% \huaz@try@roman{xiii.x}\huaz@try@roman@result --> "xiii"
-% \huaz@try@roman{d.xiii}\huaz@try@roman@result --> "d"
-% \huaz@try@roman{a.xiii}\huaz@try@roman@result --> "a.xiii"
-% \huaz@try@roman{XIii}\huaz@try@roman@result --> "XIii"
-% \huaz@try@roman{aXIIII}\huaz@try@roman@result --> "aXIIII"
+% \huaz@collect@roman{<...>}
+% Collecting the characters i,v,x,l,c,d,m,I,V,X,L,C,D,M from the beginning of <...>
+% "XIII" --> result string is "XIII"
+% "xiii.x" --> result string is "xiii"
+% "x ii.x" --> result string is "x"
+% "VB" --> result string is "V"
+% "XIV6" --> result string is "XIV"
+% "aXIII" --> result string is ""
+% If the result string = <...>, then \huaz@collect@roman@result := result string
+% \huaz@collect@roman{XIII}\huaz@collect@roman@result --> "XIII"
+% If the result string is not empty and the first character after it is a punctuation mark or space in <...> , then \huaz@collect@roman@result := result string
+% \huaz@collect@roman{xiii.x}\huaz@collect@roman@result --> "xiii"
+% \huaz@collect@roman{x ii.x}\huaz@collect@roman@result --> "x"
+% If the result string is not empty and the first character after it is a letter or digit in <...> , then \huaz@collect@roman@result := ""
+% \huaz@collect@roman{VB}\huaz@collect@roman@result --> ""
+% \huaz@collect@roman{XIV6}\huaz@collect@roman@result --> ""
+% If the result string is empty then \huaz@collect@roman@result := ""
+% \huaz@collect@roman{aXIII}\huaz@collect@roman@result --> ""
%
%=================================================
-\NewDocumentCommand{\huaz@try@roman}{m}{%
+\NewDocumentCommand{\huaz@collect@roman}{m}{%
\begingroup%
\exploregroups%
\UseHook{huaz}%
\StrLen{#1}[\huaz@temp]%
\setcounter{huaz@temp@count}{\huaz@temp}%
\setcounter{huaz@temp@count@}{1}%
- \gdef\huaz@try@roman@result{}%
+ \gdef\huaz@collect@roman@result{}%
\loop%
- \huaz@temp@if@false%
\StrChar{#1}{\thehuaz@temp@count@}[\huaz@temp]%
- \IfSubStr{ivxlcdmIVXLCDM}{\huaz@temp}{%
- \expandafter\g@addto@macro\expandafter\huaz@try@roman@result\expandafter{\huaz@temp}}
+ \IfSubStr{ivxlcdmIVXLCDM}{\huaz@temp}
+ {\expandafter\g@addto@macro\expandafter\huaz@collect@roman@result\expandafter{\huaz@temp}}
{\setcounter{huaz@temp@count@}{\value{huaz@temp@count}}}%
\ifnum\value{huaz@temp@count@}<\value{huaz@temp@count}\stepcounter{huaz@temp@count@}%
\repeat%
- \ifx\huaz@try@roman@result\@empty\gdef\huaz@try@roman@result{#1}\fi%
+ \IfStrEq{\huaz@collect@roman@result}{}{}{%
+ \huaz@temp@if@false%
+ \StrBehind{#1}{\huaz@collect@roman@result}[\huaz@tempa]%
+ \StrChar{\huaz@tempa}{1}[\huaz@tempb]%
+ \@for\huaz@list:={;,`,',",+,!,/,=,(,),<,>,@,.,?,:,-,*,{,},{ },{},\unskip,\kern}% \kern, \unskip for active characters
+ \do{\IfStrEq{\huaz@tempb}{\huaz@list}{\huaz@temp@if@true}{}}%
+ \ifhuaz@temp@if@\else\gdef\huaz@collect@roman@result{}\fi}%
\endgroup}
%=================================================
@@ -344,21 +560,32 @@
%=================================================
%
+% \azseparator
+%
+%=================================================
+
+\def\azseparator#1{\def\huaz@sep{#1}}
+\def\huaz@sep{~}
+
+%=================================================
+%
% \huaz@text
%
%=================================================
\NewDocumentCommand{\huaz@text}{st{=}m}{%
- \huaz@try@roman{#3}%
- \def\huaz@tempa{-1}%
- \edef\huaz@tempb{\huaz@romantoarabic{\huaz@try@roman@result}}%
+ \huaz@collect@roman{#3}%
+ \huaz@temp@if@true%
+ \edef\huaz@temp{\huaz@romantoarabic{\huaz@collect@roman@result}}%
+ \IfStrEq{\huaz@temp}{0}{\huaz@temp@if@false}{}%
+ \IfStrEq{\huaz@temp}{-1}{\huaz@temp@if@false}{}%
\IfBooleanTF{#2}{\huaz@z{#3}}{%
- \ifx\huaz@tempb\huaz@tempa%
- \huaz@z{#3}%
+ \ifhuaz@temp@if@%
+ \huaz@z{\huaz@romantoarabic{\huaz@collect@roman@result}}%
\else%
- \huaz@z{\huaz@romantoarabic{\huaz@try@roman@result}}%
+ \huaz@z{#3}%
\fi}%
- \IfBooleanF{#1}{\ifhuaz@show@~#3\fi}%
+ \IfBooleanF{#1}{\ifhuaz@show@\huaz@sep{#3}\fi}%
\huaz@show@true}
%=================================================
@@ -367,10 +594,29 @@
%
%=================================================
-\DeclareDocumentCommand{\az}{sm}{\ifhuaz@show@ a\fi\IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}\xdef\azsaved{a\huaz@save}}
-\DeclareDocumentCommand{\Az}{sm}{\ifhuaz@show@ A\fi\IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}\xdef\azsaved{A\huaz@save}}
-\DeclareDocumentCommand{\azv}{sm}{\ifhuaz@show@ a\fi\IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}\xdef\azsaved{a\huaz@save}}
-\DeclareDocumentCommand{\Azv}{sm}{\ifhuaz@show@ A\fi\IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}\xdef\azsaved{A\huaz@save}}
+\DeclareDocumentCommand{\az}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ a\fi
+ \IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\az\space is empty}\textup{(?)}}%
+ \xdef\azsaved{a\huaz@save}}
+
+\DeclareDocumentCommand{\Az}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ A\fi
+ \IfBooleanTF{#1}{\huaz@text*{#2}}{\huaz@text{#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\Az\space is empty}\textup{(?)}}%
+ \xdef\azsaved{A\huaz@save}}
+
+\DeclareDocumentCommand{\azv}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ a\fi
+ \IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\azv\space is empty}\textup{(?)}}%
+ \xdef\azsaved{a\huaz@save}}
+
+\DeclareDocumentCommand{\Azv}{s>{\TrimSpaces}m}{%
+ \ifhuaz@show@ A\fi
+ \IfBooleanTF{#1}{\huaz@text*={#2}}{\huaz@text={#2}}%
+ \IfBlankT{#2}{\PackageWarning{huaz}{Argument of \string\Azv\space is empty}\textup{(?)}}%
+ \xdef\azsaved{A\huaz@save}}
%=================================================
%
@@ -378,10 +624,10 @@
%
%=================================================
-\DeclareDocumentCommand{\aref}{sm}{\IfBooleanTF{#1}{\az*{\ref{#2}}}{\az{\ref{#2}}}}
-\DeclareDocumentCommand{\Aref}{sm}{\IfBooleanTF{#1}{\Az*{\ref{#2}}}{\Az{\ref{#2}}}}
-\DeclareDocumentCommand{\avref}{sm}{\IfBooleanTF{#1}{\azv*{\ref{#2}}}{\azv{\ref{#2}}}}
-\DeclareDocumentCommand{\Avref}{sm}{\IfBooleanTF{#1}{\Azv*{\ref{#2}}}{\Azv{\ref{#2}}}}
+\DeclareDocumentCommand{\aref}{sm}{\IfBooleanTF{#1}{\az{\ref*{#2}}}{\az{\ref{#2}}}}
+\DeclareDocumentCommand{\Aref}{sm}{\IfBooleanTF{#1}{\Az{\ref*{#2}}}{\Az{\ref{#2}}}}
+\DeclareDocumentCommand{\avref}{sm}{\IfBooleanTF{#1}{\azv{\ref*{#2}}}{\azv{\ref{#2}}}}
+\DeclareDocumentCommand{\Avref}{sm}{\IfBooleanTF{#1}{\Azv{\ref*{#2}}}{\Azv{\ref{#2}}}}
%=================================================
%
@@ -389,10 +635,10 @@
%
%=================================================
-\DeclareDocumentCommand{\apageref}{sm}{\IfBooleanTF{#1}{\az*{\pageref{#2}}}{\az{\pageref{#2}}}}
-\DeclareDocumentCommand{\Apageref}{sm}{\IfBooleanTF{#1}{\Az*{\pageref{#2}}}{\Az{\pageref{#2}}}}
-\DeclareDocumentCommand{\avpageref}{sm}{\IfBooleanTF{#1}{\azv*{\pageref{#2}}}{\azv{\pageref{#2}}}}
-\DeclareDocumentCommand{\Avpageref}{sm}{\IfBooleanTF{#1}{\Azv*{\pageref{#2}}}{\Azv{\pageref{#2}}}}
+\DeclareDocumentCommand{\apageref}{sm}{\IfBooleanTF{#1}{\az{\pageref*{#2}}}{\az{\pageref{#2}}}}
+\DeclareDocumentCommand{\Apageref}{sm}{\IfBooleanTF{#1}{\Az{\pageref*{#2}}}{\Az{\pageref{#2}}}}
+\DeclareDocumentCommand{\avpageref}{sm}{\IfBooleanTF{#1}{\azv{\pageref*{#2}}}{\azv{\pageref{#2}}}}
+\DeclareDocumentCommand{\Avpageref}{sm}{\IfBooleanTF{#1}{\Azv{\pageref*{#2}}}{\Azv{\pageref{#2}}}}
%=================================================
%
@@ -400,10 +646,21 @@
%
%=================================================
-\DeclareDocumentCommand{\aeqref}{sm}{\IfBooleanTF{#1}{\az*{\eqref{#2}}}{\az{\eqref{#2}}}}
-\DeclareDocumentCommand{\Aeqref}{sm}{\IfBooleanTF{#1}{\Az*{\eqref{#2}}}{\Az{\eqref{#2}}}}
-\DeclareDocumentCommand{\aveqref}{sm}{\IfBooleanTF{#1}{\azv*{\eqref{#2}}}{\azv{\eqref{#2}}}}
-\DeclareDocumentCommand{\Aveqref}{sm}{\IfBooleanTF{#1}{\Azv*{\eqref{#2}}}{\Azv{\eqref{#2}}}}
+\DeclareDocumentCommand{\aeqref}{m}{\az{\eqref{#1}}}
+\DeclareDocumentCommand{\Aeqref}{m}{\Az{\eqref{#1}}}
+\DeclareDocumentCommand{\aveqref}{m}{\azv{\eqref{#1}}}
+\DeclareDocumentCommand{\Aveqref}{m}{\Azv{\eqref{#1}}}
+
+%=================================================
+%
+% \arefeq \Arefeq \avrefeq \Avrefeq
+%
+%=================================================
+
+\DeclareDocumentCommand{\arefeq}{m}{\az{\refeq{#1}}}
+\DeclareDocumentCommand{\Arefeq}{m}{\Az{\refeq{#1}}}
+\DeclareDocumentCommand{\avrefeq}{m}{\azv{\refeq{#1}}}
+\DeclareDocumentCommand{\Avrefeq}{m}{\Azv{\refeq{#1}}}
%=================================================
%
@@ -411,65 +668,10 @@
%
%=================================================
-\DeclareDocumentCommand{\acite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \az*{\cite{#3}}%
- }{%
- \az*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \az{\cite{#3}}%
- }{%
- \az{\cite[#2]{#3}}%
- }%
- }}
-
-\DeclareDocumentCommand{\Acite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \Az*{\cite{#3}}%
- }{%
- \Az*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \Az{\cite{#3}}%
- }{%
- \Az{\cite[#2]{#3}}%
- }%
- }}
-
-\DeclareDocumentCommand{\avcite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \azv*{\cite{#3}}%
- }{%
- \azv*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \azv{\cite{#3}}%
- }{%
- \azv{\cite[#2]{#3}}%
- }%
- }}
-
-\DeclareDocumentCommand{\Avcite}{som}{%
- \IfBooleanTF{#1}{%
- \IfNoValueTF{#2}{%
- \Azv*{\cite{#3}}%
- }{%
- \Azv*{\cite[#2]{#3}}%
- }%
- }{%
- \IfNoValueTF{#2}{%
- \Azv{\cite{#3}}%
- }{%
- \Azv{\cite[#2]{#3}}%
- }%
- }}
+\DeclareDocumentCommand{\acite}{om}{\IfNoValueTF{#1}{\az{\cite{#2}}}{\az{\cite[#1]{#2}}}}
+\DeclareDocumentCommand{\Acite}{om}{\IfNoValueTF{#1}{\Az{\cite{#2}}}{\Az{\cite[#1]{#2}}}}
+\DeclareDocumentCommand{\avcite}{om}{\IfNoValueTF{#1}{\azv{\cite{#2}}}{\azv{\cite[#1]{#2}}}}
+\DeclareDocumentCommand{\Avcite}{om}{\IfNoValueTF{#1}{\Azv{\cite{#2}}}{\Azv{\cite[#1]{#2}}}}
%=================================================
%
@@ -477,8 +679,8 @@
%
%=================================================
-\def\huaz@x@#1#{\huaz@citelist}
-\def\huaz@cite{\huaz@x@\relax}
+\def\huaz@cite@#1#{\huaz@citelist}
+\def\huaz@cite{\huaz@cite@\relax}
\def\huaz@citelist#1{\huaz@@citelist#1,\relax,}
\def\huaz@@citelist#1,{\ifx#1\relax\else\@nameuse{huaz@bib@#1},\expandafter\huaz@@citelist\fi}%
@@ -501,6 +703,7 @@
\def\bibcite#1#2{\global\@namedef{huaz@bib@#1}{\huaz@bibparam#2}\huaz@old@bibcite{#1}{#2}}
%
\@ifpackageloaded{biblatex}{
+ \settoggle{blx@labelalpha}{true}
\def\huaz@biblatexlabel{}
\ifx\blx@opt@eldt@style\@empty\ifx\blx@opt@eldt@citestyle\@empty\def\huaz@biblatexlabel{\strfield{labelnumber}}\fi\fi
\def\huaz@temp{numeric}
@@ -516,14 +719,46 @@
\ifx\blx@opt@eldt@style\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
\ifx\blx@opt@eldt@citestyle\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
\def\huaz@temp{authoryear}
- \ifx\blx@opt@eldt@style\huaz@temp\settoggle{blx@labelalpha}{true}\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
- \ifx\blx@opt@eldt@citestyle\huaz@temp\settoggle{blx@labelalpha}{true}\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
+ \ifx\blx@opt@eldt@style\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
+ \ifx\blx@opt@eldt@citestyle\huaz@temp\def\huaz@biblatexlabel{\strfield{labelalpha}}\fi
\ifx\huaz@biblatexlabel\@empty\else
\AtEveryBibitem{\protected@write\@auxout{}{\string\global\string\@namedef{huaz@bib@\strfield{entrykey}}{\huaz@biblatexlabel}}}
\fi}{}}
%=================================================
%
+% \huaz@citeauthor
+%
+%=================================================
+
+\def\huaz@citeauthor@#1#{\huaz@citeauthorlist}
+\def\huaz@citeauthor{\huaz@citeauthor@\relax}
+\def\huaz@citeauthorlist#1{\huaz@@citeauthorlist#1,\relax,}
+\def\huaz@@citeauthorlist#1,{\ifx#1\relax\else\@nameuse{huaz@bibalpha@#1},\expandafter\huaz@@citeauthorlist\fi}
+
+\AddToHook{begindocument/before}{
+ \@ifpackageloaded{biblatex}{
+ \AtEveryBibitem{\protected@write\@auxout{}{\string\global\string\@namedef{huaz@bibalpha@\strfield{entrykey}}{\strfield{labelalpha}}}}
+ }{}}
+
+%=================================================
+%
+% \huaz@citeyear
+%
+%=================================================
+
+\def\huaz@citeyear@#1#{\huaz@citeyearlist}
+\def\huaz@citeyear{\huaz@citeyear@\relax}
+\def\huaz@citeyearlist#1{\huaz@@citeyearlist#1,\relax,}
+\def\huaz@@citeyearlist#1,{\ifx#1\relax\else\@nameuse{huaz@bibyear@#1},\expandafter\huaz@@citeyearlist\fi}
+
+\AddToHook{begindocument/before}{
+ \@ifpackageloaded{biblatex}{
+ \AtEveryBibitem{\protected@write\@auxout{}{\string\global\string\@namedef{huaz@bibyear@\strfield{entrykey}}{\strfield{year}}}}
+ }{}}
+
+%=================================================
+%
% end
%
%=================================================
diff --git a/macros/latex/contrib/huaz/huaz.tex b/macros/latex/contrib/huaz/huaz.tex
index a9bb258ad6..4b178dbb44 100644
--- a/macros/latex/contrib/huaz/huaz.tex
+++ b/macros/latex/contrib/huaz/huaz.tex
@@ -1,7 +1,7 @@
%%
%% `huaz.tex' documentation of the huaz package
%%
-%% Copyright 2022 by Tibor Tomacs
+%% Copyright 2022-2024 by Tibor Tómács
%%
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either version 1.3
@@ -13,44 +13,61 @@
%%
%% This work has the LPPL maintenance status `maintained'.
%%
-%% The Current Maintainer of this work is Tibor Tomacs.
+%% The Current Maintainer of this work is Tibor Tómács.
%%
\documentclass[12pt]{article}
-\usepackage{listings,xcolor,lmodern,xurl}
-\usepackage[pdfstartview=FitH,colorlinks,allcolors=teal,bookmarksnumbered]{hyperref}
-\usepackage[a4paper,top=1in,bottom=1.2in]{geometry}
+\usepackage[a4paper,top=1in,bottom=1in]{geometry}
+\usepackage{listings,xcolor,lmodern,xurl,multicol}
\usepackage[T1]{fontenc}
-\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
+\PassOptionsToPackage{
+ defaults=hu-min,
+ labelitems=unchanged,
+ }{magyar.ldf}
\usepackage[english,magyar]{babel}
+\usepackage[
+ pdfstartview=FitH,
+ colorlinks,
+ allcolors=purple,
+ bookmarksnumbered,
+ bookmarksopen,
+ ]{hyperref}
+\usepackage{upquote}
+
\setlength{\parindent}{0pt}
\setlength{\parskip}{6pt}
+\def\codefont{\usefont{T1}{pcrs}{m}{n}}
+
\lstset{literate={<}{{$\langle$}}1{>}{{$\rangle$}}1
- {ö}{{\"o}}1{ü}{{\"u}}1{ó}{{\'o}}1{é}{{\'e}}1{á}{{\'a}}1{í}{{\'i}}1}
-
-\lstnewenvironment{examplelst}{\lstset{
-aboveskip=\bigskipamount,
-basicstyle=\footnotesize\color{blue!70!black}\ttfamily,
-backgroundcolor=\color{black!3},
-rulecolor=\color{black!15},
-frame=trbl,
-framesep=5pt,
-columns=fullflexible,
-xleftmargin=5.4pt,
-xrightmargin=5.4pt,
-keepspaces}}{}
-
-\newcommand{\commandinline}{\hspace*{-15mm}\lstinline[
-delim={[is][\color{green!50!black}\normalfont\small\sffamily]{!}{!}},
-basicstyle=\color{red!70!black}\normalfont\normalsize\ttfamily,
-columns=fullflexible,
-keepspaces]}
-
-\newcommand{\verbinline}{\lstinline[
-delim={[is][\color{green!50!black}\normalfont\small\sffamily]{!}{!}},
-basicstyle=\normalfont\normalsize\ttfamily,
-columns=fullflexible,
-keepspaces]}
+ {ű}{{\H u}}1{ö}{{\"o}}1{ő}{{\H o}}1{ü}{{\"u}}1
+ {ó}{{\'o}}1{é}{{\'e}}1{á}{{\'a}}1{í}{{\'i}}1}
+
+\lstnewenvironment{examplelst}{%
+ \lstset{
+ aboveskip=\bigskipamount,
+ basicstyle=\color{blue!70!black}\small\codefont,
+ backgroundcolor=\color{black!3},
+ rulecolor=\color{black!15},
+ frame=trbl,
+ framesep=5pt,
+ columns=fullflexible,
+ xleftmargin=5.4pt,
+ xrightmargin=5.4pt,
+ keepspaces}}{}
+
+\newcommand{\huazcmd}{\hspace*{-15mm}%
+ \lstinline[
+ delim={[is][\color{teal}\normalfont\small\sffamily]{!}{!}},
+ basicstyle=\color{magenta}\normalfont\small\codefont,
+ columns=fullflexible,
+ keepspaces]}
+
+\newcommand{\code}{%
+ \lstinline[
+ delim={[is][\color{teal}\normalfont\small\sffamily]{!}{!}},
+ basicstyle=\normalfont\small\codefont,
+ columns=fullflexible,
+ keepspaces]}
\makeatletter
\def\@oddfoot{\hfill\textsf{\color{gray}\thepage}\hfill}
@@ -58,270 +75,476 @@ keepspaces]}
\def\ps@plain{\def\@oddfoot{\hfill\textsf{\color{gray}\thepage}\hfill}}
\makeatother
-\def\huaz{\textbf{\sffamily hu\color{gray}az}}
+\definecolor{hured}{RGB}{207,36,54}
+\definecolor{hugreen}{RGB}{69,113,79}
+\usepackage{contour}
+\def\huazlogo{%
+ {\contourlength{.8pt}\Huge
+ \sbox0{\contour{black!30}{\Huge\bfseries\sffamily\color{white}HUAZ}}%
+ \mbox{}%
+ \lower-\dimeval{2\ht0/3}%
+ \rlap{{\color{hured}\rule{\wd0}{\dimeval{\ht0/3}}}}%
+ {\color{hugreen}\rule{\wd0}{\dimeval{\ht0/3}}}%
+ \llap{\usebox0}}}
+
+\def\huaz{\textbf{\sffamily hu\itshape\color{gray}az}}
+
+\def\labelenumi{\textbf{\theenumi.}}
+
+\def\huqq#1{,,{\color{gray}#1}''}
+
+\def\paragraph#1{\par\bigskip\textbf{#1.}}
\begin{document}
-\title{The \huaz\ package\\
- {\large v1.2 (2024/04/20)}}
+\title{\huazlogo\\ The \huaz\ package\\{\large v2.1 (2024/05/05)}}
\author{Tibor Tómács\\
- {\normalsize\href{email:tomacs.tibor@gmail.com}{\nolinkurl{tomacs.tibor@gmail.com}}}}
+ {\normalsize\href{email:tomacs.tibor@gmail.com}{\nolinkurl{tomacs.tibor@gmail.com}}}}
\date{}
\maketitle
\begin{otherlanguage}{english}
\begin{abstract}
-In Hungarian there are two definite articles, \emph{``a''} and \emph{``az''}, which are determined by the pronunciation of the subsequent word. The definite article is \emph{``az''}, if the first phoneme of the pronounced word is a vowel, otherwise it is \emph{``a''}.
-The \huaz\ package helps the user to insert automatically the correct definite article for cross-references and other commands containing text. Thus, if these change, the definite articles will also change accordingly.
+There are two definite articles in Hungarian, ``a'' and ``az'', depending on the first sound of the word that follows. If the word begins with a vowel sound, the definite article is ``az'', otherwise it is ``a''.
+
+The \huaz\ package helps the user to automatically insert the correct definite article for cross-references and other commands containing text.
+This way, if the number or text changes, the definite articles will change accordingly.
-\medskip
-\emph{The documentation is in Hungarian, because only Hungarian-speaking users are interested.}
+The documentation of the \huaz\ package is in Hungarian, as it is assumed that only Hungarian-speaking users are interested.
\end{abstract}
\end{otherlanguage}
\section{Bevezetés}
-A magyar nyelvben a határozott névelő egy szó előtt aszerint \emph{,,a''} vagy \emph{,,az''}, hogy a szó kiejtve mássalhangzóval vagy magánhangzóval kezdődik. Például \emph{,,a szék''} vagy \emph{,,az asztal''}. Ez egyszerűnek tűnik, de gondoljon a következő esetekre:
+A magyar nyelvben a határozott névelő egy szó előtt aszerint \huqq{a} vagy \huqq{az}, hogy a szó kiejtve mássalhangzóval vagy magánhangzóval kezdődik.
+Például \huqq{a szék} vagy \huqq{az asztal}.
+Ez egyszerű szabály, de írásban összetett vizsgálatot igényel.
+Itt felsorolunk néhány nehézséget:
\begin{itemize}
-\item Például ha oldalszámra akar hivatkozni, akkor a \verb|\pageref| parancsot szoktuk használni. Ha ez elé akar határozott névelÅ‘t rakni, akkor nem mindegy, hogy mi az oldalszám. Például \emph{,,az~1.~oldal''}, \emph{,,a~2.~oldal''}, \emph{,,az~5.~oldal''}, \emph{,,a~10.~oldal''}. Ãgy egyáltalán nem biztos, hogy az ,,\verbinline|a \pageref{!<kulcs>!}|'' kód megfelelÅ‘ eredményt ad. Hasonló a probléma minden kereszthivatkozás esetén (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|).
-
-\item Az is fontos, hogy egy kifejezés római szám vagy sem. Például \emph{,,az~V.~fejezet''}, ha \emph{V} római szám, azaz 5 a jelentése. Ugyanakkor \emph{,,a~V.~fejezet''}, ha \emph{V} betűt jelöl vagy alfanumerikus szám esetén a 22 értéket (\emph{V} az angol ábécében a 22.~betű).
-
-\item Néhány mássalhangzó speciális tulajdonságú. Például \emph{,,az M betű''}, de \emph{,,a Magyar Közlöny''}; \emph{,,az Ny betű''}, de \emph{,,a Nyugdíjfolyósító Igazgatóság''}; stb.
+\item
+Ha oldalszámra akarunk hivatkozni, akkor a \code|\pageref| parancsot szoktuk használni.
+Ha ez elé kell határozott névelőt rakni, akkor nem mindegy, hogy mi az oldalszám.
+Például \huqq{az~1.~oldal}, \huqq{a~2.~oldal}, \huqq{az~5.~oldal}, \huqq{a~10.~oldal}.
+Ãgy egyáltalán nem biztos, hogy az ,,\code|a \pageref{!<kulcs>!}|'' kód megfelelÅ‘ eredményt ad.
+Hasonló a probléma minden kereszthivatkozás esetén (\code|\ref|, \code|\pageref|, \code|\eqref|, \code|\cite|).
+
+\item
+Az is fontos, hogy egy kifejezés római szám vagy sem.
+Például \huqq{az~V.~fejezet}, ha V római szám, azaz 5 a jelentése.
+Ugyanakkor \huqq{a~V.~fejezet}, ha V betűt jelöl vagy alfanumerikus szám esetén a 22 értéket (V az angol ábécében a 22.~betű).
+
+\item
+Néhány mássalhangzó speciális tulajdonságú.
+Például \huqq{a Magyar Közlöny} de \huqq{az M betű}; \huqq{a Nyugdíjfolyósító Igazgatóság} de \huqq{az Ny betű}; stb.
\end{itemize}
Először megemlítünk két eddigi megoldást a határozott névelők automatikus kezelésére, kiemelve azok hibáit és hiányosságait.
-\subsection{A magyar.ldf}
+\subsection{A \texttt{magyar.ldf}}
-Egyik lehetőség a \texttt{babel} csomag \texttt{magyar} opcióját beállító \texttt{magyar.ldf} fájl használata. Ennek teljes dokumentációja elérhető innen: \url{https://math.bme.hu/latex/magyarldf-doc.pdf}.
+Egyik lehetőség a \code{babel} csomag \code{magyar} opcióját beállító \code{magyar.ldf} fájl használata.
+Ennek teljes dokumentációja elérhető innen: \url{https://math.bme.hu/latex/magyarldf-doc.pdf}.
-Az ebben definiált \verb|\az|, \verb|\aref|, \verb|\apageref|, \verb|\acite|, stb. parancsok alapvetően jól használhatóak, de van néhány fontos hiba, melyek a \huaz\ csomag megírását motiválták:
+Az ebben definiált \code|\az|, \code|\aref|, \code|\apageref|, \code|\acite|, stb.~parancsok alapvetően jól használhatóak, de van néhány fontos hiba, melyek a \huaz\ csomag megírását motiválták:
\begin{itemize}
-\item Az \verb|\eqref| parancsnak nincs névelős verziója. Helyette az \verbinline|\aref({!<kulcs>!})| használható, de ez dőlt betűs környezetben nem álló betűs eredményt ad, mint az \verb|\eqref| esetében. Másik lehetőség, ami ezt a problémát megoldja, az \verbinline|\az{\eqref{!<kulcs>!}}| parancs. Ugyanakkor egyik megoldás sem kezeli a római számozású vagy a \verb|\tag| paranccsal címkézett egyenleteket.
-
-\item Az \verbinline|\az{\ref{!<kulcs>!}}| és \verbinline|\az{\pageref{!<kulcs>!}}| nem kezeli a római számozású hivatkozásokat.
-
-\item Az előző hiba akkor is fennáll, amikor az \verb|\az| parancsban egy római számmal kezdődő szöveg van. Például \verb|\az{V.~osztály}| eredménye \emph{,,a V.~osztály''}.
-
-\item Amennyiben nem kereszthivatkozáshoz, hanem egy szöveghez, vagy valamilyen szöveget tároló parancshoz kell automatikus névelő, akkor az ékezetes betűket UTF-8 kódolás esetén rosszul detektálja. A hiba alapvető oka, hogy az UTF-8 kódolású karakterek nem egy, hanem több bájton vannak kódolva, amit a \texttt{magyar.ldf} nem vesz figyelembe. Ezért például \verb|\az{ágy}| eredménye \emph{,,a ágy''}, mert nem betűként érzékeli az \emph{,,á''} betűt, így azt sem tudja, hogy ez magánhangzó. Meglepő módon \verb|\az{száz}| eredménye \emph{,,az száz''} is rossz. Ennek az az oka, hogy mivel számára az \emph{,,á''} nem betű, ezért az \emph{,,sz''} betűt különállónak tekinti, ami elé valóban \emph{,,az''} kell.
-
-\item Hibának ugyan nem tekinthető, de mindenesetre kényelmetlen, hogy például \verb|\az{\textbf{N betű}}| esetén a \verb|\textbf| parancs megzavarja a szó betűinek detektálását, így a névelő helytelenül \emph{,,a''} lesz.
+\item
+Az \code|\eqref| parancsnak nincs névelős verziója.
+Helyette az \code|\aref({!<kulcs>!})| használható, de ez dőlt betűs környezetben nem álló betűs eredményt ad, mint az \code|\eqref| esetében.
+Másik lehetőség, ami ezt a problémát megoldja, az \code|\az{\eqref{!<kulcs>!}}| parancs.
+Ugyanakkor egyik megoldás sem kezeli a római számozású vagy a \code|\tag| paranccsal címkézett egyenleteket.
+
+\item
+Az \code|\az{\ref{!<kulcs>!}}| és \code|\az{\pageref{!<kulcs>!}}| nem kezeli a római számozású hivatkozásokat.
+
+\item
+Az előző hiba akkor is fennáll, amikor az \code|\az| parancsban egy római számmal kezdődő szöveg van.
+Például \code|\az{V.~osztály}| eredménye \huqq{a V.~osztály}.
+
+\item
+Amennyiben nem kereszthivatkozáshoz, hanem egy szöveghez, vagy valamilyen szöveget tároló parancshoz kell automatikus névelő, akkor az ékezetes betűket \texttt{UTF-8} kódolás esetén rosszul detektálja, mivel azok nem egy, hanem több bájton vannak kódolva, amit a \code{magyar.ldf} nem vesz figyelembe.
+Ezért például \code|\az{ágy}| eredménye \huqq{a ágy}, mert nem betűként érzékeli az \huqq{á} betűt, így azt sem tudja, hogy ez magánhangzó.
+Meglepő módon \code|\az{száz}| eredménye \huqq{az száz} is rossz.
+Ennek oka, hogy számára az \huqq{á} nem betű, ezért az \huqq{sz} betűt különállónak tekinti, ami elé valóban \huqq{az} kell.
+
+\item
+Például \code|\az{\textbf{N betű}}| esetén a \code|\textbf| parancs megzavarja a szó betűinek detektálását, így a névelő helytelenül \huqq{a} lesz.
\end{itemize}
-\subsection{A nevelok csomag}
-
-2015-ben készült a \texttt{nevelok} csomag, ami szintén az automatikus határozott névelők kezelésére készült. A szerzője valószínűleg nem ismerte a \texttt{magyar.ldf} már akkor létező lehetőségeit, ezért készíthette ezt a jóval kevesebbet tudó csomagot.
+\subsection{A \texttt{nevelok} csomag}
-2022-ben telepített \TeX-rendszeren tesztelve azt tapasztaltam, hogy nem kezeli az ékezetes betűk semmilyen formáját és sok esetben ad kereszthivatkozásoknál is rossz névelőt. Az utóbbinak az az oka, hogy közvetlenül a \verb|\ref| parancsot vizsgálja, ami nem kifejthető parancs.
-
-Ezen dokumentáció elkészültéig semmilyen fejlesztése nem történt. Jelen állapotában nem javasolt ennek a csomagnak a használata.
+A \code{nevelok} csomag szintén a határozott névelők automatikus beillesztéséhez készült.
+Nem kezeli az ékezetes betűk semmilyen formáját és sok esetben ad kereszthivatkozásoknál rossz névelőt, ugyanis közvetlenül a \code|\ref| és \code|\pageref| parancsokat vizsgálja, amelyek nem kifejthetőek.
+Ezért ennek a csomagnak a jelenlegi verzióját nem szabad használni!
\subsection{A \texorpdfstring{\huaz}{huaz} csomag célja és működése}
-A \huaz\ csomag célja segíteni a felhasználót abban, hogy a kereszthivatkozásokhoz és szöveget tartalmazó parancsokhoz automatikusan beszúrja a megfelelÅ‘ határozott névelÅ‘t. Ãgy ha ezek változnak, akkor a határozott névelÅ‘k is megfelelÅ‘en változnak.
+A \huaz\ csomag segíti a felhasználót abban, hogy a kereszthivatkozásokhoz és szöveget tartalmazó parancsokhoz automatikusan beszúrja a megfelelő határozott névelőt.
+Ãgy ha ezek változnak, akkor a határozott névelÅ‘k is megfelelÅ‘en változnak.
-A másik cél ezt úgy megtenni, hogy a \texttt{magyar.ldf} és a \texttt{nevelok.sty} hibáit és hiányosságait korrigálja illetve pótolja.
+Fontos cél volt ezt úgy megtenni, hogy a \code{magyar.ldf} és a \code{nevelok.sty} hibáit és hiányosságait korrigálja illetve pótolja.
-A \huaz\ csomag a következő esetekben illeszt az adott szöveg elé ,,az'' névelőt:
+A \huaz\ csomag a következő esetekben illeszt az adott szöveg elé \huqq{az} névelőt:
\begin{enumerate}
-\item Az első betű magánhangzó (legyen az kis- vagy nagybetű, ékezetes vagy sem, magyar vagy sem, UTF-8, ISO-8859-2 karakterrel vagy repülő ékezettel megadva).
+\item
+Az első betű magánhangzó (legyen az kis- vagy nagybetű, ékezetes vagy sem, magyar vagy sem, \texttt{UTF-8}, \texttt{ISO-8859-2} karakterrel vagy ékezet paranccsal megadva).
-\item Az első betű olyan kis vagy nagy mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például F, L, M, stb.) míg a második karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. Például ,,M-10''. Ide soroltunk néhány nem magyar ékezetes mássalhangzót is. Például ,,Ň.1''.
+\item
+Az első betű olyan kis vagy nagy mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például F, L, M, stb.) míg a második karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz.
+Például \huqq{M-10}.
+Ide soroltunk néhány nem magyar ékezetes mássalhangzót is.
+Például \huqq{Ň.1}.
-\item Az első két karakter egy olyan kis vagy nagy kétjegyű mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például Ny, Ly, Sz, stb.) míg a harmadik karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz. Például ,,NY betű''.
+\item
+Az első két karakter egy olyan kis vagy nagy kétjegyű mássalhangzó, amit önmagában kiejtve magánhangzóval kezdünk (például NY, LY, SZ, stb.) míg a harmadik karakter (ha van) nem betű, hanem szám, írásjel vagy szóköz.
+Például \huqq{SZ betű}.
-\item Az első karakter 5.
+\item
+Az első karakter 5.
-\item 1, 4, 7 vagy 10 jegyű számmal kezdődik és az első számjegy 1 (egy, ezer, egymillió, egymilliárd).
+\item
+1, 4, 7 vagy 10 jegyű számmal kezdődik és az első számjegy 1 (egy, ezer, egymillió, egymilliárd).
\end{enumerate}
-Ha a szó elején található karakterek római számként is értelmezhetőek, akkor megválasztható, hogy azt konvertálja arab számra és a névelőt ahhoz határozza meg vagy sem. Például ,,XII/A'' esetén.
+Ha a szó elején található karakterek római számként is értelmezhetőek, akkor megválasztható, hogy azt konvertálja arab számra és a névelőt ahhoz határozza meg vagy sem. Például \huqq{V. emelet} esetén.
\section{A \texorpdfstring{\huaz}{huaz} csomag használata}
A \huaz\ csomagot a szokott módon kell betölteni:
-\commandinline|\usepackage{huaz}|
+\huazcmd|\usepackage{huaz}|
-Csomagopciók nincsenek. UTF-8 (\texttt{utf8}) és ISO-8859-2 (\texttt{latin2}) kódolású forrásfájl esetén működik, de a repülő ékezeteket is jól kezeli. Kompatibilis a \texttt{pdflatex}, \texttt{xelatex} és \texttt{lualatex} fordítókkal is. Például \texttt{pdflatex} fordítóval a következő betöltés megfelelő:
+Kompatibilis a \code{latex}, \code{pdflatex}, \code{xelatex} és \code{lualatex} fordítókkal is.
+A \code{latex} és \code{pdflatex} fordítóval a következő betöltés megfelelő:
\begin{examplelst}
\documentclass{article}
\usepackage[T1]{fontenc}
-\usepackage{huaz}
\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
\usepackage[magyar]{babel}
+\usepackage{huaz}
\begin{document}
...
\end{document}
\end{examplelst}
-A \texttt{hyperref} csomaggal is kompatibilis, így az is betölthető a \huaz\ mellé.
-A \texttt{magyar.ldf} \texttt{defaults=hu-min} opciója bekapcsol néhány olyan opciót is, amely elérhetővé teszi a saját automatikus névelőparancsait. Ezt ugyan nem kötelező, de hasznos a \huaz\ csomag használata esetén kikapcsolni. Ehhez a
+Az ékezetes betűket \texttt{UTF-8} (\code{utf8}) és \texttt{ISO-8859-2} (\code{latin2}) kódolású forrásfájl esetén, illetve ékezet parancsokkal (\code|\'|, \code|\"|, \code|\H|, stb.) is jól kezeli.
+
+A \code{hyperref} csomaggal is kompatibilis, így az is betölthető a \huaz\ mellé.
+
+A \code{magyar.ldf} \code{defaults=hu-min} opciója bekapcsol néhány olyan opciót is, amely elérhetővé teszi a saját automatikus névelőparancsait.
+Ha ezeket a \huaz\ csomag használata esetén ki akarja kapcsolni, akkor a
\begin{examplelst}
\PassOptionsToPackage{defaults=hu-min}{magyar.ldf}
\end{examplelst}
sor helyett használja a következőt:
\begin{examplelst}
-\PassOptionsToPackage{defaults=hu-min,az=no,
- shortrefcmds=no,hunnewlabel=no}{magyar.ldf}
+\PassOptionsToPackage{
+ defaults=hu-min,
+ az=no,
+ shortrefcmds=no,
+ hunnewlabel=no
+ }{magyar.ldf}
\end{examplelst}
+Ezt nem kell feltétlenül megtenni, mert a \huaz\ csomag átdefiniálja a \code{magyar.ldf} névelőparancsait függetlenül attól, hogy a \code{babel} előtt vagy után töltötte be.
-A \texttt{xelatex} és \texttt{lualatex} fordítók esetén \texttt{babel} helyett a
+A \code{xelatex} és \code{lualatex} fordítók esetén \code{babel} helyett a
\begin{examplelst}
\usepackage{polyglossia}
\setdefaultlanguage{hungarian}
\end{examplelst}
is használható.
-A \huaz\ csomag felhasználja az \texttt{xstring}, \texttt{refcount} és \texttt{iftex} csomagok szolgáltatásait, így ezek is betöltődnek. Másrészt felhasználásra kerül néhány 2021. október 10-én bevezetett változás a \LaTeX\ kerneljében, így csak az ezután telepített rendszereken működik megfelelően a csomag.
+A \huaz\ csomag felhasználja az \code{xstring}, \code{refcount} és \code{iftex} csomagok szolgáltatásait, így ezek is betöltődnek.
+Felhasználásra kerül néhány 2021. október 10-én bevezetett változás a \LaTeX\ kerneljében, így csak az ezután telepített rendszereken működik megfelelően a csomag.
\subsection{Parancsok}
-\commandinline|\az{!<szöveg>!}|
+\huazcmd|\az{!<szöveg>!}|
-A \verbinline|!<szöveg>!| elé a megfelelő határozott névelő kerül kisbetűs alakban. Ha a \verbinline|!<szöveg>!| elején római számként értelmezhető karakterek vannak, akkor a névelő az arab megfelelőjéhez igazodik. Például
+A \code|!<szöveg>!| elé a megfelelő határozott névelő kerül kisbetűs alakban.
+Ha a \code|!<szöveg>!| római számként is értelmezhető (pl.~\huqq{XII}), esetleg azt írásjel vagy szóköz követi (pl.~\huqq{XII.A}), akkor a névelő az arab megfelelőjéhez igazodik.
+Például
\begin{examplelst}
Idén \az{V.B}~osztály rendezi a farsangot.
\end{examplelst}
-eredménye ,,Idén az V.B~osztály rendezi a farsangot.''.
+eredménye \huqq{Idén az~V.B~osztály rendezi a farsangot.}.
+De
+\begin{examplelst}
+\az{VB}, \az{V4}
+\end{examplelst}
+eredménye \huqq{a~VB, a~V4} lesz, mert V után betű illetve szám következik, ezért nem 5-nek, hanem V betűnek értelmezi mindkét esetben.
-A \verbinline|!<szöveg>!| lehet szöveget tároló parancs is. Például
+A \code|!<szöveg>!| lehet szöveget tároló parancs is.
+Például
\begin{examplelst}
\newcommand{\osztaly}{V.B}
Idén \az{\osztaly}~osztály rendezi a farsangot.
\end{examplelst}
-eredménye ,,Idén az V.B~osztály rendezi a farsangot.''.
+eredménye \huqq{Idén az~V.B~osztály rendezi a farsangot.}.
-A \verbinline|!<szöveg>!| tartalmazhat szövegformázó parancsokat is (bővebben lásd \az{\ref{subsec-kapocs}}.~alszakaszban). Például
+A \code|!<szöveg>!| tartalmazhat szövegformázó parancsokat is (bővebben lásd \az{\ref{subsec-ignoralt-parancsok}}.~alszakaszban).
+Például
\begin{examplelst}
\newcommand{\osztaly}{V.B}
Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot.
\end{examplelst}
-eredménye ,,Idén az \textbf{V.B}~osztály rendezi a farsangot.''.
+eredménye \huqq{Idén az~\textbf{V.B}~osztály rendezi a farsangot.}.
-A \verbinline|!<szöveg>!| lehet standard kereszthivatkozás is (\verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite|). Például
+A \code|!<szöveg>!| lehet kereszthivatkozás is.
+Például
\begin{examplelst}
\section{Cím}\label{seca}
\section{Cím}\label{secb}
-\az{\ref{seca}}.~szakaszban, \az{\textbf{\ref{secb}}}.~szakaszban
+\az{\ref{seca}}.~szakaszban,
+\az{\textbf{\ref{secb}}}.~szakaszban
+\end{examplelst}
+eredménye \huqq{az~1.~szakaszban, a~\textbf{2}.~szakaszban}.
+
+Ha a \code{section} számláló kiírása római számozásra van állítva a
+\begin{examplelst}
+\renewcommand{\thesection}{\Roman{section}}
\end{examplelst}
-eredménye ,,az 1. szakaszban, a \textbf{2}. szakaszban''. Ha a \texttt{section} számláló kiírása római számozásra van állítva a \verb|\renewcommand{\thesection}{\Roman{section}}| paranccsal, akkor az előző kód eredménye ,,az I. szakaszban, a \textbf{II}. szakaszban''.
+paranccsal, akkor az előző kód eredménye \huqq{az I. szakaszban, a \textbf{II}. szakaszban}.
\subsubsection*{Korlátozások}
+
\begin{enumerate}
-\item A \verbinline|!<szöveg>!| elején csak a \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\cite| kereszthivatkozásokkal működik helyesen.
+\item
+A \code|!<szöveg>!| elején a \code|\ref|, \code|\ref*|, \code|\pageref|, \code|\pageref*|, \code|\eqref|, \code|\refeq| kereszthivatkozásokkal működik helyesen.
+Az \code|\eqref| az \code{amsmath}, a \code|\refeq| pedig a \code{mathtools} csomaggal van definiálva.
+
+\item
+A \code|!<szöveg>!| elején a \code|\cite| jól működik a \code{natbib} csomaggal és \code{bibtex} esetében is.
+
+A \code{biblatex} csomaggal a \code|\cite|, \code|\citeauthor|, \code|\textcite|, \code|\citeyear| akkor működik jól, ha a \code{style} vagy \code{citestyle} opciók értéke:
-\item A \verbinline|!<szöveg>!| elején a \verb|\cite| parancs jól működik a \texttt{natbib} csomaggal és \texttt{bibtex} esetében is. A \texttt{biblatex} csomag használata esetén akkor működik jól, ha a \texttt{style} vagy \texttt{citestyle} opciók értéke \texttt{numeric}, \texttt{numeric-verb}, \texttt{alphabetic}, \texttt{alphabetic-verb} vagy \texttt{authoryear}. Akkor is jól működik, ha nem adjuk meg a \texttt{style} illetve \texttt{citestyle} opciók egyikét sem.
+\code{numeric}\\
+\code{numeric-verb}\\
+\code{alphabetic}\\
+\code{alphabetic-verb}\\
+\code{authoryear}
-\item A pdf vázlatfájába nem lehet \verb|\az| paranccsal szöveget beilleszteni. Tehát például a következő kód nem ad helyes vázlatfát, ha \texttt{hyperref} vagy \texttt{bookmark} csomagot használ:
+Akkor is jól működik, ha nem adjuk meg a \code{style} illetve \code{citestyle} opciók egyikét sem.
+
+\item
+A pdf vázlatfájába nem lehet \code|\az| paranccsal szöveget beilleszteni.
+Tehát például a következő kód nem ad helyes vázlatfát, ha \code{hyperref} vagy \code{bookmark} csomagot használ (bár a cím a szövegben, fejlécben és a tartalomjegyzékben jól fog megjelenni).
\begin{examplelst}
\section{...\az{\ref{sec}}...}
\end{examplelst}
-Viszont a cím a szövegben, fejlécben és a tartalomjegyzékben jól fog megjelenni. A problémát a később ismertetett \verb|\azsaved| paranccsal lehet megoldani.
+A problémát a később ismertetett \code|\azsaved| illetve \code|\aznotshow| parancsokkal lehet megoldani.
\end{enumerate}
-\commandinline|\az*{!<szöveg>!}|
+\huazcmd|\az*{!<szöveg>!}|
-Ugyanaz mint a \verb|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
+Ugyanaz mint a \code|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
+Például, ha az \code{amsmath} és \code{hyperref} csomagok használata mellett szeretnénk egy link nélküli egyenlethivatkozást, akkor ezt (mivel nincs \code|\eqref*| definiálva) például így tehetjük meg:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \textup{(\ref*{eq})} egyenletet!}
+\end{examplelst}
+Szebb lenne a mondat határozott névelővel a képlet száma előtt, de most nem ad feltétlenül helyes eredményt az
+\begin{examplelst}
+\az{\textup{(\ref*{eq})}}
+\end{examplelst}
+kód, mert az első karakter a \code{(} jel lesz, és nem a képlet száma.
+Ãgy minden esetben \huqq{a} lesz a névelÅ‘.
+Ezt a következő módon javíthatjuk:
+\begin{examplelst}
+\az*{\ref{eq}} \textup{(\ref*{eq})}
+\end{examplelst}
-\commandinline|\azv{!<szöveg>!}|
+\huazcmd|\azv{!<szöveg>!}|
-Ugyanaz mint \verbinline|\az{!<szöveg>!}|, de ha a \verbinline|!<szöveg>!| elején római számként értelmezhető karakterek vannak, akkor a névelő nem az arab megfelelőjéhez igazodik, hanem mint egyszerű karakterekhez. Például
+Ugyanaz mint az \code|\az{!<szöveg>!}|, de ha a \code|!<szöveg>!| elején római számként értelmezhető karakterek vannak, akkor a névelő nem az arab megfelelőjéhez igazodik, hanem mint egyszerű karakterekhez.
+Például
\begin{examplelst}
\renewcommand{\thesection}{\Alph{section}}
\setcounter{section}{21}
\section{Cím}\label{sec}
\az{\ref{sec}}.~szakaszban, \azv{\ref{sec}}.~szakaszban
\end{examplelst}
-eredménye ,,az V.~szakaszban, a V.~szakaszban'', mert az első esetben a V betűt római számként értelmezte, a második esetben pedig nem. Mivel most alfanumerikus számra van beállítva a \texttt{section} számláló, ezért a második eset a jó.
+eredménye \huqq{az V.~szakaszban, a V.~szakaszban}, mert az első esetben a V betűt római számként értelmezte, a második esetben pedig nem.
+Mivel most alfanumerikus számra van beállítva a \code{section} számláló, ezért a második eset a jó.
-\commandinline|\azv*{!<szöveg>!}|
+\huazcmd|\azv*{!<szöveg>!}|
-Ugyanaz mint a \verb|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
+Ugyanaz mint a \code|*| nélküli esetben, de ekkor csak a névelő kerül kiírásra.
-\commandinline|\Az{!<szöveg>!}|\\
-\commandinline|\Az*{!<szöveg>!}|\\
-\commandinline|\Azv{!<szöveg>!}|\\
-\commandinline|\Azv*{!<szöveg>!}|
+\huazcmd|\Az{!<szöveg>!}|\\
+\huazcmd|\Az*{!<szöveg>!}|\\
+\huazcmd|\Azv{!<szöveg>!}|\\
+\huazcmd|\Azv*{!<szöveg>!}|
-Ugyanaz, mint a kis ,,\texttt{a}'' betűvel kezdődő parancsok, de ekkor a határozott névelő nagybetűvel fog kezdődni, ami mondatok elején szükséges. Például
+Ugyanaz, mint a kis \code{a} betűvel kezdődő parancsok, de ekkor a határozott névelő nagybetűvel kezdődik, ami mondatok elején szükséges.
+Például
\begin{examplelst}
\section{Cím}\label{sec}
-\Az{\ref{sec}}.~szakaszban áttekintjük a téma rövid történetét.
+\Az{\ref{sec}}.~szakaszban \dots
\end{examplelst}
-eredménye {,,Az 1.~szakaszban áttekintjük a téma rövid történetét.''}.
+eredménye \huqq{Az 1.~szakaszban \dots}.
-\commandinline|\azsaved|
+\huazcmd|\azsaved|
-Amikor kiadja az előző parancsok bármelyikét, akkor generálódik egy kifejthető \verb|\azsaved| parancs is. Ennek eredménye az a határozott névelő amelyik a szó elé kell.
+Az előző parancsok bármelyikét használva, generálódik egy kifejthető \code|\azsaved| parancs.
+Ennek eredménye az a határozott névelő amelyik a szó elé kell.
-Amikor \texttt{hyperref} vagy \texttt{bookmark} csomagot használ, akkor ahogyan azt korábban említettük, a következő kód esetén a cím, fejléc, tartalomjegyzék rendben lesz, de a pdf vázlatfája nem:
+Amikor \code{hyperref} vagy \code{bookmark} csomagot használ, akkor (ahogyan azt korábban említettük) a következő kód esetén a cím, fejléc, tartalomjegyzék rendben lesz, de a pdf vázlatfája nem:
\begin{examplelst}
\section{\Az{\ref{sec}}...}
\end{examplelst}
-Ez az \verb|\azsaved| paranccsal a következő módon oldható meg:
+Ez az \code|\azsaved| paranccsal a következő módon oldható meg:
\begin{examplelst}
-\section{\texorpdfstring{\Az{\ref{sec}}...}{\azsaved~\ref{sec}...}}
+\section{\texorpdfstring {\Az*{\ref{sec}}} {\azsaved}
+ \ref{sec}...}
\end{examplelst}
Ekkor a vázlatfába az
\begin{examplelst}
-\azsaved~\ref{sec}...
+\azsaved \ref{sec}...
\end{examplelst}
-kód kerül, ami már helyes eredményt ad.
+kód kerül, ami már helyes eredményt ad.
-\commandinline|\aznotshow|
+\huazcmd|\aznotshow|
-Az elÅ‘zÅ‘ probléma a \verb|\texorpdfstring| helyett ezzel a paranccsal egyszerűbben is megoldható. Ugyanis ezt helyezve az \verb|\az| (vagy bármelyik verziója) elé, az eredmény nem jelenik meg, csak az \verb|\azsaved| generálódik le a megfelelÅ‘ határozott névelÅ‘vel. Ãgy
+Az előző probléma a \code|\texorpdfstring| helyett ezzel a paranccsal egyszerűbben is megoldható.
+Ugyanis ezt helyezve az \code|\az| (vagy bármelyik verziója) elé, az eredmény nem jelenik meg, csak az \code|\azsaved| generálódik le a megfelelő határozott névelővel.
+Ãgy
\begin{examplelst}
\aznotshow\Az{\ref{sec}}
-\section{\azsaved~\ref{sec}...}
+\section{\azsaved \ref{sec}...}
\end{examplelst}
szintén helyes eredményt ad a vázlatfában is.
+\huazcmd|\azseparator{!<kód>!}|
+
+Ezzel lehet megadni, hogy a határozott névelő és a \code|!<szöveg>!| mivel legyen elválasztva.
+Alapértelmezetten ez a törhetetlen normál méretű szóköz, ami
+\begin{examplelst}
+\azseparator{~}
+\end{examplelst}
+módon lett beállítva.
+Ha át akarjuk állítani például törhető szóközre akkor ez
+\begin{examplelst}
+\azseparator{ }
+\end{examplelst}
+módon tehető meg.
+
\subsection{Rövidítések}
-A \verb|\ref|, \verb|\pageref|, \verb|\eqref|, \verb|\cite| kereszthivatkozások (csak a \verb|*| nélküli verziók) elé nem csak az előbbi parancsokkal tehetünk határozott névelőt, mert mindegyiknek van egy rövidített egyparancsos verziója is:
+A \code|\ref|, \code|\ref*|, \code|\eqref|, \code|\refeq|, \code|\pageref|, \code|\pageref*|, \code|\cite| kereszthivatkozások elé nem csak az előbbi parancsokkal tehetünk határozott névelőt, ugyanis mindegyiknek van egy rövidített egyparancsos verziója is:
+
+\huazcmd|\aref{!<kulcs>!} | $\equiv$ \code|\az{\ref{!<kulcs>!}}|\\
+\huazcmd|\aref*{!<kulcs>!} | $\equiv$ \code|\az{\ref*{!<kulcs>!}}|\\
+\huazcmd|\avref{!<kulcs>!} | $\equiv$ \code|\azv{\ref{!<kulcs>!}}|\\
+\huazcmd|\avref*{!<kulcs>!}| $\equiv$ \code|\azv{\ref*{!<kulcs>!}}|
-\commandinline|\aref{!<kulcs>!} | $\equiv$ \verbinline|\az{\ref{!<kulcs>!}}|\\
-\commandinline|\aref*{!<kulcs>!} | $\equiv$ \verbinline|\az*{\ref{!<kulcs>!}}|\\
-\commandinline|\avref{!<kulcs>!} | $\equiv$ \verbinline|\azv{\ref{!<kulcs>!}}|\\
-\commandinline|\avref*{!<kulcs>!}| $\equiv$ \verbinline|\azv*{\ref{!<kulcs>!}}|
+\huazcmd|\aeqref{!<kulcs>!} | $\equiv$ \code|\az{\eqref{!<kulcs>!}}|\\
+\huazcmd|\aveqref{!<kulcs>!} | $\equiv$ \code|\azv{\eqref{!<kulcs>!}}|
-\commandinline|\aeqref{!<kulcs>!} | $\equiv$ \verbinline|\az{\eqref{!<kulcs>!}}|\\
-\commandinline|\aeqref*{!<kulcs>!} | $\equiv$ \verbinline|\az*{\eqref{!<kulcs>!}}|\\
-\commandinline|\aveqref{!<kulcs>!} | $\equiv$ \verbinline|\azv{\eqref{!<kulcs>!}}|\\
-\commandinline|\aveqref*{!<kulcs>!}| $\equiv$ \verbinline|\azv*{\eqref{!<kulcs>!}}|
+\huazcmd|\arefeq{!<kulcs>!} | $\equiv$ \code|\az{\refeq{!<kulcs>!}}|\\
+\huazcmd|\avrefeq{!<kulcs>!} | $\equiv$ \code|\azv{\refeq{!<kulcs>!}}|
-\commandinline|\apageref{!<kulcs>!} | $\equiv$ \verbinline|\az{\pageref{!<kulcs>!}}|\\
-\commandinline|\apageref*{!<kulcs>!} | $\equiv$ \verbinline|\az*{\pageref{!<kulcs>!}}|\\
-\commandinline|\avpageref{!<kulcs>!} | $\equiv$ \verbinline|\azv{\pageref{!<kulcs>!}}|\\
-\commandinline|\avpageref*{!<kulcs>!}| $\equiv$ \verbinline|\azv*{\pageref{!<kulcs>!}}|
+\huazcmd|\apageref{!<kulcs>!} | $\equiv$ \code|\az{\pageref{!<kulcs>!}}|\\
+\huazcmd|\apageref*{!<kulcs>!} | $\equiv$ \code|\az{\pageref*{!<kulcs>!}}|\\
+\huazcmd|\avpageref{!<kulcs>!} | $\equiv$ \code|\azv{\pageref{!<kulcs>!}}|\\
+\huazcmd|\avpageref*{!<kulcs>!}| $\equiv$ \code|\azv{\pageref*{!<kulcs>!}}|
-\commandinline|\acite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \verbinline|\az{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
-\commandinline|\acite*[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \verbinline|\az*{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
-\commandinline|\avcite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \verbinline|\azv{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
-\commandinline|\avcite*[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}| $\equiv$ \verbinline|\azv*{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|
+\huazcmd|\acite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \code|\az{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|\\
+\huazcmd|\avcite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!} | $\equiv$ \code|\azv{\cite[!<szöveg>!]{!<kulcs1>!,!<kulcs2>!,!...!}}|
-A parancsok nevében az első ,,\texttt{a}'' betű kicserélhető ,,\texttt{A}'' betűre. Ekkor a határozott névelő nagybetűvel fog kezdődni, ami mondatok elején szükséges:
+A parancsok nevében az első \code{a} betű kicserélhető \code{A} betűre.
+Ekkor a határozott névelő nagybetűvel kezdődik, ami mondatok elején szükséges:
-\commandinline|\Aref \Avref \Aeqref \Aveqref \Apageref \Avpageref \Acite \Avcite|
+\huazcmd|\Aref \Aref* \Avref \Avref*|\\
+\huazcmd|\Aeqref \Aveqref|\\
+\huazcmd|\Arefeq \Avrefeq|\\
+\huazcmd|\Apageref \Apageref* \Avpageref \Avpageref*|\\
+\huazcmd|\Acite \Avcite|
Például
\begin{examplelst}
\section{Cím}\label{seca}
\section{Cím}\label{secb}
-\Aref{seca}.~és \aref{secb}.~szakaszban
+\Aref{seca}.~és \aref{secb}.~szakaszokban
\end{examplelst}
-eredménye ,,Az 1. és a 2. szakaszban''.
-
-\subsection{A huaz kapocs}\label{subsec-kapocs}
-
-Amikor a \huaz\ csomag megkeresi a megfelelő határozott névelőt, akkor a szövegben található \verb|\ref|, \verb|\ref*|, \verb|\pageref|, \verb|\pageref*|, \verb|\eqref|, \verb|\cite| kereszthivatkozásokat lecseréli a kifejthető verziójukra, továbbá a kifejtés során egy adott listában található formázó parancsokat (\verb|\emph|, \verb|\textbf|, \verb|\small|, stb.) figyelmen kívül hagyja. Emiatt lehetséges, hogy például a következő kódok működnek:
+eredménye \huqq{Az 1. és a 2. szakaszokban}.
+
+\subsection{Ignorált parancsok}\label{subsec-ignoralt-parancsok}
+
+Amikor a \huaz\ csomag megkeresi a megfelelő határozott névelőt, akkor a szövegben a következő parancsokat a nem szöveget tároló argumentumaikkal együtt (ha van) figyelmen kívül hagyja:
+
+\begin{multicols}{4}
+\code|\bfseries|\\
+\code|\color|\\
+\code|\emph|\\
+\code|\em|\\
+\code|\enquote|\\
+\code|\fbox|\\
+\code|\fontencoding|\\
+\code|\fontfamily|\\
+\code|\fontseries|\\
+\code|\fontshape|\\
+\code|\fontsize|\\
+\code|\footnotesize|\\
+\code|\framebox|\\
+\code|\hbox|\\
+\code|\href|\\
+\code|\huge|\\
+\code|\Huge|\\
+\code|\itshape|\\
+\code|\large|\\
+\code|\Large|\\
+\code|\LARGE|\\
+\code|\lowercase|\\
+\code|\makebox|\\
+\code|\MakeLowercase|\\
+\code|\MakeUppercase|\\
+\code|\mbox|\\
+\code|\mdseries|\\
+\code|\negthinspace|\\
+\code|\normalfont|\\
+\code|\normalsize|\\
+\code|\num|\\
+\code|\rmfamily|\\
+\code|\scriptsize|\\
+\code|\scshape|\\
+\code|\selectfont|\\
+\code|\sffamily|\\
+\code|\slshape|\\
+\code|\small|\\
+\code|\sscshape|\\
+\code|\swshape|\\
+\code|\textbf|\\
+\code|\textcolor|\\
+\code|\textit|\\
+\code|\textmd|\\
+\code|\textnormal|\\
+\code|\textqq|\\
+\code|\textrm|\\
+\code|\textsc|\\
+\code|\textsf|\\
+\code|\textsl|\\
+\code|\textssc|\\
+\code|\textsw|\\
+\code|\texttt|\\
+\code|\textulc|\\
+\code|\textup|\\
+\code|\tiny|\\
+\code|\told|\\
+\code|\ttfamily|\\
+\code|\ulcshape|\\
+\code|\underline|\\
+\code|\uppercase|\\
+\code|\upshape|\\
+\code|\usefont|
+\end{multicols}
+
+Emiatt lehetséges, hogy a következő kódok jól működnek:
\begin{examplelst}
\newcommand{\osztaly}{V.B}
Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot.
@@ -329,52 +552,376 @@ Idén \az{\textbf{\osztaly}}~osztály rendezi a farsangot.
\begin{examplelst}
\section{Cím}\label{sec}
-\az{\textbf{\ref{sec}}}
+\az{\footnotesize\ref{sec}}
\end{examplelst}
-De a következő kód is jól fog működni:
+De ez is helyes eredményt ad:
\begin{examplelst}
\newcommand{\myfont}[1]{{\usefont{T1}{yv1d}{m}{n}#1}}
-\newcommand{\osztaly}{X.A~osztály}
+\newcommand{\osztaly}{V.A~osztály}
\az{\myfont{\osztaly}}
\end{examplelst}
-Ez nem azért van, mert a \verb|\myfont| is szerepel ebben az adott listában, hanem azért, mert a \verb|\myfont| kifejtésében található \verb|\usefont| benne van.
+Azért kapunk helyes eredményt, mert a \code|\myfont| kifejtésében található \code|\usefont| szerepel az előző listában. Ha a \code|\myfont| erős parancsként lett volna definiálva, akkor már nem működne megfelelően az előző kód (lásd később). Ebben az esetben a \code|\myfont| parancsot is fel kell venni a listára.
+
+\huazcmd|\huazignorecmd[!<opció>!]{!<parancs>!}|
-\commandinline|\AddToHook{huaz}{!<kód>!}|
+Az ignoráló listát ezzel lehet bővíteni.
+A \code|!<parancs>!| helyére az ignorálandó parancsot kell írni az argumentumai és \code{*} nélkül.
+Az \code|!<opció>!| \code{0} és \code{9} közötti egész szám lehet.
+Amennyiben ezektől eltérő a beírt \code|!<opció>!|, akkor erre figyelmeztet a fordító.
+A használata három esetre bontható.
-Amennyiben olyan formázó parancsot használ, ami még ezen a listán nem található, akkor az a felhasználó által is bővíthető. Például a \texttt{shadowtext} csomag \verb|\shadowtext| parancsa nincs a listában, ezért a következő kód eredménye hibás lesz:
+\paragraph{1. eset}
+%
+Opció nélkül használva, a \code|!<parancs>!| a névelő megállapításakor törlődik, de az utána írt \code{*}, opció vagy argumentum nem.
+Deklarációs parancsok esetén jól használható.
+Például a \code|\tiny| parancs így lett besorolva a listába:
+\begin{examplelst}
+\huazignorecmd{\tiny}
+\end{examplelst}
+Ugyanez alkalmazható abban az esetben is, ha a \code|!<parancs>!|-nak nincs csillagos verziója sem opciója, továbbá az első \code|{ }| jelek közé írt argumentuma a figyelembe vett szöveg. Például a \code|\textrm| ilyen, ezért így lett besorolva:
+\begin{examplelst}
+\huazignorecmd{\textrm}
+\end{examplelst}
+
+A \code{shadowtext} csomag \code|\shadowtext| parancsa nincs a listában, ezért a következő kód eredménye hibás lesz:
\begin{examplelst}
\newcommand{\osztaly}{X.A~osztály}
\az{\shadowtext{\osztaly}}
\end{examplelst}
-A listára az
+A listára
\begin{examplelst}
-\AddToHook{huaz}{\def\shadowtext{}}
+\huazignorecmd{\shadowtext}
\end{examplelst}
-módon vehető fel. Ezzel a névelő megállapítása során a \verb|\shadowtext| parancs nem jelent semmit. Tehát a következő kód már megfelelően működik:
+módon vehető fel, mert a \code|\shadowtext| parancsnak sem opciója sem csillagos verziója nincs, továbbá egyetlen argumentuma a szöveg.
+Tehát a következő kód már megfelelően működik:
\begin{examplelst}
-\AddToHook{huaz}{\def\shadowtext{}}
+\huazignorecmd{\shadowtext}
\newcommand{\osztaly}{X.A~osztály}
\az{\shadowtext{\osztaly}}
\end{examplelst}
-Az előző eset a \texttt{huaz} kapocs nélkül így is megoldható:
+Megjegyezzük, hogy az előző eset így is megoldható:
\begin{examplelst}
\newcommand{\osztaly}{X.A~osztály}
\az*{\osztaly}~\shadowtext{\osztaly}
\end{examplelst}
-Ha a \verb|\shadowtext| az \verb|\osztaly| definíciójában szerepel, akkor a \texttt{huaz} kapocs használata nem kerülhető meg:
+Ha a \code|\shadowtext| az \code|\osztaly| definíciójában szerepel, akkor nem tudjuk megkerülni a \code|\huazignorecmd| használatát az előző módon:
\begin{examplelst}
-\AddToHook{huaz}{\def\shadowtext{}}
+\huazignorecmd{\shadowtext}
\newcommand{\osztaly}{\shadowtext{X.A~osztály}}
\az{\osztaly}
\end{examplelst}
-Ha a formázó parancs erős, akkor a \texttt{huaz} kapocs használata szintén nem kerülhető meg. Például
+
+\paragraph{2. eset}
+%
+Ha az \code|!<opció>!| \code{0}, akkor a \code|!<parancs>!| és az utána található első \code|{| jelig található kódok mindegyike ignorálódik a névelő megállapításakor.
+Tehát például
\begin{examplelst}
-\AddToHook{huaz}{\def\myfont{}}
-\DeclareRobustCommand{\myfont}[1]{{\usefont{T1}{yv1d}{m}{n}#1}}
-\renewcommand{\thesection}{\myfont{\arabic{section}}}
+\huazignorecmd[0]{\foo}
+\end{examplelst}
+esetén a
+\begin{examplelst}
+\foo{...} \foo*{...} \foo[...]{...} \foo*[...]{...}
+\end{examplelst}
+kódokban a
+\begin{examplelst}
+\foo \foo* \foo[...] \foo*[...]
+\end{examplelst}
+mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor.
+A \code|\makebox| például
+\begin{examplelst}
+\huazignorecmd[0]{\makebox}
+\end{examplelst}
+módon lett besorolva, ezért például
+\begin{examplelst}
+\makebox[2cm][s]{szöveg}
+\end{examplelst}
+esetén a \code|\makebox[2cm][s]| rész törlődik és csak a \huqq{szöveg} lesz figyelembe véve.
+
+
+Ha a formázó parancs erős, akkor a \code|\huazignorecmd| használata nem kerülhető meg még akkor sem, ha a listán szereplő parancsokkal épül fel.
+Például
+\begin{examplelst}
+\huazignorecmd[0]{\myfont}
+\DeclareRobustCommand{\myfont}[2][cmr]
+ {{\usefont{T1}{#1}{m}{n}#2}}
+\renewcommand{\thesection}{\myfont[yv1d]{\arabic{section}}}
\section{Cím}\label{sec}
\aref{sec}
\end{examplelst}
+Ebben a példában nem hagyható el a \code{[0]}, mert a \code|\myfont|-nak van opciója.
+
+\paragraph{3. eset}
+%
+Ha az \code|!<opció>!| \code{1} és \code{9} közötti egész szám, akkor a \code|\huazignorecmd| parancs a névelő megállapítása során a \code|!<parancs>!|-ot és az utána következő első \code|{| jelig tartó kódokat ignorálja, továbbá ezután az első \code|!<opció>!| darab \code|{ }| jelek közé írt részeket szintén figyelmen kívül hagyja.
+Tehát például
+\begin{examplelst}
+\huazignorecmd[1]{\foo}
+\end{examplelst}
+esetén a
+\begin{examplelst}
+\foo{...} \foo*{...} \foo[...]{...} \foo*[...]{...}
+\end{examplelst}
+kódok mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor.
+Például a \code|\textcolor| parancs
+\begin{examplelst}
+\huazignorecmd[1]{\textcolor}
+\end{examplelst}
+módon lett a listába sorolva, így a
+\begin{examplelst}
+\textcolor[RGB]{20,30,40}{szöveg}
+\end{examplelst}
+parancsban a
+\begin{examplelst}
+\textcolor[RGB]{20,30,40}
+\end{examplelst}
+kódrész ignorálva lesz, és csak a ,,\code{szöveg}'' kerül vizsgálatra a névelő megállapításakor.
+Ha a
+\begin{examplelst}
+\huazignorecmd[2]{\foo}
+\end{examplelst}
+parancsot használjuk, akkor a
+\begin{examplelst}
+\foo{...}{...} \foo*{...}{...}
+\foo[...]{...}{...} \foo*[...]{...}{...}
+\end{examplelst}
+kódok mindegyike figyelmen kívül lesz hagyva a névelő megállapításakor.
+Például a \code|\fontsize| parancs
+\begin{examplelst}
+\huazignorecmd[2]{\fontsize}
+\end{examplelst}
+módon lett a listába sorolva, így a
+\begin{examplelst}
+\fontsize{14pt}{14pt}
+\end{examplelst}
+parancs figyelmen kívül lesz hagyva a névelő megállapításakor.
+
+\subsection{A kereszthivatkozások kifejthető verziói}
+Ha a szöveg elején kereszthivatkozás van, akkor a határozott névelő megállapítása előtt a kereszthivatkozás parancsát le kell cserélni annak kifejthető verziójára.
+A \code{refcount} csomag két ilyen parancsot definiál:
+A \code|\getrefnumber| a \code|\ref|, \code|\ref*|, \code|\eqref|, \code|\refeq| esetén
+használható, a \code|\getpagerefnumber| pedig a \code|\pageref| és \code|\pageref*| esetén.
+
+\huazcmd|\huazrefcmd{!<parancs>!}|
+
+Ezzel a paranccsal elérhető, hogy a \code|!<parancs>!| helyére beírt parancsot és annak csillagos verzióját a határozott névelő megállapítása során a \code|\getrefnumber| paranccsal helyettesítse.
+
+A \code|\ref|, \code|\ref*|, \code|\eqref|, \code|\refeq| parancsok így lettek besorolva a \huaz\ csomagban:
+\begin{examplelst}
+\huazrefcmd{\ref}
+\huazrefcmd{\eqref}
+\huazrefcmd{\refeq}
+\end{examplelst}
+Ezzel már az \code|\eqref*| és \code|\refeq*| is működne, de ezek a csillagos verziók nincsenek definiálva a csillag nélküli verziókat definiáló \code{amsmath} illetve \code{mathtools} csomagokban. Ezt mi is pótolhatjuk, amire \aref{subsec-eqref}.~alszakaszban láthatunk megoldást.
+
+\huazcmd|\huazpagerefcmd{!<parancs>!}|
+
+Ezzel a paranccsal elérhető, hogy a \code|!<parancs>!| helyére beírt parancsot és annak csillagos verzióját a határozott névelő megállapítása során a \code|\getpagerefnumber| paranccsal helyettesítse.
+
+A \code|\pageref| és \code|\pageref*| parancsok így lettek besorolva a \huaz\ csomagban:
+\begin{examplelst}
+\huazrefcmd{\pageref}
+\end{examplelst}
+
+Ezekre láthatunk egy alkalmazást \aref{subsec-autoref}.~alszakaszban.
+
+\subsection{Az \texttt{\textbackslash autoref} és \texttt{\textbackslash autopageref} parancsok}\label{subsec-autoref}
+
+Ezeket a parancsokat a \code{hyperref} csomag definiálja.
+Ezekkel hivatkozva egy címkére, nem csak a sorszám, hanem a sorszámozott egység neve (szakasz, alszakasz, oldal, stb.) is megjelenik link formájában.
+Ezeknek léteznek csillagos verzióik is, melyeknek ugyanaz a hatásuk, de nem generálnak linket.
+
+Magyar nyelvű dokumentumokban nem lehet közvetlenül alkalmazni, mert az angol szabály szerint \huqq{1.~szakasz} helyett \huqq{szakasz~1} lesz az eredménye a következőnek:
+\begin{examplelst}
+\section{Cím}\label{sec}
+\autoref*{sec}
+\end{examplelst}
+A használatához először magyarosítani kell a következő kóddal a \code{hyperref} betöltése után a preambulumban:
+\begin{examplelst}
+\usepackage{regexpatch}
+\makeatletter
+\xpatchcmd{\HyRef@autosetref}{\HyRef@currentHtag}{}{}{}
+\xpatchcmd{\HyRef@autosetref}{\null}
+ {\null.~\HyRef@currentHtag}{}{}
+\xpatchcmd*{\HyRef@testreftype}{~}{}{}{}
+\makeatother
+\RenewDocumentCommand{\autopageref}{sm}{%
+ \IfBooleanTF{#1}
+ {\pageref*{#2}.~oldal}
+ {\hyperref[{#2}]{\pageref*{#2}.~oldal}}}
+\end{examplelst}
+Ezután már \huqq{1.~szakasz} lesz az eredmény.
+
+Ha az így módosított \code|\autoref|, \code|\autoref*|, \code|\autopageref|, \code|\autopageref*| parancsokhoz automatikus határozott névelőt szeretnénk, akkor írjuk be a következőket a \huaz\ betöltése után:
+\begin{examplelst}
+\huazrefcmd{\autoref}
+\huazpagerefcmd{\autopageref}
+\end{examplelst}
+Ezután a következő kód eredménye \huqq{Az 1. szakasz az 1. oldalon kezdődik.} lesz:
+\begin{examplelst}
+\section{Cím}\label{sec}
+\Az{\autoref*{sec}} \az{\autopageref*{sec}on} kezdődik.
+\end{examplelst}
+
+\subsection{Az \texttt{\textbackslash eqref*} és \texttt{\textbackslash refeq*} parancsok}\label{subsec-eqref}
+
+A \code|\ref| és \code|\pageref| parancsoknak definiált a csillagos verziójuk is, amely alapesetben nem különbözik a normál verziótól, de a \code{hyperref} csomaggal használva a csillag nélküli verzió linket generál, míg a csillagos nem.
+
+Az \code{amsmath} csomag által definiált \code|\eqref| a \code{hyperref} csomaggal együtt használva szintén generál linket, de ennek nincs definiálva csillagos verziója, így ekkor a link nélküli verzió nem érhető el közvetlenül.
+További gond az ilyen link nélküli egyenlethivatkozás előtti automatikus névelő megadása.
+
+Négy lehetséges megoldást mutatunk.
+
+\begin{enumerate}
+\item
+A \code{NoHyper} környezet használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \begin{NoHyper}\aeqref{eq}\end{NoHyper}
+ egyenletet!}
+\end{examplelst}
+
+\item
+Az \code|\az*| parancs használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az*{\ref{eq}} \textup{(\ref*{eq})}
+ egyenletet!}
+\end{examplelst}
+
+\item
+Az \code|\eqrefstyle| parancs definiálásával és a \code|\huazignorecmd| paranccsal, amely az előzőnek egy kényelmesebben használható verziója:
+\begin{examplelst}
+\makeatletter
+\newcommand{\eqrefstyle}[1]{\textup{\tagform@{#1}}}
+\makeatother
+\huazignorecmd{\eqrefstyle}
+
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\eqrefstyle{\ref*{eq}}} egyenletet!}
+\end{examplelst}
+
+\item
+Ebben az esetben definiáljuk az \code|\eqref| csillagos verzióját (az \code{amsmath} betöltése után), amely nem generál linket a \code{hyperref} csomaggal együtt használva:
+\begin{examplelst}
+\makeatletter
+\DeclareDocumentCommand{\eqref}{ s m }{%
+ \textup{\tagform@{%
+ \IfBooleanTF{#1}{\ref*{#2}}{\ref{#2}}%
+ }}%
+}
+\makeatother
+\end{examplelst}
+Ezután a
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\eqref*{eq}} egyenletet!}
+\end{examplelst}
+kód helyes eredményt ad, mert a \huaz\ csomagban nem csak az \code|\eqref|, hanem az \code|\eqref*| is a kifejthető \code|\getrefnumber| parancsra lesz kicserélve a határozott névelő meghatározásánál.
+\end{enumerate}
+
+Ugyanez a probléma a \code{mathtools} csomag által definiált \code|\refeq| és a \code{hyperref} csomag együttes használata esetében.
+
+Az előző négy megoldás mindegyikét lehet alkalmazni megfelelő módosításokkal:
+\begin{enumerate}
+\item
+A \code{NoHyper} környezet használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \begin{NoHyper}\arefeq{eq}\end{NoHyper}
+ egyenletet!}
+\end{examplelst}
+
+\item
+Az \code|\az*| parancs használatával:
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az*{\ref{eq}} \textup{\ref*{eq}} egyenletet!}
+\end{examplelst}
+
+\item
+A \code|\refeqstyle| parancs definiálásával:
+\begin{examplelst}
+\newcommand{\refeqstyle}[1]{\textup{#1}}
+
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\refeqstyle{\ref*{eq}}} egyenletet!}
+\end{examplelst}
+Itt nincs szükség a \code|\huazignorecmd{\refeqstyle}| használatára.
+
+\item
+A \code|\refeq*| parancs definiálásával:
+\begin{examplelst}
+\DeclareDocumentCommand{\refeq}{ s m }{%
+ \textup{%
+ \IfBooleanTF{#1}{\ref*{#2}}{\ref{#2}}%
+ }%
+}
+\end{examplelst}
+Ezután a
+\begin{examplelst}
+\begin{equation}\label{eq}
+a=b
+\end{equation}
+\emph{Lásd \az{\refeq*{eq}} egyenletet!}
+\end{examplelst}
+kód helyes eredményt ad, mert a \huaz\ csomagban nem csak a \code|\refeq|, hanem a \code|\refeq*| is a kifejthető \code|\getrefnumber| parancsra lesz kicserélve a határozott névelő meghatározásánál.
+\end{enumerate}
+
+\subsection{Parancsok átdefiniálása a határozott névelő megállapításakor}
+
+A \code|\huazignorecmd|, \code|\huazrefcmd| és \code|\huazpagerefcmd| parancsok is a címben szereplő funkciót látják el, de speciális esetekben.
+Ezek általánosított verziója a következő parancs:
+
+\huazcmd|\huazdefcmd{!<átdefiniáló kód>!}|
+
+Az \code|!<átdefiniáló kód>!| helyére egy parancsnak azt a definícióját kell írni, amelynek a határozott névelő megállapítása során kell érvényesülnie.
+Felsorolunk néhány kódpárt, melyek ekvivalensek egymással:
+\begin{examplelst}
+\huazignorecmd{\tiny}
+\huazdefcmd{\def\tiny{}}
+\end{examplelst}
+
+\begin{examplelst}
+\huazignorecmd[0]{\makebox}
+\huazdefcmd{\def\makebox#1#{}}
+\end{examplelst}
+
+\begin{examplelst}
+\huazignorecmd[1]{\textcolor}
+\huazdefcmd{\def\textcolor#1#{\@gobble}}
+\end{examplelst}
+
+\begin{examplelst}
+\huazrefcmd{\ref}
+\huazdefcmd{\def\ref#1#{\getrefnumber}}
+\end{examplelst}
+
+Alkalmazásként tekintsük a következő kódot, amely hibával fog fordulni:
+\begin{examplelst}
+\newcommand{\tananyag}{\LaTeX\ alapjai}
+A mai óra anyaga \az{\tananyag}.
+\end{examplelst}
+A megfelelő eredményhez a \code|\LaTeX| parancsot át kell definiálni a névelő megállapításakor:
+\begin{examplelst}
+\huazdefcmd{\def\LaTeX{latex}}
+\newcommand{\tananyag}{\LaTeX\ alapjai}
+A mai óra anyaga \az{\tananyag}.
+\end{examplelst}
+Az eredmény \huqq{A mai óra anyaga a \LaTeX.} lesz.
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/jsonparse/README.md b/macros/latex/contrib/jsonparse/README.md
index 6c268a9372..69258570db 100644
--- a/macros/latex/contrib/jsonparse/README.md
+++ b/macros/latex/contrib/jsonparse/README.md
@@ -1,4 +1,6 @@
-![Version 0.8.0](https://img.shields.io/badge/version-0.8.0-blue)
+![Version 0.8.3](https://img.shields.io/badge/version-0.8.3-blue)
+
+![Jason, the JSON parsing horse](https://github.com/jasperhabicht/jsonparse/assets/6378801/d6abde3a-fa12-4b63-a213-ad8332e32199)
# The `jsonparse` package
@@ -42,6 +44,7 @@ Let's assume a file with the name `example.json` is stored in the working direct
We can store it in the token variable `\myJSONdata` using the command `\JSONParseFromFile{\myJSONdata}{example.json}`. Calling the command `\JSONParseValue{\myJSONdata}{contactPoint[0].telephone}` would then result in the output `+1 (555) 555-1234` (indices are zero-based per default).
-This package including all files is subject to the LPPL 1.3c license.
-Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+This package including all files is subject to the LPPL 1.3c license. Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
+
+Jason, the JSON parseing horse: Copyright 2024 Hannah Klöber.
diff --git a/macros/latex/contrib/jsonparse/jason/jason.pdf b/macros/latex/contrib/jsonparse/jason/jason.pdf
new file mode 100644
index 0000000000..324458e684
--- /dev/null
+++ b/macros/latex/contrib/jsonparse/jason/jason.pdf
@@ -0,0 +1,1662 @@
+%PDF-1.5 %âãÏÓ
+1 0 obj <</Metadata 2 0 R/OCProperties<</D<</ON[5 0 R]/Order 6 0 R/RBGroups[]>>/OCGs[5 0 R]>>/Pages 3 0 R/Type/Catalog>> endobj 2 0 obj <</Length 53578/Subtype/XML/Type/Metadata>>stream
+<?xpacket begin="" id="W5M0MpCehiHzreSzNTczkc9d"?>
+<x:xmpmeta xmlns:x="adobe:ns:meta/" x:xmptk="Adobe XMP Core 5.3-c011 66.145661, 2012/02/06-14:56:27 ">
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
+ <rdf:Description rdf:about=""
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
+ <dc:format>application/pdf</dc:format>
+ <dc:title>
+ <rdf:Alt>
+ <rdf:li xml:lang="x-default">jason</rdf:li>
+ </rdf:Alt>
+ </dc:title>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmp="http://ns.adobe.com/xap/1.0/"
+ xmlns:xmpGImg="http://ns.adobe.com/xap/1.0/g/img/">
+ <xmp:CreatorTool>Adobe Illustrator CS6 (Windows)</xmp:CreatorTool>
+ <xmp:CreateDate>2024-04-28T16:34:40+02:00</xmp:CreateDate>
+ <xmp:ModifyDate>2024-04-28T16:34:40+02:00</xmp:ModifyDate>
+ <xmp:MetadataDate>2024-04-28T16:34:40+02:00</xmp:MetadataDate>
+ <xmp:Thumbnails>
+ <rdf:Alt>
+ <rdf:li rdf:parseType="Resource">
+ <xmpGImg:width>256</xmpGImg:width>
+ <xmpGImg:height>256</xmpGImg:height>
+ <xmpGImg:format>JPEG</xmpGImg:format>
+ <xmpGImg:image>/9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA&#xA;AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK&#xA;DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f&#xA;Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER&#xA;AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA&#xA;AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB&#xA;UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE&#xA;1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ&#xA;qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy&#xA;obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp&#xA;0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo&#xA;+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXlf5z+Y7yZ7XyZpU7W9xqCG51a5jNHis1NFUEftSvt8h75hazNwig5elxWbKaflX5&#xA;8n1m2k0DW3C+ZdLUCZjsLqAbJcp416P4H50yzTZ+MUebDUYeE2OT0DMlx3Yq7FXYq7FXYq7FXYq7&#xA;FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVsssUUbSSuscairOxAAHuThAJ&#xA;2CCQBZfO1jqDa3q+s+ZnJb9K3bi1J7WlufSgX/gV3zQ558UiXc4ocMQF+oWNy9xbajptwbLWrBvU&#xA;sb1eqk7Mjj9pHGzA5CEzE2GcoiQoplb/AJzebrudrC7EOmapEPjgSMFXH88RkMnJT+Gdp2R+V1Ma&#xA;P953X93L9jxva8tVpzYI8M9QOXv5/tbl88ebJa8tTlFf5OKf8RAzfx7PwD+EOgl2jnP8ZUv8XeZ/&#xA;+rpc/wDIxv65P8lh/mR+TD89n/ny+ba+b/NCkEapcVHjISPuOA6HD/MCjX5/58vmioPzC83wkUvy&#xA;48JEjb8StfxyuXZmA/w/e2x7U1A/i+5NrT82tejIFzb29wvcgNG33gkf8LmLPsXEeRIcqHbmUcwC&#xA;n9h+bejSkLe2s1qT1ZSJUHz+y3/C5hZexMg+kg/Y5+LtzGfqBj9rKdM8xaHqYH1G9imcivpg8ZP+&#xA;Aajfhmty6XJj+qJDs8OrxZPpkD+O5Mcx3IdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi&#xA;rsVQmp6tp2mW5uL+4S3i7FjuT4Ko3Y/LLcWGeQ1EWWrNnhjFzNBgGufm0x5RaNb0HT6zcCp+axg/&#xA;rP0ZvNP2L1yH4D9bodT250xj4n9TzrzX5i1e8029ub67knaOGRkDNRQ3E04qPhXfwGZ+oxwwYJmA&#xA;AqJ+51+nyZM+eAmTK5D70LoWr6DZ6LY2z6jaxyRQRh0aaMEMVBaoLeOeWkPp6dW93a3K8reZJl/m&#xA;jYMPvBOBWLfmT6cWk2t2D6dzFdIIZ1HxqCrFqH/Y9Mtw5JQkJRNEMMkIziYyFgrtE1Z7tWtroBb+&#xA;BVMgX7MiMKpNH4q439s9G7I7UGqhR/vI8/1/jk+ddr9lnSzsf3cuX6vxzTXNw6d2KuxV2KuxVsEg&#xA;gg0I3BGKWR6N+YPmTTOKev8AW7cf7puKvt7P9sffTNfn7Mw5OnCfJ2Gn7UzY+vEPN6DoP5kaFqZS&#xA;G4JsLptuEpHpk/5Mmw/4KmaLU9lZce49UfL9Tv8ATdrYsmx9MvPl82WAgio6ZrHaOxV2KuxV2Kux&#xA;V2KuxV2KuxV2KuxV2KuxV2KuJCgsxoBuSegGKsC80fmfa2he00YLc3AqGujvEp/yR+38+nzzd6Ps&#xA;iUvVk2Hd1/Y6PWdsxj6ce57+n7Xmmoajfahctc3s7zzN1dzWg8AOgHsM6HFijjFRFB5vLllkNyNl&#xA;j2v+YU01RFDGbi9cVSIAkKDtzfjU0/Xmt7T7TGnFRHHkPT9Jdl2Z2YdQbkeDGOv6AgtNHla+kB1v&#xA;Uzd3p39Cf1LaBD4IjBAfmTvnlna/aPaGWXrEgO79nT8bvp3Zeg0OKPoonv8A2srXy75fCgLptrxA&#xA;2/cxn8aZzJ1WX+dL5l34wY/5o+SDu/JehysZrWNtOux9i4tGMRU/6o+Gn0Zfi7Ryw68Q82nJoscu&#xA;le5Jbi31281jTtC1eMXMFvL9bN8ook0MakAOvQNybifn9J2uTXRlgM47S5V5uBDSSGURO45pfqFt&#xA;PotylqTS4sS0uj3DdJ7UkmS1c/zLX4fw6jNn2R2mYyjlj9UeY/HQuv7U7OjOJxy+mXI/juZXaXMN&#xA;1bRXMJ5RSqHQ+xGet4csckBOPKQt8mzYpY5mEucTSrlrU7FXYq7FXYq7FXYqyPy3561nRCsQf61Y&#xA;jrayk0A/yG3Kfq9swNX2djzb8pd/63Y6TtLJh25x7v1dz1fy/wCaNI12DnZy0mUVltn2kT5juPcZ&#xA;zGp0eTCakNu/o9Rpdbjzi4nfu6pvmK5bsVdirsVdirsVdirsVdirsVdirsVQ+oajZ6faSXd5KsNv&#xA;GKs7fgAO5PYZZixSyS4Yiy15csccTKRoB5D5u8+32tu1tbcrbTK0EVfjk95CP+I9PnnU6Hs2OHc7&#xA;z+73PJ67tOWb0x2h9/vYpmzdW7FXYql/mC1iuNGvEdFcrDI0fIA0YKSCK9N8we0sUZ6eYIv0mvfT&#xA;ndm5ZQ1ECDXqF+60Dot3c+X7bT3nlafQNQiiKyyGrWs0ig8Sf99k/d+vxrX6IZAZRHrH2/tfYNHq&#xA;jA8Mvp+5muc47p2KoTVdJsNVs2tL2P1Ijup6MrDoynsRluHNLHLiid2vJijMUUgtvKetafD9W0/V&#xA;V+qqSYop4AzKCa05qwr18M6zRe2WowQEABQeZ1nspp88zMk8RXSQecLUcmgtdQjHVYGaGSnykqv4&#xA;5u9L7e2ayQ/R+v7nTan2HFfu5H7/ANTen61aXkrW5V7a9T+8tJ14SD3APUe4ztuzu18GrF4zv3PG&#xA;9odkZ9IfWNu/omGbR1jsVQF/rVnZyrb/ABXF4/8Ad2kC85T9A6D55rtd2ph031n1dw5/s+LstD2X&#xA;m1P0D0955ft+CyO08231GpBpMJ6c/wDSJ6eNBxQfKuctqfajLLbGBEfM/q+x6jTezGGP94TI/Ifr&#xA;+1XHlKeTe61m9du/oskC/cqnNTk7Z1Uuc5fDb7qdrj7I0seWOPx3+9d/g237anqQPj9Zb+Iyr+U9&#xA;T/qk/wDTH9bb/J2n/wBTh/pR+pKrN9asvMwi0PWLsR2BBu7uUxyFXP8AupDxFTT7Wb3sier1UiDM&#xA;+GPquj8N+v3Ok7WjpNLEEQHiH6asfHbp973vyZ+YVvqvCx1IrBqJ2jk+zHMfb+V/bv28Mz9f2Ycf&#xA;qhvD7v2OF2f2qMvpntP7/wBrNM1DuHYq7FXYq7FXYq7FXYq7FXYqhNV1Wx0uxkvb2QRwRj6WPZVH&#xA;cnLcOGWSQjEbtWbNHFEykdninmnzVfa/emSUmO0jP+j2wPwqPE+LHuc6/R6OOCND6upeN1utlnlZ&#xA;+noEkzMcJ2KqdzcwW0DzzuI4YxV3bYDK8uWOOJlI1ENmLFLJIRiLkUtgl13WRy06MWFg3S/uF5SO&#xA;PGKLw92zge1/baOMmGAb9/45fb7g912V7GmQEs5+H45/Z70YnkjSpBXUZbjUZDuTPK4Wv+SiFQB7&#xA;Zwmq7f1WY3KR/Hve103Y2mwioxCjffl5oM1q8VmJLGRx9uOR2U+AdHZgRX5ZRi7VyxPq9Qciegxk&#xA;bbJr5bhv4NEtYL//AHqgDROetRG5VDXvVADmLqpROQmP0lvwCQgBLmEyzHbnYq7FXYqlut6DaarA&#xA;A9YrqPe2u02kjbsQfDxGZej1uTTzEoFxtVpYZoGMxaU6LfXE8c1teALqFk/o3QHRiPsyD2cb57l2&#xA;H2oNZgE/4hz/AF/jrb4z232YdHnMf4Ty/V+OlKd9eX13ffojSSBc0DXd0RVbeM9D7uewzE7b7a8D&#xA;93j/ALzqe79rl9idjeP+8yf3fQfzv2J3o+hafpURW3QtM+89zJ8Usjdyzfw6ZwU5mRsmy93GIiKA&#xA;oJjkUuxVCatfLYaZdXjdIImcA92A+EfSdsIVIvL9m1rpMCybzyj1rhj1MknxMT770z1HsrTDDp4x&#xA;61Z95fMO1dSc2olLpdD3BMQSDUbEdDmxde9Q8hef/rJj0rV5P9I+za3bn7fgjn+bwPf59ec7S7N4&#xA;fXjG3UPSdmdp8X7vId+h/W9BzRO/dirsVdirsVdirsVdiqld3VvaW0tzcOI4IVLyOegAyUIGRAHM&#xA;sZzEYmR2AeI+b/NVzr+oF947GEkWsHgO7N/lN+HTOw0OjGCFfxHmXjNfrTnnf8I5BIcznAdirsVS&#xA;q2tV1rX5FnHPTdKK/uj9mS5YV+Idwg7eOeYe2vbEuPwIHYc/x9nzfSvY/sqIx+NIby+78b/Jlmec&#xA;PfOxV2KuxV2KuxV2KuxV2KsM803L6Rr6XkKF5NStjDHCN+dxG6iM/dIBnbeyXap08cnu29/T9LyP&#xA;tP2WNSYf1t/d1/QyDy9o40vT1jc+peTEy3k/d5W3Y18B0GOTIZyMpGyWzHjEIiMRQCZ5Bk7FXYqx&#xA;vzfJ9ZksNGXf65KJbkf8UQfGwP8ArNQDNj2VpfH1EY9L39w5uB2pqvA08p9a2955I3PUny52KuxV&#xA;61+XvnU6lGNK1CSuoRL+5lY7zIOx/wAtR9438c5jtPs/wzxw+k/Z+x6rsrtDxBwT+scvP9rN80zu&#xA;nYq7FXYq7FXYq7FXk/5lebTf3Z0izf8A0O2b/SGHSSUdv9VP1/RnT9k6Lgj4kvqPLyH7Xlu19dxy&#xA;8OP0jn5n9jBs3LpHYq7FXYqhPJskEPlw6hO6xpdTT3U0jkACshFST/kqM+f+2cpzauRG5J+/f9L7&#xA;t2XiGLTRHKh92yHufNl9dI8mkQRxWMYJfUr3ksZA6mNBRm+Zzb9m+yeXNDxMh4Mfefx93zdX2h7T&#xA;YsM/DgOPJ3D8fjuS/TR551pjNHqZttNY/u7gwJGzjxjT7XHwLMMwdZHR4JGMB4hHw/T+O4OdpZar&#xA;NESn6L+P6GV6TplxYpIJ76e+kkIJaYii0FPhAG1e+abNlE+URH3OzxYzHmSUflLa7FXYq7FXYq4k&#xA;KCSaAbknpTFWNaaP09rf6YcV02w5RaZXpJIdpJvltRf650+h03hQ3+qXP9TodXn8SW3IMlzMcV2K&#xA;uxVpmVVLMQFAqSdgAMVYFaazJe6ze6rFYXd4slLeyaKL92IEO55sVHxtvTN32T2vpdFxSyH1nbps&#xA;Pn1dN2t2VqdZwxx0IDfe9z8uiaC/19h+70KY9/jlhTb6Tmyl7c6Ucgfx8HWR9itQech+Pi02ranF&#xA;vPol4B/xUEl/BWy7H7a6OXOx8v0005PY3VDkYn5/tWf4p0lGC3Rls3O3G4ikj3+ZFPxza4PaLR5O&#xA;U/x8NnWZvZ7WY+cL+P4KZ6drNs08dxp94jTRMHjeJ1LKy7g7HNlDPhzCoyjIHzdbPBmwm5RlEjye&#xA;8+UPMsWvaStxst3FRLuIdnp9of5LdR93bOU12kOGdfwnk9doNWM+O/4hzTzMNzXYq7FXYq7FWMef&#xA;/Mv6F0cpA1L+8rHBTqo/bk+gdPfNj2bpPFyWfpjz/U63tPWeDjofVLl+t4rnXvGuxV2KuxV2KsP8&#xA;tRXGr6ba21yCuk6fVTAf93z8i1X/AMlOXTxzzz2e7Bhlyyz5BYvb8ff8u99C9oO3JYsccOM1Ijn3&#xA;D8cvn3JzLbLrGtx6Uf8AjnWKrPfIOjsf7qI07bciMl7a9rnFEYIGu/8AHl+kNfsf2WMhOeYvu/Hn&#xA;+gsuVVVQqgBQKADYADPKn0p2KuxV2KuxV2KrJpoYImlmdY4kFXkchVA8SThjEk0OaCQBZY3Pc3Hm&#xA;d2tLIvDoYNLu++y09OscNf2f5m/zO+0PZ/B65/V0Hc6nV6zi9MeTI4IIbeFIIUEcUahY0XYBRsAM&#xA;2jrlTFXYq7FWL+YdQm1W6PlvS3/eSf8AHTuh0hhr8S7dWbpT6PlVnzjFDiPwbcOE5JUGR2lrBaWs&#xA;VrbrwhhUJGvgFFM5OczImR5l6GMREUFXIsnYq5lVgVYAqeoO4xBVher6bpl/5lhtLe0hjjsAJ76a&#xA;NFVmkbeOIkAf6xzvfY7s+eoyccyTjj+B9v3F4v2s7Qjp8fBChOW36/x5s48oeYpNC1mO5JJtZP3d&#xA;2g7xnvTxXqM9N12lGbGR/F0fONBqzhyCX8PV7pHIkkayRsGRwGRhuCCKgjOMIINF7YEEWF2BLsVd&#xA;irTMqqWYgKBUk7AAYgKS8J83682t65PdAk2yH0rVfCNTsf8AZfa+nO00Om8HGI9evveI1+p8bKZd&#xA;OnuSXMxwnYq7FXYq7FUlndtMt4NJ0xBLqFyX+rp0C8mLNK/+Stc0Gv1kNBgEI/Wbr4nm7/Q6Oevz&#xA;mc/oFX8ByRPkKx+r22pSO5mmkvZUec9XEXw8vpbkfpzx/trNKebc2av4l9X7LxRhioCh+gMivL6z&#xA;soGuLuZIIV6u5oPl7nNXjxymaiLLsJzERZNJH/iDWNRFdFsONuRUahfExREeKxj42Hvm2w9k9Zn4&#xA;B12XtH+aPmluka9NHZQ6prF5Lc3V2W+oaXbLQlQSoPppQtWn7Rp9ODLpeKZx4o7DnI/j7mWPUVHj&#xA;yHnyCai585XnxQ2trp0R6C5ZppafKOij6Tl+PsmA+ok+7Zpn2jI8gAu+qec16ahZvXqGgYU+VGyw&#xA;9mYfP5tf5/J5NGw84y7PqtvbjxhtuZ/5KNko9m4R0J+KDrsp7nR+UbSWRZtVuZ9UlU1VbhqQg/5M&#xA;S0X765l48UIfSAHHnllP6jaeqqooVQFVRRVGwAHhk2tvFXYq4kAVOwHU4qxDVfNUl/fxaLokyxNc&#xA;MY31R/sDiKssPZ33/p4iGbJ4cDIi6bMWPjkI8mQaLoljpFp9XtVJLHlNM27yP3ZjnLajUSyyuTv8&#xA;OGOMUEflDa7FXYqoaheRWVjPeS/3cEbSMPHiK0+nJ4sZnIRHVjOYjEk9GN+XbaWPTxcXG93fMbq5&#xA;J68pNwP9itBTPe+wtCNNpYxrc7n8e58R7d1p1GplLoNh+Pemmbh071r8rdfN7pb6ZM1Z7GnpE9Wh&#xA;bp/wB2+VM5ftjTcE+Mcpfe9V2NquOHAecfu/YzfNO7p2KuxVi35j60dN8uyRRtS4vj6CU6hSKyH/&#xA;AIHb6c2XZWn8TKCeUd/1Os7W1Hh4SBzlt+t4vnXPHOxV2KuxV2KqF9ewWVnLdTmkUSlm8T4Ae5O2&#xA;U6jPHDjM5cot+nwSzZBCPOTvK+lTxpJqt+tNSv6Myn/dUXVIh/HPLdbq5ajIZy6/in1DR6WODGIR&#xA;5D7fNC6JqVtpmkavPcmiWd/cqwHVmLgqFHi3IUzmNfhlPOIjqA9Bo8ojhJPQq+maJNfSpq2uqJbt&#xA;vitrJt4rZT0AU7F/EnNtgwRxRqPz73W5s0shssgdQ6Mh6MCD9OXNSQ+VPLEWj2avPSXUXULLMdyq&#xA;jpGh7KPbrhPkqf4FdirsVdirsVdirTEhSQCxAqFHU+2+KscOm61rrctWJsNM7abE37yQf8XyDt/k&#xA;rkrpUyv9A0670waeIxBFHQ2zRDiYnH2XSnQg5FVHy5qdzcRTWF/Qapp7CK58HBFUlHs4zmtfpfCn&#xA;t9J5fqd7pM/iR3+oJxmC5bsVdiqQediX0iK1/Zvbq3t3/wBVnBP/ABHNx2BgGXVwie/79v0ur7Zz&#xA;HHpZyHQH7BaIz358MdihN/KmsnR9etbwmkIb07geMT7N93X6Mxdbg8XEY9envcvRajwsol06+570&#xA;CCKjpnEvcuxV2KvH/wA0dV+t+YhaKaxWMYSnb1H+Nz93EfRnVdj4eHFxdZPJds5uLNw9Ihh2bZ1D&#xA;sVdirsVdiqU3MP6T8wWmmkVtbRfrl4OzEHjEh/2W9M472o1n04R7z+j8e57H2X0e0sx/qj9LLc41&#xA;69hc2lzyeePqbiumysuqFOxkiX0t/wDZkEjBwC+LrVMuM1w9ObNMLF2KuxV2KuxV2KuxV2KuxV2K&#xA;uxV2Kse18fo3VrDXE+GLkLPUO1YpT8Dn/UfMbWYfExEdRuHI0uXgmD0ZDnKvQOxV2KpZ5j0uXUtM&#xA;aG3YJdROk9qzdBLGeS1+fTM3s/VnT5o5B0Li63TDPilA9QlOna3bXTG3mH1XUI/hms5fhcN/k1+0&#xA;PAjPc+ze2MGrgDEji7v1d74v2l2Pm0syJAmPf+vuTLNs6l2KvcfIeqnUvLFpIxrNADbyn3j2H3px&#xA;Ocb2jh8PMR0O/wA3tezc3iYYnqNvkyDMFz1ssiRRvI5oiKWY+AAqcIFmggmhZfPGoXkl7f3F5J9u&#xA;4keVvYuxNPxzu8UBCIiOgeAy5DORkeptD5Y1uxV2KuxVD6hf2thavdXL8I0+8nsqjuTlGp1MMMDO&#xA;ZoByNNpp5piEBZK7yrp1zFDcajep6d9qLiR4j1jjUUjjPuB1zy7W6o58ssh6vp+j0scGKOMdE9zE&#xA;clYYYjMs5UGZFZFfuFcgsPpKjFV+KuxV2KoG71J47yDTrK1l1HVrr/eewtxVyP52J2RB3Y5OEDI0&#xA;ESkALKdRfl7+bE0Pr/V9Ita7/VZridpR7Fo42jr9OZY0MnGOrik09xq2lalHpXmPTn0q+m/3lcsJ&#xA;baen++pl2Lf5J3GY2TDKHNvhkjLkjcqZuxV2KuxV2KuxVCatp8eo6bc2Un2Z42QE9iR8LfQd8IVC&#xA;+V9QkvtFgeaouoa290p6iWI8Wr7mlc5XW4fDykdOYeg0uTjxgprmK5DsVdiqC1PRdL1OMJfWyTgb&#xA;KxFGX/VYUYfQcuxaieM3E015MMZ/ULSo+TvS/wB4NUvLYdo2cTRj5K4/jm+03tVrMWwlf4+IdLqP&#xA;ZvSZdzAfj3btf4f8yJ9jWkk9pLVR+KsP1Zs4e3WqHMA/L9TrZ+xmkPKx8/1vSvyYfV7S41DTdQu4&#xA;7pJUW5gEcfp8ChCSd2ry5r92Z2j7fnr5kTFGIcfP2JDRRHATUi9TzYuGknna8Np5V1KUGhaIxA/8&#xA;ZSI/+NszOz4cWeI87+W7hdo5OHBI+VfPZ4TnaPEOxV2KuxVAanq8FkUiVGuL2ba3tI93c/wX3Oa7&#xA;tDtPFpY3LeXQdf7HY9n9mZdVKo7R6np/aqaV5cuJLlNS1tlmu03t7Rd4YK+H8z/5Wee6/tHJqZXM&#xA;7dB0D6DoOz8emjwwG/U9SyLNe5zsVdirsVdirsVZL+TVtp1l5Z1rzle0Nzdz3Lzz05NFaWRKrEPY&#xA;cCxp128M2+jgBC3XaqRMqeff9Dd336br+gIv0HzoU9Vvrfp1pz5f3fKm/Hj7cu+S/Mb8l/Lbc93t&#xA;HnjTNL82/l5dv1ins/r+nXDCjRyLF6sMg7qfGnaoy3LESgWnHIxk8m0S7kvNHsrqT+8mhjd/9YqK&#xA;/jmiLt0bgV2KuxV2KuxV2KsfsP8Acf5rvbLpBqUYvYB29VfglA9zs2antbFcRPu2dl2dkomLIM0T&#xA;tnYq7FXYq7FXYqt8kao8v5r2MMbkWtjDJFcEdDNcoeKnxoFBzt/Zfs+Rx5M3cP0/2vJe0WujHJjx&#xA;dSf0f2PfM37qGG/mtcen5YWMH+/uY0I9grP/AMa5tuxo3mvuiXUdtyrDXfIPIM6p5J2KuxVK9Q1S&#xA;c3I0zS4xcam4qQf7uFD/ALslP8O+aPtbtmOmHDHfJ93v/U7zsnsaWpPFLbH9/u/Wm2ieX7fTQ8zu&#xA;bnUZt7i8cfE3so/ZX2Gee5s88sjKZsl9Aw4YY4iMBUQmuVNjsVdirsVdirsVdiqp5P8ANll5RuNR&#xA;0fX4y/lPWZHmjugpkS3lnHGaKcCp9KTsR0++mfpdQIjhlycTUYTLcc0vg/5xv/LC7vzqlt5q9TQS&#xA;/qC1jkgYBCa8PrPI7dqla+9d8yhiid72aDmkNq3ZR5+/MLSbvR5PJnkuRLl5ohZ3V9b/ABWlpace&#xA;Dqsg+F3KfCoX79sr1GpiI8IZYMBJssetbeK2toraEUihRY4x4KooP1ZqnYKuKuxV2KuxV2KuxVIP&#xA;Noa3istYQHlpk6vJTr6En7uUfcRlebF4kDHvDZiycExLuT9WVlDKaqRUEdCDnIEPSOxV2KuxV2Kp&#xA;JrXmWK0kNjYr9b1ZxRLdN1j/AMuVv2VGbbsvsjNq5iMRt+Pxbre0e08WlgZTP4/HRV8lWp0nUrCR&#xA;39W5N3HcXc3d5GkBc/LtntOk7NjptIcUf5pv30+QartKWp1Yyn+cK91vpDOWetYD+b7kaXYJXZp2&#xA;NPklP45vOwx65e50Xbp9ER5vLM6R5h2KpTeX95dXZ0vRwHu/+Pq6O8dup7t4v4LnOds9tjAPDx75&#xA;P9z+16PsbsQ5/wB5k2x/7r9ie6NotnpNsYYKvI55z3D7ySOerMc4GczI2dy95GIiKGwTDIpdirsV&#xA;dirsVdirsVdirTKrKVYAqRQg7gg4qlcnlXy3JJ6jabb8vZAB9woMNlUxgt7e3iEVvEkMS/ZjjUKo&#xA;+QFBgVUxV2KuxV2KuxV2KuxVRvLWK7tJrWXeOdGjf5MKHFUr8oXUs2ix285/0qwZrO4H+VCeI+9a&#xA;HOZ7QxcGU9x3d9o8nFjHlsnWYTlOxVSu5Zord5IYWuJVFVhUqpY+FWIAyUIgmiaDGRIGwtg175g1&#xA;W8umttWmfy/ak0WJUYPIP+YgjiPozsuw+ytDkleXJ+PuHxeW7Z7S1mONYsf4+8/BOtKsdMtbYDT1&#xA;T0n3MqHmXPiX35Z6totNhxQrEBw943v4vl2t1ObLO8pPF3Havgj0co6uOqkEV9t8yyLDiA0X0fnA&#xA;Pobzz84VP1XTGpsJJQT7kL/TN92H9Uvg6Dt4emHxeY50TzSUXN5d6jePpOktxkTa9vuqQKeoXxkP&#xA;Yf5jmO2u3BivHiPr6nu/b93ven7G7DOWsuUejoO/9n3+5kOk6RZaVZra2ikKDyd23d2PVnPcnOEJ&#xA;JNl7kCuSNwK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWP2/8AoHnC4g6QatCJ&#xA;4/D1oPhcD5oQxzV9q4rgJd36XY9n5KkY97IM0Dt3Yq7FVssUUqGOVFkRtmRgCD8wcIJBsIIB5pHc&#xA;eTNJMhmsWl02c7l7Vyin5xmqU+jNro+3NTpzcZH8fjq67Vdk6fOKnEIR7HzbY7qYdWhH/RvP/GM5&#xA;2Og9u5DbNG/x5fqeT1vsTA74jw/jz/W+o8z2l5Z+fWtJY6XpdtBxl1S6ncWtsT1UJ8cjU34ptXMj&#xA;D2l+VEiBciNnG1HZv5oxBNRB3eOfou+mHO71S6Mp+0IH9GMfJVGajL2tqZmzOXwNfc7TF2TpoChC&#xA;PxF/eifLEsmjanHoxb1LK9DyWzlQJFlQcmV2UDlVe5zXS33dgNmZ5BLsVdirsVdirsVdirsVdirs&#xA;VdirsVdirsVdirsVdirsVdirsVdiqQ+b0aGzt9WiBM2lzrOadTEx4Sr9Kn8Mhlx8cDHvDZjnwSEu&#xA;5PUdHRXQhkYBlYdCDuDnIEVs9IDbeBXYq7FXYqlmq64lpcQWFtGbrVbtgtvaKd/iNObn9lRmy7N7&#xA;MyaqfDEbODr9fj00OKRfRueiPEvmjzbrTeYvPWr6sW52tnIdN00VqoitzSR1/wCMklWrmn1OTimX&#xA;a6eHDFBZjt6Bv3EN/pNzWgjvI0Y+CygoT+OKs4yCpfqGv6Lp1ReXkcTj/ddeT/8AALVvwwgKlT+d&#xA;Y5NrDTbq6HaRlEMZ+TOa/hh4VUv8U+YftfoeML/Ibkcvv4Ux4VTDR/NFtf3H1KeF7K/pyFvKQQ4H&#xA;UxuNmpgIVOsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSubeK5tpbeUVimRo3HirChxVKf&#xA;J9xK2kCznNbrTZGs5v8AnkaIfkUpnNdo4uDKe6W7vdFk4sY8tk7zBct2KuxVLfMGsjS7H1ET1buZ&#xA;hFZwd3kbp9A6nMzQaKepyjHHq4us1UcGMzkdgs8haCV8xWL3DfWNRu7mJ724PcBgzKvgqgbDPa9H&#xA;2Xj0OlkIj1cO5/HT73yDVdp5Ndqok/RxbD9Pve7+ctaGh+VNW1atHs7WWWL3kCn0x9L0Gc3klwxJ&#xA;eohG5APmfSLY2+mW0R+2EDOT15t8Tfic0RdyjMVUbu0gu7d7edeUbihHQ7bgj3BxVDNp17KgiutV&#xA;u5oVFBHzCAgdnKgFsVVLTStOtN7e3RG/npVv+CNTjarrrUbC0oLmdIidwrMAT9HXFV9td2t0nO3l&#xA;SVRsShBofemKqOqWH1u3+AmO6hPqWsw2ZJF3BB/XirJtA1JtT0a0vmHGSZP3gHQOpKvT/ZKciQqY&#xA;YFdirsVdirsVdirsVdirsVSW4uZ5PNtpaRyOsMFpLcTxgkKxkYRpyA2NKEiuHoqdYFdirsVdirsV&#xA;dirH4/8AQPOMidINYgEi+Hr2+zAfOM1zWdq4uLGJfzT97sOz8lTMe9kGc+7h2KuxVicb/pXzFc3z&#xA;b22nE2lkOxk/3dJ9/wAOeq+xHZYjA55Dfp+Pd95fNfbPtMmQwRO3X8e/7g9B/LGyNx5qilpVbWKS&#xA;U/SPTH4vnW9r5OHAR/OIH6Xlux8fFnB/mgn9H6U2/P3WY4vK9r5fRgbnXLqNHj/a+rW7CaV/kCqD&#xA;6c4jWTqFd73Glhcr7nlWap2bsVdirsVSLzN5h/R0Yt7cg3kgrXqEXxPv4YQEMFJuLmepLTTyH3Zm&#xA;J/HJIZ55W0aXTrR2n2nuCpdP5QtaD5775ElKd4Eqvki6SOyl0eT4bqwkclT+3HK5dZF9vipgkoZL&#xA;kVdirsVdirsVdirsVdirsVY/5ZP1291PWjvHdSiC0PYw2/w8h7M1ThKsgwK7FXYq7FXYq7FUi84R&#xA;OmnRalCKz6XMl0oHUoppIvyKHfI5MYnExPUM8c+GQPcncUscsSSxnlHIoZGHQhhUHOPIINF6QGxa&#xA;7AlxBIIBofHFWLQ+U9X0+L09M1UGIFmEFzCrAljU1kWjZ1+g9sNRp4iAA4B0/G/2vL672W0+okZm&#xA;+M9fxt9j1j8lNP1aO01K81SGFJWkSCGSByysqDkxAYBl+2OudTDts6/EJcPDRPxeeHY0dDkIEuKw&#xA;Pg8r1rXp/NPme/8AMUzcrcu1rpMf7MdpE5UEe8jAs2aPPk45O8w4+GNKWUtrsVdirsVSabypplxc&#xA;vcXDSzSSHk3JwB8vhA2HTDaKR1jpOnWI/wBFgWNj1fcsf9kanBaUXiqgl7bPdPapIGnjXk6jegrT&#xA;c9K+2KoXUZTp95aazGeJtnEdzT9qCQhWB+VajFWd5BXYq7FXYq7FXYq7FXYqx/zBqE93KNB0x/8A&#xA;TLgUu5l3FvAftMxHRmGyjJDvVOrO0gs7SK1gXjDCgRB7AU3yKq2KuxV2KuxV2KuxVZNDHNDJDKvK&#xA;ORSjqehVhQjFUl8nTSDTH06Y1uNLme0cnqVQ1jb5FCKZznaeLhyk9Jbu80OTix13bJ7mvcx2KuxA&#xA;V7P5Z0w6bodpasKShOc21Dzf4mB+VafRnpeh0/g4Yw7hv7+v2vB6vN4uWU+8/Z0fMWn2cumPd6Lc&#xA;KUutKuJbaZD1orko3yZdwe+a3JGiQ7KErFozIMnYqhrvUbK04ieUK7UCRirOxOwoq1Y4gKmen+W/&#xA;PWqIJNN8s3jxNusl0Y7NSPEeuykj6Mvjp5no0yzwHVHv+Xn5nojO+gwIiglna/gCgDqT7DJflJsf&#xA;zUGPWen+ctV1VtM0KyttTnibhcXFrK01rEf8u4okP/AuciMBJobszmAFnZDeadF1O0vxoqa3Hean&#xA;GaamthGVtbU/yG4Y85H/AMkKKdz1AGTGIbXZXHMy3qgrabplrp9uIYF3O8kh+07eLHKW1Q8yEDRL&#xA;uu9VAA9ywA/HCFZzCpWJFb7SqAfmBlar8VdirsVdiqBu9c0e0r9ZvYImXYq0i8q/6ta4aVLj5xs5&#xA;9tMtLrUmOwaGJljr7yScQMeFbWtD5u1McZXi0a2bqsR9e5I7jnsi/MYdlTTStHsdLtzDaIQXPKWV&#xA;zykkb+Z2O5OAlUbgV2KuxV2KuxV2KuxV2Ksfb/cf5xVukGswcD/zEW+4r84zTNd2pi4sfF/N+4ud&#xA;oMlTrvZBnOu6diqe+TNI/SWuwq4rBb/v5vAhD8I38WoPlm47E0ni5wT9MN/1fa6ztbU+HhIHOW36&#xA;3rud88cwXz7+U+l+aLoapa3L6TrqqEN7EodJVX7KzxEjnQbA1BHvQZj5tOJ79W/FnMNujwHUpfMG&#xA;l32q2c0dtdDSZ5beaeNmjDNCKswVq5qpw4TTsoS4hadeSfLmo+bL/wDR+oatB5dnKpKti8b/AF6a&#xA;GRQ6SQiUJGVdTsVJI8MuxafiO5pqy5+EbC3t/l7yH5E8j2rXsccUMyitxrN/IrTHxLTSUCV8FoM2&#xA;MMUIBwJ5JTQNx+aialM9n5I0ufzJdqeL3aD6vp8Td/UuZAASOtEBr2OA5r2iL+5Iw19RpSl/L/VN&#xA;cQ3v5h619ZtY/wB62iWLNa6ZGq7/AL1iRLNx68nYUweEZbzPw6J8QD6B+thPm/8AM5by3by15BRd&#xA;N0OCsVxq9ugiDDo0dmoAoPGT7vE42bUgemDkYtOT6pMNs7O2s4Fgt0CRr95Pck9zmA5qtiqBuIv0&#xA;hq9hpafEPUF1d+AhiNaH/XagxVnGQVK9R8z6Jp7+lPchrjoLeIGSSvhxWtPpyUYGRoCyiUhEWTQS&#xA;9/Mus3H/ABz9IdEPSa8cRf8AJMcmzb4OwdVk/h4R57ft+x1Oft3S4/4uI+W/7PtUmHm25/vtRhsx&#xA;3S1h5f8ADykn8M2+H2UP8cx8Bf6vudTm9qo/wQPxNfr+9Sfy5FP/AL3Xt3eg9UlmYJ9CpxzZ4vZv&#xA;TR58Uvef1U6zL7SamXLhj7h+u1Py9pel2HmO7sTaxFZolubJ3QMyhTwkQMwJ60NM5bt3RDT56jtC&#xA;QsPUdia06jBcjc4mizIAAUHTNK7h2KuxV2KuxV2KuxV2KuxV2KuxVJPN1tK+kG7gFbrTnW8g+cRq&#xA;w+lK4JQEgYnkWUZGJBHRNrS5iurWG5iNYp0WRD7MKjOPnAxkQeYekjISAI6quRZPWPI+hnTNHEkq&#xA;8bq8pLKDsVWnwIfkDX5nPQeyNF4GEX9Utz+r4PF9parxspr6RsP1/FkWbV17sVfL3mW2L+avN9o+&#xA;zS6lc1/1ZlUqfuOaXUfWXb4foD0r8v38l+fvKNloXmCyhuNa0GBLW4t5arOqxKEWaKVSsnGRQCSr&#xA;dfozPwmOSIB5hwsoljkSORZHa/k7+X8NwlxNp738kX90t9cT3SL8o5XZPvGWjBDuajnkj/M/nfyj&#xA;5MsUS+nSFwtLTTLZQ07+AjhWlB7mi++SnkjAbohjlM7PEfN3nTzJ51kKX4Om6ArVi0eJvilp0a6k&#xA;FOX+oNh881mbUme3R2GLTiHvSxESNAiKFRRRVAoAB4DMZyF2Koe/vYbK1e4l6L9lR1Zj0Ue5xVdp&#xA;lza6BbtPqPKbXtSIkayiHOUL+xEB+yqjqTkoY5ZJCMRZYZMkYRMpGgF8kfmDVzyv5zp1meljat+8&#xA;Yf8AFkv8FzqtB7ME+rMa/oj9JeV13tMB6cIv+keXwCMsNK0+wThaQJEO7AVY/Nj8R+k51en0eLCK&#xA;xxEfx383ldRrMuY3kkZfju5IrMlxnYq7FUp1pvql5pmqDYWtwI5j29Gf925Py2zmvafT8WAT6xP2&#xA;H9tPS+zGo4cxh0mPtH7LZbnAvduxV2KuxV2KuxV2KuxV2KuxV2KtMqspVhVSKEHoQcVSHymzWq3u&#xA;iyH4tNmIhr1NvL8cR/EjNB2rh4cnF/O+93PZ+S4cPc9E8keXjqmpCeda2VoQ0lRs79VTf7z7fPMn&#xA;sLQeLk8SX0Q+0/jdx+19Z4cOAfVL7nqudy8k7FXYq8D/ADj0KXQ/OR17j/uJ15Y45pv2YryFeADe&#xA;AkjUEHxBzWazFR4u92OkyWK7mHy2aPcRXcUstrewbwXls7RTJ/quu+YYkRycogHmmUnmPz3ND9Xl&#xA;806h6AFP3bJFJ/yNRQ/45cdRPvavAh3JZb6dawSvOFMlzJvJcysZJWPiXYk5SSS2gUicCXYqtkkS&#xA;NGeRgqKKsxNAAPHFWPQfpbXdTW4swILC2Y/V7mRagMNjIqH7T/y/y/PNv2d2Pl1O49MP536u91Pa&#xA;Pa+LTCj6p/zf19zKNN0ezsAzRgyXEm811KeUrnuWY53ei7OxaaNQG/f1Lwmu7Ry6mVzO3QdAjszn&#xA;AdirsVdirsVQGv2v1rRb2DqWiYqP8pRyX8RmF2jh8TTzj/RP2bhzezs3h6iEv6Q+3Yp1o939c0mz&#xA;uiamaGN2/wBYqK/jnlRfU0ZgV2KuxV2KuxV2KuxV2KuxV2KuxVL4NA1O8856ZLpsRkN4r2l9T7KR&#xA;gGRJX8ApBqfoG+2VZ9GdRHgHO/7W3FqhhPEeT37SNKttL0+Kztx8KD4npu7H7TH3OdDptPHDAQjy&#xA;Do8+aWWZlLmUZl7U7FXYqhdV0rTtW0+fTtSt0urK5XhNBIKqw/WCDuCNwcEogiikEg2HifmT8l/M&#xA;+iu83leQaxpYqV024cR3UQ/ljlb4JFH+VQ9t812XRnnFz8erH8TBrrURYT/VtWt7jSrrp6N7E8J2&#xA;8CRxI965hygRzDlRkDyVY72zlFYp43Hirqf1HIsm3urZBV5kUeLMAPxxVAvrsEjmHTo31C4/lhHw&#xA;D/WkPwgZkafSZcxqETIuPqNVjwi5yEQrweX7m8dZtakEig8o7CKoiX/XPVz+Gdd2d7Nxh6s3qP8A&#xA;N6fHv+73vI9o+0kp+nD6R/O6/Du+/wByfIiIioihUUUVQKAAdAAM6mMQBQ5PLykSbO5bwsXYq7FX&#xA;Yq7FXYq0QCCDuDsRgItINKXkdifLNojGrRGWJv8AYSso/DPIcseGRHc+u45cUQe9PcrZOxV2KuxV&#xA;2KuxV2KuxV2KuxVUtrae5nSCBDJNIeKIu5JOShAyNDmiUhEWXrPlTyzDotnV6PfTAG4l8P8AIX2H&#xA;4/dTd4MIxxrq6nLlMzae5c1OxV2KuxV2KuxVSubW1uoTDdQpPC32o5VDqfmGBGAi0g0x28/LD8vL&#xA;ti03l2w5E1JjgSIk+/pha9cgcMD0DMZZDqpwflR+W8EnqJ5dsiw7SRCRf+BfkMAww7lOafew3zn+&#xA;Xf6HDXujw/7i+skCDeD6B1T37d86vszXxkBjlUZdOgP7Xk+1OzpRJyRuUevUj9jC83To3Yq7FXYq&#xA;7FXYq7FXYq7FUN5LNNOu4v8AfN9cp7bPXb788n18eHPMd0pfe+raGXFgge+MfuZBmI5TsVdirsVd&#xA;irsVdirsVdiqraWlzd3EdtbRmWeU8URepOThAyNBjOYiLL1Tyn5Tg0aD1ZaSahIP3knUID+wn8T3&#xA;zc4MAxjzdXmzGZ8mQ5e0uxV2KuxV2KuxV2KuxV2KuxVxAIodweoxV535w/LRZS99oSBJDVpbHop9&#xA;4uw/1enh4ZvtD2tXpy/P9bz+v7Iv1Yvl+r9TzWWGWGVopUaOVDxdGBDAjsQc6GMgRY5POyiQaPNZ&#xA;hYuxV2KuxV2KuxV2KoXyeaDV4+66jK1PAMiH8c8t7WjWqyf1i+o9lG9Nj/qhkOa5z3Yq7FXYq7FX&#xA;Yq7FXYqmOi6DqOsXHpWkdVX+9mbZEB8T/Ab5fhwSyHbk1Zc0Ye96l5f8s6fosFIR6ly4pNcsPibv&#xA;Qfyr7frzb4sMYCg6zJlMzZTfLWt2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVI/Mfk/R9djrcJ6V0BRL&#xA;uOgceAb+YexzM0uuyYTtvHucLV6DHnG+0u95X5h8ja5opaR4/rNmNxdQglQP8teq/Tt750ul7Rx5&#xA;trqXcXmNV2blw71ce8MezPde7FXYq7FXYq7FUJ5V+G+1uPwulev+vEpzzHtsVq5+99M7FN6WHu/S&#xA;yLNU7R2KuxV2KuxV2Kr4YZp5VihRpZXNEjQFmJ9gMlGJkaCJSAFlmmgflzNLxn1hjFHsRaoRzP8A&#xA;rsNl+Q3+WbDDoes/k4OXV9Is+tLS2tLdLe2iWGFBRUUUH+375sAANg4RNquFXYq7FXYq7FXYq7FX&#xA;Yq7FXYq7FXYq7FXYq7FXYqxjXPy88vaoWlWM2V02/rQUAJ/yk+yfooffNjp+1MuPa+Ief63W6nsr&#xA;Dl3rhl5fqYHq/wCWPmKyLPahb+EdDF8L090b+BObrB2vin9XpPn+t0efsfND6fUPL9TFri1ubaQx&#xA;XMTwyjrHIpRh9Boc2cZiQsGw6ycJRNEUVLJMHYq7FUH5a+HWteQfZElu30tCCc817fFaufw/3IfS&#xA;ewTekh8f90WR5pnbuxV2KuxVG6fomraiQLK1kmBNOYFEB93NFH35dDBOXINU80I8yyzSvyymaj6p&#xA;cCNevowbt07uwoKewOZuPQD+IuLPWH+EM00zRdL0yMpY26xV+0/V2+bGrHM6EBEUBTiSkZGyjckx&#xA;dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqldWdpdx+ldQRzxH9iVQ6/cwOThkl&#xA;E3E0WE8cZCpAEMevfy58p3RJFqbdz+1A7L/wp5L+GZ2PtXPHrfvcDJ2Tgl0r3JJc/k/YMT9W1GWI&#xA;dvURZP8AiJjzMh25LrEH7P1uHPsGH8MiPhf6kvl/KDUh/dahC/8Aroy/q5ZeO3IdYlx5dhT6SCX6&#xA;X+TnmWy1bU7pruzeC99AxAPKGBjQo3IenTwpvnLdqYzqM5yR2Brn7gHqOzJfl8EcctyL5eZtNh+W&#xA;Wu97i19/ik/5ozAGgl1LnHWDoETB+V10w/0i/jjP/FcZf9ZTJjs/+l9jD86e5MbX8stIQD6xczzM&#xA;Dvx4xqfoox/HLY6LGO8tZ1cz5J3Z+U/Ltmaw2MZb+aWsp27j1C1PozIhhhHkGmWSUuZTYCmw6ZYw&#xA;dirsVdirsVdirsVdirsVdirsVf/Z</xmpGImg:image>
+ </rdf:li>
+ </rdf:Alt>
+ </xmp:Thumbnails>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpMM="http://ns.adobe.com/xap/1.0/mm/"
+ xmlns:stRef="http://ns.adobe.com/xap/1.0/sType/ResourceRef#"
+ xmlns:stEvt="http://ns.adobe.com/xap/1.0/sType/ResourceEvent#">
+ <xmpMM:RenditionClass>proof:pdf</xmpMM:RenditionClass>
+ <xmpMM:OriginalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</xmpMM:OriginalDocumentID>
+ <xmpMM:DocumentID>xmp.did:AAFD4D716C05EF11A916FAD4CB59D3F6</xmpMM:DocumentID>
+ <xmpMM:InstanceID>uuid:a8cd6e00-15a5-43a6-9809-50c4d7e4d80f</xmpMM:InstanceID>
+ <xmpMM:DerivedFrom rdf:parseType="Resource">
+ <stRef:instanceID>uuid:02dc5f24-85b4-40be-bdfc-38989c0de5dd</stRef:instanceID>
+ <stRef:documentID>xmp.did:27205CC46305EF1186B9D67BF1058F23</stRef:documentID>
+ <stRef:originalDocumentID>uuid:65E6390686CF11DBA6E2D887CEACB407</stRef:originalDocumentID>
+ <stRef:renditionClass>proof:pdf</stRef:renditionClass>
+ </xmpMM:DerivedFrom>
+ <xmpMM:History>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:27205CC46305EF1186B9D67BF1058F23</stEvt:instanceID>
+ <stEvt:when>2024-04-28T15:32:32+02:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS6 (Windows)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <stEvt:action>saved</stEvt:action>
+ <stEvt:instanceID>xmp.iid:AAFD4D716C05EF11A916FAD4CB59D3F6</stEvt:instanceID>
+ <stEvt:when>2024-04-28T16:34:38+02:00</stEvt:when>
+ <stEvt:softwareAgent>Adobe Illustrator CS6 (Windows)</stEvt:softwareAgent>
+ <stEvt:changed>/</stEvt:changed>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpMM:History>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:illustrator="http://ns.adobe.com/illustrator/1.0/">
+ <illustrator:StartupProfile>Web</illustrator:StartupProfile>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:xmpTPg="http://ns.adobe.com/xap/1.0/t/pg/"
+ xmlns:stDim="http://ns.adobe.com/xap/1.0/sType/Dimensions#"
+ xmlns:xmpG="http://ns.adobe.com/xap/1.0/g/">
+ <xmpTPg:NPages>1</xmpTPg:NPages>
+ <xmpTPg:HasVisibleTransparency>False</xmpTPg:HasVisibleTransparency>
+ <xmpTPg:HasVisibleOverprint>False</xmpTPg:HasVisibleOverprint>
+ <xmpTPg:MaxPageSize rdf:parseType="Resource">
+ <stDim:w>450.000000</stDim:w>
+ <stDim:h>450.000000</stDim:h>
+ <stDim:unit>Pixels</stDim:unit>
+ </xmpTPg:MaxPageSize>
+ <xmpTPg:PlateNames>
+ <rdf:Seq>
+ <rdf:li>Cyan</rdf:li>
+ <rdf:li>Magenta</rdf:li>
+ <rdf:li>Yellow</rdf:li>
+ <rdf:li>Black</rdf:li>
+ </rdf:Seq>
+ </xmpTPg:PlateNames>
+ <xmpTPg:SwatchGroups>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Standard-Farbfeldgruppe</xmpG:groupName>
+ <xmpG:groupType>0</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Weiß</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>Schwarz</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Rot</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Gelb</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Grün</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Cyan</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>255</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Blau</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>RGB Magenta</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>255</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=193 G=39 B=45</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>193</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>45</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=28 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>28</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=241 G=90 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>241</xmpG:red>
+ <xmpG:green>90</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=247 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>247</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=251 G=176 B=59</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>251</xmpG:red>
+ <xmpG:green>176</xmpG:green>
+ <xmpG:blue>59</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=252 G=238 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>252</xmpG:red>
+ <xmpG:green>238</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=217 G=224 B=33</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>217</xmpG:red>
+ <xmpG:green>224</xmpG:green>
+ <xmpG:blue>33</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=198 B=63</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>198</xmpG:green>
+ <xmpG:blue>63</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=57 G=181 B=74</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>57</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>74</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=146 B=69</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>146</xmpG:green>
+ <xmpG:blue>69</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=104 B=55</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>104</xmpG:green>
+ <xmpG:blue>55</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=34 G=181 B=115</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>34</xmpG:red>
+ <xmpG:green>181</xmpG:green>
+ <xmpG:blue>115</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=169 B=157</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>157</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=41 G=171 B=226</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>41</xmpG:red>
+ <xmpG:green>171</xmpG:green>
+ <xmpG:blue>226</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=113 B=188</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>113</xmpG:green>
+ <xmpG:blue>188</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=46 G=49 B=146</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>46</xmpG:red>
+ <xmpG:green>49</xmpG:green>
+ <xmpG:blue>146</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=27 G=20 B=100</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>27</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>100</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=45 B=145</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>45</xmpG:green>
+ <xmpG:blue>145</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=147 G=39 B=143</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>147</xmpG:red>
+ <xmpG:green>39</xmpG:green>
+ <xmpG:blue>143</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=158 G=0 B=93</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>158</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>93</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=212 G=20 B=90</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>212</xmpG:red>
+ <xmpG:green>20</xmpG:green>
+ <xmpG:blue>90</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=237 G=30 B=121</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>237</xmpG:red>
+ <xmpG:green>30</xmpG:green>
+ <xmpG:blue>121</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=199 G=178 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>199</xmpG:red>
+ <xmpG:green>178</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=134 B=117</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>134</xmpG:green>
+ <xmpG:blue>117</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=115 G=99 B=87</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>115</xmpG:red>
+ <xmpG:green>99</xmpG:green>
+ <xmpG:blue>87</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=83 G=71 B=65</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>83</xmpG:red>
+ <xmpG:green>71</xmpG:green>
+ <xmpG:blue>65</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=198 G=156 B=109</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>198</xmpG:red>
+ <xmpG:green>156</xmpG:green>
+ <xmpG:blue>109</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=166 G=124 B=82</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>166</xmpG:red>
+ <xmpG:green>124</xmpG:green>
+ <xmpG:blue>82</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=140 G=98 B=57</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>140</xmpG:red>
+ <xmpG:green>98</xmpG:green>
+ <xmpG:blue>57</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=117 G=76 B=36</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>117</xmpG:red>
+ <xmpG:green>76</xmpG:green>
+ <xmpG:blue>36</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=96 G=56 B=19</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>96</xmpG:red>
+ <xmpG:green>56</xmpG:green>
+ <xmpG:blue>19</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=66 G=33 B=11</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>66</xmpG:red>
+ <xmpG:green>33</xmpG:green>
+ <xmpG:blue>11</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Graustufen</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=0 G=0 B=0</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>0</xmpG:red>
+ <xmpG:green>0</xmpG:green>
+ <xmpG:blue>0</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=26 G=26 B=26</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>26</xmpG:red>
+ <xmpG:green>26</xmpG:green>
+ <xmpG:blue>26</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=51 G=51 B=51</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>51</xmpG:red>
+ <xmpG:green>51</xmpG:green>
+ <xmpG:blue>51</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=77 G=77 B=77</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>77</xmpG:red>
+ <xmpG:green>77</xmpG:green>
+ <xmpG:blue>77</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=102 G=102 B=102</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>102</xmpG:red>
+ <xmpG:green>102</xmpG:green>
+ <xmpG:blue>102</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=128 G=128 B=128</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>128</xmpG:red>
+ <xmpG:green>128</xmpG:green>
+ <xmpG:blue>128</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=153 G=153 B=153</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>153</xmpG:red>
+ <xmpG:green>153</xmpG:green>
+ <xmpG:blue>153</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=179 G=179 B=179</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>179</xmpG:red>
+ <xmpG:green>179</xmpG:green>
+ <xmpG:blue>179</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=204 G=204 B=204</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>204</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>204</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=230 G=230 B=230</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>230</xmpG:red>
+ <xmpG:green>230</xmpG:green>
+ <xmpG:blue>230</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=242 G=242 B=242</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>242</xmpG:red>
+ <xmpG:green>242</xmpG:green>
+ <xmpG:blue>242</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:groupName>Webfarben</xmpG:groupName>
+ <xmpG:groupType>1</xmpG:groupType>
+ <xmpG:Colorants>
+ <rdf:Seq>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=63 G=169 B=245</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>63</xmpG:red>
+ <xmpG:green>169</xmpG:green>
+ <xmpG:blue>245</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=122 G=201 B=67</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>122</xmpG:red>
+ <xmpG:green>201</xmpG:green>
+ <xmpG:blue>67</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=147 B=30</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>147</xmpG:green>
+ <xmpG:blue>30</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=29 B=37</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>29</xmpG:green>
+ <xmpG:blue>37</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=255 G=123 B=172</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>255</xmpG:red>
+ <xmpG:green>123</xmpG:green>
+ <xmpG:blue>172</xmpG:blue>
+ </rdf:li>
+ <rdf:li rdf:parseType="Resource">
+ <xmpG:swatchName>R=189 G=204 B=212</xmpG:swatchName>
+ <xmpG:mode>RGB</xmpG:mode>
+ <xmpG:type>PROCESS</xmpG:type>
+ <xmpG:red>189</xmpG:red>
+ <xmpG:green>204</xmpG:green>
+ <xmpG:blue>212</xmpG:blue>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpG:Colorants>
+ </rdf:li>
+ </rdf:Seq>
+ </xmpTPg:SwatchGroups>
+ </rdf:Description>
+ <rdf:Description rdf:about=""
+ xmlns:pdf="http://ns.adobe.com/pdf/1.3/">
+ <pdf:Producer>Adobe PDF library 10.01</pdf:Producer>
+ </rdf:Description>
+ </rdf:RDF>
+</x:xmpmeta>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+<?xpacket end="w"?>
+endstream endobj 3 0 obj <</Count 1/Kids[7 0 R]/Type/Pages>> endobj 7 0 obj <</ArtBox[11.7476 0.0 450.0 430.838]/BleedBox[0.0 0.0 450.0 450.0]/Contents 8 0 R/LastModified(D:20240428163440+02'00')/MediaBox[0.0 0.0 450.0 450.0]/Parent 3 0 R/PieceInfo<</Illustrator 9 0 R>>/Resources<</ExtGState<</GS0 10 0 R>>/Properties<</MC0 5 0 R>>>>/Thumb 11 0 R/TrimBox[0.0 0.0 450.0 450.0]/Type/Page>> endobj 8 0 obj <</Filter/FlateDecode/Length 2581>>stream
+H‰ì—MŽÉ …÷uŠ¼@¦‚ñ[ËƬ†­…Ð°Ç º½¿GfVwI=/°n4ºª"3‚ÁŸGòñÝßo゚¶ßýþývûtK[mñ¿ë㧿Þþ²ýã–Ž\Ç–ŽÞ Ÿ«ÛöÓ·wß}HÛÿ¼}ÚlKüÙVk;¬÷-§µ=ýxÓC}îfå˜ÝW>Jâ;§î¿ýñtÛKNGÊëÅËjœ+å… ëIÒkq{IãYÒõ€C§*דt?\èßnâïÓ­äc–êýx-V–¾YÖ÷ØÎe¿žnÏ¿?ÞJË.6Ö—‡N»½\}¼¯J–€¼]‚ª»¸äúW^«·KµëÉ©ø]Ô³QOg|Ç芯e>k?_›8+šûûâÝ’?¿Â„e³–±}¾íÝø…·øNɶ}Tß›SŠÍ³úÎœã„BÜ ÖtL#ük°Î¬ç±–PòQGZ9Zq̬z ¼-ÞHh?†Dt¾3ËwŒrÝ1Ú1zÛòlGC'Ûòšþ †œ0éhL„¨ÖÀd®}A[iÿÛÝj•u‚•ò길È~‖ŒŽi,½_Gò=vÔ†G C[™(ƒÕt­'ˆ€Æf„tϹùh £òGŸÂ<rAN^¡IÎw3¥G%]3
+aÒ¶SP,”ÅSœç²Ìe{F³ b8U–—p‘m¹»­áØâD¿¬‰~uk"Áphàþ2Íï RSXf3и·éñúrû»§¾ŠÜ"š§…ÙTB¼H„.ØXŽëŸó`…ߪË€pµ x%! ÜD‹²“t8´–£ª.0¯j[ósd²„×sqï‰bÉw¸³%å£KÑîu7[j.Šd
+¯S@wÃ%K;]¯±d„ϯÈÈ )¨ms0Ë;#…r}ù>׫†«ööL I-iÓT3Äè«Í+o'5€LíÙSKÔóé«IÎrx^6â¥H’.ëÅÌò´†7ä¾!÷ ¹Ñ.
+5„‚1»w™/¸c[ël@ÅçÖÖ¯‘Èå­ÁP4,‰†ÑxŸ§úË<2
+ÒlÈ%Ñ’*‘ĺ§¢ue-^¸Ô>^gNÿ7foJOY¼5ªGQÁxÎ :~ñkªpæ v0[‘·É{ïlÕm¾meU¥™b¡‹z<bß·‰›4µÑ­ ÐùöìpÍ,YM׫ã‰êS2çÒÔÑN¸ ãF)2<OÐ5*tü—¦×È÷NáHÑ)R[>LÉÁlã¤ÖË{'k±ˆN)I+Ö«~«9”(óž[¨
+õ%ÉVÉO1|¸Í—4‹=+¦|u?H«ÕÁ³-«ph@œÞ—Ii©FIÕ=÷u׉~î!c_úÖ¸…%èß¿ßøú·
+endstream endobj 11 0 obj <</BitsPerComponent 8/ColorSpace 12 0 R/Filter[/ASCII85Decode/FlateDecode]/Height 56/Length 874/Width 56>>stream
+8;YQVZ$#@d$q6LSV%LYg$TqB,_*^bY#5M7/;gFFC"Kh7r&0sPu[W>?c4G^)knC-J$
+805gDGi<j\;uBq\&gQh<N1X\cm$p#j6C:FD+R9g2M"++Qq0e7S=`]tJ6i[n?.EpUm
+on^hEPgXaW@0u[W4F]bq@D2:dI=n_W&GcelQE2q<!\9_>gf"nr)H.C]rT-gUeA*%8
+H%%arT3fs)!D>1"MhPg<_0HP"h5hkqQ@)@?ZQ<]SZWa6$9]Zs[]_$YrH,ZO-0jUf$
+*0nh3[.CPKZm:7$99lYB"*ku(-(9%;/nV\Om!n)seQ$&m6:)PEdktU24O`g33[$5X
+U/kuVV7IS(llRsA;<>S<3kFH^la%OS!Q@gW_L.(+7o.1_0YdHt'jEh;F:h55]Q/n4
+@[Z(SB"50NV:(F[IIoC]o[?.9GJF/4I2m]:]rq^Emim$$d"I$@K]6o`I!\)=>)h@.
+2@kojb\Tr=4M(ei5F0#"\qkoMV_CGdNqm;;)*=!/6*2MW4te0W_Y'bf/Xo_t)`gK&
+raFVajJm^)9:^QgCYZ;KjEdYCT!f])@Tk]f>^,ZP=/mdEqT!]Z_]_+YJCOJ-'Kql/
+IFTK_L%MpIXZApaK\M"g*GlrNF;CTq,!8l-q,d5)T`a1h?-hJ/[AG=XM-Y5AO"%h&
+SQ!:IK\Gk":<HpmA6+HYT%#kl<D&ZS(BYYg@[N4XP#n,toeQ9[B?l,NEj42t53c<D
+UFJ]pA">cHn_dmJC[#dYXh+\#MV7h^bIAq!m7%6O:X9Ph9NO*3DVN+(-\m-Z=.J=I
+Rf/(:p;2C;+AMSVIj,iu'Z7:q+4S!nV"Q',?6/"((LNt\HXX]oZBM-t\dEkXAZC&S
+1UY%8rXT!nDI2l~>
+endstream endobj 12 0 obj [/Indexed/DeviceRGB 255 13 0 R] endobj 13 0 obj <</Filter[/ASCII85Decode/FlateDecode]/Length 428>>stream
+8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
+b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
+E1r!/,*0[*9.aFIR2&b-C#s<Xl5FH@[<=!#6V)uDBXnIr.F>oRZ7Dl%MLY\.?d>Mn
+6%Q2oYfNRF$$+ON<+]RUJmC0I<jlL.oXisZ;SYU[/7#<&37rclQKqeJe#,UF7Rgb1
+VNWFKf>nDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j<etJICj7e7nPMb=O6S7UOH<
+PO7r\I.Hu&e0d&E<.')fERr/l+*W,)q^D*ai5<uuLX.7g/>$XKrcYp0n+Xl_nU*O(
+l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
+endstream endobj 5 0 obj <</Intent 14 0 R/Name(Ebene 1)/Type/OCG/Usage 15 0 R>> endobj 14 0 obj [/View/Design] endobj 15 0 obj <</CreatorInfo<</Creator(Adobe Illustrator 16.0)/Subtype/Artwork>>>> endobj 10 0 obj <</AIS false/BM/Normal/CA 1.0/OP false/OPM 1/SA true/SMask/None/Type/ExtGState/ca 1.0/op false>> endobj 9 0 obj <</LastModified(D:20240428163440+02'00')/Private 16 0 R>> endobj 16 0 obj <</AIMetaData 17 0 R/AIPDFPrivateData1 18 0 R/AIPDFPrivateData10 19 0 R/AIPDFPrivateData2 20 0 R/AIPDFPrivateData3 21 0 R/AIPDFPrivateData4 22 0 R/AIPDFPrivateData5 23 0 R/AIPDFPrivateData6 24 0 R/AIPDFPrivateData7 25 0 R/AIPDFPrivateData8 26 0 R/AIPDFPrivateData9 27 0 R/ContainerVersion 11/CreatorVersion 16/NumBlock 10/RoundtripVersion 16>> endobj 17 0 obj <</Length 1005>>stream
+%!PS-Adobe-3.0
+%%Creator: Adobe Illustrator(R) 16.0
+%%AI8_CreatorVersion: 16.0.3
+%%For: (DCW Laptop 1) ()
+%%Title: (jason.ai)
+%%CreationDate: 4/28/2024 4:34 PM
+%%Canvassize: 16383
+%%BoundingBox: 230 -502 665 -73
+%%HiResBoundingBox: 230.7476 -501.166 664.166 -73.1621
+%%DocumentProcessColors: Cyan Magenta Yellow Black
+%AI5_FileFormat 12.0
+%AI12_BuildNumber: 691
+%AI3_ColorUsage: Color
+%AI7_ImageSettings: 0
+%%RGBProcessColor: 0 0 0 ([Passermarken])
+%AI3_Cropmarks: 219 -504 669 -54
+%AI3_TemplateBox: 480.5 -280.5 480.5 -280.5
+%AI3_TileBox: 158.3999 -687.8398 729.5996 129.8398
+%AI3_DocumentPreview: None
+%AI5_ArtSize: 14400 14400
+%AI5_RulerUnits: 6
+%AI9_ColorModel: 1
+%AI5_ArtFlags: 0 0 0 1 0 0 1 0 0
+%AI5_TargetResolution: 800
+%AI5_NumLayers: 1
+%AI9_OpenToView: -382 173 1 1588 914 18 0 0 50 117 0 0 0 1 1 0 1 1 0 1
+%AI5_OpenViewLayers: 7
+%%PageOrigin:80 -580
+%AI7_GridSettings: 72 8 72 8 1 0 0.8 0.8 0.8 0.9 0.9 0.9
+%AI9_Flatten: 1
+%AI12_CMSettings: 00.MS
+%%EndComments
+
+endstream endobj 18 0 obj <</Length 27925>>stream
+%%BoundingBox: 230 -502 665 -73
+%%HiResBoundingBox: 230.7476 -501.166 664.166 -73.1621
+%AI7_Thumbnail: 128 128 8
+%%BeginData: 27768 Hex Bytes
+%0000330000660000990000CC0033000033330033660033990033CC0033FF
+%0066000066330066660066990066CC0066FF009900009933009966009999
+%0099CC0099FF00CC0000CC3300CC6600CC9900CCCC00CCFF00FF3300FF66
+%00FF9900FFCC3300003300333300663300993300CC3300FF333300333333
+%3333663333993333CC3333FF3366003366333366663366993366CC3366FF
+%3399003399333399663399993399CC3399FF33CC0033CC3333CC6633CC99
+%33CCCC33CCFF33FF0033FF3333FF6633FF9933FFCC33FFFF660000660033
+%6600666600996600CC6600FF6633006633336633666633996633CC6633FF
+%6666006666336666666666996666CC6666FF669900669933669966669999
+%6699CC6699FF66CC0066CC3366CC6666CC9966CCCC66CCFF66FF0066FF33
+%66FF6666FF9966FFCC66FFFF9900009900339900669900999900CC9900FF
+%9933009933339933669933999933CC9933FF996600996633996666996699
+%9966CC9966FF9999009999339999669999999999CC9999FF99CC0099CC33
+%99CC6699CC9999CCCC99CCFF99FF0099FF3399FF6699FF9999FFCC99FFFF
+%CC0000CC0033CC0066CC0099CC00CCCC00FFCC3300CC3333CC3366CC3399
+%CC33CCCC33FFCC6600CC6633CC6666CC6699CC66CCCC66FFCC9900CC9933
+%CC9966CC9999CC99CCCC99FFCCCC00CCCC33CCCC66CCCC99CCCCCCCCCCFF
+%CCFF00CCFF33CCFF66CCFF99CCFFCCCCFFFFFF0033FF0066FF0099FF00CC
+%FF3300FF3333FF3366FF3399FF33CCFF33FFFF6600FF6633FF6666FF6699
+%FF66CCFF66FFFF9900FF9933FF9966FF9999FF99CCFF99FFFFCC00FFCC33
+%FFCC66FFCC99FFCCCCFFCCFFFFFF33FFFF66FFFF99FFFFCC110000001100
+%000011111111220000002200000022222222440000004400000044444444
+%550000005500000055555555770000007700000077777777880000008800
+%000088888888AA000000AA000000AAAAAAAABB000000BB000000BBBBBBBB
+%DD000000DD000000DDDDDDDDEE000000EE000000EEEEEEEE0000000000FF
+%00FF0000FFFFFF0000FF00FFFFFF00FFFFFF
+%524C45FD33FF76FD7EFF7D4A51FD7CFFA8757C7576FD7BFF7D4AA17C4A7D
+%FD7AFF4BA0A0A77C51A8FD05FFA9AFA9AF85AF85AF85AFA9AFAFFD66FF7D
+%51FD04A0754B7D855A6137373637373736373737363737373661618585AF
+%FD60FF7C75A1A0A1A0A1754B2F3D3761373D3761373D3761373D3761373D
+%373D373737616185A9FD5BFFA94AA0A0A07CA0A0A0754B2E373637363736
+%37363736373637363736373637363736373637368585FD56FF85613075A0
+%A1A0A7A0A0A0A7A0752E6137613761376137613761376137613761376137
+%6137613761373D3785AFFD50FFA9613637372F6FA1A0A07CA0A0A07CA775
+%4A2E3D3737363D3737363D3737363D3737363D3737363D3737363D373736
+%375BA9AFFD4BFFAF5B3D373D37612E99A0A7A0A1A0A1A0A0A07C4A752F61
+%373D3761373D3761373D3761373D3761373D3761373D3761373D373D3761
+%85FD48FF846136373637373D37524A754B75517C76A0A0A0514A754B2F3D
+%363736373637363736373637363736373637363736373637363736373637
+%3685FD44FFAF613D3761376137612F524A75749974754A7551A0A0764A75
+%755137613761376137613761376137613761376137613761376137613761
+%37613761376185FD40FFA9853737363D3737375A4B7498C1C0C1C0C1C0C1
+%98754A7C4B996E7575523737363D3737363D3737363D3737363D3737363D
+%3737363D3737363D3737363D37375AFD3EFF85613761373D376137594A98
+%C0C1C0C1C1C1C0C1C1C1C09F4A4B9EC14A7C4B5A373D3761373D3761373D
+%3761373D3761373D3761373D3761373D3761373D37613737378BFD3BFF5A
+%373637363736373759275227514A9898C19EC198C19EC1C0996EC1C0994A
+%75283D373736373637363736373637363736373637363736373637363736
+%3D373D373D37371561A9FD37FFAF373D376137613761376136613761375A
+%277598C1C0C1C1C1C0C1C1C1C0C1C19F4A4B363D37613761376137613761
+%3761376137613761376137613761375B35592E592E532E592F5B84FD35FF
+%853737363D3737363D3737363D3737363D37534A4B98C198C1C0C198C1C0
+%C198C1C09F4A51275228532F37373D3737363D3737363D3737363D373D36
+%362E514AFD09754A2E61FD33FF853761373D3761373D3761373D3761373D
+%37612F99764B9EC1C0C1C1C1C0C1C1C1C0C1C1C198C1989874754B533661
+%373D3761373D3761373D375B2E514A9FA0A0A0A7A0A1A0A7A0C975523737
+%5BFD30FFA961363736373637363736373637363736FD04372F4BA05175C0
+%C198C19EC198C19EC198C1C0C1BAC1C0C1BAC16E4B2F3D37373637363736
+%3D372F267575FD05A07CA0A0A07CA0754B363D363736AFFD2DFFAF613761
+%3761376137613761376137613761375A2E524B754A752699C0C1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0C1C1C198752E6137613761376136524AA0A0A1
+%A0A7A0A0A0A7A0A0A0A7A0752F613761373D37AFFD2BFFA95B363D373736
+%3D3737363D3737363D37372E516E9898C19EC174754AC1C0C1C0C198C1C0
+%C198C1C0C198C1C0C198C1C0C1C0742E3D363D373D365175FD05A07CA0A0
+%A07CFD05A02737363D3737363737AFFD29FFAF6137613761373D3761373D
+%3761373D375A4B7498C1C1C1C0C1C1C1C0759EC1C0C1C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0742F3D3761364B75A7A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A77553373D3761373D373D37AFFD27FFA95B363736373637363736
+%373637363D372E4AC0C0C198C19EC198C19EC198C1C0C198C19EC198C19E
+%C198C19EC198C19EC198C19EC198513737365175A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0752F3D363736373637363736A9FD26FF6137613761376137
+%6137613761376137526EC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C16E5A375375A7A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A04B613761376137613761373D37FD25FF613737363D
+%3737363D3737363D373737354AC1C0C1C0C198C1C0C198C1C0C198C1C0C1
+%98C1C0C198C1C0C198C1C0C198C1C0C198C1C0C1C0982F364AA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA17552373D3737363D3737363D373736FD23FF
+%853761373D3761373D3761373D3761373D27C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1985227
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A075363D3761373D3761373D37
+%61373737FD21FF853637363736373637363736373637363D2F74BAC19EC1
+%98C1C0C198C1C0C198C19EC198C19EC198C19EC198C19EC198C19EC198C1
+%9EC198C1C0C12675A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A027373737
+%3637363736373637363736375AFD1FFFAF37613761376137613761376137
+%613761375374C7C1C1C0C1C1C1C0C1989F74C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C1C19E517CA7A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A775593761376137613761376137613761373D85FD1EFF363737
+%37363D3737363D3737363D3737363D2798C0C1C0C198744B4B264B4A7598
+%C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C07451A1A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA07C51373D373736FD04373D3737373D
+%3737363785FD1CFF61373761373D3761373D3761373D3761373D3651C0C1
+%C0C16E522F594B9998C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C1C09F4BA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0752759
+%2E5252524B5252522E5A36373761373D3761FD1BFF843736373637363736
+%37363736373637363737374AC1C0982635372F4AC1C0C198C19EC198C19E
+%C198C19EC198C19EC198C19EC198C19EC198C1C0C14A7CA0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A02675749898C098C0FD04986E754A51282F2F37
+%1485FD19FFAF613761376137613761376137613761376137613675C09827
+%613D5A4AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1
+%C1C0C1C1C14A7CA0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A74B75C1C1C0
+%C1C1C1C0C1C1C1C0C1C0C1989F74742E6137AFFD18FF61363D3737363D37
+%37363D3737363D3737363D37374A98273737372798C0C1C0C198C1C0C198
+%C1C0C198C1C0C198C1C0C198C1C0C198C1C0C1C0C14A75FD04A07CA0A0A0
+%7CA0A0A07CA0A0A07CA1754A98C1C0C198C1C0C198C1C0C198C1C0C1C0C1
+%4A36373737FD17FFAF373D3761373D3761373D3761373D3761373D376136
+%4B4A5B373D2F98C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C14A76A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A1764B98
+%C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C17452373D373D85FD16FF363736
+%373637363736373637363736373637363736372653373D364B98C19EC198
+%C19EC198C1C0C1C0C19EC198C1C0C198C1C0C198C1C0C198994A75FD04A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0764B6EC1C0C198C19EC198C19EC198C1
+%9EC198C1984B363D36373637A9FD14FF853D376137613761376137613761
+%37613761376137613752366137524AC1C1C1C0C1C1C1C0C1C1C1989FC1C1
+%C0C1C1C1C0C1C1C1C0C1C0C1747551A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0C97C4B74C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1982E613761
+%37613785FD13FFAF37363D3737363D3737363D3737363D3737363D373736
+%372F3737534A75C0C1C0C198C1C0C198754A4A98C1C0986E754A756E756E
+%744A754B7575A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0754B74C1C0
+%C1C0C198C1C0C198C1C0C198C1C0C1C0C14A36373D3737363D37AFFD12FF
+%85373D3761373D3761373D3761373D3761373D3761373D376137594A7574
+%C1C0C1C1C1C09F6E7551519EC174754B7675A07C7C757C76A07CA1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7754B98C1C1C1C0C1C1C1C0C1C1
+%C1C0C1C1C1C0C1C1C19852373D3761373D373D61FD12FF36373637363736
+%373637363736373637363736373637363737364AA04B99C0C198C198744A
+%76A0A04AC14A5175A0A0A07CFD07A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A04A4B4AC1C0C19EC198C19EC198C19EC198C19EC198C1C0742F
+%3D3637363736373637A9FD10FF853D376137613761376137613761376137
+%6137613761376137614BA0A07598C1C0C1985175A7A0A776754A7CA0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04A
+%76A07C4AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C14B613761376137
+%6137613785FD10FF61363D3737363D3737363D3737363D3737363D373736
+%3D373D2875A0A04B99C0C174517CFD05A0267CA0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C754A7CA0A0A0754AC1C0
+%C198C1C0C198C1C0C198C1C0C198C19852373D3737363D3737363D37AFFD
+%0EFFAF373D3761373D3761373D3761373D3761373D3761373D37613575A0
+%A7A07574C798517CA7A0A0A0A1A07CA0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A05151FD04A0A1A05174C1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0982E3D3761373D3761373D373D85FD0EFF5A37
+%36373637363736373637363736373637363736373637365175A07CA05174
+%984B75A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA075A07CA0A0A07CA0764A98C19EC198C19EC1
+%98C19EC198C19EC16E2F373736373637363736373661AFFD0CFFAF613761
+%3761376137613761376137613761376137613761375975A7A0A7A07C7499
+%51A7A0A7A0A0A0A7A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A1A0A7A0A0A0A7A0A75199C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C1C09F2E3D3761376137613761376137AFFD0CFF85143D3737
+%363D3737363D3737363D3737363D3737363D373727A0A0A07CA07C4B4AA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04AC1C0C198C1C0C198C1
+%C0C198C1C0C19851363D363D3737363D373736375BFD0CFF61373761373D
+%3761373D3761373D3761373D3761373D37612F75A0A1A0A0A0A74B51A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A07574C1C1C1C0C1C1C1C0C1
+%C1C1C0C1C1C17452363D3761373D3761373D3761AFFD0AFFA83736373637
+%363736373637363736373637363736373637375275A07CFD04A0754BA07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0756E98C19EC198C19EC198
+%C19EC198C1C0C1744B2E36373D37373637373714AFFD0AFFAF3761376137
+%613761376137613761376137613761376137614BA0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A7A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A14BC1C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C0984A522F5A3661373D373D61FD0AFF5A37373736
+%3D3737363D3737363D3737363D3737363D373D2E75A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07575517575A0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0756EC1C0C198C1C0
+%C198C1C0C198C1C0C198C1C0C198986E754A514B522752A9FD09FF613761
+%373D3761373D3761373D3761373D3761373D37613651A0A7A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD04A04B767CA17C754AFD04A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A77C759EC1C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C0C1BAC198C098CFFD08FFAF3637
+%363736373637363736373637363736373637363D304B75A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0754AA8FD05FFA14AA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA04B98C0C19EC1
+%98C19EC198C19EC198C19EC198C19EC198C1C0C198C1C0C0A0FD08FF8537
+%37613761376137613761376137613761376137612F5175A7A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04AFD08FFA84AA0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A07C6EC1C1C1C0C1C1
+%C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1BAA0FD08FF85373736
+%3D3737363D3737363D3737363D3737373D2E4A75A1A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA14B7DFFFFFFA77DFD04FF7C75A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07C4B98C1C0C1
+%98C1C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0984BFD08FF5B3D
+%373D3761373D3761373D3761373D376137372775A0A1A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A075A8FFCA5220264BFFFFFFA175
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A75199
+%C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C17459AFFD
+%06FFAF373637363736373637363736373637363737362675FD04A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04ACAFFA1F82620207D
+%FFFFA84AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD04
+%A07C4AC198C19EC198C19EC198C19EC198C19EC198C19EC198C19EC1984B
+%36AFFD07FF37613761376137613761376137613761375A4AA0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A075A1FFA82620
+%2620A8FFFF7C75A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A07598C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1
+%C1C0982F3D85FD06FF8537363D3737363D3737363D3737363D372F4AA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A075
+%75FFFF7D4B4B7DFFFFA85175A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA15198C0C1C0C198C1C0C198C1C0C198C1C0C198
+%C1C0C198C1C09827373785FD06FFAF373D3761373D3761373D3761373D37
+%534AA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A15176FD06FFA87675A1A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1FD04A06EC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1
+%C1C0C1C1C1C0994B36373D61FD06FF603736373637363736373637363D37
+%524AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A04A517CA8A8A8764B51A0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C5198C198C19EC198C19EC198
+%C19EC198C19EC198C19874273637373661FD06FF85376137613761376137
+%613761375275A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0C97C75517551757CC9A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0C97599C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C174512F61376137615BFD06FF5A37373736
+%3D3737363D373D365175FD05A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD04A07C4AC19EC1
+%C0C198C1C0C198C1C0C19EC198754A53363D373D37373661FD06FF853761
+%373D3761373D3761365175A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A07598C1C0C1C1C1C0C1C1C1C0C1C1C1744B27363761373D3761373D37FD
+%06FF5A37363736373637363D304B75A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A04B74C0C198C19EC198C19EC198C19EC174754A522F37373D
+%36373637FD06FF613761376137613761365175A7A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7FD04A04AC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C198
+%994B522F61376137FD06FF5B37363D3737363D364B75A1A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07C7598C198C1C0C198C1C0C198C1C0
+%C198C1C0C1C0C198744A522F37FD06FF61373D3761373D2F5175A7A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A15199C1C1C0C1C1C1C0
+%C1C1C1C0C1C1C1C0C1C1C1C0C1C0C198754BFD06FF5A37373D373D2F4A75
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A07C4AC1C0
+%C198C19EC198C19EC198C19EC198C19EC198C1C0C1C0C1FD06FF85375B2F
+%592E4B75C9A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A1A07598C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C1C1FD06
+%FF61364B754A754A5175A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A05175C0C198C1C0C198C1C0C198C1C0C198C1C0C198C1C0
+%C1C0C1FD06FF844A7C76A075A05175A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A04AC1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1C0C1C19F4BFD06FF4A75757C7576757C4AA07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A05198C19EC198C19EC198C19E
+%C198C19EC198C19EC1C098265AFD05FF7D7576A076A075A0767576A7A0A0
+%A0A7A0A0A0A7A0A1A0A7A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A77599C1C1C0C1
+%C1C1C0C1C1C1C0C1C1C1C0C1C1C1C09F4B3661FD04FFA851757C757C757C
+%75A04B76FD04A07CFD04A0A1A0A07CA075A07CA1A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%4AC1C0C198C1C0C198C1C0C198C1C0C198C1C09E26363785FD04FFA74AA0
+%76A075A076A0757575A7A0A1A0A0A0A7A0A075754B514A754B7575A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A07598C1C1C1C0C1C1C1C0C1C1C1C0C1C1C1C0C14A36373D
+%85FD04FF5175757C7576757C757C4B75FD04A07C754B514A514B76757675
+%7C754B4AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CFD07A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA05174C0C19EC198C19EC198C19EC198C19EC16E2F37
+%3736AFFD04FF7575A076A075A076A075A04B7C767C51754B7575A076A076
+%A075A076A0767575A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A1A0A0A0A1A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A04AC1C1C1C0C1C1C1C0C1C1C1C0
+%C1C1C1985137613761FD04FFA84A7C757C757C757C757C75764A514A7575
+%7C75A0757C757C757C757C757C754B75A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04AA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A05198C1C0C198
+%C1C0C198C1C0C198C1C0742F3D373736FD04FF7C7576A075A076A075A076
+%A075A076A075A076A075A076A075A076A075A076A07575A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A77575A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A77575C0C1C1C1C0C1C1C1C0C1C1C1C0C14B3D37613785FD04FF764B7C75
+%76757C7576757C7576757C7576757C757C75754B4B4A757576757C75764A
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CFD04A07551A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA04AC198C19EC198C19EC198C19EC16E2F3737363785FD
+%04FF4BA076A075A076A075A076A075A076A075A076A075754A4B4A4B4AA0
+%75A076A07575A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A74BA0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A07598C1C1C1C0C1C1C1C0C1C1C1C075
+%363D376137AFFFFFFFA84B757C757C757C757C757C757C757C757C75A075
+%4B264B4A4A2675757C757C75764AA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07551A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA17574C0C1C0C198
+%C1C0C198C1C0C16E754B522F5BFD04FFA14BA075A076A075A076A075A076
+%A075A076A075754A4B4A4B4A5175A076A075A0767575A7A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%7551A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD04A0
+%4AC1C0C1C1C1C0C1C1C1C0C1C1C1C0C1987476FD04FF4A757576757C7576
+%757C7576757C7576757C7575204B264A2651757C757C7576757C754B75A0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA04A7C7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07C7574C198C19EC198C19EC198C1C0C198C1BAC9FFFFFF7C
+%757CA075A076A075A076A075A076A075A076764A4B4A4B4B7C76A075A076
+%A075A076A07575A0A1A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0C97575A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0C97575C0C1C1C1C0C1C1C1C0C1C1C1C0
+%C1C0C1CFFFFFA84B75A0757C757C757C757C757C757C757C75A051755176
+%757C757C757C757C757C757C757C4A7CA0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0754B76A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD05A04AC1C0C1C0C198C1
+%C0C198C1C0C198C0A0FFFFFF7C51A075A076A075A076A075A076A075A076
+%A075A076A075A076A075A076A075A0757C75A076754BA7A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A05175A7A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%7598C1C0C1C1C1C0C1C1C1C0C1C1C1BACAFFFFFF4A767576757C7576757C
+%7576757C7576757C7576757C7576757C7576757C757C7551517C757C754B
+%76A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07C514BA07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07574C0C198C19EC198C19EC198C1BAC1A8FFFFFF7576
+%A075A076A075A076A075A076A075A076A075A076A075A076A076A0757651
+%5151A075A076A04BFD04A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A1757575A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A14BC1C0C1C1C1C0C1C1C1C0C1C1C1
+%A0FD04FF4A7C757C757C757C757C757C757C757C75A07575757675755175
+%75754A754B4A4BA0757C757C755175A0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CFD07A076764A4B75A1A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CFD04A07574C198C1C0C198C1C0C198
+%C198CFFD04FF7651A076A075A076A075A076A075A075754A754B75517675
+%7C4B4A4BA8A77575A075A076A075A04BA0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A7A0A0757651514BA0A0A1A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A17575C1C1C0
+%C1C1C1C0C1C1C1C0C8FD05FF7D4A757C7576757C7576757C75754A5176A7
+%A8FD04FFCF76517DFFA84B4BA07576757C757C75517CA07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA075754B754A514B7C7CFD05A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04A
+%C1C0C198C19EC198C1C0C0A7FD06FF765175A076A076A076A075514BA8FD
+%06FFA87C4BA1FFFFA14B75A076A075A076A0767651A1A0A7A0A0A0A7A0A0
+%A0A7A0A7FD04A075754B514A7C76A0A0C9A0A1A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%7674C1C0C1C1C1C0C1C1C19FFD08FF7C514A75517675754A757DFD06FFCA
+%765176FFFFFF764B757C757C757C757C757C4A75A0A07CFD07A0759F7575
+%4A522E2F2F373651A0A1A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07575C0C1
+%98C1C0C198C198CAFD0AFF7D4A754A4A51CAFD06FFA8764BA1FD04FF764B
+%75A076A075A076A075A0755176A7A0A0A0A7A0A075754B512E5935373761
+%373D37612EA0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A04AC1C1C1C0C1
+%C1C1C0C8FD0BFF7D757575517676FFFFFFA8A14B757DFD04FFA84B51757C
+%757C7576757C757675754BA07CA0A0A075754A512E363637373D37373637
+%3637372F4AA07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0756EC19EC198C1
+%C0C0A7FD0BFFA84BA04AA8FF7C517C757676CAFD05FFA74A757CA075A076
+%A075A076A0767C4AA0A0A7A0A06F512E5A37613761376137613761376137
+%613651A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A17C75C1C1C0C1C1C1A0
+%FD0CFF7D75767576FFFFFFA8CACAFD05FFA87C4A75757C757C757C757C75
+%7C757C4A76A0A07575272F363D3737363D3737363D3737363D3737363D27
+%75FD04A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A04A99C0C198C19FFD0DFFA74A
+%A07551A8FD09FFA7514AA076A075A076A075A076A075A05175A0A075512F
+%61373D3761373D3761373D3761373D3761373D375975A1A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1A0A0A0A1A0766EC1C1C1BACAFD0DFFA15175A0514BA7FD06FF
+%A8514B517C757C7576757C7576757C757C514B7C754A52363D3637363736
+%3736373637363736373637363736373051A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA07C4B98C1BAC2AFFD0EFF4BA076A075517CA8A8CA7D764A7576
+%A075A076A075A076A075A076A0FD0475275A376137613761376137613761
+%3761376137613761376137614BA0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A75199C0C1CAFD0FFF764BA0757C75754A514A755176757C757C757C75
+%7C757C757C757C75514A512E37373D3737363D3737363D3737363D373736
+%3D3737363D3737375275A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A07C4A
+%C1A7FD10FFA74B75A076A075A075A075A076A075A076A075A076A075A076
+%A076754A523661373D3761373D3761373D3761373D3761373D3761373D37
+%61373D2E75A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A075A0FD12FF76
+%4A757C7576757C7576757C7576757C7576757C7576757C75752653373736
+%3736373637363736373637363736373637363736373637363737354AA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CFD14FF765175A075A076A075
+%A076A075A076A075A076A075A075754B5A37613761376137613761376137
+%61376137613761376137613761376137613675A0A1A0A7A0A0A0A7A0A0A0
+%A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7FD05A0FD16FF7C4B4A7575A0757C757C757C757C757C75A075764A
+%4B2E37373D3737363D3737363D3737363D3737363D3737363D3737363D37
+%37363D37374AA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CFD18FFA87C4B
+%5175A076A075A076A075A076A075754A523661373D3761373D3761373D37
+%61373D3761373D3761373D3761373D3761373D37613751A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0
+%A1A0A0A0A1FD05A0CFFD1BFF7C764A514A754B7551754A754A4B27363737
+%363736373637363736373637363736373637363736373637363736373637
+%3637363727A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A076A8FD1FFFA8A17C7C76
+%7C757C7C5A36613761376137613761376137613761376137613761376137
+%61376137613761376137613761375275A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0
+%CFFD29FFAF61363D3737363D3737363D3737363D3737363D3737363D3737
+%363D3737363D3737363D3737363D2E75FD04A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8FD
+%2BFFAF613761373D3761373D3761373D3761373D3761373D3761373D3761
+%373D3761373D3761373D375375A1A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0
+%A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A07CCFFD2DFFAF
+%611437363736373637363736373637363736373637363736373637363736
+%3736373637363D2E75A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8FD30FF85373D376137
+%613761376137613761376137613761376137613761376137613761376137
+%5975A7A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0
+%A0A0A7A0A0A0A7FD04A0A1FD33FF853737363D3737363D3737363D373736
+%3D3737363D3737363D3737363D3737363D373D2F75A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A0A1
+%FD35FFAF37373761373D3761373D3761373D3761373D3761373D3761373D
+%3761373D3761375975A7A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1
+%A0A0A0A1A0A0A0A1A0A0A0A1FD04A0A8FD38FF5B37363736373637363736
+%37363736373637363736373637363736373637363D2F75FD04A07CA0A0A0
+%7CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07BA1A8FD
+%3AFF85613761376137613761376137613761376137613761376137613761
+%3761375A75A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7
+%A0A0A0A7FD05A0A8FD3DFFA9853737363D3737363D3737363D3737363D37
+%37363D3737363D3737363D2F75FD04A07CA0A0A07CA0A0A07CA0A0A07CA0
+%A0A07CA0A0A07CA0A0A07CA0A0A07CFD41FFAF61373761373D3761373D37
+%61373D3761373D3761373D3761373D375A51A0A0A1A0A0A0A1A0A0A0A1A0
+%A0A0A1A0A0A0A1A0A0A0A1A0A0A0A1A0A0A0A7A8FD44FF85611437363736
+%373637363736373637363736373637363736372F75A0A07CA0A0A07CA0A0
+%A07CA0A0A07CA0A0A07CA0A0A07CA0A0A07CA07CA8A8FD47FFAF613D3761
+%376137613761376137613761376137613761375A51A0A0A7A0A0A0A7A0A0
+%A0A7A0A0A0A7A0A0A0A7A0A0A0A7A0A0A0A7A7FD4CFFA96136373737363D
+%3737363D3737363D3737363D37373651A0A07CA0A0A07CA0A0A07CA0A0A0
+%7CA0A0A07CA0A0A07BA0A0A8A8FD50FF856137373761373D3761373D3761
+%373D376137374BFD04A0A1A0A0A0A1A0A0A0A1A0A0A0A1FD05A0A7A8FD54
+%FFA9AF6161363736373637363736373637363D36517CA0A0A07CA0A0A07C
+%A0A0A07CA0A0A075A07CA7A8FD5CFF8585376137373761373D376137374B
+%FD04A0A7A0A0A0A1FD05A0A1A1CAA8FD62FFA9AF8561366137373637364B
+%75A07CA076A07CA07CA17DA7A7FD6EFFAFAF85AF7DCAA7CAA8CAA8FFA8FD
+%B5FFFF
+%%EndData
+
+endstream endobj 19 0 obj <</Filter[/FlateDecode]/Length 1592>>stream
+H‰¤—Éj^G…÷½ÃÝx©¦‡êié‡$˜hEqñ€llüöùNõýÅò*ìÛõWW×pêT¹nyäíªäÉG •Ï4¶ÛË‹Ü'ß±o¹—PR7jiØ–›­ß¤WS(ÕÏ#´Xê–­º’‚9d¬ë_](2ÜÊ–K =b…S½¶(ûÕÞŽÊ<^‹d#‡V³®µ0 eD3 €?6B™CNÌšÕº=ã.O¶ÞÝìÁbá."krÀ¢+¹ùÝ6RC”rˆƒ°÷¨†UîaLœ#=%ب¼k†(͹•ˆ+cviÍÐZ̺K²B7½Q0Í%°#IÖGÝ
+ú6„e £ç$¿¼HÛÓ·—1äHˆu‹\ô¤:K´ÌG6zâ£÷fþÑRêM:–»Õ´ýzsya”C¹¹JJCëÛÉzK¦<“²øå*yÚ?áúlÁjia?w)Y¨CåOy†Â‹ˆ²«‹DVRòtK:'¯s×(ñònOÍPã’ÌërÁaõL~ÅŠDš2õ6°–G*œ.ÛW'ŒPø!•S¤eŠÊm fÁ‘så?/+Ä`sFл 创' ¥ö{×R#o3{JZ õc³zŒ
+ôöAW[G£«u­éŸ‘kñæî°gQ+ç:ÈMyBHjw\ä]å1mŸ/M|µÇš=gø¹AxÂ]äéà€yµ¥ž>ÜE–þkÉ‹N—O’¼ôç
+ì‹É“…ZCô>9>rÜ.ø/7NjG_ÆÄí?éZh¢<°‚RÒH‘'iÒ–Ø¥z‚¹$æ4[ÊÚ‘ói´5fœýÉZ‰p8 €O²”Ë¡Õ8X\„˜0Åí5ÀlÂðô6Áô"V£>ûÉÙŸOkâ%·@a‹î&Ô˜U"špN7Aô³–us0¥¢¦c5ȯ®·fq×AĤ
+%é)`–Ö€”ÓÑÇ1ÁÅÚ˜S_ÇûåAVú¿I}ʳ ±& )ÉiµºH7“\¯7­¸ÓçØ@N+Þצè«EjL.üÞéš8Ý\íñÀömI¶vh¬¨hIÌ Üêˆk~ȹfgù¹Ìœƒá´æ
+endstream endobj 20 0 obj <</Filter[/FlateDecode]/Length 17764>>stream
+H‰ÜW]oܸ}7àÿ >ˆ<+‰”DERY£qbÄÙ,Úma(ÅÖ®, 4šd“_ßÃ+JCÄöa[[Iä%yÏ%ï᳿\^ªu÷¾:e+ß;>zö,í«rèú3^{çM³Û½yõü͉Ä+ßÔRçâÚÖ|WõÛºkÏèÛŠ™¯…iÿ<Kö^–›¡ÛxÁ‰÷üÄ|y[M…o¿–Û®]•õÉÜ%Ldå€oü‡Püú!÷øãÞåU)Ûåv[©L?LP7ºÛµëº½ÕÝïg^È|ï4òC/Ž#ï4¡
+?Öoªía­U“ØT VA£:§MP†i—u7»ûª.ûî¦ÚnÓ®éúí™—~.[ŗÒûGÕ4Ý'O7åÍoh£Î£ë¢n*Lý¾¼ $?©ó ¼Ö»ºY¿ÚÝ¿¯à•Xôž]“ÕŸ¶0Ëæ7½O®Ïïñꪌ’»ß¼ÐîXð–ðü—K8¥BýoUûï“ÉrßmÌ+´i¦Ê1MóƒÛo«ûMo“O¸ðWpYH…û0UÆ´¨b‰“†b‘¬“ÂKB¹Š¤Œ1aIol›½«uõéÌ{Õµ•u“ꇫ‘HÎ}¼ÛOovMÕÿÔÖ†Ó;9úé¢[W ZìMMIî!û»­ñ¶ìo«ôwÍn ðs/àâeù¹2”¶“×›ª}Û½£¡ž2zAÂ`3ž ¸ê!B'A2wìïÖ´±c¬LöÃÞ%}Ý×·u{&L
+ßRý¢¯×{¦“Ðã&²οœþíx1ûa¨Úiˆ²ô‰uqezÎÛuÚÝ"¶´`*ŒÔt·öëþ¾ÁÄnc§B/®ÁÛe_·ÆðñÑ«ñ›¸¾lvøø¢ïv›óöCw|ô|Ü-0¬¾òƯXòôˆòƒ)±Ú7'ßiŸU°~öÆ·?þ‹%¼iªöôŸ»m9|¹ïÖ»_óöcÕt›Ê+Ûµ÷sÙožÒÅeS¶eïч©×®wÞU_þ6Ô½û¢ÒËú#–pÓz
+°
+Áp ŒîÜÆ·£À°œŽ±0E… »\Ä„²0±`JsT€y7
+X,¦(˜£!¤ùN˜‹/0r9œ[žÁéžÏ%w)A‡!·(ÂbÁi@ì.$y93~#?qò„ 9jÌ¢ È5#3(©c¹
+%´HE&rQHìX -”LrÉX
+œ¹”Ô2•™Ìe@3$†Š\E*V‰J*¥´JU®
+_
+9Iè*B®bÈYÆHR9œ"Ÿ)ä5ü#Ïqä»™ÏG¨å !ENTÈB&È’²%CÖ Í
+DgiäU)0FdÙÙ–#ë†È¾>Â3q)r²BnI‚,![3dí
+—Wp€Å‰–v³%²C` ¤Ðjþ%(º‹G0ëÿ°_-»­ItoÀÿ d#ôû‘]“3YÍ"Ë,.‚ØȘxq“ÿÇœªê&›%ëÞ8Á,ˆ4E•IvÕyðd7øØÃn¥*îljº‚óUŒ ˜qƒá&Ê;€¾¨ô.ÂðW“Ê>îÌA¨xyöKòØPñÚwe†¼³Ò¬øÓ%˜Z™sGf†ûé.ËüîÌ+€ŠnÙl7•Š[×lëÇÚ4Ž<ƒðã|¼LŸ•:¢K¥N^?}¹ÎXªj*ÀÎ3èY‡û˜Wá»ù“Y³›)ÔUÏŒÆÛì–¶N/Ó5mfMb@›»S…Ì“Ìàòw=‡Iº6uƒÊ@7q32#mf02¶Ó;ønâÚ™5Ïàö¬ï¦§×Ëõ\µÙÜ(,Ïàåw‹/S¹m³?µ;3¸ç$ßÃ_2ƒ_±óá-¿‘ûè½xËq‹Ÿ]Hõ‹ã ˳fVñ…ÝGê܇›ˆä;Ix-ßBÍx5å=>p SΣ”·ä¼%éÙšöôœøZæ“Ô‘û(õÕÜ÷ø0g?I’ÿjÄF P2 ¤@Î5 Rj¤4ø¤D¸dBI…gäBI†” )N‡ùP¢aZ!±š)'žáó)-R^ œ)1Rf´L?
+4qr¤ìxâK/-s‚¤ I)Rr$%IL Ó,Y„‰ÅN|9¿‘ý
+'½£yFS zùÐ!#‘)7äÈ‘3%‰ŽBx2t
+)Bc(ä"“äS"J«ðf)@F\K[BÖ-œ{GŒ< Ó”3ÃÑ%ŸŒP0¦”2PÒ
+wšã(EZzQ~ÀÒ­Ó => øGô³a`š$r¢A§¦mLÜ8¸qocÝƶ´•cÁ·]Vmlºðèž k.lÙs¤°cÇŠ+6\8píÉz¶[3^ ¸la¶5—mØkÇ]òSïyö}Í5ÖÙ¸’¨xƒEÞe{Õÿë§Úž> Ÿ~‚³?4Ãà(’::ÌÎ!Ú#¦ÅÐÅ?>><}ºçÚá÷šG+½:$} ˜ýë·rµ£1;our.ÑeÙøÄg”ÁÌz`j“q8ˆÞÔ‹ö!£ª®5ÍÑ*ï–þÁuå^UѪµ‹–*XçGþ±9Òq^åD_LýC{ÝÕ´G…èîõcëÖ{Å‚yºLyL¦êLµ©VP1ÑsãñAÈT ëìóª–W*÷÷ø!õ>lÍMÄ;²™
+'óÇ.ü¶ø^ß×ËåóÕ¦__EuðæSùÁ:¿=ÿùçç×—·?ê™áå××·vî»Ã7ÿzýí·—ÿ~ûøÐŽP­ø̳ ñ®„Üì*q%`3S¯n£Û<›G¡Ö™T)pŠ%`m2ÚD”Ô°|z–ÎT…óÄEI2I4I.=~œ!–
+4äS«ª–M+xåÐGè$•Hq¡†¤jg°¹ÑpÚk¨;t»h¨$´î„‡jVNc§êíMW˜v†«÷⹪’—àÙWX8 ƒ;Û€\œ9PŒ$Óx2)ÀxÀ¥ÀÎÀ¯ÀÁ»hx¡¡7âH4´ÛÅ{?AŽ¨zÆÛ‹(ä¡ü.@
+âr†ÈŽý çá!<ü„…³ÐEAˆÎaz©…_p\±½$´KW ž@¸±¹€Yÿ›ò‹ê‹â—vÏìôNìòÈáyöv…]y:rtäæ\<û7ËÎ-±cƒ[c§F>-Ä4/-…î>e‰d©¾xë}râŒ: w29?ôQ@?yt•EwѦàÎœ)Gt^áL´Æ´rèË¢Õ<ýkǺ{tºE¿külÂœð~LDÆlLˆƒÕ4ø×
+ÎâŒ1I3•`QCô­*^6½rϯ߲Ó|S/ЉlÛ·Âv.±¹ lõ/±áWìBÎÛv°|‰­Þ®fQñEÜò4fÕ¶hólÞɾÓ"“…'/6“Ì>nâe3¿Øyj±ô‰-=™z±õ½±ko«µ‡Çð¤jï7¿ZüfòíÆä?¶ùbô'6úX¯ÙêW³‰Õì c‰Ù?WŸ×ì¾eô†?²áGÐì,?™þ‰M¿ž ?Y~·cù{Ó¿²ý ÝYÿfþûO`1ÿ´5ó?Ûÿ9¾É&äfô²Ñß{Çz>ngûߢ.¸}ßê™ÍÑö›þïþ<}¾GSÏXÞÛ:‡ý_mïxïYÚ>ðüÊ'Úëö‘Ï·cú”‰_>ISýÌ´løx?²¶€-P‘†xcbþ˜Xk>5‹…<
+“Ibb Õq8&ÃD¤8Öž«÷ ÷A[f*‹LkâBìã;ñ"Í4ailâ8Ëã,M"I$Ë$„t-RÙ‹e/—U0Ù‰Yqb+VV  ’ÂŒ$§ú¯b”!K‘%ÊC®,&Wc&ÈÙ /’^HÁM'È^€:Ì£ó(ˆ%dâ9âuÖˆ„ P=Ç£«±žûÄ£^hô™
+<SÑ…"Ji£ s>ã4mpîÐoãŒaFpÈ©"ξÂU4O`*˜ûNì‡P‘ì‡à\mˆà½þ”•íºÝzUºUú•;¶öìTÅMNþÁ0w¯ôoí¦.FgK'–Í¥Ÿ-‹ªtµ&©ízû\_ÙX{\º¼°XCäk·ÇÚñÔóž…ÝU‘7µ÷Ñý„:gžžƒ¶Æ“»{æ
+Ð<¨¨7P— ·ÁåV› }¸´Ú¸Á°AÙ o@ùT({ ®6ð+¸lT4ô
+קèÚ aŠÐÙ{“4Ï#wH+ðD­,öO`îcvp.é ŽÅã
+Ÿ¸†ÖYƒŸGôˆÉR»Çñõuèîçƒ
+ÊÝÁ{iKÅä#s-ˆ;—¢%€þàç8Èòºk•|ô°D¸j¹«?YˆîfÀ\>•ü§óÛó÷Ÿ~~}yû£ž^~}}kç¾;|óïÏ¿üçõùååÛLJåe°ìÏÒ—ôpÁÂï9þýªé­ÛÖ‚{þÚèÛ¢H꣋è³èºèª‹ € ‹øiÿ?Þœ9‡¤t?Ü›Ôè&æ$¾²,ñRÔ™93µ÷Ø6žvò{èÏß[¼=w,é*ÝY¥1³¬]ïªì&|Y­[êêÝN|×Ý|·ß){ÚGTßõÕÇ ¾qóûß—/Ï_eëí¨r‡Çž†8=sÝÙ‹»da’Ûe´”…¢e$¼¶.§—1¥jaÎ*»Œâ‰`Ù¤#$•Œ%“ ŸHç_S*‘/d&i¼Ž’I"3IO )›àSú­vuz Ø$*·… ·ÀE‘舞 O4óEü‰ö”%û¦™kg`ìâdXZÔÑ:¢7ˆí˜Kˆht%É¥>´)Rd‘MãÆ{Cc©H_ÔZØÍÞ0dŒSÆœQºá–ÐÕ÷wÛ¡ÉЭ³ˆØŌеì‡hT~ƒAóï ã æŒ)ïº[ΰ^Áv}€ P_ûfHœh0cóH¶Ž|–ÔÈeÉš#ø+žy#wÑœÉXeê
+v
+/…ZR¸™` xUáàæ ÿã\oÉ0唲ɓG±g$c„+¬”Ìð`†©ž˜¬æYç¬k©gÏjÖ’£F«ÏE+µˆÆ€Ÿ ª-ä*ë­F&{çúuÏ=iI‡®—L_-¾}¦‹§7ÄBÙ"‰ˆ~0’‚8R€rË@O.ž¦½Ÿ¹Ñv‹ü™Œa{hÏaÝͺNÌ{OK/CL¾˜}qvâ]
+dãE¾‚AåAh*å ¾`Áòõ2‰#âÕ#°0¼hŒ‘@£B2dËu;ID ùÔ¤‘IsˆfêK“ güÒ@fÑL#Z
+lèÝÝ$˜ñ€ûN)ZÌl²¸;ëË(©(Ö¸ækc½Ìxq·sÓ¾7ó¸s \8ûí §Õ I`“!‰I–#//XŠE2ž”«Š•B(”¢\h9~YÈb¼*Q*…¦J*±'…œ²?»cѥĕPôÍêûÖ·/õ -YkÅYÕZUZa¨H}±:´µ&µ>µVUúµ’)#VßZï<ÀŒ43·/çG]´}±i4âSoHí%µÌ
+/K½¡18C­·Œ”USAÏ ÐŠôåe }Fi€¥™ÇŒP€ýM†; .¶ÖøRïïvt>`:Ãx‚KzFU=â¬ñÚW”o¦Ÿ |3h*1£ ¤nMF/äòHwdo oùº’¥‰Ÿ=yÉGabM.Æ;QÇlkÉ0e—#§V²Hù33­1Å“µñaaýkÝ£ÚQݬrV¶VsÍÚÕŠ¬6{«A©:­0gU´Z…Löæõ=wöžt_tY Åg!©'¸”@O ØÒ*Ú{éáN<äN„J|ž:¿ÑœbOW)> f7ÚЧ¹B EÚDŠfRx¤¯èŽá•1P9pþÛφ™¢ÿA“Íâæß{:™ŽžFFÈÞ_Üt™
+ÏR—HÈÎÁ±q”Ä–¢/’¿FH/˜.r/b/B™‡§[ãî;Ø5ŠØ˜¾Püá ǸAl‹‡9C¥Çìé9§MWÜèoê`s<›®ØB1–]/CüìhAr†Ï]àvQ¹ª0èb”DÝŦôÒZâé-'–©4k‰·ÖTÆœF•rÙ€‰ýc©y-" NùQ,y)sj
+]2$z0±¦ K°›¡
+U/¸E S$%s{=SDÓ´¤jIÛ2 zIçƬu{ÅSÍÛcÝ+ iàP=UÅ„]@¥B^F8A,ÀŒÔÓo@÷:0ãß\±C 0ãM×íÀŒ7_û#Íx¦(=õde°òŒ±EMœ¤#ØÁ¢Ó–Õ$ššHEL‚¢œ×}lÕ઱5׿UÕ”HwsYUUÓ•½ª„¬*ê}PeòÓôedCW}YLc¨2)JãÍ#½â@Qºî•g¯=³9¨Å|Ô[fÜv.«>Ѩ¤SI«ögàæš3+h¯ »¦r§ÀŒ}vxo18Þ˜·Ï8Ý
+Ìxóµ?ÒŒ;E¹m8Cc€¤ -A˜„ÄB>¸Ì8Ò¼‹ÛYáwj:Ï S-”JœÏHµZÜŠl¥Š Xê€FS­Uu ¥ÊÕš¢r™n«Ölš•üOÉ^+U
+É ˜½D™zª’(’j‘è‡í“—(*Œ¨Š¨‰Ü¨Ê!j¡Eø/LO¬V~
+ç¤bÅUda.A<@Üõyí½©'èФ$ùhµTÔ’Ïé'¥ôŠËØg”’1öžÕïèN0À ËçxÓ,¯ýh^oÅRß‚û»Û®[Ü­ÀŒ7_û#͘eÛ¶å5€0qó›[·uY'~úÕ-Û² ´Ô‘¥YêyûŸPI=ÌA@:ÔçŠr™PÅèÖS‹xã'7Õ`Á2N`EžD8fÕ`Ô‚BÑ“zôÀîyð°#Wtð =}
+šîšÆèèõÁ“¡+:h»5°†C[;Ûd³] ïùµ#æ’/ 9K$ärボÆ·®š·gŽv:²·üò…íE¶ž«­¯^VøÈÓVI]©ùyÊöåëdˆ*–hÅ-@sRpŽ
+ÏNz œå¹N@O
+Ö`—*†iýËgû
+½¨RÏ©ØÛK½éü¦ &ö™FáEÕ+õ„ˆ<I™Ÿy½Ñ%ä]ñôÀÇ«HyªÎó·ô3o}y
+Óý&™ÃpšCšKZLZ­é(ê 38Â/a¡õ—i™¥Ÿ–¡šh«mäi)Z‹›iµ¬mW´7•»{Ьm&íFïHó‘Áj†sŽY[v|‡Yi“"3’hÏBŽ·OË÷
+ßÙ
+rö1„àƒ q¶ûúKß9©`Å6iê]=Œ¸˜2<Ló-±®øâ„}Ej/ûR1O«˜E®¬5™©cJ•õ’ªY$(5<\Í€¾n}oÖ÷¦ã-ßÞÒ÷šzÀN°Èé€Sp ¤'ÀQ¸Q°9 f¨vÉÙÀ¬gnpÖmä? m?lÓ XãÛýKý[Ø´õo+ÌÈ4ˆ™|$Ø8ûÌ©G=mÃ)¯zºz²œåLVVX©¬Ñ²ª-¾-+™øºÓ/n
+ ‘Žu³™öþí& ºô2mêB͈nsÕíÞxë÷>øè'("Sžn¾b^ 傧™Bôšé·L׺o£ ÷h”Ë| ëoŸfM0ˆ°J–^ûLúmÒ®NÚ‰÷ho00/ÌÝ!3¸2ݲËtê”::H¦6êÏ'uӵͮچC¨(ü/T+ø&KŒ‰³]òkŸÑVöI^Ýißgße:írÓ]ÊÛý±ÇI÷8Ÿq~(”¶ÂY¥ÁcE×y‡êw¸Îz©ÆcÅÛ1Û:çGÚÚÏUšÆú[¥ØÅ@àˆF}&ʬªs‡å%šëž?̃ÈA¾³pBr:–SiU§æÔºRc©odÛ™ŠnTÒ‚ ‘beÕ¡¨Oу»¢jB'*1îªE?.¬7©ºŒ/$äaŽ1 …beŽvfF"³â™ëÛ™¡Y*´læøgf,2kž™³ÎØÜh»òÏ꾸º‹
+ö¶p³Õð#âˆé§t‰üåE¬÷AÆû¿ÔÏ?ýî»2ŽÙF¬Ú«Þ—㾌‰EﳸÕñߤ?¸0~ÀB2J™¥!ú¿AûÏë¿Žá} «aÆ5ët?úøm×?ÿ×7èÓ܈aW41®!6(CÑ…™ùEèT Š%(:PT  ¸©<ë?‡*|­ÿN
+ph@UÄ"Fð,
+cŠüɤÙË4õ‰êó¤³Ä„,—IjŽ™iSÒ¦¡uøª,°¨Ùœ&ðìÂß¿|Fh|`ú‹óû…ô—2¾°/â0*düh]žMÎÕëÄUƒ‹ž»!‚
+±¸ôý›ªCQ†¢ 7Õ‚IÕŸE鉶rf¯ºä÷+¤¿}Æ«µká4ãq¯ÑttÓ×Ý6Æ‹uÞ¬f:¬çٌ ‡I-'ãÚuwå°¸'‹óÅóyº~QÆŠk<Ù2>Žþg»s¶Aà ÃÔ ”Ú)2æÃ`õ2¬Ç73†-ÓÅ´K,æ!#'†Np(©É[ÔðQTå¤jw]ªÅz`@lâ$$<Á@¬ÀDu;K·
+³%<¯êKŽs©0ïÕ—qª0-¶q\ªÌnÞ™‘ŸR£^òR…kŒ(Ñ‹NUØ-ÏS9'ESÔ+èÅA ¸ÎÏ40¨ÿÙŽ\¥;yiìÑXÙéÕêd‰½+À„(Úr¨6M`§y9QWhêØ‚uA;Ö†í_)ãIÍ‹.1Á-RÊ1´µ4iC¬Û¼n²ï>X{þ¸øü}õÁGÖ$Þö]ßk*ŸÓÔ¸¤›9¹””²O$’FÚ%yhâ ©lW‰ãá´1%Ž™2Õ°EÅ¢ä8YФJ”,ZÞ¨š{ÕóVÍŸU]{Uvà/ªº›„šTßbZÛÔ3íž¡þFþØ¿z2uÅ°5˜³¼R`¡JAÄ€Zye5j7"*à£ÄM‰A¯Å_A¿¬Lö¦Ç}ux0y‰+K‘pfA=›x7+NO'j‘=Ù¨ëëÔ J“Fc\d8¢¾-;ÛÝØ2X3¦1Žaô£ª4·*ÉN…ب
+ˆê/ÕT?Zÿ,›* } D  I|±€é_”°!€‚i±&eƒUË2b_X$FF M{ƒÉI8yá”°?b/7j‰Éa°J,kåÕ@‰µKjª²¬NÍ–˜®­pÞÕT&l5J V‰L·oEý"/¬+&”§`º±ç8¨tlï¨zØ$ê§Nwö¹³ËÕåë'wÛ¨«_K.Ý êbzWñ¬ò¨[<Âj†ö€ZrøÛátOÈ
+=?èÜ0´§¨p´Õ"mTš„¥…¦Þ+QÊ”í©²JUáJ¨*\íÉÚ¨÷$
+.„­Êpßj} c…²Q)«•2·¢lf¬SÆ6ʘ”ž£ò%„)]P¶§+¯èÚ*]BVaËOl%e«™ØR®&¦&¢-q¡©S’eHøzN11Ñ¿ƒ†1ö,Ì)‘‘аUÆ%‚¼Mƒ°P"ÉKJ4˜û¨Òò0Å–]„ˆÇ1±§â4Û‡¸€ yiµÐQbÐ…BfF֔ᄬ°2—:ŤÂÌ:&¥…š—
+;stÚL1ŠKËÄÃk8¼þOFUCØúr«Ëë¥.‡¨R"“˜'»Wb”P9Å)z<4k³ý+ŒY3©G#Ü®#ÖÛYnŸãöÑiÎo…@aO¨â`­P¦| Y”дU†„ž¨Ä)[¥ÃADRzÎ~dúrΉ³í8Câ
+5bà„7œs‡43§ž8û@tqÀ‰;1h!œd"T‚š
+‘R)¡š -1GtÅ¡³ÍIÉÅÂP&ƒ£W{²0ùÈÄG&>2ñ‘‰C&‚yvÑßjYZW­uLÔÔ[Â`Ü$ÛfßpÓ²
+3p’¦“cbUªÙ X -è Ç0™æ‘­ò€§t7î¿ä—KoÇ…ÿÊ,å ¹î÷t'+Å -  {GEB¦ú÷ùNõc†—6ŒÎ*éN±»º»çœêØ÷‘i¦ª}+Ì.ªFÖ×’Õ<.«Ê¯{Îö½ï½ýmÏ~½Ô䪶XßÜ?³RgPQ±Òi•~¡Èô`pë{T·k$n-¢—Òɇ}΃V©ËF·¢%ÃW ÿãœi8JV·9–ÍW,GWÏ:}Ïhõ=”×ýskê)O<É
+Äì¹nE¸Ù<¸™ÐÑÙ¼¨ ŠŸã¤)¾Ö(”[N–aœuDܬžÄV5ý¸ÞÌë0wjîãFkÕ¼óòsõ´ëθªEÈÇyÕ¢T£
+†L!:T‹Õgþ¨-Aõ£”KxÁ]^ê`¾Žªjqi"ƒã¯üVš), °Œ¤;?QÕæâE#a›î™~¶–àã
+OÒñÈyÚ@…Œ}âŒH<8UlF†žË44à  ƒòï´&‰ae¼êäSyC6‚äØ´gX_ (COÎ}XSàt¸²2éÙy…Mä[SÓ¾«¨¼d#5ãÎÎŽîŸ[õp±8ÎÉŠMeÀDàb}¿]ÁfT<!€‰““igmÓJ¶ öüì
+r*ÇiÓ0öõ+«æ—Ÿ«§]Ÿß^?þqè¥G7ƒ„]¼¬™Ä‘p*öâ«QEÝ…*
+·Åž~?…)8rláú@cvìÅîêy*o×F×Ntkeàæ"ªÏ#…ñž>" {Òä«ï´š ºªpû]ùJ…+6îÌœÁU‰$к5×/p]¬/Ù]“‰U¬×QûG‡Y¢“'ÜÞÂ0Þë‘f?,«VRUjŽ… òµ ã̱s™ Gdd;ùBÜÚètè°Œ­ëvkázÀrvýÒ#¾Y˜¢¸ËaÌ
+¬£Z~fAíÕ°R³Ì굚·“3ÄëOÇ©Ã2¶ÆK¨¹œÂËI°z8[–ç§.óºÞr¶žpýÖSè‹Q"Ì•“ïŸ[‰²†]¯IBáNºŠÂ3|D•å4,”Jj൬ԞáåhÆyogñuk¤^rÛGa¼j7 £ëçµÖ²yñéèú}¿#ø$ÂZçD(µ¬Ÿ»hÕŸ™6µê³ƒ4‹:ì¹rGÞO!Î<±å¦ñµÙl‘#EÈã„xc´)}¶è¯&-u…,iÈH0D-uÉÞÊ̦¼µ„—Èíæ>öó¤ÝôæcéØJ‹9L¦Œ
+ ÑŠL¤œ`&ºeCÚµd\(ˆëÛB’
+4qI=i¶×$œ¢ÝªN%”ßÜ$[àþ˜=§£Z¨a£”BlQß6€í{ž"–FÌÊ
+·µ—
+×yÓ26΋­…Ç›¦³¯üh£ˆ<wQPBôi–0¢†6æ²ñûµ.†¨¢SÒ ´9—™âʃŠÄ,è+vÂô“H¥BØH¦Õâfƒ<·R{*1Ú{?”(BÊbg'iQlì@E­ÎIyÿ]E„>¼!¡]N–˜¥`vMˆa3f:Ø -*‡¢ÐeAH„Õ`ž·Qï+‡Ž´„>Ò¡ ¹nV¢4Oí:ÞZq®¡•)ê8·Ž]ÏúL‘‡Nüªœd²H„ãæ¨(só*1éÕœ‚]2ϦD™`bìhe—hP™AJ©3" 4Ä ûÈíÞ+|¥†GYY&…eÊëxËT×ß•œÚD
+«gÁEpùÂ`EÚ¡+0•4ù
+¤fYç Òt7ÐE}g– BjÊ—¦€t`P·È_ÝqÁHƒcÊ#H?‹&Ô0Vö0Â.bˆ’Óðf •Ü)J–û¬…®OèïÞD¿—iߊn62@ãvi¥Ikéj"èÛË6} Š‚”äª-±6»¿2Wè›9Á*¨"BÚÞd°ÕÜɲÐ-6RzZH7¥³«ñ=N\}aF*>׶-7^´å\>Î[–£´u±ÓÂuùåìú•G ¢t\kŠ/íEÜzNæЋ0±hbÞëá_ò!ƒÚi9ÍâïxZ–úá'OË2Ž;—™XHX¾4ÓÀ­Ç‘Ã06Λ­eëòËÓõ+ÿOÔ wæ(T·YàâKõw¦MQ-® mPŒ‡ É@ÂKÑ,krí)ÙJ6 {0ŸÌ樢3tXw6-cð¢$lëZdÚ'L‡ 4‹ @óYÀ¼¶æ:·ÂZv*[¿8Œ*ù7éÕ’íP¶„â¯ëé¸ûŸ¾D´wÐÁ›ÝæX‰P,<R}ú(¥3ìÉr îNk(1–&žZ%ñ*î¼ó ²ýÍXf7¢1 zƈˆm(`$2E\+h™oÚw5ämE§‹u–€ÇzdúC%µb $”¢­
+ %¢˜©øÀí¹ž²¨'*%ãŽ3 €¾˜ñ¹a»ê ”Ž1¡&¡9—Wí ¡jv³ŠA¸ªŽž¾þŠ‘±÷ÐÍ>G´ž\s¸×p½¥)ZŒ¦}ÑÔ‘MSŽßk!FøZ8‡žbÙfuÙ{#{Œ>©»j÷5=yZxA”dTÒ>v“s†ç%BJå´±Q /4¹áÀN …mí\Ç«UÎUÈÞ4j°`¶IO F]ç3Þ›°7µÃÅ:OÀc}gúƒ§ÿh……Ãì2ž›ñä±NÑ'iReèm<ÙeÎÇ'í¤çËgÊüèívž$f{Aâ˜ódC-ÂÓ,e<††È—ó¤”ß"heŸ4ßi¿/Ûi »ÎéÖØþ
+endstream endobj 21 0 obj <</Filter[/FlateDecode]/Length 25827>>stream
+H‰¬—»®¤¹ „s~‡N6qðC÷K¸€_Á€3Ã8€³8Ù÷÷WÔõt/°w‚™ª%Š¢Èb1ôÇå^Þ·ÇÇÎG˜È×_ÿòË¿|LOM®اòøœ;Ê“B½—ž–|[ÿ£¿Üëïf&°6öΦþøÎÚïŸpðOè)ñÁy±`+„§÷Zì£Ä2 îÉ1Ök!7hÑ•ËØFÖ©cëëãz”éeÌç'vç¯S2O]î…ûfÛØû]O8þö³òúõ¿ܬ©¿ÜË=…à§jŸµ–T=­ðìI½¹Ø_ÿü·íNùI%*V ¯C±<påXù˜ÒkOæ‘g5H|\òù ãVÉ?Õår/Ä£àËml#óÔ¹uÃýiUAÝÆ¢{zNå:u!sërï,ÜWØÆÞïzÅò·‘`#–~$š{bãY"As¥ñ‚úh)”äìzS`}æG}ôD6ÌÀNõ\†SyÊXÊlùéU%Âs鯀ÃÁy2?–'ú B˜jí<~ôXï3°Úso'rÓÅ,ÔÍ¥ð
+äM¾Û¥CH3Ó‚OOh¤ažL–d¥F}×|­iD˜Œ[)C×ýx3nŒWÝ“Í*U¶Ö^p¨õ§»R-Âѵ•ßÀ.êŒìÈ„ÆGøaHäM¯ØI‰¢üΉÊóuq?h!AÑÂàÊ“ƒÞ=çÇWŸ¸BxrqB`þWmJÜ,~\#Îr²UTTxà¡Ò+k*±‡hæV¼÷Ä8>¾eâx-¤`5GBžEpŽçš[3¯s7ïÚxÖ$7ÇÅb ñõ™ÌxÇNÎÛ¦Tùø~ƒ‰¸·;‘F®‹O zPÈ„?ÀÌ™­æv¯ OÒsS ˜GÎ å!¢ï¯ËoŠ¿NœÀÎÒéÙ^·½ß¶Þ¯ùNj£wzµ© =)ÛTt1ÆæTtÎEùIÑ{r2ßDW½¸oÕ# îyWÇ }ÿ€;ݾÁ8E@[õ©g3 ?.@°;ÍZ¡ôZ%ƒF}Bö×Fò3'êöО[;]£ 6#ôšh5Êu;‘¬>X™@b™õäGþž…µOF³î D‰ú…Œ­¹¾Á"Lo‰jñ8õdÈfÖS9Änï؃ž˜ E1µÐÍ *Þ–ŒµÌC[›þ–å/ãÐææU²©£þ€eƒ”"nMm%W;lëñ¾*ôdþb\µÏ§ <ýx>ºžF¬÷©–ôŽD &`Û g{UždÔµ¨6rçF‚NÏÎÁ1ÕCJÁï\ž ä™Xئ( (x§AJÖ¢¢©Ô ŸÊ8Šf"ñ‡»ðU )XŸ¨Ž¦r’<ÌdýLûOÒQzÖZíJPñ”
+ ]RKöh(³b]$Ù-2‹ƒ€WñëYHKË·©ùÿyâÜ6ÁLkû3ðEƒ{®ó&27nÇöÂíü6ö~Ëå/Û»e¾u´ï7˜lÌê=%Â*^i©§QZ–ÀO%d$!ͧI9\ )ÞÛÈ<uopø¡ÍÞ§.dn]î…û
+ÛØû]¯8ð<=«='$@ÍK nX}¼ªó«jSSëÕƒ:‘å™ê6¸$ÉrÖÑ Sˆ—­¬CçÖ K1©YlcTJ˜YgÎÿOæX®­UçRËÐÇ5OPb”woöÔE#Ì÷œ$ ¥GÈ'IA¸ óà8Ù¨a!“ ©ÛQtôbuÎeìBæ©s놃¡¶nc¹ó}êD¾–ÃÓ½½p_aû¼ë(%A.ðF{æŒu`¯~‰”CºBãEê‘P׈Àr¯%br.å^H@¢µÂel#ëÔ­)&\¥c°j­þ:tcãvn-;×Z–>.úZäÿ P] H3‰´üE´t%z“
+fe±‘Y-ðN*þZHy¨îØZÀ:s3—¡¸[ZTù.KJ±Ôï#2Uáòm/Üþoc½rë·Ql#·þÚó"©z=ê+çU)³èG±¥ìD”BJÞŠ(Gã?
+²H°»˜e˽Þ
+„I¨“‘’¤RgÎ5…ÒŠ™
+‰ñGb{¯ËkFA¸e#Ýÿ˜ &l¤+iíK3ŠÉÏ1ÞRUkàÚ£ÓÕ^[U Ö(5΀Ýlažbô px¸O]0rÈRÛgTŒ‘*&g©Ì÷(†_ÈPÔ|SSÝ ±Q³fÕJf8ï/DccŽK²Økh°),Ú ð§KÐKŒ)+‘SÇ_ΊÕób‰(%©\ºZL^ȺZ²‘½Í»šM®i!Ó‚-¤{ôPíÕ±«†˜”+$bÕÖtO3–Þ©¡ÐìÔ‰ÔÝewðÊDSRm
+
+ù,,m<ó1vyê×JÁ Ãw¡…×eÌÍëS'29`»·î+,cwýí)}´ Ñ©öY¥Bü-L˜‰‚a¶¢4(ÕÒ¤(g´áÊvYó›![Y̹0KÚó‚L ‹éC7‚çâlÝ\ãoA[oMã®… Y[©?‰3»y´3â<7[‡…ÕØSTh•skÔ\šÆÐWlðeª!™±S›{B‚«“ÇΤ¦›EÙWU?*9…¤¡jzÌ£³÷Ü,#ŒÚ§*ôëh$Fß©¦ Aä©Kuݵ„÷¦¡Çµ•j;—`„ãÃ(5SAˆÐ87RÓô1Ýe@hš:ûÎ’\ŠsOJ>ÇD%„Ë
+`Ä2VMéÅ»Dã9^@ˆ2
+¡d³=9a—"ZQî `Æ!¥D2ç¥ý|NÑI”¨š:Ð:bIÖÝ:ÍãÕÝ|KèRžŽR‡•Æ4x sC©4õ &*¤ YÔ+£¿Ï¨šp™‚×ü!ªLÛi•Ì<ÆØlæ;ÙG vÆ`«AA'ºEÄ®d°ú…Á-Ý SZ^9@³OžAä g+¥]³ÁÍ-v#ÿÕ_-7g3'·Æ¸ÿÑ^u½uÜFô½@þÃ>&AaósI¦ONâ¶N40Ä@Qª|ãÜÖ’ YŽáßs8Ãáj¯6 –öˆœ’3sèUì×Ux¥Å÷NŒéž—Óê<§PÜqI¯®Ë Á“øìñrj&‘ÁC”a^7€±|–í:<âÔyÙšˆ:µ‚PÏ=׶˜16~ç\6§سîÁmÖYÃÖI¦wç
+gŒB"3ºÜÁAÞ #ÕURàQü!’Æ+ ·êÑÇSÛ,sâ{cÈõh¼PaäYW¡¾b‹eéÃÆ¥6z`¶ÊB7Cûß'Y)oðªÄHDóP¥5a<=ôNÌr•Z!1«¾;SD( …L&_› ÑÂb\·¶ Q§ºÕ`{ýƘRƒ×-Y˜Ñu3aë$ÓMD•DU–Z*5TD¡9j(çbòDÀ·KÈÛùX<G¦ÎG·xŽQü÷ô­IΘä!öƒËŒ»ñäÙè4 FYîÞ:]9ˆQ-†0³…¡}¡3D½êVƒÑÊ[?¡0Užs>o½*¢[-<[h)˜±}®ÛÃý ’2BÔK.mÙ C —  £ó¯œê@bWÙI7D…â u»#¬tqeÆ&¢^µ÷¸‘Bp>š1 ¥±™×¨×Þ\8R˜Æö¹nšè³PÎ)ÖÐåî6÷Yß2cĬ/žœ V›ˆ&ƒÜGú\ˆ¹äšß3D½Ú 4¸²’¦14çT7>å[·ÐÆ¢MNjfŸå.QR¢ r‰S(‘/€]î`ðrI Z bMMôk mƒÌ:[ý…"àMc†¨×‹Ñs îBwÚWÜøÀº‚Æ6–m²Cû4·çúÿh}¯AÈÒ¹sŠ[ÑÙa ÇSgj1‹âŠAŸdŒ§Nå¢òO‡¿­CU¸˜·¶&¢N•- ™æ;I¶ð¾óô©ˆú´àl¡%`¶ö™~ì7
+nU¡ 'Paªb L2Ü|k=ëBeREŒõ~¬ßšHcy·E`Š¿L+P_ºm (òDMfv
+Z»Ko
+输¢´ÚÙg¶iw”6s|ŠW“ž(ŽÌ­ä¼^äW“ãí2#aƒÚ|IÀšmY‰¨¢*ÄêO÷ ”¯…Ë ±žÈàÍŸ²Ï²e#ðahŸß‡®Ç>Š—_î!0 â*Ü+ŠîqA¸‡«ÎOÄÛÙLæB&߶¶ >­­ Š
+*NÚšZªd ëÖ¥"F<46[hñ›±}¢ˆxì4P¼ 2ŸÓ s¯ Y¢WSó%ß/½
+KG»B3(aÅxð¬9[F»¥n- d¸ÔãåN°‡­BW±n|D·ŽØæBKËŒíýÈ4™•
+èN ÎÖøÍÔ.ÍóN™Cq]C<ðŠ.w0FaÎÂÔp‡¥¿·¶ÖØ'mlÑODsC Ô’›…ŒÓq3D½ÚV…ƒôŒi HF&¯±»ðæBKÁŒísýУ“ª‘%€"Gþýò.ZÑ„ùÀ
+Œ·¨ae¸:ÉožÀçßÏj³*ûÒC˜6°Þ[¿—Ë;0nimh<‰ßuÔ_’¿óÒBjö®
+›dCèç‡I°fÚÖ]dL±wHQ:ÚÊÚU zXƒYð¬»3vÙ½³xžã»oCåc¨Õ‰¢Æ"5ÌtãàLy~É3Œ[„DµgíDIð× å:xã(A¤ŽÊ­ž8‹Øù*´hØþw &Ðp­IÐH0w»I„ê•jNè
+ΰÕÎIv3¼Ë˜ûmT™5—wѦ϶’ïò2VúB¨e~Ë]€ò–ΧÇ*Ì˶nÍ ÞdŸ¡Eö0Àõ‰¢îÆ·lÓ˜8ƒV3'¹Í´#–ŽJ4 y%iʉZ §X‚¾q2òâ0ÑPùΓ¶ @êï‹´ÂVqþ‘™ w²ÍÐ,rØA h3s¦ß£IHc‘e2ŒìS›Yã`ŠïÔï
+˃éMàB¹C
+eƒ¢¬Ëich
+ú¼qòYè¸ù€¶ú×€gìÃÔi’GÚ¼{Ë“ÃËÃùíáÙœü‚zo i¹ÿèêvk”~¯oúó¾8H<¯/Îþrx«²[î?9œ¿xǶ¯—gßn.W·Û ïóòÝÍáçãáÍÙ“ë7¯FžP*‘âä}.þvDT>Ÿÿtûþ£k¯_žáLÿxs}õß?>üxû¿¯f¦8›ãáÕ¯Iô«ë–(Ú)zñúˉþp|vûÓ{oö!¾<Šg¯žéf¾<<?^)ôÅòé7ÇŸŸ}ò;ùÙÕÞJ‘†§‹¦%J¢6ˆ¡€WªÂSȧoøóµb/•v‚Šò¿§oåûüþ/ o`uùvùû?Üò쓾û‰ÐAq9h'Øû]ß-ÀÇ[ïFú•§ÇýåùÅ¿WÏåØŸ.Nêéõ©´Yþ*_Ž}2DÊH&W¨h\‰­×˵âEƒ›µ„ö=4M¤’Ìx¶”Ç™Í Ü?×Dö‰a·º@
+Œ Þ;Úz ÆE0n
+Ý!éAl„_@“lüS=êÍ•™á¶eº˜nv';ò‡Óâ„ÿ(ŽNw~x÷„W´éG>º5÷m#ó=¬àÕÊ}qøµ]wš: ¢-õ¾‘ÑN}î?Qè&Ÿ_Ð-Wi® ©ú”¬ß¦Uüs÷ù\R+{•µÜW§ÿiEq°©øеR{j¸>ïQAÝåBËY˯ÅRFBeÈ
+‹P«ñÝíhð M‚¦‚ù;žF‹ˆC¨K °­
+]K5ºOMUÐ×X†æ¤J¨lœñq®USç:Ú}•´
+‹¹Oñãr½Ã‹Rêdò¼•ž"ûkÌtzÇ‚õ¹ ÝÀ%š»Z½nñH$P. bôáNIªìªÒ#="þtìõB[æ¶i4å9äcœÆQ
+((*o@c¯8ûÖ¤f
+^?à«É×wHo£EûªåDc¸þF¤¸æ3¿Ïºû¼¦à:|1’ëG”aüiº}$ÍM„–œ< ¥e{(QmvSþ'¸P}¢-Ô(ô1'Žþõ¬ŠŸ^U_éÅ?£{ñ(f N½ÓE_Þ··ñô² ž¨q…‘3˜-¦JcøÔÏóÎ ¾–v×?øPý¬ý4ÝVÍkgÔ—DB1Q™½¶­åûBËÀ& ˜¼Ðܦê×¢ ²NLø­;EmºV®;]#À¬êud©õÔÊ{=KÊ ¥2pÄu?ú{I'’Ehp¬ÜG:nL¬m0¦y`:uâ”·5õÌwåôêÃ{H¶ÐŠØiùFùüúÊ'%íèZM5®]pšO¨sOjå?Íw´Çž4˜©UU㌣&¹ÇŠ=»ZHóß³NÚGp=O´¤™¡9BiA´}™»žôµ4€‹ÛéY|’o :A@µ¨–yÞeEa±<6~€‹å
++–—u(Ž€ùµ‚íV°P(vý‘¡éd3ªü&:ò´—æT
+ãôÔPèIËî)waFT Œ¡ªx€üšúÛ*ø¾&#Ñ‘1ÓÒNíZ¿½dÅȨH~”"w <ò÷qõ±¢*^¿½Ft…¨°ßTص¸4+ܯ
+蘼wÝ¡±„fŠ¦XÔÑAÅÙhpáwÝõiʽ[kø¼fØ6˜2µ\ Oe0e9§È˜÷SrwM§ÄfAîH9ëúþXS¨?ê
+°Ñ(]%÷oµ$åÚ½òÙ|+ DPì#Å1°ßhŠTMw2£)9ž *q;žPuÌW_tß1RÛ»QuáÑV®mËç[Ð×^½/Ý1Gm¬.Š_@¨AÛÃbª+›S•Üܼ3"IOeŠ}úS'S‚Ùjýf¸”´Lè÷*s#e…¤ÜÊTªZuªÚ3Ày^À.¸Ä÷2_8|ﺶ2ÂŒ ~–Z:)xa}¦/üH¬Ö4²­8U²=¤wºÂ(˜/šèIüxK,.§5 {VXhŠB9³ÔaÃÁ²w\qß…ÈC¨) ¨w
+Á „Z ¹æ°(«<h0Qö:EäêMcÄiuY¬å+.(¡}Úg×´Ó’DHÅÊáì]–òH{â¼zÍúªŒ<NJ}¥Ùºëðs Ã虬ªÜM•âºúiç9C¾êš]©³¬?œžðÔÛ;§XAÇyžßñˆYì{‰‘Bj$íXHä}k› ï¢ ª¯Ò¦(žôskí÷gÍCò¸0„(ƒëî¿ +£–xYÙ˜ðíjïˆn˜M,´¬¯¾4¨gÉŠ-ß_Õ›ùLý±mMeÀKOŽ5Içð*x¿' ^ £áBS1‚t¤ÐHy®gœ/Õu÷ýÆîanDIÞ6ñ7êB5ƒRf¨B-y¡N_«$!Xòªm§³Gé=¯hå<ø‘@
++U ÌÁØ+?
+Ãô²ï5T" Q[Þ`IèŒÔ©|Ðç¼tԻ㩉+Àƒ*0Òw\Ñœ¿>T= ëó^ëð±Ï[ÙK7iä”įޥÊeœëM¤j"%w¬äèF5@~h“F2•ÜSÍaBð½"K3$mZ>| Z“½”RVŠ©Ñ»RvBjgå-šnõ¢Šœ¹
+Än85ŠEÒ=!Þã’ϱ5dÁ+VZ<¡W}£#Öø–ºÒ€]Þ¬­\*þùÕºS¶çÙñ˜ñ ýiAC¬G߸§$:¥82øë\IýÀb½!FHZÓl§'%^-ÊæLÝXÉz.š4 ,þv9ÊQ‚ŒÔ3¼ÕÁÉ¿+û. ǫ_ ·³Ú³G~sZæ…¸5îÒ™#|!a¨>îðcæÚzõˆ¾ðÙ.Ev®Î.wâÑ5û
+Ë•äª-`V z(Ø«5¼‚A!¤AÀ»†5ŽiBU r2
+¶çÌÒèN!]ÅiDâ˜R§‘Òn¡›pWªÖ/ë‘)B™¿ZlsSHßÙg:ͱŽno©§GEȉMŸ}”ç&Û\ólÕ¡‡™²!$r4Í9Q:¼=¯Ëغóµghæ,ô“jl£wh¦.A/1{
+ïY<Åï;2­àa?#”j¿Ïçkd×(\‘v¡«Y— ¨áˆ}÷àDõ©jí"-Wf&G­mÚÂ[IËÇ æc_Ü~2 ÍÖ
+Àõ  â{¦I3–ì"(µÆÁ¯Ü}jst.lEPÑ&’^eÚ°
+¯Å@ʱÌ=ô ÓÒ½‰å½’0È„±ªî£'pb Ù®›ƒEozʱQ2c#>GµªnR‹`ÇÉ©´Û1€Ù`Æ3zZîÊðæÔ[õ°?L³¬ ”ãk¥YÕ£z<ŠþüZiÉ™%6‘õP Š?8@jš#Uµ­5ãh}ãäÜÇJêŒß;ZÆ4gŒybÈÁ…õ°Ú&¿zy­2„TÂ^€-’†ùèòx*¾Qí—©"ôò û
+Z{í׬Jùˆg&¡.98
+n¸œ°PÑQF”kW .#Í8süÀâtÕy¨
+ç#«âÏ¢㢨rÜ@B
+­ÿÒ^W–åFu¥àh±nSè¿7À«!·äªûG=èÌxY†.xb½·NÝÏcNälk£Y*úÞÒ‘wsÂ\üYG…
+°aç3JÄ
+wµJÉØŒ ˜…b˜‡Æk‰S¿qú<ƒúLø¾ÖhPÏÌ:*øjEþK
+ýSGDÈLV¡òÇöèYŸ4Ž¦çvlŒNS8{–¡“³*ÌS'“ƒÃÅ~Š·š¯”¤
+LT7HSLaJ›þŠax6ÔýÊ–ôoF~
+
+x"©eôMLX
+*Ôjþe~N¨ï´}ü娄Ž»L0’­6ª à.ÀÞ¯hÃ7¬¹þWX"­¢çéþÓ²ÿR$­{ÜÊn²m't•EµêÙˆ
+µßú7ÒõšÉ1üpþ)3ªñ×4â¸w§lÌL©À«ËÊjb”PJçºC8GÌñyá’Jt)Wš•GÃîÐwÙæï ‡(æ !ïCe6g#-ìÜ\âØê^Ðþf½\Zí:Ž(üWÎÐ „ôû1Œ•<„@ˆf!Ë`ˆ-áHÿû¬oUï}."™ ®ªÎî½»««ÖCÝ—Zã9±òÀK΋V•Q“¶Xj~ðw~bڜȆå’÷¿Ž\RÆâgÀî³TcšÇ¹.p i­ W,a@k>:9]‚7¥ Õpέô^BT&6Š:™x(ƒƒ9 ‘#Ù=—“[x¬Û9Ù‘ŽßñRÃb'@•• C¦]]CÚ÷—ÛóšäꌇÑòr H¿I×|"Иǎ[Ð[¯ÓS@Vë>eŪ
+ɉëÉGQEÆ¡õ”¤•ëÍ}µùKˆ#€®A]–´Ë”*©V’•‰‡Ê¯ØågQ‰ß³¸•@£%²úàKh\Ã+)8'fãÄQYµµ=îIª”…v/¦€tÓÌ`?j³í|sÖÔ*(;¦W½S¢Z  ÕwzÑ0—¦aΧ²½D)iÙ ½ ïh5 +ò~®0K‘ÄÿËêËùdÇЊâ†Çzä¡ðXÛ•Ê”¾©*ÑUìô
+5Ÿh“KRš¯RPû–ó*Im]qÛÅÏR²” ·4î*ˆ%=Šëp'®mˆŽX”f»Yl’œÓ‹FÊ~Iͺ~ç2j R‹E CMÒ6ØÝ@¸ -5Ô¿©˜ÁÊèB²ƒSÄY}¤x©ˆÄÝŒºÇ¥ùQhlX#О˜âŽhUchsŽoþh;ºgŒ@ u܆
+S'hĘÊöé„7G‹/*Õ! UNYÍên O•öÕÃÊ79¬{‘ô»¥smÕ(¡ól
+Iq¢øNÞÃì_‡Za˜I6Ì¢Ÿ]F`× tÕ%õ`7#K=[[ õ2¤Îõ¹+ªÒgT +§Ó ›ÃÁÌ.Ì)P-¦ŸJˆàÎuWŒÀ&ÖU] F–`ÔÜ×WZBºߢdµPÑD<sÄS…UÜfš÷¢Á˜à}¦%¹JäÏ”‹×àðZÈÝh½%u¯>}h,D"²LÈÍfa´pD.œôâ€7:v2ù½­6OúÌh|.µše×rJZ‹‘dЊj×-}ŽÈ|õšx•Ì\ªÞkÑà‡ªãR´g^9ã»eÝ…›Qà ÎŽkÜX·ŠãŽÅÌãbÄ;¹ÂˆéÍÒFªd‰*Œ­alî›ë‘ãÄ
+° ÕC©8•ÆµLs{9˜zo˜¸’:ÁZèuÿZ±îÉUA,鄵?¿ä¶Q2.ÅÔüqßÔy†×¹q ™áˆ{Z”Øå©xšîðn#QDq$Õ<’†€¼#¯™,Ö{%|ØÅÊtf÷èÌÅL©?­÷ªbŸø…[æòN4»^2šö+Î2½Ÿ¾»“ºË¨£y{n©¯eîSgtÞT•ˆþú)Ò:HÛ2‹ÜÿL¨E%°ÿ’©IÀdWêXQ—~Vwe¤ðÒ(óÜ€êUT÷]f„à[áC nL*iˆ€ô ^dòŸ™UÝG&a6œI×ñ%©%Öë•X4µe|p ³r<Óî‘à…Ë# •S‹~”YdDÿÉûQWU/§€N*Ô¬ y†Î«WÖη´`VØCДf®±1Þ%ÌŠS•ùÏš#ˆÿG´+÷e]1×ñŸ¥ÑnÏIk¥#ŸŸ
+ï²2Žøa_]á^ª1*ÜÒŽ`j£ã§RÌZ¬>zvz˜×섵®þ¦î— cäAÙ†sþ®ª&E¼„ú1¦y,o0Z|-Î?³rÕyž·*)‡¬Ëë„Àð"Ñr,‡eç*¹÷©‰¢Hº‹…Åç)$1>ý){f >¾ÚŠwí¼ÐQwç¬è¿Ž5­íî§]=gbjØóH&à WEæò÷¾ ë0˜q«–¦’L¡&ÒîÈ•VË/;­Ù_ïó‘ó.奜|¾(Èòh™«vý‡PÀ…oD©9¶£}3Z“ô¹7õ‚cØý‡¸ß·‚Åà±mJºCÈ ‚¤ð3…Ë߇žô"]K‰ôH‘¯ü6õïÃ+–nøÄx5ß‹Ijv4¯J("ó»UW…G´$ôÛÒy}_ìN%‹bZ·IßÇN@‘„+ù]1‹††ŠíÑjÝø LvH ~Dk®-Ö5Ä@Ü°L €ªAä#, ç¾h>÷ƒ \~!,Ó^º²;%Ùܸ˜»§
+Áyß(ÜB
+
+×€d/‰2šT ²¿T ©Wu:fšÈö=ùeæGÿ.ûÿ°ò¬õL^O%Y:‚¢<g4Îc— ^ÿÖ\„”‹4 vK¯´>Zï©Û@?ö¿ªi€½b]ËÆ% ˜üÚÁR—ˆÖ§Û,;™ÛßhòÐÍZ˜¿×¨fÍU4¥¨˜“—Õeó(›®„dyº8™½Û4oIô%9®“›ÉPÖò;ŽOIwRÿ ®™ñXJàö³$>ȃÃܯQ³à仲ÔÊ°*2ƒ©Ö·"º§dµ=Ò@qÛgŽCÙ ?ù¼xª0˜ÚA½cýç-Dv’­°ï^ÙCžaJ ™ªåÁŽ$iÍgå;Êz¾òaf¼AzÚ3N+D ­&ìí;Π™Ã¼â7IÄùyŽ£+yÇ°ç÷ tb<!‚ÁóïᇑdÔ( »Bt#¥Tí¡ 1ã|JR㶽^É %矋ΈE³å¤ºOLZ2Ò)™ÉŽ[­ß}®nRp®Ѳ©sµ{óLòâì…]3ß
+ð4Î>%,ªˆñºf‚²°Æ¢ïÆ¢òÆ{))8;„‰ÌêQ‚y¬sTøí§«w†þzr®øúM™Ê¤¥O"OåXÚ´ã†nŽ@Œ·ZjÌaGt ôë¸-®Ä¸LƒÉøe·EFv †˜£úG%)œ3íÝ⯕öK&ÒÊí;{Ð\s9doòéðÀû±–C“ú
+Dªº.š³k´)ëñIJý‡çhfCkû.$ ÅŸ_kdRDÊ1~òÇDþH0º&j"ÈDZBtDÚ?6™asÑLZÓlhi¹Ã,´¦òUwyrMCJLiÍ!ÐŒªrN¥.zKæ}ÇYp_wÒ ãÉÍ »Ÿ‘^‰šÜèõg ÚÛ`­`†‹²C’NNk ÝŸhŸç~k®ôoÂu„TE7øÔqÐj±ÿÔè-)I 0m4ÜëæÚÖ¹"çó´}¿VëÅÔ®Ê-•©y…䆅ñ°Ó·’Šºª¦øë+l6á:«.íšg[´Ãž¯?
+}¡î6BwÜ׋ 1fF ZÈ õk{’ÀÕ:£}3*¤eÊ„äºk6Ð’â(¤P)Uÿçuh;_’[au:¹¼VJ‰¿ •¿> óÿŠÿÿ/6úù—?ì—¥XÊߪ„ñ×E‘Öð$LD]â¨t^ðßÿ«
+,[ö <·¤;:àˆQ¹=iI´xÒH1£Ò_ÁÂ[h‘hû ïôóÌÙÒvVȺªí)ÚǪ­T? Ë€ÇVùtM S£
+Çuì3å¨ìyÊðMÚ…óʦ{Óœ²,|á]9 “q‰Ñ¥â¯´S>9ww*åÖSy+i%‡VßÂhi
+óýRTàØ~ái:Œç%€ž$69éÞE\/v²ÒR<3†J>\:vÅ=¾ÞÿÚË$Ǯ㈢[©¡XRö=’¨Ø+j`p` ¨wï{nd¾_
+´(–Ù>È¢­I¼!ÙÕR^ª9³­hT@¶C÷¯çvŠÚ»®ÛŸ
+Xæù3z€úŒ€lÂsJˆH/¢¨ÙÑ/žz:ËP˜vã9ãÑv’æ«z %›©Ëaã¼›öJG>åP„.ðåÌ-„ƒ¨JÏ-ñ;g
+•P¯‚"›qTz³R75ÄÄt ÈX=ô‡¼m<øBí§3Ïi£±½²QG)ÏÔX'„Ê‹Œë}Ëâ RH§'0¡Õ‡ÓŸ(dÔòk¨KT`ubïär-þnàÌ;Jíù¬¤º {ª…ñ¸ÇUe´T¸N‰åÕÅ®ó¦{_)OÚ·êX€l+šF]ºDåUÙ£P ;ä©>`DkG²ÜÔ½‡¯Q@Óš"G?ŸMÂ3¯ãiYÍߌ4¼Ê(§)p¢<Ý Àz )-&lÑbxª€'s›-<Œ’wåÊœJk˜!u·h•±[̊桹@&Íz™¢¨+ÅæÔðÓcT0‹#fõR_³ØË
+$IÀd¤„Õ ¤X¨}håÿ‡æ 
+uJ¥š×íÀ²œbAçšo+Áƒ«ÑNÛƒ$”P©ÊS­}ÂÌÊâQkŠOúcRŽ&—üK3åí«qkšæŠõè$½¬ 5œâiP+ ä*H~¼œWl+dMq¡ÕãH\TÿIãè·§®k`‰•Ïmµ±…<Гû,Aû_n9´Æ ­Uv“ÅK’°UB8»IÏ–å”áß-@–@à)Ÿt+ìvï5ÓO¥°õ=W´#έ"-–Üôˆ}˜{Ž ×øçëªU©²o_úð­‘j꾂KF‰zh
+BMÕ…Tù¨nµOáG–¬Å®iÜ֪ϤQÆÇ9“j¿ {\×bQ cñ”[{^uCµp–êhB§
+Z+×*ª‚Àõ•$xJëš„´Ø̑ЋKäòM‘Ô£³qOõðA4`…é§?šÉÈø lÍÏÏáÜ „JY0Þ5J^B\ÆxÜèEp…GPgtÓ„NŽæVÞŸÓ «Ö@óKh]¨%´˜Ò€½¬(Z€¢ê&ÚX|ж›L/m4!NWyØŠü þÐl¤%ÄBžÒÎôFÁmèæ¨Jk Pç\G|]›âj³æ@Ì"»
+´TÙ>u7ZLSQkñ´Ý[Cˆ joÅ4å[~émZ/GjîÚ\4¦:‡ó6@$Ѫe³4¬~‡Šë¹Ô@38ÖǃÞ0?K; ÄGŠ£eZ~ÍiØšÜC¿2iûj°º^öc{</möy^nFËrº{èE»J©_"F]bï#êY5Ÿ€Þ¡9“rƒpÕ(JšS¿¿èRÁ*PtÜLÀ*†}{ØGöï{çŒâÞêÔì2ÍNÛ<W! ‚,¨¼ •%±%aÍ…–t'cz±!ÈUŽcãBºäPf
+—–Ñ! î#Ñ7 *ç"¸šoVt×ì*¸ô\Äʲ»‘[Œ§êÑãºüûÒÅŸ9[äLpã9XcUW¨{¦z’Ú|j¡«—äŽ:ƶN93 _TW˜NÒ/¢+µ\¥+”¡·Ri–Ú½H#hMƒ®æÚ³ÝtÛí Êž14\cÜ—[Ùy&Õí*ž°ãa%²/a?;eñ-ãGœ«',x*DZ|%ëíl2tàQìEˆ¡,õrºYGè´}„×é>´ë« ÇVº=¾Âœ)˜gÜ,«kÝÌ8!ø¾ŠIó8E3‡Ô8©åÕ*:ÃÂÅä6ÃGJ«8±âR…:M£t›+ÇfKtµoTé›ìÛ£<ùj‘ ]:%èíVôF×)h—Áa
+·ÐÚ(ß)h?¨`_þ¨4T¤ÆYâ©™²mÏN"“†…Rž%j­(ð¡ñh*àŒRUG#SBit= -ÔáTá7Æ•¢`MÁW§Ë©&T <¿UËÕì¶N ¬é+«³Ϫ`Ó׿ÐWƒ!}«mìÏ(=ÂUÙ†„T̼p»b›Ù€8,#Ûâ]å4ªüÞ‹êµÐÊÒ³
+EÔ(£ƒ—ùKhƒÖ„&íJƒYp*‚×O¢q‡4Îœ:»
+V&S·Ãcuk§)Úù:ŽP9RJ›÷,‡½ ú5[g¬Üë¶Ð&”Órùê053§—ü­ÝT¶T oVÚóËz®Ë[€mú“B}©á{š%ÛKЈ›µ1Ñ-¼Jp(G€–-z¨[ëÌËÉ`¨¨ ƒ€ ò‘§úFÿïÕ7˜:Õ•|
+ñÝĺުqÍ–“jXiKùtá¼è]Bb)˜†Î¬ñ@ΊÒ7B®— $~Ïs<“‚ ŠNd?±p?ã?¿ÜG‡ç¡ý„Ó…yIœ½†µÒÛLý¾kôUð2O©àªqO!òõ±0ð?¬—K‹^Ç„ÿÊ,,œîÓ÷e¬ã…!B´„,ƒ!öGZøß»žz»Ï7q’1fÔõõåt¿—ª²hpAŸqŸ2™À¹ö;Ñò¨úÓ88i‘í$o œƒ'“»K21T;k ËÍå+;Âgõ¤{’Æ´ïQÒN»9ÃŒíÝ&nSd2hA(ǼqÆ!ƒRÈ‘vš“UAU©{Ƴ¾ZtÀ¥Réµ±Ø<¼Ù*ÇÑÃ’žq|žª (”œhÝañYcñóªë~pƒ
+¥éEw¦Y¾ÊH ¨|ÔœÎZtƒ‰±P‹ÔX‘îŒëe0žJÀùR ,ðºbRM"A3Í‹T/±ÈãX¤øå;`N&Sµþ*w´¢û‹2àgž@Ë^=éT·~òXÞqòŠX9515B°Æ¡ÌY£Âˆ š–IETc÷c /êw
+­:˜ôaÄa1„5^<{zY[LL<¨$•’JrL¤—Ú&²]‘9sç¶éOÓ ÛKËJ­,}æB„鮌Uf~ˆ|âdP"hnv^˜¢áI÷¸J(7ÆýÕ¢^Õ
+ïoåÌ›ß]0ýñ¿çnÿw³üô§¯^^þõôÅŸ¿ùÛ»OŸ>üüÓó7ÿ~þöÝ?=¿yùøËóË÷Ïýî‡O_ÿüòùãÞô/ùû‡Þ}úðݳùíéëé‹?<½ý'ÿüì»}Ž}þZÿ*!h{R9ʨũó%0•¬žE¡jšOoßYÕ>e~Õo í.å%Ÿ) «4FÅüxÃ6k¹eØ3ÅÄ
+Æ¡LF
+<kÀ¥».UV×ëQkFòýµ¨Eì×­L•y°Ô;Œ¨)Éó˜ ÊWšø}†.:RqnÂ%eMŸr#â¿~‹â£¤ôI­â"y”Äc
+1K]P`vú!é¯ë;¢¦†¤'Ú¨‚ô«Ðm
+}bׄß!/.T¬rûÕNˆ‘1#oœ@¨’<Dá+±´©ïi…çv{)yCº
+†IlØļփx‚^V–yæîØ+ñ–ÚH˜‘¶òPDáHn®Ky«l;¼=zTïb”ѳDèÔèÐ˹ RU|ã\z6iv¾I4\Û.*ó1þÄ•ÇDlm‰ÀÔóì:¨ÄŒ$T¿5™‡B±|ÀO•¥Y±V $»¶KØœûÐCC)k×*d¶õXÚ¾Áš~­l³7•hÛI$”lËUÙ42z’©Dµ˜œ+D¢Øë4OT'¾Ì°›RÙÌ –ó¿ëûÛD¤-¢ªè­í­i‹IVÀ7#Ïc`ð 
+Êì£ß[¥•Û³òÔrí±ý ?¬×ë®(ÝlQàn@\éˆ9¿ KïʺR)F'×H¥K YJ¿Xéø)6&å}U}©å 5Ú²µxò>OãReU·v±!¥õh\QÏh57W!­Gi…ÒéôŽìmgs/k
+ÆL€Ž‹«dKÝóu#$…Kï¯:+Óäb CbÄý]BµÑ†YŠô¹uSóQ}›"…}$‡UzâÂ?Ök¿›^ºü*À
+endstream endobj 22 0 obj <</Filter[/FlateDecode]/Length 22972>>stream
+H‰TW;’6¹ Ë]å;Lâ´K$õbüdƒ­ræû§@µz6™š-êA‚$ãçÏ¿ÿõŸ¿¬Ç³Gö[þ,ùcÑŸȶ§æ?æý£íù[¦ÖŸæ¿¶ýôÖ¸Y<Ùùì†æ|°Å>¦-Ÿ¾öø±‘®€S±YìŽ3ÆxÖÛ~¦Eàwšµõž¹qËŽõ',[Z¸{γРI bæñ™æšµÐ-²NO!Ñ}×f+ pOÇg⺳=æ [›?zñjOzƒûӵס{¿îµùÌ´ÄCÃêˆÿâˆõÄØøÇ÷cÃùÔ‰=p±:pJx¸ia¬B†ûÒé
+:"-Ä© ½!äL±À’K{zQ ”̼¡`.òÆ ¹¸™ó45– ¾||¦}É\%“ýÊÔ€ aôÊ·SùÁg,z`öUo“Nè`éSOš_Aº0Þ5œÜƒÿ§œi'¨òšê>žŽ”xÏ´Ã8®!¢ªQŘoë,3·òrCÅË™Í,’@Šæ@¦¼ DµOk>’ïܘ!GMªÌ8Èh¹*›•Ó¸¶Þ‰dOU<G Q”•Qlì4¨X?ý©~q€:ǼoY>@q•¢@Éo9_â^7vú`.4&&2°è8Q‰ÜÆ ï<Ùò_þqÓÕ‘[pTó#ЈÓOf8›J’³i€í?þæ"—¨ëý„7ß„~’
+MŽÌöf}£äâuM'»J\²«6“@‘Gg¼§’gè“€‘f,õŠQZ9º ’ÔLÈîë¥C0½‚¹q?-\¬5hOkV€X¯R’öY®ˆ.÷ -œ±Ê2â˜ãÅ…äË^< ¥!ïìÅ—ÕóPŽNB"·&oÐ-öÆ” ßRî]ƒ>bDÌåÕ6蚆$Em%°ò¤/Á¹È »!ÐDÆ$U¹N!%bYÈôþYö}Ö j\­s%ó@h£Žœ¾+´Jc
+Mè£h_ŽaWº ñòÕ§[)ÒÌ›J—†ò™¼¼‚6Œr˜xeD(*7CðZƒözêÐѸ)ÝyE"jéiµ§SX£)~–ž{ Þ’ÙyD‘joD6óºŸ4<¦HÈdð ·ÛdE¡
+'ý@1æéðBÎ}ƒ Âú†6âÔíÒÝ¢b6:«.µ "ˆxY®+óKœeË$Щ…ô¨ëælY{±úK
+›Î$CÞHl€Æ-0íJ”òé•ëP;ÏŸ—µ]ŒÁhæu$긓Uz‘q\‡
+Ë9v>å"fsϹP¥F=Û›*_ù¶Å ¥Øˆå¸SßYý b‚¥C†­Ä v0Fà_Zz\w×Ac'±âñ
+±E[¾mº¶lj·±?3ÕE»Å)ÜWÑ‘j¨\!ý}ãÅ>\Ÿö—ûï?\VoùG¦T^!¿¥7¼€bæò*e-ý°¤z
+“Z6é¯ñ#Á¾oà²É B¦€µsd̤‡…¼|•aGVÉîn„ö@âAV_4ë ȸŒµ·ò±k³šµNÙ[„Áfi#0î×YK©‰T­SQg†ÊfãgsÝ:n5x…p±‡¬+ÜÈÜ„¦¼SÃ
+ŽØ(ÄÌëŠÀÕsŠ1»­ë²1
+ l9ú‰#ÌQ§»UF-Üþ.;ºÐßqþvñ/^L•u†©¨D¡„¼^Á>ñ×·CÓöÇ•“Dt›A-5?D¶KœNx]òF0ÕÉ}ˆÄCÌo•ÆyÓ7g´í“:$ È;-Íø óæNQmÛ±C™)ž¾®_Q Wn¾‡y—îµa?ó¶m¼³*¢ú6ô…ÓH¯ßz.Ýyˆéæìxp
+Äò´Ôƈªš3ÌÍâ®óöúůû4r± bÓ¼Ú‰L Wùý‡÷ñ“à„´†F²ƒIÄ6ÍáöïÔÔážÝ¾DA©¹4ìo‘~µ`µ‡zØÞ³[(ŸVUðÚN„~Pð‰T©æ)<ïÍL±šÐÍEÉ‹îÕb\()C’×ÒÉÊ5sÀVÒÖÎ9ÙÂ5ÚÚãy0¸¤æçœs†»m\½ïV§…qz…›RÈÙÞv´gtèáË¡€á8A|Úö·˜KŒ ?Ø“õú5*À}Åg*#M”¡Û¶’É—$Äæ
+˜ÅÆJ3ä8¹$™Ëé£ô`‰sT‘‹,|d3Ç­ÅõÁÜúaüÆÌï“p†»!ìƒ4S#”)g!öâgªÌ]-+àî©ò}½ïÿZeêåë“,g>«›sD®AÕéåÛ8!©Ï|óZ>»˜Ý¡L6h¦ðê'V»ö(íý¨©aúTÑ*kÓWFØ*¶¦ÄŽXkELz}ïr•Š…Òå®™¶c`÷g
+™13_·â ¡ƒGf5–[©ÝeãºCí*lªÈPëuËÄKï)‡$R0Õ§­Q«OùuS}æM7uñ)`E—„¶ ; ‰ØØU’ ÿƒ¼Ü²R¢;z·ˆ™ Ý{2‚y‰™-ÕúâëêÈ¢ãé±$}©<¤È Q‚:§¶ª®^ßÅ!^ÝùŠâí˨™­ôxùU°Gh—+JÏó‘ývŠËQ«…v+©FkIV5O—Ó
+#p´ûiFžnÀ~$+OÎUõ=âÁŠZçeSÊz*ÄÚ'¤öS
+±–툿çNUvÉžDM=zR^ÑßQvI¦ó±èòþvl†íî%Ùsò¤º‘Ea*mB!¾Ô^“¬ {àG!?´ó­oý|íò?~ùúñ—Ï_ùý·O_þ|û;Øw«¤M•Å÷o?üëë—_~ûÏÛw?ýôãçÏüúÏß¿~bð÷oeè?ø+ÜòÇë^Z*>¨rÓ>Yðª{>NO+Î d¸úW(ž§¶q v;¾-ANFF
+˧R‹©Yï`D…µ^ŽH–,^:A`±k·ËÄ…å^ê 9ÆFñlÖ÷㶺¢d‡‘ÑP€Sf—¹¯UÕ¥/,5FÊq4ÌídI”„=[Â;g=Ìl7âå(wàÚÓˆ¤„i”Øäo¦¦Pjà¼W±mû¥¸é˜™ÉúÂÝŸ+ÊP&‘…š{Ç£pŽ»Ž’7½Ö^ž¼µà ³DÆ…8™Šâ÷yR w9VN5yŸTZ°.dy`%ʽæ$à—b*ñæN­ÝÞV°’DøFt$­ØÔá'ÐösPeL®Òî0ªFÈô*b>.Ž3OÃ.i½˜¯¬èÈéŒK‡…K¬ A;/Ë€kT½é,±Vu€b¸úI©ØúÈñéwÅ«Îq>n¡ÁøüI%&Ñ3+Ù¾awµèö@ýçW±-µ\z¨´q^S‡WS "²moš&ïXëa¥‰)ŸÏƒ
+^¡¼ép«Ì¸›ÕˆŸXHN0ŸÖÊ¥/Á+ÅÔNs
+¬ ¬.išIœqNªâJ¹-ÈÁ™v>pg3Q?žúþ{JÂŽ=x†É
+ï §'ÃqrìÚý}©Hê5
+%Zè(œ©ØŠëÜ©i•¸6z{‘S¹+ÂÓk`%ۥȑeÂ/Dô“ÊÃVÑ(¬qªtöP3/ þ©\ø{Ô'}ˆ}u
+6Ie&ü>Ô‡xg¼)#¸rÛ¹°yIlP})ü`€1\}BbšÛÒ¿ïôn¢¿Çë5
+~ð
+NÔs°Dn^êÔý=h›óèBæBú9 òjKUõjÅoï²…°ýh‚圧£½(~{ÕŠ[ö‹îð,‡ý$KVÎy8¡>t)I\.U¨* ¼X{y1ÁkŒpw=
+w§Â!FZ
+c7oõŠÈ¸ýžëOˆËÈ~ÏG¥/\ÓŒáÎÔÄ"h+H8£3uø†€¡T¤a).]X'ë‰5¤}CÊŸçG­Oj°ùî%'8vžKi‡‡™º·rDëNM~2ÁN¼„9´<](ÀÔi$Õç–
+_ßN­nfÄyEj‘ é;Þ «›_âís³rñ¹dÛK;'÷„ˆ»âDäÚä”ö;·‹ï†Öí"éÜ-Ý(zamÞ¨aKÂu¸,¿Iÿÿð‘ÿK{™ìhrTQøUjiØó°4 B^ !$„w¥n$KÈÝ2Ý ¿=ç;72³Ì°3òÂýŸŠÈ˜î=öÑñQ»s¡;uH!¥6äL.y#¬™ŒQ¨Sòüi7"còYõ«UÕuvâÄA¨pÊDÖÕ™ÍÍ:s'°ä|„ão1•Ev…LY#ÁœÁÄ0ìë:÷Àû<SEs v­H6`5{e+*”Æ«Ç`œ®‰n°=2¡?,vœSLÉóÕœ9ø³þÊ^%o£ê²_«ç8æÜׂB·xåœ@>Bw§ƒØG
+‘E/g̽WÁe츎ÙP !D%Òf
+ —² WÏ¢Õ3YËÃ6æàÙ«ÞWŒ/DÝÍ5Å<4ÒîYÏ.c«4 6o¨j³Wiz% ß`®—)·éÌ>Ô>†EHªlZ{Чô Ýr¼Îë-$Á”H$¥qœnót)<¼ê\Ê3Ó™Ëk*o€¶!lh×2ˆâŠOtÕ|3±à³ÒåÌX¡ ar̆ %xì‹Ù9U®DÁëܹª<ŸBËòuò¬qÝgÓ ?=URE&÷Ì^<Ç Íáé¢Ö¯wÜÛƃ̄ÙÄÒTžÏÔéTF˜ ç.¤Ž@FÏŒZbUwřگ§ž‡p#ˆ
+‰ó£Ö¨Ù‚¬“ÆRw/éÝ{»nw’;Õ?†gŠÀ' PG‹ôX&u*¤=í ¼hÁ,e¤”˜ê~öçs©óM%‰Õ
+…®ftÈͤ¦\¯©)Z<n£…ýŽ“*ÄŒá?sýPA'’´˜þI_5hË!õ^³ËTêºWQdïÿ¤MÙð¼oë™9W Ü'e…ÉRÚN²ÝR{í)w·Mu·«Ì-º†)l… ñ ·•.£iG×›r«ò.Š3A÷|U‹E9èÈQ¥C²]bÑÕ5ÈLðÊޕįԃ8 1q0“νgÖL
+ln†¶¸<âA THí÷Aí‡ñ ‚åWÏÀÕ±¯ôª)€ôfQmsQíz¶Lé8Çj†ñ9Æ(]U¯?çËSÉŒ×yÓ!Væ* ‚b›X±D
+^)”°Y‹øØJ1Uo‰Ò5’¯“ârŽÍ8ö…Öð ˜lqBe)›JS)îq{¦`ÏP1Ïj¥ç®Ô:º8)áë‘5tzÕ°iuõy”;R¦º#i £sÏÌÜB_ô]@ú(똅JA<rŸ3 ž3r©GÝÐ Õl±3ÓAr< 2pq§C´B%™=MS¸Î™æ ÀÅdç’[ƒe§¤ÕÕ,RÞ®6‰rXÑb/›øy,ìcæåí"øv;먲{#n¥M{Ïl¶…¼ÀvAç#8øAÿ#Jüâ
+dOFJbnD„•®"tµíz¶"$d~õp‡0á*0ƒ”}!üGNÒ1–‚g*ٷݾÇ]3¼u¤ï7Vlš€×Ѻj%åcÛ<'Ä?q'8ÖCÂ|L‹"æHå¡Oìþ0OQÌMNt—¥}_
+
+âwÝ1#Ë9ߪkíºB±ùí±MWÓ¬½N3_'„S0Š¦¬ Üjm;‡Ô.ï+¤¸e€_'…(é-Ý-³žâ‘-­ÿQ8ÎÅ£ì¿ñ4¼F+Èžªe$à½%–ª*O|SÚý–Zx®Ø”‚>}Wk‰½F™±ûGU× ?‹'úûUÓ T8ÇDír7¼SĎƶºÔRò;quï˜>Fè²êÜ»¿GÖp
+éiÛàqOêE™¶ÏÀ¿ ê0Þ×|–þètӠΫ<—ÆÈQ³ºµÿÉì»놲%¥î3ÀÈ€ØH€½ÝsÉÝy¨ZšÏVY ¸ê¼Ñ«´üuH·®5vs/¥ ‘â:úÏž124–"¯AL"4›=¨Eú7ï£Ë´AÕM&—ó`¶—Ð@u}£ñQ¯Ÿƒ^àÁf ?cV¨"ô J§€îÓØFƒË@)yZïç¥Ýy(¤?“èh y ÔMÕ˦÷tiŽýX­¥C?”æØ:­ÉSª@©ÒĹ•n’áª2f9o–ÏɲÕp¼eeÇx|ªLq ÎTô¨{WÜr+y?g·01³"w[Y|×Ù}FŠÅræÊ"0?
+osktI^ˆÌ‡á4†ÔºÞá~¢õGh¥Ú™OÍÇÍôø'%p”aÏÞæV(×?¿¥ w.+ß2CPµˆw¿ò\4Ä·rš¯]dòub¬I³ !§‚Ís=Jäí\ Q‚$z´¬;¯§‘XúÜR´ê/g§¥JL{ç}Z{³×ë„®«i' £Ð 0 Ñ΋¡Çº§Y\kLƒöÆQ–ûÜ©nã §IIðôŒuØŸ–TÓm¢ó¨U ¯`õJi1(ÍIódo"Ôº
+Ñø5Ö«Z6pü»O”®–õئ½@½Ç8_¡;:Š
+`‰©q;T¶Ã´šsðœê
+ÀÖÍ¡¤Ö/SÀ«U§ò×=ïÅmX´J¾{Nö—1…†6¥7mbÚCxü…ÿÏ´ÇÆ9ßB÷˜±j÷
+fÖðÁf#úŠ1Œ®´WGT7g¤¨E"!‡T}÷­Ò2W(®é*éWh~ײõY§—ìÐ`J€~Ûõ†rÓ(ÿmUSƒí",-¤bC_©Lñ/'Þ;51¤1æ†yQ}?¹žVC ûšdÐqJÕ¦IpÞó¢®@ß½E}U˜ÛŠ/l1¨¸õÐ'¨“ƒªÍ#„J6à Í–½o]ë&,·Å3?•eGÃR ñkL.î©|æì4©¾íAU[ûPŸ¢Û†Í›=¤ÿ <JõÖþeN_6×5(æÄ"å®,ÎUûYµÜ ¼*öqÕýŸÿ¤:Ä4Ê…˜Zà–X¢‹F„4è\±g1gK…{·|ßxæúù4ï8»ÿJ½‘}èþnLiÊ’Ä{¨·ì Ê\íD.Ê]Ê–O@ÁO¨·«ýY¨üS°> Æo׿~—·_Øί)£½1öU+Ž5ñhÌ# ÀèÁpcdä3ŵ(î†AðxÔRǦj궂ڵìÚãl§£ëâ.Lej¯
+X(ÛX¥-æâ°nIf,B(a¦Ý$ÊÔ¯òûPñ¿ŸäYX³ô”4És?–”>·‡IˉôËÑ0¹isý¶áXx2
+>ei¤0‚õ+Œ@ÚÛNº=>JYåÔxjQýáY0‰Þ„@çÔùRõsƒïMµPŸÓÏM†'HÔeuÕΗævš=ê–Ab12]ˆÃêo(®wiPÁ!„˜È9ÃjdÎøf~^R‰b ]Xåj A3Ø^:
+è<¥ïo"3 7 >çAß œC ¨UCNasö Ž©óírÁƒÁnøΰ9Ù#JQ±ˆÛñfÑßRÍèdâx/ø Ä<äC[½”´÷©j*LØÉ.“ÍŠ+¿J-Á²!çÁ^Aó¶,±E½°zÑ µšoïøâdÞ¿Bjª¢2oNçÄ
+ÈZO³—B˜¥àù½
+‰ÌPê󤺹Î9ÕžuÐlª8Ûnd ÞÙ )®õ©ûÁ·\Rìqiz7#v¸ÏÔf§(¸»à@æîFF›±èŸSûD3»ÏU2Ž‡‘(æªQÎ nT9ì¡vSâ<fPm”6?̡Ǜ԰~ÀW76h "ƒÜ]á Á’>J2°7†û«z n(YW:bQù[Í5TMº`§blà6r6éªíuLA
+ÅVñƒîqªyªçG¸7ùxÅY#­=¨®åÜ*X>äm¨*;Pä³@FþkG…Z}
+.0Jà 0alt dÄNw¿æY÷;zÃœ2
+L¶Ò©~e>§“7©rø©&ž¤3m³éýßf:4%>»íš¡ïÜGÜ¢DZ¬è9ÕÝÏkÅr„ú‹·ªÚ/@sÕå°®úN$óñró¼™Ñ©0¶‹E
+OŸ'ìf)Æ.×.ÔÃÆIo¤Ã¬· Å#;H&w›áŸ@q’\µ 
+Õi:=ÛMäwq(MžšKÏ'¥Âˆ¾Î"f¦hV>>æÑBâWÂÙkØvZÄ8/¬Èj‘𸦖oXT
+@(
+7PÆ'Ž"…/ý«{úð8«¿ý×ÿþîO½ýÄÿˆ(IýšÞÐpy¬åU'¸Pq¯XM…+j–RéÖ~þų4ê¿Ÿÿ‡ªÄ¨v óÔ*þÏ<¨í1NÈ+ˆ^‰!xeE?È9kgœí¯ÈQ±†î•äªWŽzé-ˆâÃ5m“þ³¡1ç“œW!jG·ú
+¹­ä¤“1DZd‚U?QŠÕ'ÀÍE,ë½¼Üa“¤Øy·¬£È¿°Î &€ñToÆ ÷Pú¨ƒ4BF8˜Œ¶óX1¼‡9éÃ혰xX’I«Q®Þ¦J:›Õ@üCΞ>ð:fXHŸ5]!ÍÄBC>SkK‘ÕS—ˆOèËÉåðŸo«¼*8EBÌÑMøúæÎV«FÏê÷ã}‘)qf*Hµïd+[ÃÔôƒ4·çw^PUñ˜Í=Oœ«%R.ÜŒRóm¡rŒ|Õ‡Ÿç‰ ´»üJØv0x Ž¬tÌsD£ˆ“à¶OB¨þ„Yœ³¦Ùd>Q›ñBÀe¦x÷Ôf,Z07˜ó™yI¾DÜzLœpÝþ~‹YŠ7¿•.ô’®ŸÅÑ´¶È§9Ã$Õ-Ú‘ÐöU}{~èðdã°&wJÿ‘¢ü„
+ïyãL-$¡ìéaf`
+¼Â!cËüûpª`¢ë„r¶ûÚËeG¤
+¯ÒË«òžK0,@@°k™¡–ŒÛò4Œæí‰/Nfýͳ2+÷ÎÌÊË9qÙfRå0¹£z®¬$·‘rm®;¥¸\á|"7z…yˆ½ûbK’ƒ„D¹zÉcy’¾ðúdY鉺ÊË”œ(8+\É%‚‹‹a>RŒ‹Û(Ëp³x0–ãz²Ñ9½Y·õòiøUÛ³0]®™LRÅŸ‹!WÁSgÎËkndMÝ–ð˜6Ç«fR‡oˆ¾s\I÷‚ç~6R¡¿.â߯څÄ[Þ™‚w˜È-¬ãÒ®)ôGªbÒâ’úÅeÀ®L›‰@Hä-˜(­u`¹&ÖÒãU.ÍEýRæÆôß|A‚5…›‡ÉÃ(æ~/¡ÆÇ•£1Ë$iª[êõ®‹4stZÀ F7Âmžzå.`{¡JÍã|…FÉ=Ùš“#‘\3\îB—}ñ¯E Þ:MÏ@TM°üYb»z ;%ž¹©ŽdqË6TC³Ç¬RæJR¸ã„qv\Içê:Õ‡¯åõæO§-k¿ŸŸ„ÛIH†)XuZòÑmÈÊeÈ€kÙp:?Öc ‰!'€ô+kzÅbg¢bu
+q%ÙôÅYeäb ϷΚƒ05ºf!›$WNí¯ûr
+ÀñU!ŽN©,2f þÄIô6Õo&ØÙÄ¥’}ÃBJ,•ñ¸+BL% Ìš¾™C²[pzSŽuÿð;^"nH\¢Ï¥›pB”+ˆ}ã:ºÏ¾‘[?^ ;@ʳˆ­[¹D \@̻Жpbh„”¢&?Iÿ‡Üá{?"ö¸È8²oYEÆýªTîxì<ⵧ-B[tĈs‡U¡º†KT[œ˜J
+µËkœK6âå„Z×°a¾ý±H@k¶k»
+/
+jd4dm”ç MeÜN#í¥˜–à!±K²„*óšæPà(gfÞ´|a
+OiæXÙ;ó¼Ú÷söÏ6q¿´€{¸. ;©×Ö–$Ô¶j>£Žºë¦y–K^òíiõ²FÜ— æ
+ÆIÝÎÅ3E‡D¹â{b ünY'×oívȲòˆåêTPI½ÑJ
+5 ð~®iyÆ°I…
+81„¤·ƒvçkáÚ
+{×j.¥ªf°ä£Yn¢RÌ“ E)‘Ž£5ŽWÔwrÿâöᄶŠ·š²‡¥Òa,¶vŠ3ý8cåãúžH¾ÌrºìOè;
+÷¤“ÛâIWA;Õ…·‘žÎ!#Bè¹t»PÈb™˜£[ŒÞ9 ‡°…"jÃU_ tôL@ŠóŸá©ö¼rRB ²1V¤‡êk%ÅïóòÎzƒ‹GõÐas‘v%‡¬|ªc&±`7™ƒaê³Ú ©¶2h±Ê)~®¦Þó…úèïRr%œ†/ÑÒïdæ¢>Î [ª5-÷ÊG„îmŠ{E˜h3bÄ¡yÖ‚–½ÂÃȘضÙ'd*h9—Ë×iG^¼'As‰Óeb—gλ³õ^GDªt)äÉÞ8Y±IçõþÊl!™ AŒHV–m¼¼”»¤Îæ³þ8ÐÌJí±Ãhùظ¦ŠªöÀŠ)eÆ7ü€ŸZö/  fG‘C™N¾Í¡ `Ò©­™c'BŽG ‹%
+s©jƒÑѧiÙ;¡6ã5…3hXÉš–ÎÔmœ…;P(YÀ´ð±A  ¯·€$Ô$qŽnc2¢Ø5|Z“4!úéHÑ¡þ¼/Ófò™«tˌڳ맧Õÿëwté[Ûà˜ûJTïE”7UÉÕ?ÂýË• µê
+éš•FJš‹'-¡‚•ºωz1µTçâ@+ Ö ¸èVlãü±Zìiècû\0>²¡fÎëu—y†OŒ¹D£Æ¶ϙ§/6ךéå®m&ý’´R'å÷ºl278ƒ4vQ)`ûµ1 Ú2I\Áyâ íV´4=eO3ÒÐÀ I4¥íÛwû*ÐB"(fr d/ˆW%žfpi†Á gsÛWÄyêœÃ„´)ómdY&ÔÐÁ‹_hk²ÿŸÏ‘ÏžL¶\fGÁë=žzhîââh¹¦˜˜K© ¥`ºËºH 4èâáùJ: þë¥ #†Á!Þ@ÖîJ@ƒ©bò¥f\œŽm\Ò@+ Ö ¸èVlãÂ?/œØt¢Ê¿1—¥“´Ò˜ Ä¦\\
+?÷gì¦ðs1‹
+?µÇF~uá\
+§ÅÂß5 …Ÿ›b qXL­káû¢Po“à°§VíþƇ‹Þdd±¥ãvKKï‰-@ÕÒï-h¥¥ƒÕÒ!‹pqK E+ j@¼ Æäì¡=àÃ6‹†©¶¦ž–jêPO=‚ËÔ#´0õˆ=õHáâ–ŠV@½M‚ÞJrÂîo|¸ØŽ*ÜvÒvR©°>¸Íq©åR&5NÝÓ»YO*Üg³ËzLhà8©àâ>| ­€Zƒà Xh%²Ñ„ƒôQiÏh-L]
+¨5‚…V"M8Ø ( ZÙ+ó„ˆÁÔ¨B\|
+
+õ¢ïMED¹qÀ5D@}g\.8¯BvsЊŠÎ·»£ßNž§Ïö—§7w?>¿ùx{{u³¯èéÕ§/{?zuu?ÕOÓòxg¦:ÓùýîèŽ,g=ýÿäO/èé+a÷“›^NïÞ›é’~qþ»È)6ÖéÓç4•üágë~…¶_ŸmøÙ³€×ÿì€Z3½ÜÕúÖVKí-e•ô™ÙYÀk뎳Š3ÝÛ ÇÐ#¦ƒ£›4)a›æI+¨ t™ã°˜Žn PIXÔ
+)„µñà =† ö®ÍÀ/ZÇÚ6òší]0bÂÝ$펡´7”©fóFZ•E­BXÕ_’É›Ì]Aœuæ®-Ã.*sø
+f7©ÓU²¤öÊ¡tZ'Õ”Ý
+.>-8&´½[mRè«ì¦G0¿íÐ#H CP÷Á¥˜wZ,û]ÃÐ#¶ÚW/úH]ÆÄÍ­¢ÂꦰNåª
+`ÇkEvg}­hc±VPÁñZ‹ûUiÔÁB+‘&¦-öq­…á¿ €[‚(EÃB¼{€¬Ý-T€ÖÂô‹û5iÔÁB+‘&ìÆ&#µ²W.
+ @àâ°Šc @Ù+7
+H+ Ö 8Z‰l4á™+ç!óŠvS:Ž'Akç4€Ä}ËBf®%-“¦¥¯Ó¤¬ÐP`a;ãŠP@ývÁAªBP–·ýDhsåƒ9ë A ñîÒVÏP˜+§¶S®Ôo¤
+)µqà0ƒG; ƒ±ý좆~ÊQ-€*4ÀÅ m~0¶Ÿ[XØη"P¿]p*¤ÔÆbìÛÝÑo'ÏÓ‡gûËÓ›»Ÿß|¼½½ºÙWôôêÓ—½Æ½Ýï?^_]NññÎL'´5Óùýîènýg&ËûAç?ùÓ zúJØý䦗ӻ÷fº¤ÿNâ)²DéïæÉ~2ó¼nÊBÚiŠˆŸ¸§ËSˆGž_ᳯ:_¯95›ä-ŸÇH ÐωÄ>~°å„ÒÃl}Èëã’YJT¤±1gÂÑX½â4ÒlXÀêb¸N¯ 7ÙÐâzÚ‚qu±[Ò6Ô7ž•A•¾¢Weçø«pÒÝpçí\ðÄ?.`X(IË{cn _LãÒÒÅЫ¢¯/µt”+FáÔsÌ´TÊË«²Í@@H®’i¡g¢­~­ ¬¤Ö¡™ó»Z7/u)‰ŠUÁ\!ºTß…Ÿ'ï|uÆû¦ÕÄ:ZTÕöÀ÷0À/¾éwK_ëc%†MxÚö'pÁ'éëWóL÷•ë†ÏdvÅCÝhFcÛµR
+Eû}èˆ&•÷¥cgÛfº_´÷¥žœŒÛ©bóROQÎõm [AnjO;AŒ}q]ê¸SNkÚï¢-óhS(B$C¯;ÞÐÄ%±@‹· ̾¦xF`.6·Å¹á¡zD`,iM ËnzPÁßÙ(ïR ÒÚVjV<,m«¨ý×q5»i1+üóÝr™¦òŸBßë!á.ÖƒÊWÞŠõ¢áRÙ-—è.èëBçš#¼Öέ„Ù5‚ Ñu0µSŽ§ŸñVr¼±}m+pÞ†0=BÎÓa¨ÙL)ãIÅuÇ ·¹Zêù ‡ºÙ–Ç`H•$Q§k ·5=’®ªÞ¾±Jï([òdSç·¦å;E·ºÂàlCÝG.nt¾ícîV1Þ3ÞÆèëb\­´K­iéa¨"v†¶µ¡l|[ÜÎEæy0
+Ì%š
+É’ƒ¤R˜c=ø‹½§î:rˆZÜK+Ù#±lp¢~«š”ÿKxµ+Wvð_Ù:ÅŽDR¯z[×™Ù:µËü@‰ Î]_OJü<Eà­)p·Å·ÃZ|3%Ö$Þk®øžÒ-/`»I_OÀÃM
+š¹ÖÉãMôV‰.këimd¶xšf¾FXâilű_@¥¿ùbÇŸ
+×sʨÕÈCŽcä‰ýõ (àbkí,sôÆ£Åçö$½=Cö¶›$ŒSÇ[¾*j$G‚Í «¥mðæ³ÀZÌ’O#5moCÔíRÏ9
+^Ž±üýŸ–íõÖŸïàC³€°¿¿³ôîŠ~¹Úñ¥ä7+YæBMD9çwµ®ÃŽ(Tã­=Ÿ‰ƒG£Øzž`Y ÖÆ)ˆƒ£PùáÙuŽ‹28ZtºÔ1­óøõ ÷x
+Jêd±©´RÀ±»Q1 ¥ú >{TØ·6‹;(–9k}Íœ0 nÌoü'q: g¿¹oä`Köó¡;`ÓLÞÒN;.«åñ2X’iç«©ƒTãsΗ‘Yyã`L—ÿ·—¸÷_ÁÆミ‰—+lÇ ì‹:²7‹
+Ø-rø¿í9ø¦°µõ1Žß:óu ~ÿOì3ïßû‹ý{ìŒ?èaî0<ŸÄ!_•øœ?h–·:Lâ ö±8§ƒ#¹P ‹b÷²­»ÇÖ!Y–X‘_ª\Gý÷£š y:`ó+œoéqj
+yIJ¥§gÅiV —|‘Î.j³ÉÛgÊR+‡üPï#Rîçùãš
+þÊve­Ã‹ã¬…ÛJ õg€³Y´ú¿#Ã8»edu•bdëÛ(Ày ©‹ZarbÊ÷ÉãnåŒ ½GóBb¿‚­ÉÍË-hs~@í—Ý&뀸MÜKÚý=ŠÄg¡ààT‹z±;ŠIÙ\Ýåäq‚Å7DȽšåÜl÷õššÀƒaAZÀL,…ËN›ö-Œ :WÜû‡OÊã-q9I5­™¡u²mÓ’Z*> @4PLg”Çmåäø¶š°%¥x·Át¾Å•6L\»v^n¸ *3tØ|oã7;VŽXÕhûÉí²¹"þâÏU“AÌ,B»ð ۼćZFzf©§’ÞœQ^¤uÛq>g“`é¥>ÀÌPJ>îÆ«)4ß"Éä5õÉm…­*[à±3³<F Ë‘O€è#i¶Ê ·I|F#CEµÆ`¿GŸÀ äKùÄÁtsí[AÛk¤•ƒn|$®\ÐÆI ¬OÚ¾%ÛÕìÀ¬5æ#±¬¨ÃwYKÖ`¤ xÄ[×ÖEõß[HD®N•Rí7C©$ÞØig½kÖð\'ƒK^jbͱ¨[!ÙS Uÿ ®•<½êaùê„ÅJTfî¾KÐcúèEæJ¾¤൰{;jUè„ÇÓ³¯Ìj¸uiTF£×Îá›9«þìznר*¶Inrë¦ÐÞnÀ¡D°hMÿ¶›²
+Xh*³f[צÄñŠ,ÉáÝ–xY£aiºh2œ@ûµ›£¦<»&ÞÒ\.÷Ûמ~c[MhŒæ!ÏQù|à÷E°Pcz²à:òUסËZ*9C66X(X
+"CYN’ì84Fœ ø¥×9Ž…A’uövS~²Opasý‡8 Páïsøµî-Àã¨08™$£øï•}µé{lãòñsÐî˜JP|p'£/—2ÓI‰*Å!Ó¡tìà ú(Z-´!Å-W&ÞæËAW!ËŸÎ.Ý_udÕónð©h«ÌHP’Y›®É¹Ì"?Å8–6ŽdcÇ&ɱ "¸Ÿ-œ'Hãi=í7púØEØ´¥ÀœfðO¥E]úH€'ë‹Ýƒij9Û?¦|NÐ)O†gcÍV&–ÆÄëøˆÒÜ=Ä^¹©ã€”õ‹ä¸ž=Îô"ק]wët˜ªÀŒ NiñôN'9…ŽÂxRñ-XrŒ7-:¨pËôµ-6ÞƒÃ7ñÙ&c‹Ð³G@tw5™é¶cw ž…;hiÁ»ÛÀjaçYòœ'È…Z_*l`MïW™
+W­ ¯™+Âß’ÓâŽYR—réð×AÍVg| nzÑnÙ9U£<PÆ ˜Ò•Jt˜’cÖÒ!Oøø½Á¤ñÉ(!
+$$
+6µˆ…­¡B¶®öšîýž@|Wcçñ¸îÖh§{gÍ‹ ÏŸîΕï·Œ‡: X¥ÐYš·sd¨ý®õ•ÁÓøå°Ò^:ÄúÍ°ÙþáØëÒ…“z´  ,eÁÝúg­‰‡FxðøRD^sØî¨p®ÒêÀÀþ8 ý'X‚20·ÆR‡@ZqF°˜0C°Ô Ë)@A`]
+endstream endobj 23 0 obj <</Filter[/FlateDecode]/Length 9026>>stream
+H‰lW;Ž%7 Ì øs?ˆâGR¼éÄûþwp©Å¢zw jøª)~Šä—5Ÿaf_?þüã/±>²¤=x¨Ê×7qía7—uñ¦¢Ä§~mp~Æh~@™AÐ%æµÍàa¬!ÉÝÈ<ñSM\—ÄÅmѾûËzüdóüdŸiÀ£E]8§¼üèâi¼dõÇx|¦5¡qŒý¨ó¼06>Þøïàè_ÓØMÒ53pÏKù¹ &£¯4tŸ÷k"‘™jÃùµ.3àø0ö;O„íE
+î3ÕƹËì7DΖƒ>¼šNFÌNEÉÇ&ErŒ3Ö¼¡ÀkØv®'€SœûJÚö©ìÎ#¶ð×™¶;ã5llkú‰8ò‹âL㥋…¾'Ð?e\K–è‘Z€v—?9³ `Gá廚ܯõ¥µ E/Û.Ÿ‘ó÷XI† Ýí5ƒ:¹åíµöì=°,I÷Ú€NüŒ*éi ñ`l÷ªÃ9G~-”›ÕØ€êÓÒÖ¥V©q4
+¥»Î@JgÄ{Üm{È%hk¦Ú 9?žXöôL×ÿ'8«¦³@Ÿ)ñªΫØ[ü7ëc‰…ãu—íšnÆÅÈm^kŠHÕù¤<ºÕ¢Ü•—7¶eìCî€C4=°¸¡\ûbÌ~5ÍïÅŒ—þ 6›ŒÍ˃e|‚¿<·ÖþJ‹å9Û½÷,_XjœÕ@[\‚/nvâÐs­ÚctŒÜ ãR1„ó8íûŒÍ¡„×i¯ëè
+cð‹’· 6' F¸g·Aïmð!z«ø*vçMw…n$6’}`Óv"³ .j­ïK–Ÿâ}ó\²ÿƒð¶àr¸G7 pÐLº^¬o„IV¹§æÄ|¦€ö½’¹dn/jiYâ`óͬumv®Ø n¿Yù†f`¿Íå—ëÆÎhc2´—cCèW©ý¼K`E;@HÔ`Y’
+ÿ6ίWsaðÏË€)“8”¬§±OaÈZæxÕ²øS†F«½{;¬–ÆŠj?ŽÁR±‘r3¨C¸Çj§i7­éze】îçØ,Œë™ÆãTê¸çŸ±™ ÒÓÛg©¹ ‹IbÏ+ƈ0èóž +kç t2È6ÉÏ=óñ›8#T“bF_”Äô‘ ­,_Ä®LíE«ˆyë·™#o«Âz:üœ Å É y®Ii){õ¶\ ûrgñ \˜^mÄø챦Ë,ÐvŸf‚š^VuÆ£Œgç#<Û×ìdWÛ‘E9
+Ke"è²CoÕæŸÈƒðéÝ¿[*.Æ ¤Ã‡k%Õ€÷jËé$à˜3oÁÍë‰U›‰½öó„yå{"ÁIªy`‚Nðá('®É` ö‚ÓÌuäCµw¤+³x·-ã0šš‰¹|pÔ Ë.½x#×+ï0 ¡sì]9PØøò®E |·"“ÔÝÖ†»M ¾ËÄôÉf?œ¶Ä‰²Q%vã_2€®4 ½eçdz]éŸg->÷¼ü~òûÜ°ÀlÐÏ^©PŸ÷­ùù}·
+ÂþT‚Áô•d2µ3Êõ Œ-*o.-iÕê‘2I£:Ä›<Çóh¶ÉÉRò–[Úò}~#(gË}2BIÇ}òå
+JP7ôö©¶ZrëÝÂ8pº*Â3†Öç'Â=’Ë,„›uÌ÷¼¤m¸RíÐuÐ(7vˆƒ9P*–î´à»ÄzwŠë2æÛ&z€ksîØ„¶j1¸£;ä.fÉ\–Hž}í»F4ºƒlÆâ[åÝ<וY¯€¢«ñóãûôõ„ÌRä]s²F—¸Ó(88Šx?O»‹¨Ýø÷ÚþtÒ©äó±PŸ½Ï'@gw ] °:Íѵ…žÉÑÏ1ŸŒ¾œ"ërVë*â;di<#¨Ðvr·hyRàÒùækŽ‘ykt£:Sw-H§©¥_üGÄÒ<¬ƒÖoÎÉ°Û¨ë/#g×||RØRïHÕÚ‹åèŠ|ãýÞñG„XÅi8¶å>‚ƒÐ:.¤©g»›k–éÉÀÝ%R&¶Ä”‡³˜k0ê[™³V©ãÔEn>VÏëí´k9<]è¦:·ã=\Ã:pòr®¸d¬¼$†Dt›M›øò"CîQ‘7ãpÇÖtðäÖ¼íà]+›
+‚–€÷jcg_â:ŽýémøÔÊYö c¶Ÿ7À6aäí„SÓVÆ’îÌm]¡ŒE²â®¹Ó—FŒ•+ËïÙ4 nxu$™Å~h¯:¾H­Ò?3uªÉ£ñrlžúpÓïXüï“:aø6pµ^ЃÖ[¼Y“Xß 9B{ ytp.)kï5œÎ¢×cAÒ@Ó&.#‡ò±?RÅÁµ(‰Áw%¶½«+À)ž.˜25ïÀâ@±ÈŠóïûv´ÓÖê½Cœù‘Ž¶qp~”yë«‚Üýù4b€Û„Ê£QA;Ťä[c÷ËüPÀ½—»¯ÔAï:yÒjl?l«%{òðÚÆúLI°ê`g¼ïÏd¯
+38?krÅv§í
+OUr£
+ÈÚ›7{j—‚œCµrµãÍ×hÜn¾bT)IméÅ…„sxxx–$MBu°Vÿ>ŸïÇ&‡ø„þÛbíÁ«È“”p ﶇÍùÈ,±|x˜Lè„ŸˆqWíVÀ°ÜLIçCJ¯M9+¡ù,Å(ns¼í´Xä
+;zÝÁÆ.éR2ØñÁ§ë¾ê<,¼D£zÚ[óàÀr{ÖYöyÎÌìÀ’ØaŒDÀ_•‡ä;¡[aJsÀG¨€gpQ@ƒ’gÛ¡Ì¡”4`ßœåÕ-AlÁkl3‚þŒÁ^Á2œy¸Í²e^®l¯Ößë#@éÍ
+àå\ÜŽå¸YÝî7HéÃ4åÝliíù:qÕ•Ày7®…ŸLxÿž¿IW½üO(„™gçLLÖÌäN/Ëåø˜ü?Y 0NO¯A›7Á{]¡YyäRžíÒ/x Ò²³Ì:o¡1û~r
+ÿMË€Ü6ŒñËOö«å˜{݆&¸ÇÈÔÀ#Ÿ†ÏsB$˜;)ŒžØбx°Í`xÓEÿ²_mËm#GôÝUþ¾¸ÊN­b`0ƒvŸ$ËV\¡/UÜ[žT9°lÉ?“É¥çÒ¢ÌÁ&H[µ[Úf£§ÏL÷éÓ¡‡ÝAbâ…50!žÙù 5¥&¦kIMr5ž,òý– ðåcš:6¡}óìr¹
+5GlßãøÄF÷IÁ¿Æ“ 6Fœ/2‡Ø6…6Ô$Á ×rŒ "11o ÆXSxF]VšÊ”ŸéY©mbLy\Ê•¶PÛI
+ô7ÎÔ\1FfKL¥e#açÊ0¨+|O¯`$¦%±t ŠÜR̸z–›bª¯À“z/‹ZÑvÆñj¢Èô$8û!1ßÓ*{/ ±œy @GŽŽP´¡6ªœÿñøÑõãGþä…nËÔTŽÐå.»Ý¤ºÆˆì0ÆE†zXÕÔt·ÚÅð†(ó1®\Òô;·,ÈŽ3¸°[(^(”'fÓĤrŽ.ÑÎ}œ%Ô7X 6 åh4¨¡°{¢ô´;¬’‰º5Y*_j| ñmÔ°5Ú¾—ÎÖ!‰1
+ÄPIÐ8Ä»ÊÇÝ–Ñî"j#€(Ãѳ‚t®@~uɤVî¬a1:Çîl> j }¯5¢>UÓªÜ?Ž ðf¾Ýp·îA_Ñ_~yüÈÃZ¿·°.­ êŠ˜]nI„Ê8Ô#@iŒ› ·£P9s `—ÅÀc(¹±”^‰•r@Û:3Mhò4»A>´òÇ·[
+±ÇÙM‹¶ 6o‹ †8(Q«¢C˜Kk§­NÔ"F{‡¸rYÊF(.a‘Ú•Ñ·2Z'¼mlCŽEjhmAèMv¦j[‡¡a^Cj1n^Y™#cŽ¬F”æ(B~–#lº;Êo‰…b#¶œ´±ms½Ú(#lj Ç34‚01Mîá•(sÀÐWi:€ŒŠA·2°OÈ`¿¢¡åj“£Ð*(HTšS´‡>ž\ݸ4Fóó•´Û¹=4€= gd;D”q Q'°+®e8e”ÔœhoDšck&m
+ºÇŸìÌÀ&yú.Ò€X¶v‚×SªwÓÙ‹ãx²í + ¦'픣¼Ô#CÃŽ«1qJw~¿™™}ï V¿è?¼QÀìĈ=©i~­q÷…‚êŒ6&¾Šiu+¨ :Ù™€½PªD
+åS£Š¨Ì»ª}nÚÚqiQ#Xê°àøh´ìÛš8÷œvRÙú¢Í…àʪ–Ä6†²]Ù‘[q¥…Æî\ì¡!çVà‡rncÌ+ò5ó‚x²3n{d Ê›XÉhY\Úí2Æèù©µËeEÛõ3«Èøz¼îˆÛÒ¤kÝ¥t\¢Ý ›i`œÈn±!ìOèãîó¥¤9õMm‡‘Ú>ôqÈ[žd²3·6m"Ûç¯×¦-e-±Ãšà¡Lj`œ×¾d_ô†ÑC\F úyÁèù Yä|äÝ¢
+äFb¥À±mL[=Òîó°S(Óâ´$Ê¡DuJ¬ƒ r‰<£e¬Jª«å%ßOˆcˆHG¿†A€d v¬†¦˜,˜ýÀ3‘"âcôp4nn^ S€š 1³ZìóL)ðXëU02çÐS$;”o©nãìcÖ7éÉ°˜Il8õ~­â…æå‘ B©g%oÛé Ä#¨m=@JÐ_Vðô8úÖa‡Š'OŸM~ÿíÞßON_G—/‹ÅYÕ¬Ó÷I]‹ªPV&­—oËâ}•uVÜœœû™¸ÉŠî/½]©ß|Oÿ8ûõâU–C¨ÇžÛ¿'?Âÿýþfú¶\õ÷y6¯³²Hª»=?ý4yz»Ì øñ¬²«¦ëg“Àñ´ª’mŸyšå‹JʃLž¿.êöGùŸún%ÔO}ê=y6yþK‘ÍÁ>ƒØÅͦïÇ$oŒs*²›´þ²{‘,µ7äƒþ?¸OÙ¢Nݱ÷¡ ¾¾<½º×y2Okñ÷¤¨Å›¬žÍSYÀÅ¥ï ;[€ë>°Òi(¤'¤Ç#Þ¹?àÝ‘@ºu‡tkÿØ—÷¡Ñu¾Žu½8³D¦å~3›_ õîWyS9­ÄºÉ{-únV6Õ\œæ«4q'ŸO˜ÎÕý
+ª,­wÍžZgÅ5+¡a„œoå³û¥|î¡Oü^ zèÓåé 냩‡B½\è¼/³¢žJ¢í#v¾V633a§†ùY€íc±ðr%ª¤.Ý—ÒÎCõĬlª¹8ÍWiÒƒØIf'ã<>|G¶¾½(—«r½W.6¸op÷ב¾CUû ý@{ ¢GhÏsn ò‡CÔ£êzù‡¹<©²:]Š:›Ó¹?¥Ë0γú}2õ›ÆZK]TÉ*íQ¤ßùLvÁrh#½¼¾^‹ú,oö0Ëñ¾òQÝy¯Ç¬¼zÎ÷ðH_5™H$Ëká>🟋ëÉOðX³_/^©O‘o|Ï{â\Ä©ÈnÒSýSª}À}ÊuêŽÍ¸­¼úCÌë³²)æYyëŒS—1øÖkw´ …ùôõåi¾J“K÷ $[<ÛÝ×|»p=t/Ð;÷çº;
+@{j¶ èÖy"ÁÖMuÕ䢘ï™`{Ñ»^=jx{6Ī¢Y¾›×ÉGуvºß VÐõ˜3È«d-^U⟠<x~Ýúl(¨E9«³z¾g
+vகûÏYÞçQ7>
+ªlKg˜•X7y݃þ‹øŸ©ç°W­}›Sr¹UR—î½óÅQbVìáÛÍ5’ kV6Õ\\TÉ*Íæ=ðõ7xƒ½(—«rÕãrz
+J÷›¨’EÖô˜Ëè?e,²<Ù×JGNöß+¾)«UZæå»
+Â&²¥Çh–ç†ÙzÒ4ËFB$YAÄIF$:¸î_ªJ8Ð…­¹2;§RH};„Î?Ÿ­/IE(·«ÛÁ&k­Ĭf¹¯Ñl “U]dçî¾ј]—|·h¥bšØ®^¶´¯ˆÐµy9Ä8Û0JÈÄÅ$’lb
+’Éç»”…òN.”4ÜÂ]9@±¼„¿Õð<w¦¢.%%‽*ô5“ÏEg³Z¼‚?¶Zp8 mÜ—u¾há]+à”LÀ<(òÅxÏNç„2$äa•/ÊÍJÖg•Í'g€Ø¦ÈüBó›OðŽ0Qýª
+¾1­o²{%ò‡/œ-à|»_t¹u¼DÄ›è¾ò&¡<Ô˜Pwºçi4äa“(>FÎ4ŠQ'ˆÆÍוÞD
+Žù¢Ìi)§–[Z€qM³ü‘ LOŠ|¡>:=s¢Únø±Œ-<N¥Ó”%( ] Û$¤ú»ešöp6Ø|Þú¶»fo¾"´f»Þÿ¸ª6”ˆwöW€
+endstream endobj 24 0 obj <</Filter[/FlateDecode]/Length 3723>>stream
+H‰ìWQoÛÈ~/ÐÿÀ—àKJÔª'˪ 'û¹Á½+r(mn¹Ë[.eé~[ßúǺ¢$‡Œï̵îpÃHLY3Ò~ûÍ|óIàL›VB•ð*úþÏúÎBQ*÷*:ÿ§–±kæ¬Ô‹è»u¦¶‘U¸Ù.z=ÄûWç?O¼ñoGóÏ;i´°›íËÑ—Îâ¼tPì’.¬_ÇÄK© ºŠDçïµkžÀmòýyïJ;/èž>s ¢ÔxxRžŽ>ÿ©óGç-‡MáÒ(c§Â‡­Ñç~š ¢Þ¢ù)\2•Ûcá™jfq•ãX•ÖBr¡ò¥@­çf¦´1Ð0Öt×¢,
+)ô–Ï»îlˆf(ÙàÚÆrUß^I¼bV±\nÓ´
+²3C kì;1'\Ê.{-ß‚lõ𸶷ðqûº À«'1‹ÑU©ã!«ÐéÖáëwQ/ú¶*ñú¥;Y‰ýoMÇ”B|ÖýLƒvwVèÂ;­»£ÍÕ›¬p·–ÁÕ"3SÚ¼[Ì—2&xÅ–U®i¼‹ÙãIÛý£všÀöÏJV
+éð㧃r2»€ ¥þ•âzvd¿VÊUlï¶ ãº:L"•#X…ó ¤ÑÈ“5ûx}U¥v±œûo{AñäbIhõC<×Ðé÷ àîeâ–xlûp.hfþb76¥Nü1Çfƹ+cëkD#‰ óÅûOÿø÷¿–
+ÆVéM^ý~o747áÃuFéÁ ž´ #¤!QKéÖ­ƒµ ý×- IÝQ‰D–„æ<Äs‘H%ÚLoà[¨8ÙÅlçe/T¾Äc<ÂÌvœµjF`%üöÜØ|i”Yà§AWÍM Zç'«‰§§„x®^”e@󓀄q˜÷OVÍŠ<àÉ
+LnÓ´
+—L`%ÅöX„} ‘ÅV†ÃÓ B‡…"x¶žI4ºÖ¥©ø­Å¥ÔÕI*…¿—]4ÙÚh<0ÇeV*ᎭžÃÒBe®ñ8“D:¹¢ |ÈਤѲÕ ÆBÅSÿ'<Ä/\ñ#°Îåá 74¡Í4.ÈÖՠ4)[د낹@ u/6x`~Ä;aiž`—À¶'âÁÍaAñûp¶rDãrjË…oÀSk2ÂT¯¢Y—$¡eFÕß?×AR¸eQH¡ÇŠ R\×Î~ÀËñ† Æ¾ˆñÜnvr«¬gZÍžK!nÓ´
+—L`%ÅöX„} ‘ÅV†ÃÓ B‡…"x¶kQ…z¬J¼YüïièšèP¦×,'ÁS° ØÞgÈ3aþBO—é/ìÔØyÖÃtà R9ÀÏŠó ¤ÑÈ“5ûx}U¥vQÿ‡½hˆßPwWð²¤ÖR¸LŒ™†ØM©Ô±iÙáõ±ŽŒxŸÄ…ùâý§ŸäT‘KPŸð«Eåâþ‡ö­kõn!3«1i€"1¯ø(—:Tú²Ãóƒp‚®§pÕFã!Š8.³R‰¶[©c¬çpô÷¬DLÀ™$ÒɶÒn |ÈàÂXäJ¨Œ…Š§ORËà‚ˆœ˜u"¸©€ Ùl¦qáí÷ðHŠî$œŠ#Ô½ØàY(œ°Ž"ªû.€Öæ° ,3ûp¶zŒú£A/êýÿ½Èÿùgÿ{ä߈И«G‚<ijnqBËŒ2öž¦ˆ…½wh†
+—L`%ÅöXxžšY\5:WmBØÔ–RѤ¥Šç73¥áBåK_BrŠ ‰¸j³Â‚Â/XÏ£)\‹²(¤ÐãVŒÝ–¶Zª69Xá Á”|Éàm¯k+ò¥Œ 6 tØ€_l²Ü~§½-[D/`¤é]9uäò@`È"ÒG³óË<;ÛX6ÃGô–€èmˆZèl ê3î.xD9ÿ…QÍ…•n™#Œªp‡2Õó†8’ñ%ÚL>Êx|㳃¥k£ý¸jŒè)Øl¯–Bô³¦‘Ê~¬œO Fž¬ÙÇë«*µ‹Õ<ìEC¼Ú]Á‡íwc‹¹–Â¥Ìfþb76¥NüQÇfMÄëcñ>‰ óÅûO?É5¨"— >µ8…ºN%¯~¿• ªkõn!3«1i€"1¯ø(—:TêÖéÜðX97) f¹–ÂT‡(â¸ÌJ%ž¥‘ÃÒß³1g’H'ÛJ»ò!ƒ £’DKíÕ ÆBÅSŠ'©epADNÌ:‘‡ÜT@Ðl6Ó¸ðö{x¤ EwNÅê^lðÀü*ê„¥í®».€Öæ° ,3ûp.`•¿ zÑ 7¢yÝê‘`ûñ¬››Ð2£Œº§iaaìš¡Â%XI±=ž§fW]ÎU›ø5õ¤T49©â¹ÀÍLic¸PùRà…œ‚B"®Ú¦° ðKÕóhG
+×¢,
+)ô¸c·%¤· 2MË.öXZìQ"W=n@)s¬äbé|ÀYl”!د¯óØü%Q4g~ ¸èF›gÁOÀÒ¦~I$‚lfq¡ÜwÐÉAÚ dúQI{¦صc!3+ü­¤R)ü½ì¢¹—:TjÙ¶T4:5á&QOáªÆCq\f¥¢¬Z.þž•—~<Î$‘N¶•våCF%5¼ôú)OýŸð¿dðAÄ»¸:›‡SÜThД6Óج߰ÀûzŠø$œ²#Ô½ØàyWã„¥Ù ]ÀÜ#´çݼF  GÞíÁÈÏJ¹0£•4
+ÜÈB22Vè^n«Ç–ûªßÀ!i›þgÿ)œÑy›ªh™QáÓ|±Pùך"PþÕöPx–j)lÚù¡øMf¥[æÃ!µ S˜H/uÚý¸Ž”j|¾óTËÒûarƒôñåSä{—k/®èÀ×ÑãL>«A†û÷uîˆcà~ÉäÛ
+4^Šõ¬£ý:/jK›úeiæý>Á-7³¸`Šë¶l©È¦·,ÍZVñ\½çÂï>c¹w•˜“wM¨-df…7œ©T
+/»h.º½»†TjÙf5ÿ‡ýjÙm‚¿’K9‰7 “]£F€¤)` Wƒ×šD*~})? u£ÝÁŠŽo¶Á58œÝ™Y~DYk%\@M°|ZKÓr&À5|ž“ë “xœR*¯ÚZ»òOF­ ¼DÇHoÂOxˆ/|ñq ÎæößWhД6Ëø2„C#•ñ‘œ²#ô£xÆ îïEA‹ ë.€§xp3XPÃæ8£3ª…M€IžAkû˜„pɃ²|ò}b ax¹]}ly¯ú lÏ#cÓ¿pö^ÃytÒ¦*F-)Fø:_,T^œ¢)¾U—³T+aÓÎK<BñK-KŸüa[Àj‡øDvÉ<\s© àÆ_·clÎØ{Ýg²Ùq¯7$æ¹os›p›C!|[ت÷ÎK×\LlY¤0Ðy&ðÓaÎãQæBç6x[âg?¤¡RÓÒÓê|L)j“Ÿ8õí«]æÖ©¸Þ]ïÏñìTgÙb;QŸ€¨Ï˜ðˆZŽ6õ¢àˆ ê÷Œš.
+å³%x•îµ1K5Ÿ—¿ÆcÊZùB™ýuäu¦"ÏMzðäNëýÁ“»(O&tÝÁ“»äÉo[µbóe|{ÆfÌääñÁ=ƒ¥k–NïâÈH¾bÕ³RH~×Ëtà"J{À[ÉÉæGI kòsümUÚÅN¶³;HýЖF0Cû„îèõs„³Þá[»QĥЃ«é$ÍŸ‚™&Xïn‘ÆèJôèv­ZDí%œ—#xP¢ºžúf÷3]¶ŒpÄÑcbË"…Î3±¯Æ4¥sJ˜a+è
+endstream endobj 25 0 obj <</Filter[/FlateDecode]/Length 12564>>stream
+H‰ìW[oÛ¸~/ÿÀ—
+]¼²”Ŀ漜²ì )R[¶äÝt•ìMMŠœÎǹp&Œ\Ò áçÑöSrŒ>¼;rŸÑà6ôX'±Þ££çÀihåGÄha6¸»¼¸‚-ôÌO<'ñ¢ÐŽ—ôócÁl' mš&d‘1 ãØ^¥q<ßIÈ(d48“êéÉrÎõŒf³IF~ÇÄúó{»Þ%ˆ1Y¤~Ò¦ ï
+ê@¶ç…íy¡˜ýiÍ¥mš£Aƒ²3rÍÌØZå¿n‚-ìoÍߘ©/I|Oèý¾µ;1×8Jc‡œÅöüÁsö–*Yê‡*ó
+ñü„4¤á’ƒ2CÁXãogŸë«L>ÓïÄIFQº
+þNå„ß±½Ð%3j™öðb2'vr’¶/#Ë,Ý¥Û°=DÛqÒ õí¦[)c,ótîÙ·pº®—xM®]A™st…Ñ÷Bb7ø^ ¢cûÎe´CXâè
+â…MÙ˜B‰+¦µE«l]aÖŠšPw—Ôãv™tlÿÉ^¶ÅLbÇ»U?CwåºÑ¾ÓŠvè³¢·Ñ‚Ìâ(Øá©gÔ-‹ MÊKÛ”Gƒ¦$zÁ.ÏÚ‡¥ÈŒ|MãiêCŠÛI›×V6Uõ%ÈÑœÄví¼
+Ž®‚a¥±C†þüÁÞ¡Ñiè ªŽü6ZÝ»·î¢|F>EÁ<Z4–õK¤{~BÚ;ýà„ÌÐG¸£ñ·³ÏŒõ5¶„Ƈ­}çx÷;<낾«°Ø Ü“ç&í±qò® EÓïÄIFQº æ(znÿÔ3_Ú¤¡ «¼øe¦®0Ï'ßHüäÅSâ§áýDiŸôÜãúð®d;·ÃZ­½Ÿ64ReDË7¨ÁuË€ž[¿G¯-Ï&-‹ÄrŸÁ˜[wâ¨Nà™­Q…ipí$ö#Ù!û”yºë¦pûvjj/Èç˜üž‚Áwˆ×¶® †Ñ8ñ§á1,Á]0ò¯ž¿‹Q+L]A¥aÙfL©¿Cù#è;.¡÷ýé¾?í¸?Ý)Ìöê¾CÝw¨5àöê[ëPÛWŒûõúWt¨³Ø†Ë¿Š¼Å?³GUÿ=j{Œûuߢî[Ô}‹ºoQ÷-êëoQ‡çžœ†nÞª²5.M®¢ð HI@P¯Ç×GäÞ Ë;ï®æ™5Û/ƒiäƒJ#âz$œߌß#ü—„=˜Ú~2óÿøŸó@®A猆ï0º{:x—Š¿÷)½‘º~M$„Ù¿»%ýúfßaí ©èýúFî„înèh¤÷1ƪ…z
+à‹ŽïzùÄèëš!+ô“þÑO]ÖØ\GŸ€ÀB:#´P¾'xE©èpQÆ>9ý,æL(c¼`£Ø)\Rhg€75 ƒÑ—°¦lTŒn˜LU:f˜ÄN¯ ï™ÙÙ0f‡Ó Ý”5å,ÙnÏÌ@õÌ H¾Wb1ù™ÙýŒ¦ÔHG·!õ,ÝÇ6µx‚”cf«žEí–YNüŽÀ<=LÁb,¡že †12,,T(e©žR™N[™£v2±Ìd2+ŒFàŒ·Ôl¸o”œ]TyUÕ=f‚âšÅ¥õø­•ÆÜN%ë­¶:t3·1—*,]Ò ¤˜0ó&ËÉí-¢àF+w'ÁÝIÖªå`¥–R1×,·Yæ¨L¬T-Ç wtŒîþCñ!Sá¾na›À«YšŒ©]5Í2à"aKÓL‰Näüÿ½ž~h¢‘û¦lJ
+Rû²ªH,L{t.ëÔýø&µ2[ !Û”X–SØRÀ†tiUÜq8G,©>Õ‡“#¸ÃÔË<.Þ…Ñhè8ip%6%fyþpBSü„kFÅŠc‚âÄ:Åê
+$™JBgÈ‚T:Q9VµŒýO'[´Õ›1ãfÌz3f­Š9ÍPJÙC'ÙDO¤mÈu«€®ÖCgÕ¦š@VMT¢²#«ç:˨ž¯˜6eIæˆ0Ç!F¹ NOb™qgDåRBYAflG¶…µ¡Æj¡°”·º*C¨üU|z•BÁíñé øá•’ðJI8£Rš¼ WâŠWÕ Yª†+N¹ÂQƒHæ€dŽsb|YŸÄ£ oŠ2¼1Ê6 Ò8"#vãKú nŒ1¼)ÆpcŒÕáÃÜeîf2÷;\Œ/ç~ب˜K]Ù0×Q ŽQ-Ç:9Ã"gPp†€/êy+PŒêF]$­@1š h”¬½AÜ|xA—[RŠ‡ IM­ YeY…ÂRYÀF‰WbdpDª{S7ÙEÝdu“]ÔZ0ÌÅ´Ì›´Ì·1¼¬‹©›¢EÝ-ê¦h©‡¢ePx­ËÁ‡—t±l“ÛR›ô>¥ŸðöÄd‚û–„œéØ—àH úÖ@H¬=ÉÊ (1òH+ªEI4(T:{à‚âAË8)eNÿþ–ž’5^ÐÄ ¢]¡]ïXËÔ´,¢—Ùd £¡Yy
+$£Z/+™'­Õ<¬¶®¡UT^¡·“»Vm’‹µ5“NÃ89ñœÄ‹B;^¢Ÿèš$,~M nˆí_ÚIì=S"t4<—”/v’8´Æ¾ç±cû^x{î/dyŒ>P: ÎáËÔ7äÞ[$±MýºœN GŒ¢È¯ž†öÔ'g©ç’'“מ>Ï£8)‰úHJ{Äxrºãe0ülAŒ@‘P,ÄÑÜžÂIôHâcpš!½©»'Öݤ™ÛcædÜù¯éTr6Œ~†ÙwX{‚ˆ½D¿þ†‘{¹?Fà)Vß²,MB`#ŒU‹zãêÒE±ÔÓû*›”×̾¤é†ŠÌ¾®i¸°Å‰tA!>QϦN
+™¥X¿ƒÙ”£ôR+[)þ-Ý\›ôlÀ¶eqø´ÎªË+¿[úšpS®©\›¬±hÃîÚ"ĦUÛJ·½ïYw8+=9†ÛïÏ•¦_íìã÷°õ@î]<xzyóýæùåÕ ¼ºÖ›w¾©Ù\8Üò¸½î¿¼¸¼:¯¿‘ÓиO.ŸmÖûOò|þáæí«ÍºŸ>-Ahž'5›ÌDzi›BB¢M|·É‹~=MÿóÉ"Ò¤ÐfÕ8ê¼¢D·ƒó’Ÿ6…Yçøh;‘ÝøC7¬YK›ÖôŽ:Ÿ¶шšw”Y×ÞÕ-Ì=»EÜUÁU™ZÁY)Ù-ôÎ
+Æ]!©Ö-x[í÷<ëàgE£&Çü|Ýâ´Âͽ*\ÞRàµóðâ@ÄÂÅDá»ò>G‡q®HE#þ‹7•©œ«÷*4Ý
+ Þ¤¥’×½øJåòä«m»V'-Ô]»þΦ/U´ÿîì_›Wßm®^lžßT[õK–ç.pq¡ùCií㳨~ý‹«þÛç/7S½/î¸(ó‡¨rN˜0ÚÂu·V°Î¯¤€“ôŠÊ'̸”‚‰~kNõ+ÞMÛ¡¦š5‹¥”÷¡\Tqé¡ùhk&VÁmz0Üæà:hBÿÔ¸!„Ø¡U‡´¬Iz¹Á8m¨^”EÀÃd„R‡åËÒØXíV 1W»»ÊvX=äS™&õ¡9BvVM(ŽZNYNÆ‘³%®¥ ½¬§Ü,%sKÉ*vn\ðÁ»X~‡,\&þZ‚PCô`Œ¬bÏÆ;Œ ôõlkX0°uÝŸïÆp1>I8ѽ;¬é@~˘޴1É
+„GÀyвÆ[r>whÕ!‡¤`"¯¶ì¬íÊ÷'K$ç*/·>³Ðoä;Ú…áÕü¬êAyL¿lHã Ôýðézlèo‘×óöjÚ’ÞTÄÝ&÷W;ú†e·VWƒw6áà;Ì:eúÎ9«Áç4NŒùʳKÝÄÄz?ú°†—£A‡…K Lx]-&°ôYº¼ú…»üŸÎ.^ß¾¸þçñéö^ÿYÛ¼†Z¸(DJiøZîŸÊpR£~ìi­v˜$ ÚB|r!uØo@Õ@Îa )§Š¤Ò®í£)-1è2*•A(bK‰½ÁiS×ÖÐkàl[¶ Šò •„ªϘ6±ôSåBmD Çt.AÃÀÙ€T àqš¯$1„¦¬BÂæOàÒz¹Øζ˜$ ¨s_û=aàU@Ø —f§Fë6xj,®;Ð0ì-´.Àƒ¦œ 
+¿@MBÙ+F¦Ë5©‘=­‘ùæKCš¯P›ÎJK[Î…`
+WFÙ­a‚$_›ZƒÊûJ%y눭Õ~
+ÒÖÏËÅ$BÓâ'àª4n‚
+AäH³A~NB©÷Vؽ vg«x|$xad“–|*Í/ÚÝünÖ{\ð\ø ±ºB»iÉÖ h§ÓîæÛØ÷Ïî±
+OçÄY´¬ñª Øèµÿ‹ûèìÕùt®òÿ}ÀÞ}HªÅ)ä
+¥£}Ãí ÐÞ¼žîÔ>]väÅ£ÛwïÞ.°ÏŽ•ÄÞºtå.(ÖG¿o*èê¦=ʆVg/¹Ãþ¡^ÏMÖöf°¥~\HÀç 91"¦:dòDkê_ÝVÏö_×)ðmý8-è\™ì­·iJ%Ò-lGG^T3s"P¡GÀÊ\¤tPÈ”½5
+ŒñÞR´ä.VöÖŸ"WöÖŸ"XöÖŸ YîèøvѲ·~T3… ¤×\[Ëþ
+„òª`±{s¹¨%yö´úƒà6qqÚ åäòÙfåòí³ëÍÕ›ÍÉ.ëúÔõ¸|à}ï_\^,²É5ã¥NÇtW(‰«dT0:‡|qV{‹_¼2!†ì2Þp&ŸGÇ÷’úK lÙ„¥ c²¯Ú[€Jçò™TÍÿäRÀzÒõ›dWpodpUA£“[Í
+†ÉQÉL
+k†ë˜Iøšm H 6H*%Â\vP)Á.›gFØ‹Q'"GˆÂêˆC§N$€Þ‰¦¬U6`‰È”X‰Gpò‚=Çç“Ї`šMÚômGôªÁ9c“(ðBL
+°391ÔnžØè^&Ù]A$ÇDXºÚ–kbqÆV%y%VÂô`ÅKÎ<ã¸K:ÊćBRVPh‡à@•uÓ ;Öù“†È–‰>^Çn
+ò8Âz´Õ²\y3–*y z†ñã!#±a]µpÀ¬iD^ŒvÄ] 9FÃ|p¾[–
+…÷1dY
+VpN°ªýQo$Ù}°êR 8Á
+ÂBÉÃùèÊ"Á
+Õ“€…
+‹g¹
+Œ­º¾€Å’‡%$¬"n,,óй'h!ž… aÕ÷A«ËÅÒzönþ?õ—«“éÕjº˜—Ñs£½ß}¶Í$:,³èàtþ¥]®ÚÉaô] Ϧ··ÓùuW?™Þ/g<~øWýyo‡ôoõߧýÓbôýtÖ>çÞ ½žÎÏÇw«v©µƒÃ(†¯ŒK'í—éUûj9~ˆ†?iå=}—Ð?ºrU•*£ª¡‘¢«˜–‡Ÿ¶ Ò’h?k–D9ý£¶ñé©qèd¼?ê*ßßžî=ù?¿™Ÿ'øÿ›ïÿÑ/Ÿ„ÿÑúóçÏþÙ°‡žüwvßã_þÞ|/çzæøøŸ¤úâ§ÇŽ°çPÿ´‰¾¿ÿöí!Ò‡š;^èýkŽÀ&¢ƒføw³Î_ô'ÍZ®ÜP6t6æãì…1<Z7iϥϭÝûz¿Pï+¿Ñëèý‡$šìÓét®¿¤¿zbùw˜n¾yØ0âéè™9Bù&©J5…~Ûud}eå{*ÝÕ¨+uùn/³,Û‰îÚËòd•æ¹œ®KmªSü
+B0ž°A'SX–…7ÈrVUyä— Ýv¬Eë g1åz†ˆm€~:3à%„b|9ÞÌÐXœÛWÔA¾˜Gª>uo­4:1³qe£7k²]·]ïaש*ºñÕqÕ”uÝ °!e-ù4qJ…H&–ŠÐË2À@v[Á-ÁO™} w 7 ÈÓ=·‚Ä&Yc¸õ ð5¶ƒ\Ê–GNÅt^d‚YN>R«Ë¼ˆ‹º‘pÏœ\'I%)M•È=%AœÕ
+] ”ž¹T :#ÓºÄt•_M8Ž*WkÇ&|i<}ûPY-N•@ñÀ…,²¦á—
+Z h ò /»'x'Y¢ªꌢN2A:‹Ë¼ÉÅq%ÏÙ«³T5¶LìDÀ˜s\P}äÖºì{ÆkÔ¶2®é SE÷=)U¡¯ƒ©¦Ó²î0®b•UYqSIJ`(ãº(óÂ[—‚GìU‰Xª[%øfwÂT·5.ûžð³í•‰Î ¦ì–ªa@WAöÄHã\ÕÝwbª39ï"Öîeò8×þ—™@,Ø«±T5¶LìDxRÀá€1ÇÅ“9rg]ô=ã5jÿæUèŠEú›ô7¬·›¸ÉkWR™r´‰©Äª}¹~XmC ‹m?×ËÞºàDXjk« ½òκj–•/´éo^¹w­ñBPfC «l?8غŒÇ©mgŒr0d •) ÞdN®, £„ £Ôå¹(†Ù:„1«c¡Z
+0ÏœàEÈØ92FX<—qÀºã.µÝjè1T¦€“9¡ !£n !£¾åÉ®
+
+7¤µ[‘8âï‘v)íTøH!"r”‡|¸"2@Šz3`Šª”gºª•-»~À”EÉTˆ&tX,&¿s4€Šhx&À²ï{¨]N[¡>{§?úËÕÉôj5]Ìǡè¹Ó–c×>èŸFýûÕ":ß­Úåô[{]¬–Óùuôð‚,O—í¨ÚŒÞ\ÞµË/ídôcû0²£îÝ8ý±¿—vyÔ 7¡‰œÇýÓ4½œO.n.3+ä£A{=C:øqÙN¦«Ïãåª=ÜO¢þþ^ ¿îïÝïï=»×þ­þ<Ñoè#®’¦©õ9MÇtšëÓ>¡ª˜j‡Dk%• ¹>Ä«¤ âŽïºTô4†cm ÕƒèßðA÷~ Ö/¤}%üÑëèý‡$š Ãóý=E·¥ô¶í¹æ™n6±¢ÅM¿—Ño
+ÁtJýLm“Þ¿”˜gèRÞÇèÓ@´Ø khô ý96NØ…Å·b’µDã:K„8ÏЂ%‰ }ÔKi£7¶AuoA„•ûKï@›šÛh϶ ÿuOÌêYSfl8¸Þµ~ÄPëü º¥ƒOM¶†Y´4-±žõJ3Ácç…Na—\ÑÙöèV'ôvÉô™e6ÔÑy;ž½Sþüª¿¦”9M³ŸÇ+JÀys1›^µWã%׫åtB©æR¬ˆŽNç«`ô9eÇÝj9Ö˽}¸mÝHZb°XÌ‚¡/çãËYûê~:i‘³jÝàË_oË•0õ»Òôç7iïmÿâíËÍYú¿KÍ,+*$èz‘¥Ý&Šj(ÚNô
+s ³–ÑByfvZšmÑ”>ŠK›èÚñ¤©¨ ÎHͲÂ&¬Y97K«T5|&P@‘çr\ÑÕGÙ‹C¢ï'h,šMfÈkŠ™˜)’¿’æ»
+æщ¦ó‡ý<“>qdUÝõ¡jŸ
+Z8ÑYSM•ëB‘Èשn(þ]/տȯš9n#z ÿЗäÃŽ»øÕdr’7`R¹ ìõ¬½Ð~+­cä·å–?æ÷Šd7g†£‰²:ZhšÕ]ÅbU±ê½¨ÙÖ;•¯e/¹¸Íp½|’‘„Ò8–(ò_6«›,†ÝRn¨~Ò<–/.›4SYeÙ®„ý¢¸|Îi!†qõÛæúÅæþrsñ.ƒ€Œ6ÞÌØÅ®È0
+†Þã  ùÂ(èå«W»ˆg, <0ë}¸ 3㦑¡Y8¦}²Þ–D% §üZ€«àBÑvpà“ó7|ðg+UP·¢R•açØ‰žêNU@¥êÎüQux¶²{ª|‘û¥úí÷=ý—?ž^\Ý_\oÖvýÍð'Íø¸†^nçÙ®Æ(
+atÄ)| þ*)6„ßiŸZ…Hê±{š³ýæËŽ\ L´Ç`3nòí‡aeÐ(Yš1hæ…è“ØiAƒÔ}G‚ ‰q(îg!‹ÂZ H¨VÓdÐnþ:1J-­¥3ÛNíûùV%h>ÉNЃ’èo„³*†g_#û?“1Œ5·™‹™8“¬æÑb¦¾…œ.DÊÌXÆT$c†™Œe5‘,T ìeê“Îç­ ÍÂÇÜdJÅ„Ô*kÞTZv'/
+ôª9CC­ØÎt KŶ†·0CÞº÷X=ë¡ë¿è
+¼W@˜Í nõ¹œ[f®& Ì«Ê
+5uŸ:Á«ÇyUüR@]ìpŸlý¬å³Q ·@Õ4$@½/ûôç€Íùé}yˆú(µ­Æìf;–3>ðØfc+Os€Ok„·Ò¼W¹<ÎÚBé=ÔÒº^R›3[9V)Ÿ¹zÚ¤·ÅÐùâs‘«H=Å.´7¶ÿ%Æà‡A}µ¹›ý6wáüçB®n#A«ý:@ë« ˆÛÝá0ÿ=*t•IÁ#'5 c†®WÆbš PŽbRÁá €Òä@ÕD€Ää*β
+j î¢fB€É,i ç4ÈšG!£ M8$@{äene“QS,íD麢! òO
+Z¼ V3 Ï‘Œ]üÊM<rz'J$ï<17jÓˆÞ¤L(ñjò0¤zŽ1U\„âö,j¤@@íš½øAñy¡Ë;x-F{„àMaÁXLÜD/çy]
+†cê‘sÇŽˆØäÂG·r F.Uî†G#ò39´Â»ÉðûZÏ‚ÉJÜrÄÇèfÑ’ˆAÛŽ^ €2#¶ÈP‚¸Ì–¸, ¹[²MÉ’™½ìu2z®‰pü ({Š #kbÒ7÷¯
+XœÖ¢„qŠì G>F-H”¦/ÝðÊ“qæ¡»`"‹Ã悵%×cç/NG¸Y"‰r z“ÎDjZŽË QBŽEN"úQ –±Ì—ôÁx%¡¬XRH@Ÿ(±lì"»œ…Ŭ_E£¸«qÎ/UÄå‹Æ5Ÿ¥•q4€ˆv€
+Éf0äݳ6$¤Ø8Ð}tf!Û¬ž“TYÚ̦„“g´Ë^ sÆ·›_(ãKÖHó‘Gæ¢YŽ†³ºÌV
+¹bs™8¸äbýŒ‡Ž±i1´e³«Y#Ý|ÆA,Óâ7‹lDµ‡ãõ±¢(´„à”‘«TL£tjÍrïTB?ga :/#t!`Ea,lIc„$1Bó™«›,|í=C„rÜ*¸ˆj2·q¸"În{ #g¨1‹pÑêÖp÷Ķ"b¼”
+˜z{w;$r œ±#ɇ Nø+ª[!!á¡FQE!&í’U„<'gsƒ@¯À“®¬ªj
+·Ô;qZ„[>ubÕÖXÓA6ˆKŽk–‡ÐJÁQ'£Û‡Û÷(o|\‚ç¹^ÿíîöÅýÕí;ø}zZäÊûÚ7Oþð;ûUÛ“8„¿_â˜49iKßÏO€zñ|)½\b )t‘jmI_Tüõ7»[JÁʉG5R^v»³³;ÏìÎ3s6ac&ëø)þÚƒ2L°2lºá€@+Jã1œ:sM"°#—D¿¶ß÷®#g2ö†™è9"!B7 \Ø:I]|&,
+綖¶N=SØ<íJ b(Ö²¯Bc<&Hè›æQ¿áö Sqâ ðZõÛ=”Ôû‡¾“ô¹q7õ¾¦½àwjÑaÑçô…ŒMÝt‹}²gõ†ß¸øÂ!å‹c›}øWÊù®Ò (óõ|Š«¿ÊüMû«ìαӘß:ÚÃAàÜ fELü‘t|Y/k¿¯9/]w!¿ê3sÎÈÃLäÅ®ò¬Kz U¤`ƒß-z!5ìav‡5¢‰‰mƒc!½ˆE®µøz±—LÑa;ßÄã |Xm­éOãØéÿì ž¡)]‰Mäâ{’ ‰íðnâ=ô|4™Ík/
+•úüêóŽÛQÀ7õêpôyoW5ìVÉÿ°˜ÜRuU¦ÿ²Þ0­Ü%ïØ¿äiûª®ÅV`5ô-cmkËX[ÆÚl•bH–eHX²ÒUV®H²¥)¬L‘uÉ0UZ¯’f²‚ÅÔ†¶¥³-ý'•ÓY9‰t©^h‡Q€Q$òW€
+endstream endobj 26 0 obj <</Filter[/FlateDecode]/Length 16172>>stream
+H‰ìWÛNK}Ä?ÔËH¶4Øu¿$âåä$XäDÊDQÓ.pšn«»Í%?s~dÞòc³«ú‚ÍÅÁ`Â%R(ª«Vï½jíÕµ_´6ÃC› `/'›´Q÷CTÄý{åE÷uQšÙz‰ºïÓbdži6°÷”tuwl£V ¢qÞv^!¿½Zyºý +<ÖFz4Jáÿ‰âÂfèåÊ‹Ön„‡h·8ƒ×•Óm„á§[­q/AÝOQíUõ‚<
+§²ôÐÎAý£x;«¶þ4Ín¹°|ÅK€&þ}>[yÑ0úæNÁèúò£Á
+<Üqá÷ÀáÛ}ô
+­ ¬T]Ìr#M㨸Y‚³¡\îs1>“ØØKS8ý¹Ý<¶Éö`àÓò/†±éz¾fgÜ‹m2X\Ê]w‹Ü&r:‡˜™ìÙ<µáØS>ô0ý6IO’*Hq=†j¨Ý÷ÁQ™Ä:äpl›5W•ßÆ0ˆ’¹˜YÖðo[ÃÛ°²ƒ%%F"pFsA¨r¯ïn0½ôûsàÞ0Ýdá°>H÷€©ñ÷ïgè]¶}8ײÕzÇã¼È‚"Í:ö^ÛíÇãƒ( ¶.¯Ö_6
+‡½ ’ÂÞü“‰;Ü]2w~öÉü}­Ì,­lieÏò:ò¨ÜHSÉ–nt½õâ` ™¼·i’Ã#ß-méF¶äʧÃ4‘ÚÀe€¢r÷,×þ %U\À@ j8wGÃ/¢Ñçõ‹wçOàüa“
+ ‹r¶#Jb‡ü¨†ò’(¥'Š—´@òpëbŽEÍ %rQä¹%5×Êi…ILË«(æFqOž”›+íXTÆfE;Ï“'H_»:ëplžŒ1¡îjN´¦ÌUžÀ†Ž'©¡gðÄ:ôy¥A ÊÕW†0V¥
+lŠ)*Ä fø"iYÈ7äÑpëž_˜Lé²X%´Ž¥1+ëØ+´¨$÷•­1¸Áø½
+ñžo5ðýÝkž­„ÑØ)#TjíõC@7e¥–C›s'7çnÔÌP|Ò
+¢b)¡ù%„Áɵg¾‡¥Á}ÊxFE}qp#õ$¸Á³<H=mý]Lk#M㨸YJ³¡œ"Glì¥iŒZs»yl“íÁÀçè…w‹Ž_Bƒt[òîY7Îm~EÀžÍSŽ]0åCÓo“ô$©b€ÿˆŽí·­Ý6•9¬C
+ǶY²Oºd·ÂÃ'glwäíœé©—ðv%³ò]¤aÐý| èЪÿ#&‰èÎ"n«BûŠF¿?!žÜ  Wð‘¤Äp×!B7„)‡! Sªº'øçÈúü^~{‡ü3
+‡.•a–=MŸ¼ƒƒÜË…t}îY´Äqt£a¢^6·è”HÛŸúµ`­k¶u‚h§ÓÇQ›m}N­·Õ†ýÈŽ¢$·ð†î‡¨¸åB{“¨µžÄvÇÆÁ‡´]=Û±A\=üdQà€Ú—ö½¶#i¾]>õ¶×ÄìùœÛqü'6Ïý´™~Ii"[Û{ï€|_BIÇA8D«H ~Ñi£Ÿq]û­+(÷У^„ê~L¢0€â³(9pÑæ£88+ÿl_ßB¹r.¦´’®‚¦ÑhæZK£¸w2_ã—îýuÅ;GäÄøŸÿú/²{õ¹4,OŸÍåS¸z{ >½û‘´B?Hïñp}'#Ò ŽSiܵDû“*,™Äñ¼8˜%C¡¡›½•¯Â=šëöþ~n ÔŠáÏ õMó" Š4ëØS{µ‰ö÷ƒ:¶Y#»g“I}D«¸ÃUu¥ûyá)áõÌQµ«Ó÷µôwRŒæ(Ÿå×dÊsè³þšTuIüϬZe’j¹üdÜæ“áZn~É'ã^ðÁ:·ù{±Þž+ØÖÇ$- ÔÔ ² ‚qôª)ÅŽ›nˆ ÞèõîÜâÞ»ŠÔRD*"Zý¤5$nÌÇB/¯Ïàü™^øñ?h#sB€=›§6»`ʇ¦ß&éIRÅàzšphÁYw— Æ?þ±ÉÄ•¦¾$v×Cwkv-Æ¡®
+KP^׃ÖØ㇂LK©•ŒGX˜F»$‹Kžc)à¾âÊÊË)ugèÀjYÐ’º
+Lxö¡zkŠ7Xšƒ(J 1ï †J%Üa`JD©8PˆÝASˆÞ\!úà¸;y~Ú
+bÒÊÑ1J_`/iµJ×v3ºmG`Ch!®ÛEO
+IÒv‰,DeÌ…ªk‚Öá7a²Ò¶—o1òתbÐHs°ÆÑkâùÌLKÏ5¥È@·ÛV\ýUû²Þ ôCcUÀ„ ¦ì)N—º^¨ïÕúÁ3ƶpBmôÂ>f†L¸º> o©ï±Á`pÞÕL†sa"(éPŽº0ÍM=Ž³
+±’ìŽ^<ŽÚ<Û&™‹€
+î˜6"y›:ÐÓ«)5²‘@]Å8÷;Fˆ}€%¥
+‹CF1“>!žIA3c›&†–ë…9Ô¡0Aîb ýx¬€äx`˜FBßAc.±Íç¨nÔb„"´m¹1l
+
+,h.BËÒ{Tµ?H€„ÒXB±–ýpM!<q×dpΛ‚£¾o*õ¦ê ¶a
+®ôˆU; ÿft.nߤÑD&ªªTsc¬–qz{™¥˜Œ?ýñ2Çg¡y6*ªiõ¨‹¸¬à 秊L#YDïõš¯¹,ç+ Ó掊S'•ó•#ëÏÿR©sägRë§ãDÖªp.U–rµ6G.âùª‚»¯WE¶>læÊíÙô°æÚ -²nõ}8:zÖ;⚇Ӈõ,K´ª?ëeR-’Ï?·Ù=ŽØƒ9»P ¡Žàª»«>V3U(°þö4»«K}s’åßçOk9)²<Ê>¤í±Šb•.TÝê8ÆJGëhpøÊž•U½.QÔž> Öõ5­AÃù÷ôVw²¨ôp>x§w²^”äÒ<Ÿ\MÉÑÍhzóFÿú±vNå}VÄ?g§ŸêÅçÿ4’'E=¿ÃK0ˆò \_}S<'Ù¼†,W`?”ç7·/í ç•ùÏ«8KeñÐÜøçÛ‹Ë,R[ë|\')AÁñ¬®Tyè¼@áQQÈ_UÍWzKOè!p1 ¼(E—çªö±þªrÕ<>øKZÞÞË¢üöÐy9­4‡ÊÞˤn…õƒr‹`*×V®±¦þü͇j§¸Mv‰„tªªKŒÉáê‹¿Ø gÓ,ÝfúÀÑ$ƒöŽvrÒŠ~Í¢øå _Än¹Žå,Q;uÆ.Ùý¿'ÿçƒÂ«ûÝaAËîG‘k?ç°6fë=€¿ÿi‰¾*å:O”ž¡
+%GÐx÷ê‰Z|Ô“~È\Ç=aôO²8­Ð¡ƒë:QÅ àí[Nâ2OäÃ[YÜYç~Tñ|¥ÒEòù'øïðñû4žƒ[ÖÕËνvZLF×Í-Ï #áòž×*¹É®Æ¢IVÆÚx|L-$}òg$›`q^ŽŠj–É":Q Y'ÕåSuae0˜6²›Ñd-¢æ2Šº°™­ey·y¯Ì³jóžLb‹#¾E¼(íÌmnͳ¤è
+ftîŒê*s®eY©"þ¤6µŽÎ qlU9wi6¿ËêÊYYY6.³DVÊbžFÌÇÒ¡“Ë\N¯k…l
+™–¹„žš?ÀkãÄ?©fׂ² µfÖEA9 ¶
+9¬kÛáYÙe¡ÚÎ~V¸P6“žLl%}ž•íÛð¬pgñXÀZÑ“&G¯ez/Ëé ž½TN
+Uªâ^97êc弉âJÎâ$®l!¼{Wô»‚"‚&þwY§Ë÷›•Ùw:°¥Õ¹s
+ ¯T
+ÙÇ·TN¿ÓE‹[Ú­·ª\µŠeâ\+(®ºW1̹ª«ªô™C¼«³Ç^ÈtYË¥r&YÞ–º°/9K²™L®U^'e§p·×šqoàmïñM–÷êd6æLTQæ
+Áø
+þVãöµêÓRô§aŒD¤ÿ.âGÀ½©n:—‰ÚèÇM™›‰²¡¤·S€§×ºßBlC½ ²3UÉw²‚$€UœŸ”ÈÜ"{‘•ºrÒ}‰ ø£_½šM_N“,+® ¨ÅvK |¾Ås”>ëõ"Ûëìʹ¥Ë. %ÛTkù¾æ€„Ä 8ß!e•lç•5+Øêð±ú
+ÃÐýdM¥ k7M üå (Ð"–™4B+š>ïî;QDv¥·Þ eýž ^‘¿ßT“ʽ¼­M÷?«¥,œkd¯néñ°IÚ DMw=ש”ÕÛªÃòµðY^Ñ$„H'¢ðU1‚¿;L3†÷à,œCÖéHÍOþ>û8ë5¶À8=xeij‚ƳÂÛëüoŲØú·}Ðßz{³“À„(FÁî½¹çç ckþÂÔ&&@
+¥ìÍîóMNV‰èßNþ"[”.ÛfÊ|Ùàä„q³A)S¶µ¸›3_pg„¬xœHˆ²EèŠ.¡[@H+{¹.@†5qnH/¼+sR…]Lƒl7°=vÍIRL_‹ê.ºÞyì»8 dˆ¦#¢–
+çœækX[í!çxsU R–O65=Xó‰»z$|Ãik}'’h/’`$a° R6ÐK1¶Aª¶P¼Ç…Ó͹;³*aÕÒẞ
+“+Þ+^.¹à
+hÁ™’aÉ 7} ]ˆÏmøLšCª€;N’ÓÇ¥
+éÍÛï ¥uUK~´ `‹ªÕÈrhÕúQ0VÎ"X-‘õFr…ü?Ò ¸ æ×IPOtÔ•è@m°_t4Êg1áÚø@+gYSãWĽ†Ä9¬A%Qa^ÄW rë¾C~7•Ñ¨@cŒÁË‚žln·O3ZWŽS ˜`¤‹KÙ¯‰ÃHÐösÅ”…$›ÒÏ«±@N·I.ý:’0ôxI#(†8ºAUbE(†º›",b¼ÃîT9® ¤¢‰î• q0r‚d¥hÿ:o!fm¦ ìo;^’ñ͸}8Ï4\pb˜Îsr­%?nªóªÄÿ‰¡0ÄËzl[È¥€8‹¸%”LâÔéØã.`¾deÁtã”rÂØ›¦Åí¾Ç’æ¼C4¼÷E–k‘†vˆ*f¼'xÍ%ï‘¥‡¥q‹A;@‚yŸ\bE²€54ƒ¹ÇAÜŠ¿‘t‹´ò5·H€-ô¸Ô8¿%tqôñmW
+ùv&çÔ®KК}êˆýSA_%¢;ù{gö±4Þ¼L¸t cZT%‡æ
+È%–¤ ÂÈM~ÕaaË›µ 2L•sòÒ„AGÜ*ª©¦ô±…pi 2NûC4‰ÂWÅø†xE@HGV]”×’n
+?”×
+ŒèÜ–žô†ÃFEøqY¿V/nŽæÚ³ó“÷UŽoN™®v¹Y5—òÁhpÏžôDŽÔë߯úõL³ûý²s]½hŽŸN®»šÉSƒ~ùºqTªV3Ţξ³Ë|ñ°Ûz!?wÛyUïê_ÊpÓm452˜åÕݸۮ¢IO<ïð,Iž,÷|…àbGMêñÒ`ߟ™êãižÞ(cjl¬rzÆ°ÕÃó.ÌÀ »(Žæ¡Ö©³5½ûùDß÷Èi´W?®ùÜm¯ÏݦNnrlþÈd/…¸±ò5x{½1ÙÅóŒb¤®ôÐ\0+£·¢KŒ¼³|iü«Û¾8™Ù† h½÷²|QàÓñ/v( ˜ÓÆû!=9ÍÈvœ`‚›³÷lŽïóµ»loU}mµé£ÊqŽùšËu{'ß=d~îLG™U‹ç¹5þ$æú‹ñÊv]*8JßšâËH`¤£‹“S-÷dÒãÉñ/|OÝÖhU7õÖô¹KËüÉ&w~Ý*P›§s‘¢
+ú¢Bkü°”[7K®IžéSÈu‚¨Y¥(4Å^ƒ"—®Ï³§yÄHÔíƾÃñQ·7lgfýüYMǵþ¬g:TOyɵ§ÂÏfyžy¶ìvä#¸R§þ9ƒËò³>«ßÉ8Ufý©~ºmЩ0.–ž3×lkrvSÇ?¼XV,¸)ÎÿV­/¹Î ½ýÔžõ¿Øø^¾ÿf[+ÿ(¡ƒŠ¹N§Ÿ/³Ëó­¡Ùy»%¼}±ªéF ön˜šãPÌÈ áÙ ¡”=ÿ†Q¨jý¯vÀ°¯VºY¤_Tëõwž¾gßsì¢ðåWŸãN™úüû]ûŠ}íÐ÷+Þ oùkú¾\Á-@SÏ?2pHxì?¼]˜n–ìæ tëËÚ³ÖHíÊ)Ú…]Lú‚•R°Ë}Êu2­™]%lÜô_K¹)S} ºš¶ú^m^Ï.¬*5j¢V‡
+~Îçåìe7›Á«ûSï¤Ê..6nZ¹s3;`¥SÕšðç²(Ú†:õ¹ÒmÝÿÐ÷#ÃÜÏæN5}©wªÿ ýŸö*ÝNUKÂÏbâ,¢‚ˆ ³FqF5` Ž‰¾ÿÝ{ƒ Æœ>½úö—PE_M>øNƒ=í”Üð÷¡ºt(] ‡ŽñƒèŒäVŒJú×WÓ[ íXbEÄ ‡ZægÕ4Â\1ñ®À’­%¥—Ornw+«ùîiWã›S¡®ˆF5¥k‹•"®vCÔIä¡,l fà
+'Î*3*šŸ¹3¨vèM©lu «]„Í&ƒ…Á᧽÷|Kð/~.Ÿ£³»˜Ð/ßCÜ|oÔ:ãñ¿T\¿h½ÚšîD Èê1¦:ª^µ®ß@OË
+Û*–„ù»…JœÂ‘K–ë/Rd«Ro§ÓŸá‹ ¦bº,ªE
+Y. i–›ÐW } mj¢wPÃàèj/$׉>ú¡!s Λ’+
+ïùt¤eÅ ÚN`ºvn'JEø¹èxÃyÙqÍq¿pï$—¹C T¹úo³úkJ!UEÀs @ býolcÈñ¿œu
+Ù¿,#Á maF³é4òÖoí7+ÿxo´:„òšnÛµë¦ëöl+ÒW´2$ÑO`L|fìKñ{¾c¬k`‘­ïæ¯õk{…K§Ír°<&æÂZƒ€kp^ÚÁ¢2;kQŽÆZ¾˜Ü­\gf"p³»Ül ÷çÙ-:F¬M Œú˜÷(LSàPª Ä3Ø5#ã_Ï8’©
+Ÿ1Ut}x]Š¡³$¨b¤œˆY©V:eïÔ3ïì»=¾{~ÙÉ15öR·
+G×[¦qÏ>KÃËX;ñMQh9«Ü®ê¶ÏX
+¯JðFšÕ¿‰hH2xjFx1>$*H2,OwžÛ¬XX^æÎKÆ-éǦŠv ¯fýð.Õ´ú“«ŸìoU L¾R@žaû‰dh’!Çõ Ÿãø±¼lm#p個”»ÀX #½š ÁROäwªÑç5•ƒõH%~š_ s_ ê·:©Ia3Í ñƒèíÊcuÕÀkË[O™Ñ©{­8{ÚL¯}Ü©´Ô]Ì×…Ï/ŽëdºÒÛï@šóZà”PÂ*‚HÍ•–^¨/¸+ùÐèFBØî0àÆl¡9äè#•þéÜ-™o¢ˆÅÙÓpV«Å駠QB¨ѳ"ê„ÉkÒ<-lóþ<†ÇO®ÐlomøØÍÆ’½CÛXò¸^™Y¾ŽAñHu¾£q§Ÿ
+_}Õ:{.DöÚã»·®ùé×M=Óê²} » kì ºnàùØaæ‘V:9„ â±²ÓQÍ–®¹ØCß¡ºYÉgõ¬{-1’VIì9Äï-eŠýíy™4¦‹¢¯W„~‘"{rm¼2óJGefq%T¹œZ5ŽRõ
+!Ø4ê*¥‹íUÄÛºåÞg0Y¹ñ¿µ2 3]šŒÀ»Èq§‰ÀŠÿÁ4®|®4ÿ(7¥9í6+þL{%;xâ•ÍÌùj§Ì‘™ÖåWª·Ì+òÍ›™»|M(z}jäÞä>˜¢Å´5ņ9Fkà¥JrÓ«På{VЫֆ+é2¸Kø†~ 劑Ù™ÑJ~][9>|7f…i;@k'á/föÚ4Òý‹ë{H·RÚôÚ| øé­xÀÌ'ÈVü èxûÚ‡¤¯Väž »&æÐtÁ¥a)žÔ`)É(>)-Z8M±*ýúÚ¯3mià0h”«µ˜I»~Ë·À4Aóë„ÛGÓ~^ë‘Ú=fóÜ®®”põ%¨A|3SÔ²~pî¸N¦ýÔ¬}ÕÀYD¾zý2ÃAã¦/9 WZ~›‹GA!úò®‚Ê,Ÿ`VÜG™yØ ’N×9ã&j*íV^2¤ÃÆA©úr2‚îœ|ÌM>¦ç$ª‰•ì]7M•›¶C'˯ÀõÚÂ}ݎݘngüÆ ÚK`/iÓÌì¹ 0òŒYõÂÿÏõ
+,`­7qÆI®A<5T͸¯7-³Yúá0sVO.Ê`3Ñl>–ùgvÆSwŒ\ +l büÚB×jf¯ÓÂz´’Ÿ‹§ÚGõë&˜©^Ù®áÇÖ»3’|ËV†ŒØ–L\I‹¥ZžEìã¼Í®‡ÃZd½?âð¬¨r2`æɧæjüž“ýÇ?m¥9Æ¥X4€É0‘H’átê
+†*£—§µäš¶|P)Ø\^Z#darº§w ‹1.ÍJUFއε
+\‹w˜Ù=BÏ·ÀLóabN=ÀÜ®‡ßD› gÂ4䂤5h]
+¼ÝРÚn¯v!ð!ú99
+3ótR 
+q;¬Z)ÊG©Óúéø†.ém>ËŒåqŽ©õôFÕ´âÍ Q©Á›÷X*Ë…›—æN#©£på–$;ŠLòɇÇ{”¤Ó ]Ž+òζ¢´ŠèlC9zŠ°'qñÉ'uoÞƒ™âQ#ž…•A À2p3k†–M'”ÍÿëÎ&§D”jgsDǘ=ÓQ Ý&Ábn¹IšQDü§`½U"}m8C$–„¤Õyô©­ª®íX‚cXÉ‘#€W–4Žé] KÑe"šøš¹²Ó¢¡ªÈS{-hhm)C¤‡HP÷%ÁµlŸá&ð<$]¢¹³Îé¶î|’ÍaÙ;½_‰zjyKÑ®ki ÛdÔÖçÆÁîò†y°,m8Ž¡àÅÉ~‡¿‰ƒ'Ú04ÓB¶MYÎÁ~ y±‘Ž2
+² [Ñ%BR± +RtÛAt]F:1CŠFŒL¤ˆ dé"‹ð—ÔRAµ 0’dŒ¥«!ÝI·Èút TŒ@9°ÁúU'8ßž+=¶ùÏ¿° è~#Ô™÷6¯—»á:¦eÈ– iÄo¸ý'EÐ)¢­Wdìµ`çX×þù¸Àžü¯äþ«:ŠŒ6^‚CöŸßH\z+W\}†–‚ÑWl'õsÁoJÌ‹–âuÙ¹æÛ¹C³[ý> Ý«Qôå²½_È2ÁMç
+ºˆÀ¦Ô¥ëÀ1ô@ß2把0ö UßêiHÆÎ÷.4ç&-©\ñ§öÞ@Ýò·øae»òºaè8ìÛ8ýôN(tH€¥÷Þv Aßuß„8ð2@$t¤õ¾?[~(/èdáØðïæ_n¾t›"ljüÁJÓÞ7€ ¯ò%î§t7±!@~áj3]PÔC·òzQ·MÁBú6ú?µî¼HðÐOº¼¾+þíM ŽFÊŸmíÿØ~#wf#‡3tgˆs{H
+½3”€‰ 3³æÂÎ œ;’lpA"ùÎ̯„mëÑ~µõJ[¿§Á™R,'áÏÓòG›Ñ$À/í¨¸`9‚á< º“ÜBü]ÐÊlO«\`àZð‡jþzKù‰ç>$q1?V¸á.¾øïgj\ý›D¿5J³}žëªá×$êümǬ‚{Îi³ÚÒý©ëËñãss´|ˆ0ó?-ð4p3¿|¹·ËŒªÝoßV4~¥\Ãæætú$Á’;¯>ÿû\Š¾¹ç› ÄQt¥ŽRÁ­EÂÒäµ¥ƒÚÍ_è,°Ü$¾«¬¾l£ü°ûP%<€–l>ýî,îj¢?%î&j²„™Ð­¯²R©ßéüGÿC;ÍÐý`\,÷âNø¦)â#Cf[=|€Ë¤y},.ðŽR£…kª yQ™<ƒ•=ÂÐïBYÚ,§ÝµøGe³4»ÜrQ»cé
+§óÑrœ„Ï++ØOáC-ÕRý <ÀgÓÒayùôsô+ËNóÀ=p:]‚ÿþ’Rÿ“%i 溅j5)
+p_¢‘½™È,æ;.‚LÐÛô{³ëSþÅ…Sídèh_ÿB‡P¶wÊW‰ò®bë¤çÅÓÏ\£œ7݉®)w¨’¦üAg`(of—¢Ü­A‚ò­7 6[(ï9Ù¥|Í÷"ågšL÷]ˆ¡
+îvXæä&˜]qÎ>Í2¡|<¢ûAÊ?ãÅØ[ˆYjQ¦2
+
+sƒLo†¨ "%㺾Á‚3 vß.­«~²n@ ‹7Õ`ò*õÙé4Q#‘ýô¨Qu­€§Òx}è¨óhŒ·³Xê$;먀±‡\#|º)j,ÛÖBOmÜ™/û¾£z>“
+×ÆXPžìàñ O ÷û Ÿ`ZXª•ÿ-fïì¹'`~<æ éFmŽÝ¡Y QçLÙ7{ÅSËLÎ)¸b}D³È'›/«Rû~—Iäl+œV.v¼:H1˜Ÿ…T‰
+0²µ"ˆÑÎÜÏpìh.ãÆp0'P£¶ØnÉOHÔ"ÓôŒˆŠ*Í”nõ+ù¸•Z,µûà ©u¡bpTt„‡~¦;u[qéÊÖzEh n–úê<üF¤v×íÙQæ6Ýa™y­Sxj#äxáSi<õX³â¨Ð¡!øuZ¶ž"Ÿ˜·l½ˆ§63¥é¤=c©ã§]QÑys›î¶Yòê(ÎŒåO?žÚÚ÷O‰xÈD…žVý¢È’£ë¥Ôþ SÚìkXj¼å·Rc?ô4
+óiÔ8­Ê =“Äh¿Íî_IÑ5S™9ÎZôö
+Ô¹îàèüYR}†î>šö~pcKú´GæèZ‚ A™¢{‚ºLæèN¯CºÐ™DžEóÈ$ÊÃ"0±y ¢CšM©üLÉ¡>|MQ% Ûñ… Ý:ÁŒ@~é£òÖe îêùàZ(:®Žþ6 Òí`ðrbÊú„gµ¬r I¿<ƒ_hx×={.)·zÕœu9<ÓF ‹;MC¦q8Ж囩ÂMk—¨š¦¥ŸÓôìÜôqÎ,S…’º®£´µzAªCëŸóõuúa‘¡“"f×æš$z—ñ²†]ë÷kh»fè¹T.Ix¯}¹£×Ï×PDUª6?ÔëÎh¬'¿å‰C¡Jû¶ì/z=ø©¾´â2ÒJ}•G_¿®>Vzpå\
+úo«Ïå‰Ú}é‘h½Œ.ä¾u¡IÉèB!¢ !O»»"¥QUÒkx´ACZq!¼|“ºÙ¨"fä+ù”‡*{ÀË×÷SD'nÏg§“\ßúëÉŽ5”_(ûÚk~'w¹NÙw3)zMyŽ5]^Âs€VKàÆSK
+GÕô³<Ú²t¦ªBëï¤
+(鄳·ðKb§V•‚!’f²ÑÞP@J§
+ðD€“—óc¦;¼ Í•·þ³ j]øþ³‘Fàkg3º4 ¦~.¼ç–*KÃÛˆñRvîZ®Q
+¬ié+Ó2bC:_˜Hùñb.
+Ù pLËšýå¡lðrb @S+D.›zí„ãÊ;Ša•dãDU…Ö)¤o„A€âUëþ=u2Új$ÑF9jd…Sx&Ö½FmÚ¨ÁŸPÀó †ÁR=fhé<*ج֬+†[ø#Næêeu¨„&LÛ[ÒÖhuóÖ•”ºy몾ºÅ+.Àæ|›WݦHÝ’W'ßÓÕäêŒg,pBu›æQ74žöl³u/ÇR7}
+endstream endobj 27 0 obj <</Filter[/FlateDecode]/Length 15293>>stream
+H‰¬WÙV"±}¿kÝ`*Æ‚í†V°) P¤Tœ.Ø4´”üÿMRS’T
+0³%PI½Ã€šÏç• w†ëDÒH' `¦´DPÀ ÍÈÜofCϺK·Úè0Â$¬ÍD¹7´Q·
+?N»?G1{¶àÏУý=ÛõÊÕdeö™‡¶. Ç’ž¬¾[FnîZåurkcR¸Î{_¨j³ií
+=~üþ’¦R`dt¹lJllákSd-÷ÆEÓ×Õ·6~ËÀÇA+¼sÑòÑ­ ùÉ$NÚ·ítÇ(üirª9̈šFãÐè?³÷.n `Æé )·$Ûbƒdî’¶Iì/¸òaû   j´A§Öj¥[Bé·Î0”ê=ÕCéŸù§Pú¼XikÀ¿¡Ôl~˜4øq#”ªu øüÎä/ŠQ¯ª1Êiç¯á* ¸|•Nžtf++w°Â×Z$¯€Ÿ¿f4ë{³ÖKEÔn¦µö÷7%«ô׫Õq8 ¾{#0¯ñ\âg¸¾Z?gÒxÓV“ÇúŸeÕžÐÈðQ$rûñïžmµ0¸ãZµÂyŽk5Ûxùu ÌpÂ=ŠÄrçÃÿñ¬Np«…ë(fõû¯ê5fu‹EÐp [‘ÙÔ×y*ÉåeôÕ‹ÕüGX¸VA†OtRBÃx¸Åì/ŽÕ£H´ûª?q¬)«ˆ7X’­ߪ™zîq­*SõÛŒmõ8šŸäpãBáZ]Y·å×jèô1}CH`xZt]@9ňw“W¢8ß{Z¿¾‰¿£Ö—Oõþe äáÌé>GfVAÔ?Ñ/6ü¬¾úÒÓ?<ë`y ߊf(æOwGr8¬R@¹ØŒÎ1v_#Å­¾¹ÛÚïÁ+¼–,_) –·Í0_‚3ùïkþÝ"ë“Ë› ·Æù&ç@°%mBB¹ƒÊ5,OºÎèž°=¦µˆwnØ s/ Ÿ(aLûR„.m|_#ÀvåsŽB×­R§ý©ú‘ šµ
+O±p§z}‚F™­¦×7JUã±þ•ÂJ >:an†+©û5èJ©£«Î‡rfÚVhx˜Ï¹_Y8éëK*ê]'ô¨á}…GctP´é™{cWuœË>ÎعRÞ„…Û9¹cÏñ |¯´ä8¦/õê]ñœ
+Ó×i©*HÕI;å<NF’xÒè^)‹ï`
+ƒ°SKšñ¬?åàó,äySâô€{ðOSúä
+6=>ËVàh¿Ã}#ÎïÎÛè~~:†+¨¡å2"Ò3 $RÏÐ!¹µ‘S˜%‹V˜µö)‘u`Æb¼†žŸIdó“qK9ê *̦üMË—ú£õÉ\ð»è´3YîûÄçë´ù™4÷Eg'ð©Ôi£Ø?U3MÜoT‰> ïÆm|"îè–.;|"Y-±Ö©*Èúä…"·ŒÌýŽ©r¿Ö2¨\lFç.Æë9©ØgÑiõ‡EƒÑiçpË›d§yшǘ㠨ä¨ønDÊuZàU‘–21œÝ—\jxO—E#O@¡ø<¿Gp*+8[ 8ñÙÏô
+zÎÞ ÓæÕkp\1;.¯¯€ÂZ žbá.!¯É™ž§Ä-ê ô˜­w½ç£ÅeA\x*1øè$s3\ç&â̓$‡x ;x ÈZÒ¤ÎWn>³¤nùBÚ›i´9!¯Ü&#yC6óG‹¼C£@êAµ)u™‚ÂG<NAp%•¾¤™OG*áÍà8]JìàÌAn«Fet),|ï
+ 6Ò!e_”e+ûg”OâR'Dž³Ò¹!sä'†’DnxJ”LÐØ’ 1®: &R] LZ×¢Ï$7Ÿ où ɺ ÛV³Ì,Šg‚‚×
+< R^Ô*–£<<xŠT€¶íúctÌùŽ,Ä Ü£qÏc—7»åÕyCÂçö
+l<ø€~hq¾c•\ëB‚ž°ÁIËWz7í/¹=AA3žû·'1]á’ö†Èj?¦·SŒÐ'¿-3tgP¢1H1™ô†b42˜Çdmx¢‘WßH1âC.oÁp—´^íÏB¼•@ ð°²Ié4#p7m ™¡»6Fæ00iþã ])
+íèË”^„cÁ{4Â#v4^AÍ«WY4QÇkbfë‚Ýd`ýHµH–[Öºð™œÕÃË S‡áÔX­Ê—3ó_o4¬E&ëz£=}jÜ”¯ê§Ú§Aã¦òmP»k þÏz•¶%®ƒÑß"Å–M €¨(8”"‹".#ŽÀE¯w\Øäÿß$MÛ$$i
+þÈЃN7]›ÞÞ
+½ê­ç׉Èë3ã/·¡.¯{b¯Öåƒ-D8ü™=}y…äv­´`tqâèn÷‚âw§¼ïÐÜ0Ÿæ-%“¹hÇùÓVžCQ/=Uª­ÞÙ;Ñ‹ áÂòwŸHsÑä6þ‰³é’[¶£OårVí„?TÍXùo¤>‚vx4ãoþŽ>Wˆ ÍMpXA^ ð)â8Zƒ·s±Ä­²Ü¸>lœ+pc^L™ÇU¹ÉÄ„j#†*7@eìmT>w ð¢iñPaœÀ凢P ÊÊøîÔSÜS0#K“OÕ•ºjê÷èF’‡ÀK²?ûž רúÀ?-b‚ ‡•)ÿ>i|ÏÜØÏ_ŠPu}š‹9þ(rS:©‡ÿºýúÇB½wš@{)!gÉÔ––ÐM}Õ‘ØãƒÖO|í¬ð=õ^¨`|úŒž®“\ìçØâ&wn6[bó Lî@SPéçNR÷ÙñÚÜXŠ²@wòâ/*PxZ@Ð8% ®×Ì´—¶¤}Ðc7uÔ›ˆÜ®«0PªjjslÖÁË6t <‘j9 ‰'¹ÒA<Mbææl8Œ3ó vW<Ò£š÷‰hŒ­„ó`‡æ'SRÿzŽ³!•bÀOaÇ0¸u…Ú&c
+¶€÷Aêu/®ÇV˜óÛ àEïT*ÍD9‚ÙxHÐ(9›Kt‰J—ÞŽg cÿ~p|ÆèJ\š4úmdCljÊsÕõã•SÈNì‰Mç¢üv¼âQwuª®Z¯ñÞwÜüÄ;ÖIHÈÄüpÔbzÕ$Jø“5dÖ?M[hÊÌubRD~ ýÕI–q–ó·tÄb ìdMÎÑÜlbm»Æ€(hÔCÿ6ÐäŒ14‡ÿ¹í–)÷ú°ƒ/½^®Ã‘±¤,æ¸iOñˆõ"Ü+÷&«Í9©o
+‰ â½Ñvd”³gùúGƒ-»š÷/³iìžÜyáºþÖ†Îâ)QM« ’ÆŠžeA^vS‡&ºì ðóÌ7ÔËîϘչÖAhkêÎê•Š½í`Ðê Ć^6þîg£ :.³
+Ç×Ëî|P^Mï ’Ö:Új”šJù¦\Å]ðð‘3Qh-ý VA‹pÇNëÝ l
+‹j %Ƙä0ƾã&ˆ4*1ÆJÒéb/øFx¤ÇKs6êü“@.M O äíäBš¦A[‹M!7«xá2´vn6[<S[0›ñ2{~Ûº£~5ÁñeÔZAS^øÖ·"Sî=9GnNg0ç"h»˜ämÜ(œ‹Ü2—èºÅhñºœ0™ZÖ‹·Õ7³RN5~UµçÆ pS=ßܧÃxü²;?R_F¥ÖÔ&£ª:‡¨>Ô "@÷—G6
+´IÈZ_žwI¯O‹ˆ½s/vó¯ÀÍR»ïwTKZÖ
+?LÆ Ó/Ë?œ ë~Ž¥£î/¡ƒ64yO+¾ÄZ_Nîåê+ZU\£p‰^’̦ʞkVºªk`¼8#¹E¼á(ôtza Þjœ-_eé°4&ÔÐâ°* &,:&ZìG3þ!ìèKèF¤Q,'Á ¦ÖJb6¨b?Ç*æÚ+–Ïe6TX7¡ojê_y¯ØC""h¦¸ì›OiLN´À®²ï§»dˆ›¤i=.m¾ÄÜ,Cš“óæFxz[ÄÜÈÂ/¿§àê|\•›ü°pD¹xuYƒR ­./‹Ù[ÜtuYƒ‹E°ZÓQ‡‰ÁK²«ôe»šø¸°Ç.¾°EN®c‚äú!arä²qò&§¤즎+GE‚è L5®’×s'©‹$€µ6ÆnJ4NÉ„)¥_Œy/PsEu´ÎüR¡ ª•˜ID 60i¸¶S5К)„™1)ÇF'C6(j2ª¥'ÆÈ’µ»â²©ÅKo'’:<­ ,Áð|E%ÕÖ– ðÁ
+(EzUD@•"x¸F¥¿ÿ™ôI‚ø'_Éš]×^»ÏEÔËX ÚÌs¨ªÃ:Û»z£Åäî|‘+Í¢Œ€_Cì È[Ù N•,2\EzNY<p:Åe’Uc»™§œ”—T+¦§x)ÃÉd
+šÁ,¾ðœj`¦œ£T7ØDj6IAÓ›¥eÐ…Ö!½ösåVš‹4æÒíKr¨xƒâÅ.g“þßT»ü\ŒZà"´½øäÂ0´:£™¦Ì…Aûà<£?
+ÚGšzþ» ™ØíÒ µb/´û®‰v­d£4¾0Eʱö7/@^Õé騒-ç>ÀX.
+I£ 2Ú´<˜l‚CZU,’E§~EUzoU9ªt°Ï,ƒNÀ5ÅgÝuú¯¡ÛyYóUïMêõš{ì‡üëþ@ÚM'œõAý,ò@%`*,¸•fâ4'Ùâ2T+[ЛS½ˆwÎYcXÚ„¼91‹?GÃÚؤ2ƒ¶{þ:T16éµ€YNÊÂÁ&Äi²Y ¬Yr”NI\f ¹úhdI6Uó~*F|7ØE`V– ³v«µü"V,ªµ%ÌŽ(w¤Ó‚~ÔD–DŽkz nª‘³Û1A¼iÚ¯gµzð©—®m+6 a-“s:q«1„ƒs”½sÒeÙf+<Ž9‰tµóíì—_ò˺6Aâm ƒf‘2G—Gã\8-t©6ý¨6ÑîyÚv‚7µ›ÓÀȳ‘MlHµyÃø
+8æ¬1ˆ7GmE+Ô7˜\©o™{çBPƒ2rB3ì¹ç¡Eh
+¹ `²qQÌ^ ; iýj2шNÜû.¤½cïÖV‰rs¶¼@h¯ÇBÓm %qÑïu³uYóîEAÎÍ%¶êð:d¢
+(G È%æ@o èŸøeÙFʶvc
+—›a8G•›öA“J^@É@´  ×l¹hO˜ç  ¹A¯ý'»'H(­šïˆ†aWÒ™¦ Ç`E#®Èh—eÁè6ÑÈ~éè‰b,ÒóYSŒòŠ‹#» NO
+Ú€±Ò|a¸"p#Á@
+àâÍ"-8ê´´*áÇ¡ÅÝh,YÙÈh@
+óKH>õ”È`#ùJV+ùÀ²Wª/2„ÌÚ£!‡ò*yÓ㵌ðÁ¯ )×ÒhS½Ÿc)¹,æ÷QTórÏûŒ\óó!ËÍ[õ ¸srÑÎßx´{Öy²ùLPî1„!çWì"È(¦àç‘?Ǭr÷Æ©æÌÁÐkeesÄ… oÏ9ÿF“Ê$8nòÓöÖ'{#~'PŸ …¤¼^¾?Š«Då¾ð•$“º52[9~!é+¹¤] ˆ”ÉZ|H«½Ë%sxc¹*—§ÀÝŒSî¼öÐá]àáá3vbNü0¨„‚Ùë«AÔÓ†%0mûR0µÁ?Ù_±j8òõš hÈ’œ*ëúÖÿ¬WYS2K}Ÿˆù_³öJo ‹ì4Ð
+"(ˆ€ 
+²1OóÛ'«ª—«÷:/]]••yòäÉ%ì7Í‘ƒ¸óýÒ‘çïF¼ñºc2RL2ÁMk oR•‘rú”–á#ÉÁ{ÔÖk ¿õŽ¨
+P?ÈmÎåw6Ä3œ€c~ôCúíEBôPø/¢üœ׉ïËSü-´E*šp̉sƒ!†Î¸ˆž½eYl
+SB$Ìá%¨Ùì– /aðina™•È²¿ŸŠøM÷%“ˆ:KC®WU^ÙYö²ÆìÀó*+ï;&šUûÊ„e–«éï ±}úé¬ènhÁL-mo”Bx ï }ˆTÅMÁ=P¥bSÎoQ§ºáéomvlÿøF¤7fታ:]:.UÓ—UpøTS*¡š¾Øç0F”Ûº=¯˜£CÜò²eÄç""<¢ÈFE²³$ƒ*|«…ðO štøÒT –c€L£Cìê™`gŽó…8eÚÁ€Ò­à˜Ã1õÒ:µ[ácô|L]NÜka~Qªç—1o Í bh2ÄÁ•”I°W Ö®"~¿ûHo¸äÆò²Û”6ù•=t›L¶×äE;•(äÚËçÂ<ZÝäZ¹Õ*¸–ïñœW{é¼ÙiéÒôÌý&oÝ~\s!3‡>à[C[yyî1nQàïxò–ÔMT­]­LVðÌf00‹FàEò/yÑ¡ùU…äÅ‚xŒçXò6òR–;‹‘æ¸3v 6fáRQ»ŽÁm#ÎmÆø6í’ ŸŸaïâQ2äQ2˜­‚íR²~wƾ æ¯t¼Ü¹EJ0`?PñŽ:¢Œ[Ã$ÈCOÆ5O”M_<ž_ äòü0Óñ7-ߊŸÜ¹xü0—Æ«ßÊ&3p®ÚQ¼ð“~Hé–Å(Õo~ÌA„¿ŠOÓ<Í_é"êFW 2¤™”ÖÈs…³$Ø?¹ßB"Ñ0R®"åþ´G»²´'’›(TaDeQ9qðHm`å u<wal\yM°[‹ºä·Ô˜S^káG!-ÞïHLѤPø‚òÚNô,'àY
+P´¡ŠÁ9êOUŽ¢1~@Ý»*Ðßjj¦U °*ÎR²q•\+˜l‚Ãì(\,óKϪ¤J¾ÊÜá%ƒ·\ó„4Cê @EY•Ö5Ê~Ôbír óX»\“Ñ1‘q5ƒ )Äó¢æ×È·ñÀOºw„ÉýäP4ªª¢qxÈÍãrº«ïÞfo«? -.ÿý/9WQÕöj².í¦ÓÖô?cýrü˜®äÜ]¡R‰EŒéËz2ýci‘ç¨hÉb‹NtgãÖy×@…‡¼ñ//Lo352^•nšb¡TóbÎ7­-#ÎßM8†^B~FNzŒ¨•îÖÜ‹hÙ éµ8×ÜøÃ{Ýw{Ò½¯26æy¯1ÝåEáºö`T+̽k,°üˆ?·Ê)„ô‡ü´™•÷³¤læ«Æcéþ.+”5¹ùÜ(X,p6 vQât~½¿!oÖ]kûÝN;.yf$9xŽ. tŸ“‘ËfÑç+F¸õÜ Þ  #åô #^wL†ßzw¨åÇhrh)2ªa”†C;ë5&%’›» €r–&HúÍÂCzáE… ɤª¦£!k½½OQ—59 å5¸EÀ7k™`æM‚yA¨=ËÛÁ®ÌŠâ¢Ÿæ¯t”£”u‡tJ 6(Kä¡TÅÁéŠLÙå,goÔUgc`1~9劔}t¹ ÒZd@Ÿ^®„uñZ¾ó$ìïß°ÑTñÈže#ëÂ?ÂP²îí¼Ë›ˆ­PnPaÇ€ÓêßF]&"ßÙú`ÙV‰\ «ÑÓåë»R*-H7éÅÄjõÅnMrN}¶±xŽ9¯ó`±è<èÎW…Ÿ;&»¿aR ¦=†m’»ŠÝÆcåR68m•IŠ±µEGµ{kKÃŒ‹ä("][½Ⱥ£0¥(ëDX²mÜ–-ô;Š:®U8xë©V×´tü¤WiS"Ëý>þPÀnš^ªwYdUAA/‹Ã
+(í»o¾¼ßþ2«W· £#:jÍÊ:•uêä± çu{£À2neªRÎù.Û¼­¦±Ðï²':Ó—×’[’€RhÝåT t Ðuŵ<®?FÝ,ô¿—hßk}fõ„ཙ8!c %R!9J7Ä-M}3qëNýÃÍê–ãlæÀèò»õò¸µuJžØhkH'NC¡;/;Š
+Ÿ0í
+ïmÃ"õÞ[á¼ñAC
+Ò.¨öQ^¨ˆRFYnŒV!ú­Ì#R'çPg3ö¤ÎþZpr®\x@žRgA@ùÚLP½*.z%瘸H¤8šv§•NþáØ‘íž¾
+ìè8:ÊåY7¿r®Â+–Ý=ÞP‚¥Y(&-K[¤$†ÆÌKÁ@[Ýja¼ÌOƒ:½’b}‘‚»™ÆLbc I¾Yó†”Qù˜@S1G©Dr¶XC ÉfÒ
+-tÿW<w¿KÉ•¡ƒÔOÚË°LöúÞdžæ ö9(Fc ;ì=Ã9<\u×YuÒ¨Kbc¶‹îô_PõAë…×b ìí–`
+"LÊñNÚÙ“ö¨ƒ®hd #QÏÂ-}ÌM†nÚY_y‰êˆ+u{U,¹Ló^À4²ÊÊiŒ&(г¦
+ÓbðñYÒ‰%ª ûn‰À»K0 i пš§© ÙcPîÚa‚Va_×OP-î´²X.ÉuŒV%ÜM1}.3Õãc|jF®«§l°#iÝx\°£ÆM¼>Ø14f^‡øj™Maîõ‘@èƒ8´ÅƒmæÖ|–vÌÕ©×!Ðœ 9 (IÍŠ$¼
+‡‡à¶öü”“¹$êkš_b,côµàÊ4cR¦Ð-Ç.„µ ¿½ôbÎAêú¥NÈ,¯bŒ^°‘Ùlî
+[FzúW¢;ýJòJ˜“Çòpáºs¥;ŠËHi²|LJâòNsws¥ÓÔÏFb#¦$ߟGK‰$ W\êF(È/Y ílÉÿ¡>ÞV·J¤3‚¿ªcˆë
+¯lK]ÿ/³óã
+&,Ò bxM"´OÕL¿2Ùù¡¨0G1d¿QÖ`¸0ã7áJ0Ëo &±çû†LÓî£K¹˜ä;ã6z{V^l æü¤€Â9=RYA–TÝDÔC7´¤"©2$S5 ÀO0 ]¥CÇ1*BM(ĺbŠ¢Â5ÎÀ ØÉÔUvè
+z›4Ø=QBœ ¶$íÿÜW¹’dE ô'bþ¡M0æEéªãÖ"XpYg1á÷É”ªz{ç°‰Àên=½*™)5+»Ö%éLƒÇÉ’k!y˜¼n”Wk­êÛ劾™ cY¯„^¤£Jô‹Ñ¶¹Æysè5Lhµy ªx‹ÙøK+ÃßᣌIÖNùTHúFÊäˆx¬5iõ+&øçk^(Ú¢i\*¨›¯¯Hü5:ó6€¥aŽÈ(bÜ>Áˆ¨A•¬ZGF”¡zŽø^TÑSë°–…0C•ç`kÐ`¨4Û­Á)&sÿ@toçማ2€>=Ã]c¸3k˜áÐøê(£²uùœ¸Æ-è*­
+µ“ê¬ÁýW€
+endstream endobj 6 0 obj [5 0 R] endobj 28 0 obj <</CreationDate(D:20240428163440+02'00')/Creator(Adobe Illustrator CS6 \(Windows\))/ModDate(D:20240428163440+02'00')/Producer(Adobe PDF library 10.01)/Title(jason)>> endobj xref
+0 29
+0000000000 65535 f
+0000000016 00000 n
+0000000144 00000 n
+0000053800 00000 n
+0000000000 00000 f
+0000058408 00000 n
+0000213771 00000 n
+0000053851 00000 n
+0000054179 00000 n
+0000058707 00000 n
+0000058594 00000 n
+0000056830 00000 n
+0000057846 00000 n
+0000057894 00000 n
+0000058478 00000 n
+0000058509 00000 n
+0000058780 00000 n
+0000059140 00000 n
+0000060197 00000 n
+0000088175 00000 n
+0000089840 00000 n
+0000107678 00000 n
+0000133579 00000 n
+0000156625 00000 n
+0000165724 00000 n
+0000169520 00000 n
+0000182158 00000 n
+0000198404 00000 n
+0000213794 00000 n
+trailer
+<</Size 29/Root 1 0 R/Info 28 0 R/ID[<533976EE79E2684BA015A921443B9E75><D8242482EBE1814DB4EE97872CA857B8>]>>
+startxref
+213976
+%%EOF
diff --git a/macros/latex/contrib/jsonparse/jason/jason.svg b/macros/latex/contrib/jsonparse/jason/jason.svg
new file mode 100644
index 0000000000..fe8793dfa8
--- /dev/null
+++ b/macros/latex/contrib/jsonparse/jason/jason.svg
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.3, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Ebene_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="250px" height="250px" viewBox="0 0 450 450" enable-background="new 0 0 449.5 435" xml:space="preserve">
+<circle fill="#3FA9F5" cx="239" cy="226" r="206.166"/>
+<g>
+ <defs>
+ <circle id="SVGID_1_" cx="239" cy="226" r="206.166"/>
+ </defs>
+ <clipPath id="SVGID_2_">
+ <use xlink:href="#SVGID_1_" overflow="visible"/>
+ </clipPath>
+ <path clip-path="url(#SVGID_2_)" fill="#C69C6D" d="M418.334,389.667c0,0-10.334-12.333-36-86.667S344,189.333,333.667,163
+ c-5.552-14.149-12.545-22.326-17.83-26.869c7.769-5.957,15.778-13.185,19.83-20.131c6.902-11.834,11.667-24.5,15.667-38.5
+ C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5c-1.534,2.754-3.036,5.383-4.538,7.892l-125.587,25.33
+ C141.705,137.165,130.648,151.436,126,166c-4.127,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774l12.106,48.851
+ l56.113,69.247c13.436-9.009,28.206-20.065,46.512-27.122c13.874-5.348,33.133-8.479,51.113-12.082
+ c2.555,6.323,8.828,23.014,11.387,40.332c3.25,22,4.5,91.5,4.5,91.5L418.334,389.667z"/>
+ <path clip-path="url(#SVGID_2_)" fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M465.5,307.334
+ c0,0-9.667-14.833-21.667-21c-11.409-5.863-24.5-7.167-24.5-7.167s2.853-11.646,11.167-22.833C439.667,244,456,233.667,456,233.667
+ l-51.499-17.5c0,0,17.166-6.5,25.166-13.833c9.095-8.336,13.333-30,13.333-30s-47.621,2.806-54.333-15.167
+ C383.501,143.333,402.001,114,402.001,114s-27.334-6.333-41.167-6.167c-7.572,0.091-15.827,0.876-22.104,2.556
+ c-0.978,1.889-1.986,3.764-3.063,5.611c-4.052,6.946-12.062,14.174-19.83,20.131c5.285,4.543,12.278,12.72,17.83,26.869
+ c10.333,26.333,23.001,65.666,48.667,140s36,86.667,36,86.667l32.5-36.5c-15.167-3-22.334-20.5-22.334-20.5L465.5,307.334z"/>
+ <path clip-path="url(#SVGID_2_)" fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M234,448.5
+ c0,0-1.25-69.5-4.5-91.5c-2.559-17.318-8.832-34.009-11.387-40.332c-0.185,0.037-0.369,0.074-0.554,0.111"/>
+</g>
+<path fill="#F7931E" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M267.334,75.167
+ C256.668,65.5,245.5,64.333,236.667,64c-15.107-0.57-25-26.667-25-26.667s0,15.167-3,18.333c-6.167-9.333-19.333-11.833-29.667-11
+ c-14.596,1.177-24,11.667-24,11.667s14.5-2.833,24.167,7.167c9.667,10,10.167,15.167,10.167,15.167
+ c-7.167-9-25.834-6.334-42.167,5.333s-11.5,43-11.5,43s3.667-12.833,20.667-20.667c6.572-3.028,24-3.667,24-3.667
+ S155.5,103.5,150.667,132.5c-2.909,17.455,3.667,32.333,3.667,32.333s1.5-15.5,16.333-24.667c10.31-6.371,21.833-9.333,21.833-9.333
+ c-5.167,3.833-3.166,14.833-3.166,14.833s9-15.167,32.833-13.667c30.479,1.918,43.022-10.208,55.629-31.275
+ C277.24,94.63,275.157,82.257,267.334,75.167z"/>
+<path fill="#A67C52" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.487,355.872
+ c8.348-10.395,19.908-25.626,22.763-33.622c7.5-21-1.25-30.75-6-38s3.25-11.5-10-24.25S73.5,268.25,68,265.75S63,260,61.5,249
+ s-7.183-12.182-16.5-11c-12.646,1.604-18.5,24.5-21.75,40.25s-11.549,15.507-9.75,29c0.854,6.402,4.447,12.983,15.898,15.396
+ c-0.721,5.758-0.935,12.787,0.283,20.442c3.164,19.888,34.804,29.832,58.308,27.572C98.749,369.626,109.143,363.479,120.487,355.872
+ z"/>
+<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M189.334,78.667c0,0-0.5-5.167-10.167-15.167
+ c-1.713-1.772-3.58-3.135-5.489-4.188c0.317,6.082,0.921,11.189,1.303,14.006C181.138,73.124,186.281,74.833,189.334,78.667z"/>
+<path fill="#C69C6D" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M179,44.667c10.334-0.833,23.5,1.667,29.667,11
+ c3-3.167,3-18.333,3-18.333s7.525,19.843,19.471,25.298c-4.58-16.15-21.08-31.12-27.888-36.632
+ c-7-5.667-16.625-19.333-16.625-19.333s-8.979,11.333-11.979,29c-0.542,3.195-0.864,6.542-1.031,9.882
+ C175.318,45.129,177.115,44.819,179,44.667z"/>
+<ellipse fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" cx="223.167" cy="190.959" rx="19.5" ry="17.375"/>
+<ellipse fill="#42210B" cx="221.751" cy="193" rx="7.917" ry="7"/>
+<path fill="#603813" d="M80.519,293.464c0,0,2.443-4.219,6.106-9.089C91.052,278.49,99.007,273.351,103,273
+ c7.125-0.625,12.198,1.105,9.299,6.695S99.936,291.193,93,292.125S80.519,293.464,80.519,293.464z"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M296,149.5c0,0,30.334-17.5,39.667-33.5
+ c6.902-11.834,11.667-24.5,15.667-38.5C353.731,69.108,361,63.333,361,63.333s-55-13-78.666,29.5
+ c-1.534,2.754-3.036,5.383-4.538,7.892"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M120.488,355.872
+ c13.437-9.009,28.207-20.065,46.512-27.122c24.045-9.269,64.273-11.878,85.969-21.821s24.408-43.392,24.408-43.392"/>
+<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M127.5,299.5c0,0-0.749,0.729-2.083,1.995
+ C126.919,300.316,127.5,299.5,127.5,299.5z"/>
+<path fill="#FFFFFF" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M39.236,323.495
+ c-0.724,4.556-1.093,11.276,2.014,15.005c5,6,14.5,15,36,2c18.048-10.912,41.196-32.388,48.167-39.005
+ c-4.023,3.157-14.707,8.937-38.917,8.755C59.839,310.05,53.549,322.611,39.236,323.495z"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M29.398,322.646c1.963,0.413,4.15,0.708,6.602,0.854
+ c1.129,0.067,2.202,0.06,3.236-0.005"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M108.345,308.401
+ c-16.22,8.63-44.097,22.899-51.74,23.26c-7.288,0.344-13.568-4.744-16.966-8.201c-0.135,0.01-0.266,0.026-0.403,0.035"/>
+<path fill="none" stroke="#603813" stroke-width="3" stroke-miterlimit="10" d="M152.209,126.056
+ C141.705,137.165,130.648,151.436,126,166c-4.126,12.93-11.333,16-26.333,28s-47.398,43.774-47.398,43.774"/>
+</svg>
diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
index 3c5e5cb959..ed7a1dded6 100644
--- a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
+++ b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.tex b/macros/latex/contrib/jsonparse/jsonparse-doc.tex
index 359cab1869..1cfcde1e18 100644
--- a/macros/latex/contrib/jsonparse/jsonparse-doc.tex
+++ b/macros/latex/contrib/jsonparse/jsonparse-doc.tex
@@ -11,8 +11,8 @@
% This work has the LPPL maintenance status `maintained'.
%
\documentclass[a4paper]{article}
-\def\jsonparsefileversion{0.8.0}
-\def\jsonparsefiledate{24 April 2024}
+\def\jsonparsefileversion{0.8.3}
+\def\jsonparsefiledate{28 April 2024}
\usepackage[T1]{fontenc}
\usepackage{Alegreya}
@@ -182,8 +182,8 @@
\makedoctitle
[The jsonparse package]
{The \titlemacro{jsonparse} package}
- {An easy way to parse, store and access JSON data from files or strings in LaTeX documents}
- {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}]
+ {A handy way to parse, store and access JSON data from files or strings in LaTeX documents}
+ {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}. I am grateful to Joseph Wright, Jonathan P. Spratte and David Carlisle who helped me navigating the peculiarities of TeX and optimizing the code. Jason, the JSON parsing horse: Copyright 2024 Hannah Klöber.]
{Version \jsonparsefileversion, released on \jsonparsefiledate}
\changes{v0.3.0}{2024/04/08}{First public beta release.}
@@ -195,8 +195,12 @@
\changes{v0.7.0}{2024/04/18}{Renaming and rearranging of keys, escaping of special JSON escape sequences added.}
\changes{v0.7.1}{2024/04/20}{Access to first-level keys of object added.}
\changes{v0.8.0}{2024/04/24}{Internal rewrite, escaping procedures changed.}
+\changes{v0.8.2}{2024/04/26}{Bug fixes, externalizing parsed data.}
+\changes{v0.8.3}{2024/04/28}{Escaping of characters with special meaning in TeX.}
\begin{document}
+\vspace*{-1cm}
+\noindent\hspace*{-3.5mm}\includegraphics[width=5cm]{jason/jason.pdf}
\printdoctitle
@@ -204,6 +208,8 @@
\section{Introduction}
+Hello guys, I am Jason, the JSON parsing horse. JSON data is my favorite thing to parse! But I found that converting JSON to TeX can be a bit tricky. Therefore, I created this package which I am happy to introduce to you.
+
The \macro{jsonparse} package provides a handy way to read in JSON data from files or strings in LaTeX documents, parse the data and store it in a user-defined token variable. The package allows accessing the stored data via a JavaScript-flavored syntax.
This package is still in a beta stage and not thoroughly tested. Bugs or improvements can be issued via GitHub at \url{https://github.com/jasperhabicht/jsonparse/issues}.
@@ -247,6 +253,21 @@ Using the control sequence \macro{\x}, it is possible to nest JSON strings into
\end{codeexamplecolumns}
\begin{macrodef}
+|escape|={<all>}
+|escape|={<none>}
+|escape|={<number sign>}
+|escape|={<dollar sign>}
+|escape|={<percent sign>}
+|escape|={<ampersand>}
+|escape|={<circumflex accent>}
+|escape|={<low line>}
+|escape|={<tilde>}
+\end{macrodef}
+The key \macro{escape} can be used to convert characters that don't require escaping in JSON but in TeX into their relevant TeX escape sequences. Apart from the backslash and curly braces that need to be escaped anyways, these are the number sign, the dollar sign, the percent sign, the ampersand, the circumflex accent, the low line and the tilde. The characters can be selected individually separated by a comma (for example \macro{escape={dollar sign, circumflex accent, low line}}. With \macro{escape={all}}, all escaping sequences are selected, with \macro{escape={none}}, none is selected.
+
+The naming of the relevant characters follows their Unicode names. However, \macro{hash} exists as alias for \macro{number sign}, \macro{dollar} as alias for \macro{dollar sign}, \macro{percent} for \macro{percent sign}, \macro{circumflex} for \macro{circumflex accent} and \macro{underscore} for \macro{low line}.
+
+\begin{macrodef}
replacement/|backspace|={<string>}
replacement/|formfeed|={<string>}
replacement/|linefeed|={<string>}
@@ -258,18 +279,18 @@ These keys can be used to set the replacement text for the JSON escape sequences
\section{Main user commands}
\begin{macrodef}
-|\JSONParse|{<token variable>}{<JSON string>}
+|\JSONParse|[<file name>]{<token variable>}{<JSON string>}
\end{macrodef}
-The command \macro{\JSONParse} is used to parse a JSON string and store the parsed result in a token variable (a property list). The first argument takes the name of the token variable that is created by the command. The second argument takes the JSON string to be parsed.
+The command \macro{\JSONParse} is used to parse a JSON string and store the parsed result in a token variable (a property list). The second argument takes the name of the token variable that is created by the command. The third argument takes the JSON string to be parsed.
For example, using \macro{\JSONParse{\myJSONdata}{ { "key" : "value" } }}, the relevant JSON string will be parsed and the result stored in the token variable \macro{\myJSONdata} as property list. In this case, the property list only consists of one entry with the key \macro{key} and the value \macro{value}. The command \macro{\JSONParseValue{\myJSONdata}{key}}, for example, can then be used to extract the relevant value from this property list (see the description below).
+The first optinal argument can be used to externalize the parsed JSON data to a file. See more on externalization in section \ref{sec:externalizing} below.
+
\begin{macrodef}
-|\JSONParseFromFile|{<token variable>}{<JSON file>}
+|\JSONParseFromFile|[<file name>]{<token variable>}{<JSON file>}
\end{macrodef}
-The command \macro{\JSONParseFromFile} is used to parse a JSON file and store the parsed result in a token variable (a property list). It works the same way as \macro{\JSONParse}, but instead of a JSON string, it takes as second argument the path to the JSON file relative to the working directory.
-
-This command will temporarily change the category code of \macro{b}, \macro{f}, \macro{n}, \macro{r}, \macro{t} and \macro{u} to 12 (other) if full escaping is activated. See more on escaping above in section \ref{sec:escaping}.
+The command \macro{\JSONParseFromFile} is used to parse a JSON file and store the parsed result in a token variable (a property list). It works the same way as \macro{\JSONParse}, but instead of a JSON string, it takes as third argument the path to the JSON file relative to the working directory.
\begin{macrodef}
|\JSONParseKeys|{<token variable>}{<token variable>}
@@ -348,6 +369,15 @@ The starred variant, \macro{\JSONParseArrayValuesMap*}, does not rescan the toke
\end{macrodef}
The command \macro{\JSONParseArrayCount} takes as first argument a token variable holding a parsed JSON string or JSON file and as second argument a key. It returns an integer representing the number of items contained in the selected array.
+\subsection{Externalising parsed JSON data}\label{sec:externalizing}
+
+Parsing large JSON files can take quite a while. In order to speed up follow-up compilation runs, this package provides a way to store parsed JSON data for future use. The first opional argument of the commands \macro{\JSONParse} and \macro{\JSONParseFromFile} can be used to provide the name of a file (without file extension) that will be created in the working directory and which stores the relevant information. The file name will have the extension \macro{.jsonparse}. If a file with the same name and file extension already exists, an error will be issued. Once the file has been created, the package will try to load the data from this file instead of parsing the JSON data again.
+
+\begin{macrodef}
+|\JSONParsePut|{<token variable>}{<key>}[<JSON string>]
+\end{macrodef}
+The command \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It just adds a key-value pair to the property list (where the value part is read as string). Hence, it can also be used to append more entries to an already existing property list containing parsed JSON data.
+
\subsection{Changing separators, output and other settings}\label{sec:settings}
The package provides a set of keys can be set to change the separators used to select the relevant value in the JSON structure, the output that is generated from the JSON data as well as other things.
diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty
index 447c70ae1b..680e89bfca 100644
--- a/macros/latex/contrib/jsonparse/jsonparse.sty
+++ b/macros/latex/contrib/jsonparse/jsonparse.sty
@@ -10,7 +10,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-\ProvidesExplPackage {jsonparse} {2024-04-24} {0.8.0}
+\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3}
{JSON Parse}
\bool_new:N \l__jsonparse_debug_mode_bool
@@ -41,11 +41,31 @@
Could ~ not ~ find ~ file ~ #1.
}
+\msg_new:nnn { jsonparse } { file-exists } {
+ \msg_error_text:n { jsonparse } \iow_newline:
+ File ~ #1 ~ already ~ existing.
+}
+
\msg_new:nnn { jsonparse } { escape-in-key } {
\msg_error_text:n { jsonparse } \iow_newline:
Invalid ~ escape ~ sequence ~ #1 ~ in ~ key.
}
+\msg_new:nnn { jsonparse } { escape-char-not-found } {
+ \msg_error_text:n { jsonparse } \iow_newline:
+ Escape ~ character ~ #1 ~ not ~ found.
+}
+
+\msg_new:nnn { jsonparse } { saving-external } {
+ \msg_info_text:n { jsonparse } \iow_newline:
+ Saving ~ external ~ file: ~ #1.
+}
+
+\msg_new:nnn { jsonparse } { loading-external } {
+ \msg_info_text:n { jsonparse } \iow_newline:
+ Loading ~ from ~ external ~ file: ~ #1.
+}
+
% ===
\str_new:N \l__jsonparse_child_sep_str
@@ -62,6 +82,22 @@
\str_new:N \l__jsonparse_carriage_return_str
\str_new:N \l__jsonparse_horizontal_tab_str
+\clist_new:N \l__jsonparse_escape_tex_chars_clist
+\clist_set:Nn \l__jsonparse_escape_tex_chars_clist {
+ number_sign ,
+ dollar_sign ,
+ percent_sign ,
+ ampersand ,
+ circumflex_accent ,
+ low_line ,
+ tilde
+}
+
+\str_new:N \l__jsonparse_escape_temp_str
+\clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+ \bool_new:c { l__jsonparse_escape_ #1 _bool }
+}
+
\keys_define:nn { jsonparse } {
array ~ index ~ zero-based .bool_set:N = \l__jsonparse_array_index_zero_based_bool ,
array ~ index ~ zero-based .default:n = { true } ,
@@ -89,7 +125,50 @@
replacement / carriage ~ return .str_set:N = \l__jsonparse_carriage_return_str ,
replacement / carriage ~ return .initial:n = { ~ } ,
replacement / horizontal ~ tab .str_set:N = \l__jsonparse_horizontal_tab_str ,
- replacement / horizontal ~ tab .initial:n = { ~ }
+ replacement / horizontal ~ tab .initial:n = { ~ } ,
+ escape .code:n = {
+ \str_case:nnF {#1} {
+ { all } {
+ \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+ \bool_set_true:c { l__jsonparse_escape_ ##1 _bool }
+ }
+ }
+ { none } {
+ \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist {
+ \bool_set_false:c { l__jsonparse_escape_ ##1 _bool }
+ }
+ }
+ } {
+ \clist_map_inline:nn {#1} {
+ \str_set:Nn \l__jsonparse_escape_temp_str {##1}
+ \str_replace_all:Nnn \l__jsonparse_escape_temp_str { ~ } { _ }
+ \bool_if_exist:cTF { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } {
+ \bool_set_true:c { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool }
+ } {
+ \str_case:nnF {##1} {
+ { hash } {
+ \bool_set_true:c { l__jsonparse_escape_number_sign_bool }
+ }
+ { dollar } {
+ \bool_set_true:c { l__jsonparse_escape_dollar_sign_bool }
+ }
+ { percent } {
+ \bool_set_true:c { l__jsonparse_escape_percent_sign_bool }
+ }
+ { circumflex } {
+ \bool_set_true:c { l__jsonparse_escape_circumflex_accent_bool }
+ }
+ { underscore } {
+ \bool_set_true:c { l__jsonparse_escape_low_line_bool }
+ }
+ } {
+ \msg_error:nno { jsonparse } { escape-char-not-found }
+ {##1}
+ }
+ }
+ }
+ }
+ }
}
\NewDocumentCommand { \JSONParseSet } { m } {
@@ -106,20 +185,24 @@
\cs_generate_variant:Nn \tl_range:nnn { nne , nen }
\cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen }
\cs_generate_variant:Nn \tl_remove_once:Nn { NV }
+\cs_generate_variant:Nn \tl_replace_all:Nnn { Non , Noe }
+\cs_generate_variant:Nn \tl_replace_once:Nnn { Non }
\cs_generate_variant:Nn \tl_rescan:nn { no , ne }
\cs_generate_variant:Nn \tl_set:Nn { Ne }
\cs_generate_variant:Nn \tl_trim_spaces:n { e }
\cs_generate_variant:Nn \str_case_e:nn { en }
-\cs_generate_variant:Nn \str_casefold:n { e }
-\cs_generate_variant:Nn \str_head_ignore_spaces:n { e }
+\cs_generate_variant:Nn \str_casefold:n { o }
+\cs_generate_variant:Nn \str_head_ignore_spaces:n { o }
\cs_generate_variant:Nn \prop_gput:Nnn { Nee }
\cs_generate_variant:Nn \prop_item:Nn { Ne , ce }
\cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee }
-\cs_generate_variant:Nn \msg_error:nnnn { nnee }
+\cs_generate_variant:Nn \iow_now:Nn { Ne }
+\cs_generate_variant:Nn \msg_error:nnn { nno }
+\cs_generate_variant:Nn \msg_error:nnnn { nnoo }
\cs_generate_variant:Nn \msg_log:nnn { nne }
\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { en } { T }
-\prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN { eN } { T , TF }
+\prg_generate_conditional_variant:Nnn \tl_if_head_eq_charcode:nN { oN } { T , TF }
\prg_generate_conditional_variant:Nnn \tl_if_in:nn { nV } { F }
\prg_generate_conditional_variant:Nnn \str_if_eq:nn { en , eV } { T , TF }
@@ -141,8 +224,10 @@
\int_new:N \l__jsonparse_array_count_last_int
\bool_new:N \l__jsonparse_prop_map_first_bool
+\bool_new:N \l__jsonparse_load_external_bool
\ior_new:N \l__jsonparse_json_ior
+\iow_new:N \g__jsonparse_externalize_iow
% ===
@@ -174,12 +259,12 @@
}
\cs_new_protected:Npn \jsonparse_parse:n #1 {
- \tl_set:Ne \l__jsonparse_input_tl { \tl_trim_spaces:n {#1} }
- \cs_if_exist_use:cTF { __jsonparse_parse_ \str_head_ignore_spaces:e { \l__jsonparse_input_tl } :w } {
+ \tl_set:Ne \l__jsonparse_input_tl { \tl_trim_spaces:e {#1} }
+ \cs_if_exist_use:cTF { __jsonparse_parse_ \str_head_ignore_spaces:o { \l__jsonparse_input_tl } :w } {
\l__jsonparse_input_tl \q_stop
} {
% other
- \exp_last_unbraced:Ne
+ \exp_last_unbraced:No
\__jsonparse_parse_other:w \l__jsonparse_input_tl \q_stop
}
}
@@ -187,30 +272,45 @@
% ===
\cs_new:cpn { __jsonparse_parse_ \c_left_brace_str :w } #1 \q_stop {
- \exp_last_unbraced:Ne
+ \exp_last_unbraced:No
\__jsonparse_parse_object_begin:w #1 \q_stop
}
\cs_new:cpn { __jsonparse_parse_ \c_right_brace_str :w } #1 \q_stop {
- \exp_last_unbraced:Ne
+ \exp_last_unbraced:No
\__jsonparse_parse_object_end:w #1 \q_stop
}
\cs_new:cpn { __jsonparse_parse_ [ :w } #1 \q_stop {
- \exp_last_unbraced:Ne
+ \exp_last_unbraced:No
\__jsonparse_parse_array_begin:w #1 \q_stop
}
\cs_new:cpn { __jsonparse_parse_ ] :w } #1 \q_stop {
- \exp_last_unbraced:Ne
+ \exp_last_unbraced:No
\__jsonparse_parse_array_end:w #1 \q_stop
}
\cs_new:cpn { __jsonparse_parse_ " :w } #1 \q_stop {
- \exp_last_unbraced:Ne
+ \exp_last_unbraced:No
\__jsonparse_parse_string_key:w #1 \q_stop
}
+\cs_new:Npn \__jsonparse_array_key_set: {
+ \str_if_eq:eVT {
+ \tl_range:Nen \l__jsonparse_prefix_tl {
+ \int_eval:n {
+ -1 * \tl_count:N \l__jsonparse_array_sep_left_str
+ }
+ } { -1 }
+ } \l__jsonparse_array_sep_left_str {
+ \int_incr:N \l__jsonparse_array_index_int
+ \tl_set:Ne \l__jsonparse_key_tl {
+ \l__jsonparse_prefix_tl \int_use:N \l__jsonparse_array_index_int \l__jsonparse_array_sep_right_str
+ }
+ }
+}
+
\exp_last_unbraced:NNo \cs_new:Npn \__jsonparse_parse_object_begin:w \c_left_brace_str #1 \q_stop {
\__jsonparse_array_key_set:
\group_begin:
@@ -305,26 +405,11 @@
\__jsonparse_parse_remainder:
}
-\cs_new:Npn \__jsonparse_array_key_set: {
- \str_if_eq:eVT {
- \tl_range:Nen \l__jsonparse_prefix_tl {
- \int_eval:n {
- -1 * \tl_count:N \l__jsonparse_array_sep_left_str
- }
- } { -1 }
- } \l__jsonparse_array_sep_left_str {
- \int_incr:N \l__jsonparse_array_index_int
- \tl_set:Ne \l__jsonparse_key_tl {
- \l__jsonparse_prefix_tl \int_use:N \l__jsonparse_array_index_int \l__jsonparse_array_sep_right_str
- }
- }
-}
-
\cs_new:Npn \__jsonparse_parse_string_key:w " #1 " #2 \q_stop {
\__jsonparse_array_key_set:
\tl_set:Ne \l__jsonparse_remainder_tl { \tl_trim_spaces:n {#2} }
% key or string?
- \tl_if_head_eq_charcode:eNTF { \l__jsonparse_remainder_tl } : {
+ \tl_if_head_eq_charcode:oNTF { \l__jsonparse_remainder_tl } : {
\tl_remove_once:NV \l__jsonparse_remainder_tl \c_colon_str
\tl_set:Ne \l__jsonparse_key_tl { \l__jsonparse_prefix_tl #1 }
} {
@@ -347,17 +432,17 @@
\tl_set:Nn \l__jsonparse_remainder_tl {#1}
\tl_set:Nn \l__jsonparse_temp_tl { #1 , }
\tl_replace_once:Nnn \l__jsonparse_temp_tl { ] } { , }
- \tl_replace_once:Nen \l__jsonparse_temp_tl { \c_right_brace_str } { , }
- \exp_last_unbraced:Ne
+ \tl_replace_once:Non \l__jsonparse_temp_tl { \c_right_brace_str } { , }
+ \exp_last_unbraced:No
\__jsonparse_parse_other_aux:w \l__jsonparse_temp_tl \q_stop
}
\cs_new:Npn \__jsonparse_parse_other_aux:w #1 , #2 \q_stop {
\tl_set:Ne \l__jsonparse_temp_tl { \tl_trim_spaces:n {#1} }
- \cs_if_exist_use:cF { __jsonparse_parse_ \str_casefold:e { \l__jsonparse_temp_tl } : } {
+ \cs_if_exist_use:cF { __jsonparse_parse_ \str_casefold:o { \l__jsonparse_temp_tl } : } {
\fp_if_nan:nTF {#1} {
% nan
- \msg_error:nnee { jsonparse } { parsing-error }
+ \msg_error:nnoo { jsonparse } { parsing-error }
{ \l__jsonparse_key_tl } {#1}
} {
\tl_set:Nn \l__jsonparse_val_tl {#1}
@@ -424,11 +509,11 @@
\cs_new:Npn \__jsonparse_parse_remainder: {
\tl_set:Ne \l__jsonparse_remainder_tl { \tl_trim_spaces:e { \l__jsonparse_remainder_tl } }
- \tl_if_head_eq_charcode:eNT { \l__jsonparse_remainder_tl } , {
+ \tl_if_head_eq_charcode:oNT { \l__jsonparse_remainder_tl } , {
\tl_remove_once:Nn \l__jsonparse_remainder_tl { , }
}
\tl_if_empty:NF \l__jsonparse_remainder_tl {
- \exp_args:Ne \jsonparse_parse:n { \l__jsonparse_remainder_tl }
+ \exp_args:No \jsonparse_parse:n { \l__jsonparse_remainder_tl }
}
}
@@ -453,49 +538,102 @@
% ===
-\NewDocumentCommand { \JSONParse } { m +v } {
- \tl_if_eq:enT { \tl_head:n {#2} } { \JSONParseValue } {
- \msg_error:nn { jsonparse } { nested-non-expandable }
+\NewDocumentCommand { \JSONParsePut } { m m +v } {
+ \prop_if_exist:NF #1 {
+ \prop_new:N #1
}
- \prop_new:N #1
- \tl_gclear:N \g__jsonparse_json_tl
- \group_begin:
- \cs_set:Npn \" { \exp_not:N \" }
- \cs_set:Npn \/ { \exp_not:N \/ }
- \cs_set:Npn \\ { \exp_not:N \\ }
- \cs_set:Npn \b { \exp_not:N \b }
- \cs_set:Npn \f { \exp_not:N \f }
- \cs_set:Npn \n { \exp_not:N \n }
- \cs_set:Npn \r { \exp_not:N \r }
- \cs_set:Npn \t { \exp_not:N \t }
- \cs_set:Npn \u { \exp_not:N \u }
- \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} }
- \tl_gset_rescan:Nne \g__jsonparse_json_tl { \cctab_select:N \c__jsonparse_json_escape_cctab } {#2}
- \exp_args:NNe \jsonparse_parse_to_prop:Nn #1 { \g__jsonparse_json_tl }
- \group_end:
+ \prop_gput:Nnn #1 { #2 } { #3 }
}
-\NewDocumentCommand { \JSONParseFromFile } { m m } {
- \file_if_exist:nF {#2} {
- \msg_error:nnn { jsonparse } { file-not-found }
+\cs_new:Npn \__jsonparse_externalize:Nn #1#2 {
+ \file_if_exist:nTF {#2} {
+ \msg_error:nnn { jsonparse } { file-exists }
+ {#2}
+ } {
+ \iow_open:Nn \g__jsonparse_externalize_iow {#2}
+ \prop_map_inline:Nn #1 {
+ \iow_now:Nn \g__jsonparse_externalize_iow {
+ \JSONParsePut {#1} {##1} {##2}
+ }
+ }
+ \iow_close:N \g__jsonparse_externalize_iow
+ \msg_info:nnn { jsonparse } { saving-external }
{#2}
}
- \prop_new:N #1
- \tl_gclear:N \g__jsonparse_json_tl
- \group_begin:
- \cs_set:Npn \" { \exp_not:N \" }
- \cs_set:Npn \/ { \exp_not:N \/ }
- \cs_set:Npn \\ { \exp_not:N \\ }
- \cs_set:Npn \b { \exp_not:N \b }
- \cs_set:Npn \f { \exp_not:N \f }
- \cs_set:Npn \n { \exp_not:N \n }
- \cs_set:Npn \r { \exp_not:N \r }
- \cs_set:Npn \t { \exp_not:N \t }
- \cs_set:Npn \u { \exp_not:N \u }
- \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} }
- \file_get:nnN {#2} { \cctab_select:N \c__jsonparse_json_escape_cctab } \g__jsonparse_json_tl
- \exp_args:NNe \jsonparse_parse_to_prop:Nn #1 { \g__jsonparse_json_tl }
- \group_end:
+}
+
+% ===
+
+\NewDocumentCommand { \JSONParse } { o m +v } {
+ \bool_set_false:N \l__jsonparse_load_external_bool
+ \tl_if_novalue:nF {#1} {
+ \file_if_exist:nT { #1 .jsonparse } {
+ \bool_set_true:N \l__jsonparse_load_external_bool
+ }
+ }
+ \bool_if:NTF \l__jsonparse_load_external_bool {
+ \msg_info:nnn { jsonparse } { loading-external }
+ { #1 .jsonparse }
+ \file_input:n { #1 .jsonparse }
+ } {
+ \prop_new:N #2
+ \tl_gclear:N \g__jsonparse_json_tl
+ \group_begin:
+ \cs_set:Npn \" { \exp_not:N \" }
+ \cs_set:Npn \/ { \exp_not:N \/ }
+ \cs_set:Npn \\ { \exp_not:N \\ }
+ \cs_set:Npn \b { \exp_not:N \b }
+ \cs_set:Npn \f { \exp_not:N \f }
+ \cs_set:Npn \n { \exp_not:N \n }
+ \cs_set:Npn \r { \exp_not:N \r }
+ \cs_set:Npn \t { \exp_not:N \t }
+ \cs_set:Npn \u { \exp_not:N \u }
+ \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} }
+ \tl_gset_rescan:Nne \g__jsonparse_json_tl { \cctab_select:N \c__jsonparse_json_escape_cctab } {#3}
+ \exp_args:NNe \jsonparse_parse_to_prop:Nn #2 { \g__jsonparse_json_tl }
+ \group_end:
+ \tl_if_novalue:nF {#1} {
+ \__jsonparse_externalize:Nn #2 { #1 .jsonparse }
+ }
+ }
+}
+
+\NewDocumentCommand { \JSONParseFromFile } { o m m } {
+ \file_if_exist:nF {#3} {
+ \msg_error:nnn { jsonparse } { file-not-found }
+ {#3}
+ }
+ \bool_set_false:N \l__jsonparse_load_external_bool
+ \tl_if_novalue:nF {#1} {
+ \file_if_exist:nT { #1 .jsonparse } {
+ \bool_set_true:N \l__jsonparse_load_external_bool
+ }
+ }
+ \bool_if:NTF \l__jsonparse_load_external_bool {
+ \msg_info:nnn { jsonparse } { loading-external }
+ { #1 .jsonparse }
+ \file_input:n { #1 .jsonparse }
+ } {
+ \prop_new:N #2
+ \tl_gclear:N \g__jsonparse_json_tl
+ \group_begin:
+ \cs_set:Npn \" { \exp_not:N \" }
+ \cs_set:Npn \/ { \exp_not:N \/ }
+ \cs_set:Npn \\ { \exp_not:N \\ }
+ \cs_set:Npn \b { \exp_not:N \b }
+ \cs_set:Npn \f { \exp_not:N \f }
+ \cs_set:Npn \n { \exp_not:N \n }
+ \cs_set:Npn \r { \exp_not:N \r }
+ \cs_set:Npn \t { \exp_not:N \t }
+ \cs_set:Npn \u { \exp_not:N \u }
+ \cs_set:Npn \x [ ##1 ] [ ##2 ] { \prop_item:ce {##1} {##2} }
+ \file_get:nnN {#3} { \cctab_select:N \c__jsonparse_json_escape_cctab } \g__jsonparse_json_tl
+ \exp_args:NNe \jsonparse_parse_to_prop:Nn #2 { \g__jsonparse_json_tl }
+ \group_end:
+ \tl_if_novalue:nF {#1} {
+ \__jsonparse_externalize:Nn #2 { #1 .jsonparse }
+ }
+ }
}
\NewExpandableDocumentCommand { \JSONParseExpandableValue } { m m } {
@@ -517,9 +655,29 @@
\cs_set:Npn \t { \l__jsonparse_horizontal_tab_str }
\cs_set:Npn \u { \char" }
\tl_set:Ne \l__jsonparse_temp_tl {#1}
- \tl_analysis_log:N \l__jsonparse_temp_tl
- \cs_set:Npn \" { \__jsonparse_tex_quote }
- \cs_set:Npn \\ { \__jsonparse_tex_backslash }
+ \cs_set_eq:NN \" \__jsonparse_tex_quote
+ \cs_set_eq:NN \\ \__jsonparse_tex_backslash
+ \bool_if:NT \l__jsonparse_escape_number_sign_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_hash_str } { \c_backslash_str \c_hash_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_dollar_sign_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_dollar_str } { \c_backslash_str \c_dollar_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_percent_sign_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_percent_str } { \c_backslash_str \c_percent_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_ampersand_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_ampersand_str } { \c_backslash_str \c_ampersand_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_circumflex_accent_bool {
+ \tl_replace_all:Non \l__jsonparse_temp_tl { \c_circumflex_str } { \textasciicircum }
+ }
+ \bool_if:NT \l__jsonparse_escape_low_line_bool {
+ \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_underscore_str } { \c_backslash_str \c_underscore_str }
+ }
+ \bool_if:NT \l__jsonparse_escape_tilde_bool {
+ \tl_replace_all:Non \l__jsonparse_temp_tl { \c_tilde_str } { \textasciitilde }
+ }
\tl_rescan:no { } { \l__jsonparse_temp_tl }
\group_end:
}
@@ -528,7 +686,7 @@
\bool_if:NTF #1 {
\prop_item:Ne #2 {#3}
} {
- \__jsonparse_rescan:n { \prop_item:Ne #2 {#3} }
+ \exp_args:Ne \__jsonparse_rescan:n { \prop_item:Ne #2 {#3} }
}
}
@@ -599,6 +757,10 @@
\group_end:
}
+\tl_new:N \JSONParseArrayIndex
+\tl_new:N \JSONParseArrayKey
+\tl_new:N \JSONParseArrayValue
+
\NewDocumentCommand { \JSONParseArrayValuesMap } { s m m O{} m } {
\group_begin:
\jsonparse_filter:Nn #2 {#3}
@@ -608,11 +770,11 @@
} {#4} {
\int_incr:N \l__jsonparse_array_index_int
\tl_set:Ne \JSONParseArrayIndex { \__jsonparse_get_array_index:w ##1 \q_stop }
- \tl_set:Ne \JSONParseArrayKey {##1}
+ \tl_set:Nn \JSONParseArrayKey {##1}
\bool_if:NTF #1 {
\tl_set:Nn \JSONParseArrayValue { \prop_item:Nn #2 {##1} }
} {
- \tl_set:Nn \JSONParseArrayValue { \__jsonparse_rescan:n { \prop_item:Nn #2 {##1} } }
+ \tl_set:Nn \JSONParseArrayValue { \exp_args:Ne \__jsonparse_rescan:n { \prop_item:Nn #2 {##1} } }
}
\use:c {#5}
}
diff --git a/macros/latex/contrib/lastpage/README b/macros/latex/contrib/lastpage/README
index 50b80f6b3a..4545b13a60 100644
--- a/macros/latex/contrib/lastpage/README
+++ b/macros/latex/contrib/lastpage/README
@@ -1,4 +1,4 @@
-README for lastpage package, 2023-10-14, v2.0e
+README for lastpage package, 2024-04-27, v2.1a
TABLE OF CONTENTS
@@ -50,7 +50,7 @@ the manual (lastpage.pdf), the example (lastpage-example.tex),
the compiled example (lastpage-example.pdf),
driver (lastpage.drv), lastpage.dtx,
installation file (lastpage.ins),
-the style files (lastpage.sty, lastpage209.sty, lastpage23.sty,
+the style files (lastpage.sty, lastpage209.sty, lastpage2e.sty,
lastpageclassic.sty, lastpagemodern.sty),
and this README, already sorted in a TDS tree:
https://mirror.ctan.org/install/macros/latex/contrib/lastpage.tds.zip
@@ -83,7 +83,7 @@ b) Generate the package and driver files:
c) Install the files "*.sty" in your TDS tree:
cp lastpage.sty TDS:tex/latex/lastpage/
cp lastpage209.sty TDS:tex/latex/lastpage/
- cp lastpage23.sty TDS:tex/latex/lastpage/
+ cp lastpage2e.sty TDS:tex/latex/lastpage/
cp lastpageclassic.sty TDS:tex/latex/lastpage/
cp lastpagemodern.sty TDS:tex/latex/lastpage/
Replace "TDS:" by the prefix of your TDS tree
diff --git a/macros/latex/contrib/lastpage/lastpage-example.pdf b/macros/latex/contrib/lastpage/lastpage-example.pdf
index 1062a3273e..6d1c748525 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 ed088fea50..104d6b8418 100644
--- a/macros/latex/contrib/lastpage/lastpage.dtx
+++ b/macros/latex/contrib/lastpage/lastpage.dtx
@@ -1,19 +1,18 @@
% \iffalse meta-comment
%
% File: lastpage.dtx
-% Version: 2023-10-14 v2.0e
+% Version: 2024-04-27 v2.1a
% Info: Refers to last page's name
%
-% Copyright © 2010 - 2023 by
+% Copyright © 2010 - 2024 by
% H.-Martin Münch <Martin dot Muench at Uni-Bonn dot de>
% Portions of code copyrighted by other people as marked.
%
% This package was invented by Jeffrey P. Goldberg.
% I thought that a replacement was needed and therefore created the pageslts package,
-% https://ctan.org/pkg/pageslts
-% . Nevertheless, for compatibility with existing documents/packages as well as for
-% the low amount of resources needed by the lastpage package (no new counter!),
-% I updated this package.
+% https://ctan.org/pkg/pageslts. Nevertheless, for compatibility with existing
+% documents/packages as well as for the low amount of resources needed by the
+% lastpage package (no new counter!), I updated this package.
% Thanks go to Jeffrey P. Goldberg for allowing me to do this.
%
% While this package allows for things like "Page \thepage{} of \pageref{LastPage}"
@@ -66,7 +65,7 @@
\input docstrip.tex
\Msg{**********************************************************************}
\Msg{* Installation *}
-\Msg{* Package: lastpage 2023-10-14 v2.0e Refers to last page's name (HMM)*}
+\Msg{* Package: lastpage 2024-04-27 v2.1a Refers to last page's name (HMM)*}
\Msg{**********************************************************************}
\keepsilent
@@ -78,10 +77,10 @@
This is a generated file.
Project: lastpage
-Version: 2023-10-14 v2.0e
+Version: 2024-04-27 v2.1a
Info: Refers to last page's name
-Copyright (C) 2010 - 2023 by
+Copyright (C) 2010 - 2024 by
H.-Martin Muench <Martin dot Muench at Uni-Bonn dot de>
Portions of code copyrighted by other people as marked.
@@ -184,9 +183,9 @@ In memoriam
%
% \begin{macrocode}
%<*driver>
-\NeedsTeXFormat{LaTeX2e}[2022-11-01]
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\ProvidesFile{lastpage.drv}%
- [2023-10-14 v2.0e Refers to last page's name (HMM)]
+ [2024-04-27 v2.1a Refers to last page's name (HMM)]
\documentclass{ltxdoc}[2023/03/28]% v2.1j Standard LaTeX documentation class
\usepackage{holtxdoc}[2019/12/09]% v0.30 Private additional ltxdoc support (HO)
\hypersetup{%
@@ -251,7 +250,7 @@ In memoriam
% \DoNotIndex{\today,\upshape,\url,\usepackage,\value,\verb,\wd,\write}
%
% \title{The \xpackage{lastpage} package}
-% \date{2023-10-14 v2.0e}
+% \date{2024-04-27 v2.1a}
% \author{H.-Martin Münch\\\xemail{Martin.Muench at Uni-Bonn.de}\\
% invented by Jeffrey P. Goldberg\\\xemail{jeffrey+news at goldmark.org}}
%
@@ -370,7 +369,7 @@ In memoriam
% \section{Some \textsc{Warnings}\label{sec:warn}}
% \subsection{\texttt{\textbackslash AtEndDocument}\label{ssec:aed}}
% \indent {\bfseries |\AtEndDocument| is not used by the \pkg{lastpagemodern.sty}
-% version of the lastpage package, requiring \LaTeX -format 2022-11-01
+% version of the lastpage package, requiring \LaTeX -format 2023-06-01
% or newer. Instead |\AddToHook{enddocument/afterlastpage}| is used
% and the problem does not arise.}
% \bigskip
@@ -413,7 +412,7 @@ In memoriam
% \subsection{Interaction with ancient versions of the \xpackage{endfloat} package\label{sec:endfloat}}
%
% \indent {\bfseries |\AtEndDocument| is not used by the \pkg{lastpagemodern.sty}
-% version of the lastpage package, requiring \LaTeX -format 2022-11-01
+% version of the lastpage package, requiring \LaTeX -format 2023-06-01
% or newer. Instead |\AddToHook{enddocument/afterlastpage}| is used
% and the problem does not arise.}
%
@@ -552,22 +551,13 @@ In memoriam
% (with appropriate options) can do this.
%
% \subsection{Other packages manipulating \texttt{\textbackslash lastpage@putlabel}}
-% The \xpackage{hyperref} package redefined the |\lastpage@putlabel| command,
-% and the \xpackage{revtex4} class still redefines the |\lastpage@putlabel| command,
-% and the \xpackage{hyperref} package redefined the |\lastpage@putlabel| command,
-% if the \xpackage{revtex4} class was used, and the \xpackage{pageslts} package
+% The \xpackage{revtex4} class redefines the |\lastpage@putlabel| command
+% (with outdated two arguments), and the \xpackage{pageslts} package
% \textquotedblleft kills\textquotedblright{} the |\lastpage@putlabel| command,
% because that package uses more advanced labels.\newline
-% In my humble opinion it would be preferably if one package (the original one,
-% i.\,e. \xpackage{lastpage}) would do the job right, all others packages would
-% check for the version of that package, and if an old version is found,
-% an error (or at least a warning) message about the use of an outdated
-% package is given, and \textit{then} as
-% \textquotedblleft last aid\textquotedblright{} the command of the outdated
-% package is redefined.\newline
-% Therefore here none of the definitions or commands of the other packages
-% is altered, but |\lastpage@putlabel| was replaced by |\lastpage@putl@bel|.
-% Because |\lastpage@putlabel| is no longer called, now there should not be any
+% None of the definitions or commands of the other packages are altered,
+% but |\lastpage@putlabel| was replaced by |\lastpage@putl@bel|.
+% Because \linebreak |\lastpage@putlabel| is no longer called, now there should not be any
% double definitions of the \texttt{lastpage} label.
% \newpage
%
@@ -740,9 +730,9 @@ In memoriam
\message{^^JLaTeX Info: Executing hook `enddocument/afterlastpage'.}}%
}{\AtEndDocument{\message{^^JLaTeX Info: Executing hook `AtEndDocument'.}}%
}
-\usepackage[draft]{showkeys}[2023/05/11]% v3.19 Show cite and label keys (DPC, MH)
+\usepackage[draft]{showkeys}[2023/07/08]% v3.19 Show cite and label keys (DPC, MH)
%% Use final instead of draft to hide the keys. %%
-\usepackage[pdfpagelabels=true,hyperindex=false]{hyperref}[2023-07-08]% v7.01b
+\usepackage[pdfpagelabels=true,hyperindex=false]{hyperref}[2024-01-20]% v7.01h
%% Hypertext links for LaTeX
\hypersetup{extension=pdf,%
plainpages=false,%
@@ -756,7 +746,7 @@ In memoriam
pdfpagelayout=SinglePage%
}
\@ifpackageloaded{hyperref}{}{\usepackage{url}[2013/09/16]}% v3.4
-\usepackage{lastpage}[2023-10-14]% v2.0e
+\usepackage{lastpage}[2024/04/27]% v2.1a
\renewcommand{\@evenfoot}{%
\normalsize\slshape \today\hfil \upshape %
page \thepage{} of \pageref{LastPage}}
@@ -768,7 +758,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.0e as of 2023-10-14 (HMM; JPG).\newline
+\textsf{lastpage}, v2.1a as of 2024-04-27 (HMM; JPG).\newline
The package takes no options.\newline
For more details please see the documentation!\newline
@@ -793,7 +783,7 @@ trademark owner. There is no intention of infringement; the
usage is to the benefit of the trademark owner.\newline
\textbf{Tip}: Use \textit{logical page numbers}
-for the display of the pdf (in Adobe Acrobat Reader 2023.006.20320:
+for the display of the pdf (in Adobe Acrobat Reader 2024.002.20687:
Edit $>$ Preferences $>$ Page Display $>$
Page Content and Information: Use logical page numbers)!\newline
@@ -866,7 +856,7 @@ Last page's name (LastPage): \pageref{LastPage}
With modern \LaTeX{} it is possible to say:
\begin{quote}
\begin{verbatim}
-\NeedsTeXFormat{LaTeX2e}[2023-06-01]
+\NeedsTeXFormat{LaTeX2e}[2023-11-01]
\documentclass{article}
\pagenumbering{fnsymbol}
\begin{document}
@@ -904,7 +894,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}[2023/10/14 v2.0e lastpage:|\linebreak
+% |\def\loadlastpage{\ProvidesPackage{lastpage}[2024/04/27 v2.1a lastpage:|\linebreak
% | 2.09 or 2e? (HMM)]\relax\RequirePackage{lastpage2e}}|.)
%
% \begin{macrocode}
@@ -912,7 +902,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}[2023/10/14 v2.0e lastpage: 2.09 or 2e? (HMM)]\relax\RequirePackage{lastpage2e}}
+\def\loadlastpage{\ProvidesPackage{lastpage}[2024/04/27 v2.1a 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
@@ -952,9 +942,9 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
%<*lastpage2e>
%% Part of the "lastpage" package
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-\ProvidesPackage{lastpage2e}[2023/10/14 v2.0e %
+\ProvidesPackage{lastpage2e}[2024/04/27 v2.1a %
Decide which 2e lastpage version to use (HMM)]
-\@ifl@t@r\fmtversion{2022/11/01}{\RequirePackage{lastpagemodern}}{%
+\@ifl@t@r\fmtversion{2023/06/01}{\RequirePackage{lastpagemodern}}{%
\RequirePackage{lastpageclassic}}
\message{^^J}
%</lastpage2e>
@@ -967,7 +957,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
%<*lastpageclassic>
%% Part of the "lastpage" package
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
-\ProvidesPackage{lastpageclassic}[2023/10/14 v2.0e %
+\ProvidesPackage{lastpageclassic}[2024/04/27 v2.1a %
Refers to last page's name (HMM; JPG)]
%% allows for things like "Page \thepage{} of \pageref{LastPage}"
%% to get "Page 7 of 9"
@@ -1384,8 +1374,8 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{macrocode}
%<*lastpagemodern>
%% Part of the "lastpage" package
-\NeedsTeXFormat{LaTeX2e}[2022-11-01]
-\ProvidesPackage{lastpagemodern}[2023-10-14 v2.0e %
+\NeedsTeXFormat{LaTeX2e}[2023-06-01]
+\ProvidesPackage{lastpagemodern}[2024-04-27 v2.1a %
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";
@@ -1413,58 +1403,33 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \end{macrocode}
%
-% People use the label |LastPage| for calculations, for example with
-% \begin{quote}
-%\begin{verbatim}
-%\getrefbykeydefault{LastPage}{page}{0}
-%\end{verbatim}
-% \end{quote}
-% and with
-% \begin{quote}
-%\begin{verbatim}
-%\getpagerefnumber{LastPage}
-%\end{verbatim}
-% \end{quote}
-% (using the \pkg{refcount} package). On the one hand, direct calculations do not work,
-% if the page \textquotedblleft number\textquotedblright{} is not
-% a plain arabic number (1, 2, 3,\ldots) but |alph| (a, b, c,\ldots), |Alph| (A, B, C,\ldots),
-% |roman| (i, ii, iii, iv,\ldots), |Roman| (I, II, III, IV,\ldots),
-% |fnsymbol| (foot note symbols: \textasteriskcentered{} (asterisk), \textdagger{} (dagger),
-% \textdaggerdbl{} (double dagger), \textsection{} (section symbol),\ldots) or some other fancy name.
-% On the other hand, if the page number \emph{is} a plain arabic number,
-% calculations do work, if that plain number can be extracted from the label.
-% To handle non-numeric page \textquotedblleft number\textquotedblright{} as well as providing
-% extractable numeric page numbers, we need to determine (later), whether a page number is numeric or not:
-%
-% \begin{macro}{\lastpage@gobbleminus}
+% \begin{macro}{\lastpage@IfNumericTF}
+% |\lastpage@IfNumericTF| was needed to determine whether a page number was numeric or not.
+% Although it is no longer used, I am reluctant to remove it because it may have been used
+% in other places in documents.
+%
% \begin{macrocode}
\newcommand\lastpage@gobbleminus[1]{\ifx-#1\else#1\fi}
-%% from https://texfaq.org/FAQ-isitanum
-
% \end{macrocode}
-% \end{macro}
+% which is from \url{https://texfaq.org/FAQ-isitanum},
% \begin{macrocode}
\newcounter{lastpagecount}
-
% \end{macrocode}
-% \begin{macro}{\lastpage@IfNumericTF}
+% and similar to \url{https://tex.stackexchange.com/a/12811/17119}
% \begin{macrocode}
\newcommand{\lastpage@IfNumericTF}[3]{%
-%% similar to https://tex.stackexchange.com/a/17119
\sbox\z@{\c@lastpagecount=0\lastpage@gobbleminus{#1}\relax}%
\ifdim\wd0>\z@\relax#3% is not numeric
\else#2% is numeric
-\fi%
-}
+\fi}
% \end{macrocode}
% \end{macro}
%
% \DescribeMacro{\AddToHook\{begindocument/end\}}
% \indent |\lastpage@putlabel|, used by older versions of this package,
-% is redefined e.\,g. by \xpackage{revtex}, \xpackage{frenchle},
-% \xpackage{PPRcorners}, and old versions of \xpackage{hyperref}.
-% While now |\lastpage@putl@bel| is used instead, \xpackage{revtex}
+% is/was redefined by other packages.
+% While now |\lastpage@putl@bel| is used instead, other packages
% could also define a label \texttt{LastPage},
% which then would be multiply defined. (Which is no big issue,
% if it is associated with the same page.) Therefore we define
@@ -1483,8 +1448,8 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% (thanks to Ulrike Fischer for the report).
%
% \begin{macrocode}
-%% From https://tex.stackexchange.com/a/542425 with thanks to
-%% Prof. Enrico Gregorio
+%% from https://tex.stackexchange.com/a/12811/542425
+%% with thanks to Prof. Enrico Gregorio
\long\def\protected@iwrite#1#2#3{%
\begingroup%
#2%
@@ -1498,42 +1463,15 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \end{macrocode}
% \end{macro}
%
-% We need two macros for writing numeric and non-numeric page
-% \textquotedblleft numbers\textquotedblright{} into the \xfile{aux} file:
-%
-% \begin{macro}{\lastpage@numeric}
+% \begin{macro}{\lastpage@rmpage}
+% Just once we need |\@currentHpage| without the \mbox{\textquotedblleft |page.|\textquotedblright :}
% \begin{macrocode}
-\newcommand{\lastpage@numeric}{\protected@iwrite\@auxout{}{%
- \string\newlabel{LastPage}{%
- {\@currentlabel}%
- {\thepage}%
- {\@currentlabelname}%
- {\IfPackageLoadedTF{hyperref}{\ifHy@pageanchor page.\Hy@temp\fi%
- }{\@currentHref}}%
- {\@kernel@reserved@label@data}}}%
- }
+%% 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}
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\lastpage@nonnumeric}
-% \begin{macrocode}
-\newcommand{\lastpage@nonnumeric}{\protected@iwrite\@auxout{}{%
- \string\newlabel{LastPage}{%
- {\@currentlabel}%
- {\IfPackageLoadedTF{hyperref}{\string\begingroup%
- \string\pdfstringdefDisableCommands{\string\let%
- \string\TextOrMath\string\@firstoftwo}\thepage%
- \string\endgroup%
- }{\thepage}}%
- {\@currentlabelname}%
- {\IfPackageLoadedTF{hyperref}{\ifHy@pageanchor page.\Hy@temp\fi%
- }{\@currentHref}}%
- {\@kernel@reserved@label@data}}}%
- }
-
-% \end{macrocode}
-% \end{macro}
-%
% \begin{macro}{\lastpage@putl@bel}
% \indent This command does the writing of the label.
% If the \xpackage{pageslts} package is used, this \xpackage{lastpage} package
@@ -1544,22 +1482,28 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
\newcommand{\lastpage@putl@bel}{%
\IfPackageLoadedTF{pageslts}{\relax}{%
% \end{macrocode}
-%
-% \noindent Otherwise the label is set:\newpage
-%
+% \noindent Otherwise the label is set:
% \noindent If the \xpackage{hyperref} package is used, but page-anchors are disabled,
% the hyperlinking will not work. (The warning will also be shown, when only
% |\pageref*{LastPage}| is used (or neither one), but without messing with |\pageref|
% we cannot detect this.)
%
% \begin{macrocode}
- \IfPackageLoadedTF{hyperref}{\ifHy@pageanchor\else%
- \PackageWarningNoLine{lastpage}{%
- The \string\pageref{LastPage} link does not work\MessageBreak%
- using hyperref with disabled option `pageanchor'.\MessageBreak%
- Better enable `pageanchor' or use\MessageBreak%
- \string\pageref*{LastPage} (not generating a link)%
- }\fi}{}%
+ \IfPackageLoadedTF{hyperref}{%
+ \IfPackageAtLeastTF{hyperref}{2023-11-07}{\relax}{%
+ \PackageError{lastpage}{hyperref package version too old}{%
+ required version: 2023-11-07 or newer, found version:\MessageBreak%
+ \csname ver@hyperref.sty\endcsname\MessageBreak%
+ Update hyperref or use lastpageclassic.sty instead of\MessageBreak%
+ lastpagemodern.sty!}}%
+ \ifHy@pageanchor\else%
+ \PackageWarningNoLine{lastpage}{%
+ The \string\pageref{LastPage} link does not work\MessageBreak%
+ using hyperref with disabled option `pageanchor'.\MessageBreak%
+ Better enable `pageanchor' or use\MessageBreak%
+ \string\pageref*{LastPage} (not generating a link)}%
+ \fi%
+ }{}%
\begingroup%
% \end{macrocode}
%
@@ -1577,65 +1521,25 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% may be no more invocations of the output routines.
% To force the write out, we need to do an |\immediate| protected write
% into the \xfile{aux} file.
-%
-% \begin{macrocode}
- \IfPackageLoadedTF{hyperref}{%
- % with code from \Hy@EveryPageAnchor of the hyperref package,
- % 2023-07-08 v7.01b
- \ifHy@pageanchor%
- \ifHy@hypertexnames%
- \ifHy@plainpages%
- \def\Hy@temp{\the\c@page}%
- \def\Hy@TempPageAnchor{\hyper@@anchor{page.\the\c@page}}%
- \Hy@PageAnchorSlidesPlain%
- \else%
- % No \begingroup, because we are in a group anyway.
- \let\@number\@firstofone%
- \Hy@unicodefalse%
- \Hy@PageAnchorSlide%
- \pdfstringdef\@the@H@page{\thepage}%
- % No \endgroup, because we are in a group anyway.
- \EdefUnescapeString\@the@H@page{\@the@H@page}%
- \def\Hy@TempPageAnchor{\hyper@@anchor{page.\@the@H@page}}%
- \def\Hy@temp{\@the@H@page}%
- \fi%
- \else%
- % NOT! \Hy@GlobalStepCount\Hy@pagecounter
- \def\Hy@TempPageAnchor{\hyper@@anchor{page.\the\Hy@pagecounter}}%
- \def\Hy@temp{\the\Hy@pagecounter}%
- \fi%
- \fi%
- }{}%
- \IfFormatAtLeastTF{2023/06/01}{%
-% \end{macrocode}
-%
-% \noindent The |\label| command has been extended, see \LaTeX{} News Issue~37,
-% June~2023 (\LaTeX{} release 2023-06-01),
-% \url{https://www.latex-project.org/news/latex2e-news/ltnews37.pdf}.
-%
-% Here we need to distinguish between numeric page numbers, which shall be extractable,
-% and non-numeric ones, which need some protection:
% \begin{macrocode}
- \lastpage@IfNumericTF{\thepage}{\lastpage@numeric}{\lastpage@nonnumeric}%
- }{\IfPackageLoadedTF{hyperref}{\protected@iwrite\@auxout{}{%
- \string\newlabel{LastPage}{{}{\thepage}{}{%
- \ifHy@pageanchor page.\Hy@temp\fi}{}}}%
- }{\IfPackageLoadedTF{nameref}{\protected@iwrite\@auxout{}{%
- \string\newlabel{LastPage}{{}{\thepage}{}{}{}}}%
- }{\protected@iwrite\@auxout{}{\string\newlabel{LastPage}{%
- {}{\thepage}}}%
- }%
- }%
- }%
+ \protected@iwrite\@auxout{}{\string\newlabel{LastPage}{%
+ {\@currentlabel}{\thepage}{\@currentlabelname}%
+ {\IfPackageLoadedTF{hyperref}{\ifHy@pageanchor\@currentHpage\fi%
+ }{\@currentHref}}%
+ {\@kernel@reserved@label@data}}%
+ }%
% \end{macrocode}
-%
+% \pagebreak
% \noindent We also save the values, so that we can later (next rerun) check,
% whether they have been saved in the \xfile{aux} file.
%
% \begin{macrocode}
- \protected@iwrite\@auxout{}{\string\gdef\string\lastpage@lastpage{\thepage}}%
- \gdef\lastpage@Hy{\IfPackageLoadedTF{hyperref}{\ifHy@pageanchor\Hy@temp\fi}{}}%
- \protected@iwrite\@auxout{}{\string\gdef\string\lastpage@lastpageHy{\lastpage@Hy}}%
+ \protected@iwrite\@auxout{}{%
+ \string\gdef\string\lastpage@lastpage{\thepage}}%
+ \gdef\lastpage@Hy{\IfPackageLoadedTF{hyperref}{%
+ \ifHy@pageanchor\lastpage@rmpage{\@currentHpage}\fi}{}}%
+ \protected@iwrite\@auxout{}{%
+ \string\gdef\string\lastpage@lastpageHy{\lastpage@Hy}}%
% \end{macrocode}
%
% \noindent After the write-out we restore the page number again,
@@ -1691,7 +1595,6 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \end{macrocode}
% \end{macro}
-% \newpage
%
% \begin{macro}{\lastpage@fileswtestHy}
% \indent \hspace*{2em}When the \xpackage{hyperref} package has been loaded,
@@ -1702,7 +1605,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{macrocode}
\newcommand{\lastpage@fileswtestHy}{%
\ifHy@pageanchor%
- \lastpage@fileswtest{\Hy@temp}{\lastpage@lastpageHy}%
+ \lastpage@fileswtest{\@currentHpage}{\@the@H@page}%
\else%
\lastpage@fileswtest{\empty}{\lastpage@lastpageHy}%
\fi%
@@ -1789,7 +1692,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{description}
% \item[-] \TeX, \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2023-10-14, v2.0e,
+% \item[-] package \xpackage{lastpage}, 2024-04-27, v2.1a,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
%
@@ -1799,10 +1702,10 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{description}
% \item[-] \TeX-format \LaTeX{}, v2.09
%
-% \item[-] package \xpackage{lastpage209}, 2023-10-14, v2.0e,
+% \item[-] package \xpackage{lastpage209}, 2024-04-27, v2.1a,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
-% and does not work with \xpackage{hyperref}, which needs \LaTeX2e{}.
+% and does not work with \xpackage{hyperref}, which needs \LaTeX2e{}.\smallskip
%
% \DescribeMacro{lastpage2e.sty}
% The |lastpage2e.sty| for \LaTeXe{} (i.\,e. each document using
@@ -1811,7 +1714,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}, 2023-10-14, v2.0e,
+% \item[-] package \xpackage{lastpage}, 2024-04-27, v2.1a,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
%
@@ -1819,39 +1722,42 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% The |lastpageclassic.sty| for \LaTeXe{} (i.\,e. each document using
% the \xpackage{lastpageclassic} package) requires:
% \begin{description}
-% \item[-] \TeX-format \LaTeXe{} between 1994/12/01 and 2022/11/01,\newline
+% \item[-] \TeX-format \LaTeXe{} between 1994/12/01 and 2023-05-31,\newline
% \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2023-10-14, v2.0e,
+% \item[-] package \xpackage{lastpage}, 2024-04-27, v2.1a,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
% and can use
% \begin{description}
% \item[-] package \xpackage{hyperref}, 2023-07-08, v7.01b,
-% \url{https://ctan.org/pkg/hyperref}
+% \url{https://ctan.org/pkg/hyperref}\newline
+% (probably also some older and newer versions)
% \end{description}
%
% \DescribeMacro{lastpagemodern.sty}
% The |lastpagemodern.sty| for \LaTeXe{} (i.\,e. each document using
% the \xpackage{lastpagemodern} package) requires:
% \begin{description}
-% \item[-] \TeX-format \LaTeXe{} 2022-11-01, better yet 2023-06-01 or newer,\newline
+% \item[-] \TeX-format \LaTeXe{} 2023-06-01 or newer,\newline
% \url{https://www.CTAN.org}
%
-% \item[-] package \xpackage{lastpage}, 2023-10-14, v2.0e,
+% \item[-] package \xpackage{lastpage}, 2024-04-27, v2.1a,
% \url{https://ctan.org/pkg/lastpage}
% \end{description}
% and can use
% \begin{description}
-% \item[-] package \xpackage{hyperref}, 2023-07-08, v7.01b,
+% \item[-] package \xpackage{hyperref}, 2023-11-07 and newer
+% (tested with: 2024-01-20, v7.01h),
% \url{https://ctan.org/pkg/hyperref}
% \end{description}
+% \pagebreak
%
% \DescribeMacro{lastpage-example.tex}
% The |lastpage-example.tex| requires the same file as all
% documents using the \xpackage{lastpage} package, i.\,e.
% \begin{description}
-% \item[-] package \xpackage{lastpage}, 2023-10-14, v2.0e,
+% \item[-] package \xpackage{lastpage}, 2024-04-27, v2.1a,
% \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
@@ -1862,10 +1768,10 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \item[-] class \xpackage{article}, 2023-05-17, v1.4n, from \xpackage{classes}:
% \url{https://ctan.org/pkg/classes}
%
-% \item[-] package \xpackage{showkeys}, 2023-05-11, v3.19,
+% \item[-] package \xpackage{showkeys}, 2023-07-08, v3.19,
% \url{https://ctan.org/pkg/showkeys}
%
-% \item[-] package \xpackage{hyperref}, 2023-07-08, v7.01b,
+% \item[-] package \xpackage{hyperref}, 2024-01-20, v7.01h,
% \url{https://ctan.org/pkg/hyperref}
% \end{description}
%
@@ -1886,7 +1792,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \xpackage{fancyheadings}), but because they were mentioned, also they are listed
% here:
% \begin{description}
-% \item[-] package \xpackage{fancyhdr}, 2022-11-09, v4.1,
+% \item[-] package \xpackage{fancyhdr}, 2024/04/23, v4.2,
% \url{https://ctan.org/pkg/fancyhdr}
%
% \item[-] package \xpackage{nccfancyhdr}, 2004/12/07, v1.1,
@@ -1929,7 +1835,7 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \item[-] package \xpackage{zref}, 2023-09-14, v2.35,
% \url{https://ctan.org/pkg/zref}
%
-% \item[-] class \xpackage{memoir}, 2023-08-21, v3.8.1,
+% \item[-] class \xpackage{memoir}, 2024-01-26, v3.8.2,
% \url{https://ctan.org/pkg/memoir}.
% \end{description}
%
@@ -1971,13 +1877,13 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \end{description}
% which additionally contains\\
% \begin{tabular}{ll}
-% lastpage.ins & The installation file.\\
-% lastpage.drv & The driver to generate the documentation.\\
-% lastpage.sty & The \xext{sty}le file.\\
-% lastpage209.sty & The \xext{sty}le file for \LaTeX2.09{} \textbf{only}.\\
-% lastpage2e.sty & The \xext{sty}le file to determine which 2e-style to use.\\
-% lastpageclassic.sty & The \xext{sty}le file for older \LaTeX-formats.\\
-% lastpagemodern.sty & The \xext{sty}le file for the recent \LaTeX-format.\\
+% lastpage.ins & The \texttt{ins}tallation file.\\
+% lastpage.drv & The \mbox{\texttt{dr}i\texttt{v}er} to generate the documentation.\\
+% lastpage.sty & The \texttt{sty}le file.\\
+% lastpage209.sty & The \texttt{sty}le file for \LaTeX2.09{} \textbf{only}.\\
+% lastpage2e.sty & The \texttt{sty}le file to determine which 2e-style to use.\\
+% lastpageclassic.sty & The \texttt{sty}le file for older \LaTeX-formats.\\
+% lastpagemodern.sty & The \texttt{sty}le file for the recent \LaTeX-format.\\
% lastpage-example.tex & The example file.%
% \end{tabular}
%
@@ -2131,12 +2037,10 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% inventing the \xpackage{lastpage} package as well as for allowing me
% 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),
-% and the \Newsgroup{comp.text.tex} and \Newsgroup{de.comp.text.tex}
-% newsgroups for their help in all things \TeX{}. Thanks for bug reports
-% to \textsc{Ulrike Fischer} (twice), \textsc{Sebastian Bank}, \textsc{James Hedges},
-% \textsc{Mikhail Titov}, \textsc{Micha\l{} Herman}, \textsc{Matteo Gamboz}, and
-% \textsc{James Small}.
+% I know about creating a file in \xfile{dtx} format, OK, say it: copying).
+% Thanks for bug reports go to \textsc{Ulrike Fischer} (twice),
+% \textsc{Sebastian Bank}, \textsc{James Hedges}, \textsc{Mikhail Titov},
+% \textsc{Micha\l{} Herman}, \textsc{Matteo Gamboz}, and \textsc{James Small}.
% Thanks to \textsc{Sven Siegmund} for pointing out a necessary further
% explanation in the documentation.
%
@@ -2315,7 +2219,8 @@ 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.
+% which now allows fnsymbol as page numbering scheme (while links to, for example,
+% a page named $\|$ still do not work).
% \end{Version}
% \begin{Version}{2023-10-06 v2.0d}
% \item For plain arabic page numbers only, \pkg{lastpage} again writes the page number
@@ -2325,6 +2230,13 @@ To see the content of the \texttt{enddocument/afterlastpage}-hook
% \begin{Version}{2023-10-14 v2.0e}
% \item Replaced a |\PackageError| by |\PackageWarningNoLine| as suggested by \textsc{Ulrike Fischer}.
% \end{Version}
+% \begin{Version}{2024-04-27 v2.1a}
+% \item Utilizes the new |\@currentHpage| provided by the \LaTeX -kernel.
+% \item The issue with |\thepage| (former |\lastpage@nonnumeric| command) has has been fixed
+% at 2023-11-07, \url{https://github.com/latex3/hyperref/issues/303}.
+% \item |\lastpage@IfNumericTF| is no longer needed, but has not been removed
+% so as not to break older documents that use it in a different context.
+% \end{Version}
% \end{History}
% \bigskip
%
diff --git a/macros/latex/contrib/lastpage/lastpage.pdf b/macros/latex/contrib/lastpage/lastpage.pdf
index bd129a18b2..02cb1362b7 100644
--- a/macros/latex/contrib/lastpage/lastpage.pdf
+++ b/macros/latex/contrib/lastpage/lastpage.pdf
Binary files differ
diff --git a/macros/latex/contrib/litesolution/README.md b/macros/latex/contrib/litesolution/README.md
index 36b84425dc..f597d5fb09 100644
--- a/macros/latex/contrib/litesolution/README.md
+++ b/macros/latex/contrib/litesolution/README.md
@@ -1,17 +1,19 @@
-# The `LiteSolution` package
+# The `LiteSolution` class
-This template provides a fresh design for typesetting solutions of midterm or final exam, textbooks and other exercises.
+The LiteSolution class is designed for typesetting solutions of problems in exams, textbooks, etc.
-**Welcome to pull requests
-[here](https://github.com/xiamyphys/litesolution).**
+**Welcome to pull requests [here](https://github.com/xiamyphys/litesolution/pulls).**
## License
-This work may be distributed and/or modified under the conditions of the
-[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-either version 1.3c of this license or (at your option) any later version.
+This work may be distributed and/or modified under the conditions of the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), either version 1.3c of this license or (at your option) any later version.
This work has the LPPL maintenance status `maintained`.
-The Current Maintainer of this work is
-[Mingyu Hsia](https://www.ctan.org/author/xia-my). \ No newline at end of file
+The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my).
+
+## Derivative Works
+
+- [notebeamer](https://ctan.org/pkg/notebeamer): Package provides macros for inputting slides on note papers quickly.
+
+- [fadingimage](https://ctan.org/pkg/fadingimage): Package provides macros for inputting full width picture at the edges of pages quickly.
diff --git a/macros/latex/contrib/litesolution/doc/figure/universe.pdf b/macros/latex/contrib/litesolution/doc/figure/universe.pdf
index 7795e2b843..6ebe5201dc 100644
--- a/macros/latex/contrib/litesolution/doc/figure/universe.pdf
+++ b/macros/latex/contrib/litesolution/doc/figure/universe.pdf
Binary files differ
diff --git a/macros/latex/contrib/litesolution/doc/figure/universe.tex b/macros/latex/contrib/litesolution/doc/figure/universe.tex
index 3f432e5421..f2fa69eaab 100644
--- a/macros/latex/contrib/litesolution/doc/figure/universe.tex
+++ b/macros/latex/contrib/litesolution/doc/figure/universe.tex
@@ -1,14 +1,14 @@
\documentclass[svgnames,tikz]{standalone}
-\usepackage{xcolor}\let\Bbbk\relax
+\usepackage{xcolor}
\usepackage{newtxtext,mtpro2,cancel,physics2,xfrac}
\usephysicsmodule{ab.legacy}
\usetikzlibrary{tikzmark}
-\tikzset{every node/.style={align=center,MidnightBlue!30},
- every path/.style={MidnightBlue!30,line cap=round}}
+\tikzset{every node/.style={align=center,DarkSlateGray!30},
+ every path/.style={DarkSlateGray!30,line cap=round}}
\begin{document}\tikz{
- \node [above right] at (0,0) {$\color{MidnightBlue!30}
+ \node [above right] at (0,0) {$\color{DarkSlateGray!30}
\tikzmarknode a\Psi=\displaystyle\tikzmarknode b\int
\tikzmarknode c{\mathrm e}^{
\sfrac{\tikzmarknode d{\mathrm i}}{\tikzmarknode e\hbar}
@@ -40,5 +40,5 @@
node [scale=.45,above] {\footnotesize $\varphi$ - $\psi$ interaction\\Yukawa};
\draw ([yshift=-1ex] l.south) coordinate (L) --++ (0,-.3)
node [scale=.45,below] {Higgs\\\footnotesize Boson};
- \foreach \x in {A,B,...,L}\fill [MidnightBlue!30] (\x) circle (.025);}
+ \foreach \x in {A,B,...,L}\fill [DarkSlateGray!30] (\x) circle (.025);}
\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/litesolution/doc/litesolution.pdf b/macros/latex/contrib/litesolution/doc/litesolution.pdf
index 725a19a8d6..f22da56fc8 100644
--- a/macros/latex/contrib/litesolution/doc/litesolution.pdf
+++ b/macros/latex/contrib/litesolution/doc/litesolution.pdf
Binary files differ
diff --git a/macros/latex/contrib/litesolution/doc/litesolution.tex b/macros/latex/contrib/litesolution/doc/litesolution.tex
index 3a1212f47e..901dd4c49a 100644
--- a/macros/latex/contrib/litesolution/doc/litesolution.tex
+++ b/macros/latex/contrib/litesolution/doc/litesolution.tex
@@ -1,27 +1,26 @@
-\documentclass[ans,mtpro2]{litesolution}
+\documentclass[mtpro2]{litesolution}
\usepackage[listings]{tcolorbox}
-\usepackage{fancyvrb}
-
\lstset{language=[LaTeX]TeX,basicstyle=\small\ttfamily,breaklines=true,columns=flexible}
+
\title{\sffamily The \pkg{LiteSolution} Class}
\subtitle{\sffamily\scshape Hangzhou Dianzi University}
-\bioinfo{\scshape\sffamily Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} | \today, Version 2.1c}
-\cover[checkerboard]{schrodinger}\coverhead[5]{universe}
+\bioinfo{Mingyu Hsia (\mailto{xiamyphys@hdu.edu.cn})\quad|\quad\today\quad|\quad Version 2.2a}
+\cover[checkerboard]{schrodinger}\coverhead[3]{universe}
\begin{document}
-\maketitle[MidnightBlue]
+\maketitle[DarkSlateGray]
-\chapterimage{\UPFadingImage[trim={0 {.9\paperheight} 0 0},clip]{Beautiful-realities}}
-\chapter{An Introduction to The \pkg{LiteSolution} Class}
+\chapterimage{\UPFadingImage*[trim={0 {.9\paperheight} 0 0},clip]{Beautiful-realities}}
+\chapter{User Manual For The \pkg{LiteSolution} Class}
\section{Introduction}
-This is the document for the \pkg{litesolution} class, which provides a lite design for typesetting solutions of exams, textbooks or other exercises.
+This is the document for the \pkg{LiteSolution} class, which is designed for typesetting solutions of problems in exams, textbooks, etc.
-Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/litesolution}{GitHub}.
+Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn} or \href{https://github.com/xiamyphys/litesolution}{GitHub}.
-\subsection{Installing \pkg{litesolution} and loading it}
+\subsection{Installing \pkg{LiteSolution} and loading it}
Simply download \verb|litesolution.cls| file from \href{https://github.com/xiamyphys/litesolution}{GitHub} or \href{https://ctan.org/pkg/litesolution}{CTAN} and save it under your working directory. However, I strongly suggest to use terminal to install and update all packages to the latest version
@@ -43,36 +42,38 @@ The test environments are macOS + Mac\hologo{TeX} 2024 / Overleaf / Ubuntu 22.04
\subsection{The \mode{answer} option}
-The \mode{ans} and \mode{noans} modes can show or hide contents in \cmd{solution} environment and \cmd{ans} command.
-
-\subsection{The \mode{counter} option}
-
-The \mode{separate} and \mode{continuous} modes can make the page number between chapters be reset or continuous.
+The \mode{hideanswer} mode can hide contents in \cmd{solution} environment and \cmd{ans} command.
\subsection{The \mode{math} option}
-The \mode{mtpro2} and \mode{newtx} modes can format the font of formulas in the document. Please check if mtpro2 font has been installed on your computer correctly before using \mode{mtpro2} mode.
+The \mode{mtpro2}, \mode{newtx} and \mode{newtxsf} modes can format the font of formulas in the document. Please check if mtpro2 font has been installed on your computer correctly before using \mode{mtpro2} mode.
+
+\section{Related packages}
+\begin{description}
+ \item[Package \pkg{notebeamer}] provides macros for inputting slides on note papers quickly.
+ \item[Package \pkg{fadingimage}] provides macros for inputting full width picture at the edges of pages quickly.
+\end{description}
\section{Cover Configurations}
\subsection{The cover page configurations}
\begin{verbatim}
- \title{<content>} \subtitle{<content>}
- \bioinfo{<content>} \cover[<pattern>]{<image>}
- \coverhead[<angle>]{<image>} \coverhead*[<angle>]{<content>}
+ \title{<content>} \subtitle{<content>}
+ \bioinfo{<content>} \cover[<pattern>]{<image>}
+ \coverhead[<angle>]{<image>} \coverhead*[<angle>]{<content>}
- \begin{document} \maketitle[<color>]
+ \begin{document} \maketitle[<color>]
\end{verbatim}
\begin{verbatim}
- \title{\sffamily The \pkg{litesolution} Class}
+ \title{\sffamily The \pkg{LiteSolution} Class}
\subtitle{\sffamily\scshape Hangzhou Dianzi University}
- \bioinfo{\scshape\sffamily Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}
- {\ttfamily xiamyphys@gmail.com} | \today, Version 2.1a}
- \cover[checkerboard]{schrodinger} \coverhead[5]{universe}
+ \bioinfo{Mingyu Hsia (\mailto{xiamyphys@hdu.edu.cn})
+ \quad|\quad\today\quad|\quad Version 2.2a}
+ \cover[checkerboard]{schrodinger} \coverhead[5]{universe}
- \begin{document} \maketitle[Midnightblue]
+ \begin{document} \maketitle[Midnightblue]
\end{verbatim}
\subsection{The chapter head configurations}
@@ -105,7 +106,7 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl
\begin{verbatim}
\def\i{\mathrm i} \def\e{\mathrm e} \def\T{\mathsf T}
- \let\leq\leqslant \let\geq\geqslant
+ \let\leq\leqslant \let\geq\geqslant \let\vec\vv
\end{verbatim}
\section{Preset \pkg{amsthm} Environments}
@@ -113,7 +114,7 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl
\subsection{The \cmd{problem} environment}
\begin{tcblisting}{sidebyside,colback=DarkGreen!5,colframe=DarkGreen!80}
-\begin{problem}\leavevmode
+\begin{problem}[Keywords]\leavevmode
\begin{tasks}(2)
\task Choice A \task[\true] Choice B
\task Choice C \task Choice D
@@ -148,30 +149,27 @@ This command can create a fixable answer box when the mode \mode{noans} is enabl
This template has preset many packages. The following packages are the common ones
\begin{table}[htbp]
- \centering
+ \centering\small
\begin{tabular}{l l l l l l l l}
\toprule
- \pkg{amsthm} & \pkg{bm} & \pkg{booktabs} & \pkg{cancel} & \pkg{caption} & \pkg{circuitikz} & \pkg{datetime} & \pkg{derivative}\\
+ \pkg{amsthm} & \pkg{amssymb} & \pkg{bm} & \pkg{booktabs} &
+ \pkg{cancel} & \pkg{caption} & \pkg{circuitikz} & \pkg{datetime} \\
+ \midrule
+ \pkg{derivative} & \pkg{diagbox} & \pkg{esvect} & \pkg{extarrows} &
+ \pkg{fadingimage} & \pkg{fancyhdr} & \pkg{fixdif} & \pkg{fontawesome5} \\
\midrule
- \pkg{diagbox} & \pkg{esvect} & \pkg{extarrows} & \pkg{fancyhdr} & \pkg{fixdif} & \pkg{fontawesome5} & \pkg{geometry} & \pkg{indentfirst}\\
+ \pkg{geometry} & \pkg{graphics} & \pkg{graphicx} & \pkg{hyperref} &
+ \pkg{indentfirst} & \pkg{lipsum} & \pkg{mathtools} & \pkg{multicol} \\
\midrule
- \pkg{lipsum} & \pkg{multicol} & \pkg{multirow} & \pkg{nicematrix} & \pkg{paracol} & \pkg{pgfplots} & \pkg{physics2} & \pkg{refstyle} \\
+ \pkg{multirow} & \pkg{nicematrix} & \pkg{notebeamer} & \pkg{paracol} &
+ \pkg{pgfplots} & \pkg{physics2} & \pkg{qrcode} & \pkg{refstyle} \\
\midrule
- \pkg{setspace} & \pkg{siunitx} & \pkg{tabularx} & \pkg{tasks} & \pkg{wallpaper} & \pkg{xcolor} & \pkg{xeCJK} & \pkg{xfrac}\\
+ \pkg{setspace} & \pkg{siunitx} & \pkg{tabularx} & \pkg{tasks} &
+ \pkg{wallpaper} & \pkg{xcolor} & \pkg{xeCJK} & \pkg{xfrac} \\
\bottomrule
\end{tabular}
\end{table}
-\section{Related packages}
-
-\subsection{The \pkg{notebeamer} package}
-
-This package provides an easy way to input slides on note papers quickly for making annotations.
-
-\subsection{The \pkg{fadingimage} package}
-
-This package provides three commands for adding fading full width picture at the top or bottom of a page.
-
\clearpage\appendix\def\thesection{Appendix}
\section{Original code for the cover head}
diff --git a/macros/latex/contrib/litesolution/tex/litesolution.cls b/macros/latex/contrib/litesolution/tex/litesolution.cls
index 5cd81c3155..96d68b2164 100644
--- a/macros/latex/contrib/litesolution/tex/litesolution.cls
+++ b/macros/latex/contrib/litesolution/tex/litesolution.cls
@@ -1,5 +1,5 @@
%% ***********************************************************
-%% Copyright 2024 by Mingyu Hsia <xiamyphys@gmail.com> *
+%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> *
%% *
%% This work may be distributed and/or modified under *
%% the conditions of the LaTeX Project Public License *
@@ -19,34 +19,33 @@
%% ***********************************************************
% !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}
+\PassOptionsToPackage{no-math}{fontspec}
\PassOptionsToPackage{svgnames}{xcolor}
-\ProvidesClass{litesolution}[2024/04/20 v2.1c LiteSolution document class]
+\ProvidesClass{litesolution}[2024/05/06 v2.2a LiteSolution document class]
\RequirePackage{kvoptions}
\RequirePackage{etoolbox}
\SetupKeyvalOptions{family=LITE, prefix=LITE@, setkeys=\kvsetkeys}
\def\ekv#1{\kvsetkeys{LITE}{#1}}
-\DeclareStringOption[ans]{answer}
-\DeclareVoidOption{ans}{\ekv{answer=ans}}
-\DeclareVoidOption{noans}{\ekv{answer=noans}}
+\DeclareStringOption{answer}
+\DeclareVoidOption{hideanswer}{\ekv{answer=hideanswer}}
\DeclareStringOption[newtx]{math}
\DeclareVoidOption{newtx}{\ekv{math=newtx}}
+\DeclareVoidOption{newtxsf}{\ekv{math=newtxsf}}
\DeclareVoidOption{mtpro2}{\ekv{math=mtpro2}}
-\DeclareStringOption[separate]{counter}
-\DeclareVoidOption{separate}{\ekv{counter=separate}}
-\DeclareVoidOption{continuous}{\ekv{counter=continuous}}
-
\DeclareDefaultOption{\PassOptionsToClass{\CurrentOption}{book}}
\ProcessKeyvalOptions*\relax
\LoadClass[letterpaper,11pt,openany]{book}
-\RequirePackage{setspace,datetime,caption,booktabs,multicol,diagbox,paracol,enumitem}
+\RequirePackage{setspace,datetime,caption,booktabs,multicol,diagbox,paracol}
+\RequirePackage[inline]{enumitem}
\RequirePackage[notelinecolor=MidnightBlue,notemargin=.75in]{notebeamer}
\RequirePackage[nokeyprefix]{refstyle}
-\newref{fig}{name={\sffamily\bfseries Figure~}}
-\newref{tab}{name={\sffamily\bfseries Table~}}
+\newref{eq}{refcmd=(\ref{#1}),name={\sffamily eq.~},Name={\sffamily Eq.~}}
+\newref{fig}{name={\sffamily fig.~},Name={\sffamily Fig.~}}
+\newref{tab}{name={\sffamily tab.~},Name={\sffamily Tab.~}}
\geometry{margin=1in}
\linespread{1.3}
\ddmmyyyydate
@@ -70,19 +69,32 @@
\fi
\ifdefstring{\LITE@math}{mtpro2}{%
- \RequirePackage{amssymb}
- \let\Bbbk\relax
\RequirePackage[mtpscr,mtpccal,mtpfrak]{mtpro2}
+ \let\Bbbk\relax
\RequirePackage[mono=false]{libertine}
}{\relax}
\ifdefstring{\LITE@math}{newtx}{%
\RequirePackage[libertine,mono=false]{newtx}
+ \let\Bbbk\relax
+}{\relax}
+
+\ifdefstring{\LITE@math}{newtxsf}{%
+ \RequirePackage{newtxsf,mathrsfs}
+ \RequirePackage[mono=false]{libertine}
}{\relax}
\let\openbox\relax\def\hmmax{0}\def\bmmax{0}
-\RequirePackage{amsthm,physics2,bm,fixdif,derivative,cancel,extarrows,siunitx,xfrac,nicematrix}
+\RequirePackage{amsthm,amssymb,mathtools,physics2,bm,fixdif,derivative,cancel,extarrows,siunitx,xfrac,nicematrix}
+\renewcommand\qedsymbol{$\color{gray}\blacksquare$}
\usephysicsmodule{ab,braket,diagmat,doubleprod,xmat,ab.legacy,op.legacy}
\RequirePackage[e]{esvect}
+\let\vec\vv
+\renewcommand*\env@cases[1][.84]{%
+ \let\@ifnextchar\new@ifnextchar
+ \left\lbrace
+ \def\arraystretch{#1}%
+ \array{@{}l@{\quad}l@{}}%
+}
\AtBeginDocument{%
\def\i{\mathrm i}\def\e{\mathrm e}\def\T{\mathsf T}
\let\leq\leqslant\let\geq\geqslant
@@ -91,6 +103,7 @@
}
\RequirePackage[hidelinks]{hyperref}
+\def\mailto#1{\href{mailto:#1}{\ttfamily #1}}
\RequirePackage{fontawesome5}
\AddToHook{cmd/faIcon/before}{%
\begingroup\fontsize{\fpeval{\f@size*.8}}{0}\selectfont
@@ -98,7 +111,7 @@
\AddToHook{cmd/faIcon/after}{\endgroup}
\RequirePackage{circuitikz,pgfplots,fadingimage}
-\usetikzlibrary{arrows,tikzmark,patterns,calc,fadings,angles,quotes,intersections}
+\usetikzlibrary{arrows,tikzmark,patterns,calc,angles,quotes,intersections}
\tikzset{>=stealth',
every picture/.append style={%
line join=round,line cap=round,thick
@@ -124,13 +137,9 @@ every picture/.append style={%
\def\subtitle#1{\gdef\@subtitle{#1}}
\def\bioinfo#1{\gdef\@bioinfo{#1}}
-\NewDocumentCommand\coverhead{ s O{0} m }{
- \IfBooleanTF{#1}{
- \gdef\s@coverheadrotate{#2}
- \gdef\s@coverhead{#3}}{
- \gdef\@coverheadrotate{#2}
- \gdef\@coverhead{#3}
- }}
+\NewDocumentCommand\coverhead{ O{0} m }{
+ \gdef\@coverheadrotate{#1}\gdef\@coverhead{#2}
+}
\NewDocumentCommand\cover{ o m }{
\IfValueT{#1}{\gdef\@coverpattern{#1}}
\gdef\@cover{#2}}
@@ -140,9 +149,6 @@ every picture/.append style={%
\ifcsname @coverhead\endcsname
\node[rotate=\@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\includegraphics[width=\paperwidth]{\@coverhead}};
\fi
- \ifcsname s@coverhead\endcsname
- \node[scale=2,color=#1!30,rotate=\s@coverheadrotate] at ($(current page.center)+(0,.35*\paperheight)$) {\s@coverhead};
- \fi
\fill [white,opacity=.5] ($(current page.south west)+(.2*\paperwidth,.6*\paperheight)$) rectangle (current page.south east);
\fill [white,opacity=.5] ($(current page.south west)+(.3*\paperwidth,.7*\paperheight)$) rectangle (current page.south east);
\ifcsname @cover\endcsname
@@ -159,62 +165,76 @@ every picture/.append style={%
\fi}\restoregeometry\restorepagecolor
}
+\let\@chapapptmp\@chapapp
+\def\@chapapp{\textsc{\@chapapptmp}}
\def\chapterimage#1{\gdef\@chapterimage{#1}}
+\def\HUGE{\@setfontsize\HUGE{30}{40}}
\def\@makechapterhead#1{%
+ \def\thesection{\arabic{chapter}.\arabic{section}}
+ \def\theproblem{\thechapter.\arabic{problem}}
+ \vspace*{-36\p@}{%
+ \parindent \z@ \raggedright \normalfont
+ \ifcsname @chapterimage\endcsname
+ \@chapterimage
+ \else\leavevmode
+ \fi
+ \ifnum \c@secnumdepth >\m@ne
+ \if@mainmatter
+ \parbox{2cm}
+ {\centering\HUGE\normalfont\bfseries\textcolor{darkgray}\thechapter\vskip4\p@\normalsize\bfseries\textcolor{darkgray}{\bfseries\sffamily\@chapapp}}%
+ \fi
+ \fi
+ \interlinepenalty\@M\hspace*{3ex}
+ \huge\bfseries #1\par\nobreak
+ \vskip 36\p@
+}}
+\def\@makeschapterhead#1{%
+ \def\thesection{\arabic{section}}
+ \def\theproblem{\arabic{problem}}
\setcounter{section}{0}
\setcounter{problem}{0}
- \setcounter{page}{1}{\centering
+ {\centering
\ifcsname @chapterimage\endcsname
\@chapterimage
- \fi\leavevmode\vskip-42\p@
+ \fi\vskip-40\p@
\parindent \z@ \normalfont
\interlinepenalty\@M
\huge \bfseries #1\par\nobreak
- \vskip 26\p@}}
-
-\def\mailto#1{\href{mailto:#1}{\ttfamily #1}}
-\def\thesection{\arabic{section}}
-\def\ans#1{\underline{~#1~}}
-\AddToHook{cmd/section/before}{\setcounter{problem}{0}}
+ \vskip 28\p@}}
\RequirePackage{fancyhdr}
\pagestyle{fancy}
\let\oldheadrule\headrule
\renewcommand{\headrule}{{\color{gray}\oldheadrule}}
\renewcommand{\headrulewidth}{1pt}\cfoot{}
- \fancyhead[OL]{\textsc{\color{darkgray}\nouppercase\leftmark}}
+ \fancyhead[OL]{\color{darkgray}\nouppercase\leftmark}
\fancyhead[OR]{\color{darkgray}\sffamily\thepage}
- \fancyhead[ER]{\textsc{\color{darkgray}\nouppercase\rightmark}}
+ \fancyhead[ER]{\color{darkgray}\nouppercase\rightmark}
\fancyhead[EL]{\color{darkgray}\sffamily\thepage}
\setlength{\headheight}{14pt}
\RequirePackage{comment}
-\ifdefstring{\LITE@answer}{ans}{%
- \def\ans#1{\underline{~#1~}}
- \def\s@solute#1{\relax}\def\@solute#1{\relax}
- \AtBeginDocument{%
- \excludecomment{draft}
- \let\enddraft\relax}
- \def\true{%
- \addtocounter{task}{1}%
- \faIcon{check-circle}}
-}{\relax}
-
-\ifdefstring{\LITE@answer}{noans}{%
+\ifdefstring{\LITE@answer}{hideanswer}{%
\def\ans#1{\underline{\phantom{#1}}}
\def\choiceans#1{\phantom{#1}}
- \def\s@solute#1{\begin{draft}#1\end{draft}}
- \def\@solute#1{\begin{draft}\leavevmode\vspace*{#1ex}\end{draft}}
+ \def\s@solute#1{\begin{scratch}#1\end{scratch}}
+ \def\@solute#1{\begin{scratch}\leavevmode\vspace*{#1ex}\end{scratch}}
\AtBeginDocument{%
\excludecomment{solution}\excludecomment{note}
\let\endsolution\relax\let\endnote\relax}
\def\true{\addtocounter{task}{1}\thetask}
-}{\relax}
-\def\solute{\@ifstar\s@solute\@solute}
+}{
+ \def\ans#1{\underline{~#1~}}
+ \def\s@solute#1{\relax}\def\@solute#1{\relax}
+ \AtBeginDocument{%
+ \excludecomment{scratch}
+ \let\endscratch\relax}
+ \def\true{\addtocounter{task}{1}\faIcon{check-circle}}
+}
+\DeclareRobustCommand\solute{\@ifstar\s@solute\@solute}
\theoremstyle{definition}
-\newtheorem{problem}{\scshape\sffamily\color{DarkGreen}\faIcon{pen-square}~\scshape Problem}[chapter]
-\def\theproblem{\arabic{problem}}
-\newtheorem*{solution}{\scshape\sffamily\color{MidnightBlue}\faIcon{check-square}~\scshape Solution}
-\newtheorem*{draft}{\scshape\sffamily\color{MidnightBlue}\faIcon{check-square}~\scshape Solution}
-\newtheorem*{note}{\scshape\sffamily\color{DarkRed}\faIcon{info-circle}~\scshape Note} \ No newline at end of file
+\newtheorem{problem}{\color{DarkGreen}\faIcon{pen-square}~\textsc{\textsf{Problem}}}[chapter]
+\newtheorem*{solution}{\color{MidnightBlue}\faIcon{check-square}~\textsc{\textsf{Solution}}}
+\newtheorem*{scratch}{\color{MidnightBlue}\faIcon{check-square}~\textsc{\textsf{Scratch}}}
+\newtheorem*{note}{\color{DarkRed}\faIcon{info-circle}~\textsc{\textsf{Note}}} \ No newline at end of file
diff --git a/macros/latex/contrib/mathgreeks/README.md b/macros/latex/contrib/mathgreeks/README.md
new file mode 100644
index 0000000000..971fa77dc7
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/README.md
@@ -0,0 +1,30 @@
+# Math Greek letters - The mathgreeks package
+
+
+## Presentation
+
+The purpose of this package is to provide access to numerous Greek letter fonts
+for math mode, without altering other mathematical characters and symbols
+and without loading whole extensions that provide these fonts.
+Moreover, the chosen font or shape can be changed dynamically throughout the document.
+
+
+## Installation
+
+- run LaTeX on mathgreeks.ins, you obtain the file mathgreeks.sty;
+- if then you run LuaLaTeX on mathgreeks.dtx you get the file mathgreeks.pdf which is also in the archive;
+- if you run pdfLaTex on mathgreeks.dtx you get a shorter version of this pdf file without the examples using fontspec or unicode-math;
+- put the files mathgreeks.sty and mathgreeks.pdf in your TeX Directory Structure.
+
+
+## Author
+
+Antoine Missier
+
+Email: antoine.missier@ac-toulouse.fr
+
+
+## License
+
+Released under the LaTeX Project Public License v1.3 or later.
+See http://www.latex-project.org/lppl.txt
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.dtx b/macros/latex/contrib/mathgreeks/mathgreeks.dtx
new file mode 100644
index 0000000000..e6df4bc3d1
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.dtx
@@ -0,0 +1,1328 @@
+% \iffalse meta-comment
+%
+% Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%
+% 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.
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{mathgreeks.dtx}
+%</driver>
+%<*package>
+\NeedsTeXFormat{LaTeX2e}[2005/12/01]
+\ProvidesPackage{mathgreeks}
+ [2024/05/04 v1.1 .dtx Math Greek letters]
+%</package>
+%<*driver>
+\documentclass[11pt]{article}
+%\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[english]{babel}
+\usepackage{doc}
+\usepackage{geometry}
+\usepackage[mathdesign=Charter,otherfonts]{mathgreeks}
+\usepackage{sectsty}
+\usepackage{xcolor}
+\usepackage{spacingtricks}
+\usepackage{metalogo}
+%\usepackage{supertabular} % incompatible with tabls
+\usepackage{tabls}
+\usepackage{multirow}
+\usepackage{ifluatex}
+\ifluatex
+ \usepackage{unicode-math}
+ \setmainfont{XCharter}
+\else
+ \usepackage{charter}
+\fi
+\geometry{scale=0.73,vmarginratio=3:4,heightrounded}
+\MakeShortVerb{"}
+\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
+\allsectionsfont{\color{darkbrown}}
+\newcommand\bs{\textbackslash}
+\DisableCrossrefs
+%\CodelineIndex
+%\RecordChanges
+\OnlyDescription
+\usepackage{hyperref}
+\title{The \textsf{mathgreeks} package}
+\author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
+\date{\filedate, \fileversion}
+\hypersetup{%
+ colorlinks,
+ linkcolor=blue,
+ citecolor=red,
+ pdftitle={mathgreeks},
+ pdfsubject={LaTeX package},
+ pdfauthor={Antoine Missier}
+}
+
+\begin{document}
+\DocInput{mathgreeks.dtx}
+%\PrintChanges
+%\PrintIndex
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1061}
+%
+% \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 \~}
+%
+% \changes{v1.0}{2024/04/30}{Initial version}
+% \changes{v1.1}{2024/05/04}{Adding the libsans option; a few changes in the doc}
+%
+% \GetFileInfo{mathgreeks.sty}
+%
+% \maketitle
+% \tableofcontents
+%
+% \section{Introduction}
+%
+% The purpose of this package is to provide access to numerous Greek letter fonts
+% for math mode, without altering other mathematical characters and symbols
+% and without loading whole extensions that provide these fonts.
+%
+% The commands "\italpha", "\itbeta"\ldots\ produce the italic forms of the chosen font,
+% and "\upalpha", "\upbeta" \ldots\ produce the upright forms.
+% Style options allow choosing between italic or upright forms for the basic commands
+% "\alpha", "\beta"\ldots
+% Only letters whose glyph differs from the corresponding Roman letter
+% will be defined this way.
+% Therefore, the package does not provide a command "\omicron",
+% whose letter is identical to the Roman `o', and only a few uppercase letters are defined:
+% "\Gamma", "\Delta", "\Theta"\ldots
+%
+% \medskip
+% An ISO recommendation, rarely followed, is to typeset uppercase
+% Greek letters in italic shape, as for other variables~\cite{ICTNS}.
+% This is automatically achieved, for some particular fonts, with packages
+% such as \textsf{fixmath} by Walter Schmidt~\cite{FIXM},
+% \mbox{\textsf{isomath}} by Günter Milde~\cite{ISOM}
+% or \textsf{pm-isomath} by Claudio Beccari~\cite{PMISO} and optionally with some others
+% (such as \textsf{mathpazo} or \textsf{mathptmx} with the option \texttt{slantedGreek}).
+% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result
+% with the option \mbox{\texttt{math-style=ISO}} provided
+% by the \textsf{unicode-math} package~\cite{UNIC}.
+%
+% \pagebreak ^^A To get the same page breaking when compiling with pdfLaTeX
+% Furthermore there are several packages that provide the uppercase Greek letters
+% in italic and have also options to typeset the lowercase Greek
+% letters in upright shape.
+% Notably, let us mention
+% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
+% \mbox{\textsf{kpfonts}}~\cite{KPF},
+% \mbox{\textsf{fourier}}~\cite{FOUR}, but also
+% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}~\cite{PX}), \mbox{\textsf{txgreeks}}
+% (using \textsf{txfonts}~\cite{TX}),
+% \mbox{\textsf{libertinust1math}}~\cite{LIB}, \mbox{\textsf{libgreek}}, etc.
+% A special mention goes to \textsf{lgrmath} of Jean-François Burnol~\cite{LGR}
+% which allows the use of any Greek LGR-encoded font in math mode,
+% an idea taken up in \textsf{mathgreeks}.
+% Also note \textsf{newtxmath}~\cite{NTX} which has several font options.
+% For upright lowercase letters, we have the nice \textsf{upgreek}~\cite{GREEK} package.
+%
+% \medskip
+% The interest of \textsf{mathgreeks} lies in being able to choose the Greek letters font
+% from one of these packages or from a TrueType or OpenType font installed on your computer.
+% The package sets Greek letters in the desired font and shape
+% and enables to change font or shape dynamically within the document.
+%
+% \section{Options and settings}
+%
+% \subsection{Package options}
+%
+% When calling the package, there are three types of options:
+% \begin{itemize}
+% \item Font options,
+% \item Shape options (the style),
+% \item Additional options.
+% \end{itemize}
+% These options use the `\texttt{key=value}' mechanism.
+% When a default value is set, the key can be used without specifying a value
+% (which will then be the default value).
+% Some keys represent booleans with the default value being `\texttt{true}'.
+%
+% \bigskip
+% The first table, in two parts, presents the different keys corresponding to font options,
+% the list of possible values (complete when it is reduced).
+% The default value is indicated in bold, the second part consist in boolean options.
+% Results are presented in section~\ref{examples}.
+%
+% \begin{table}[h]
+% \begin{center}\ttfamily
+% \begin{tabular}{ll}
+% \hline
+% \vstrut{2ex}\normalfont{Option} & \normalfont{Values} \\
+% \hline
+% lgrmath & Alegreya-LF, Cochineal-LF, \textbf{fcm}\ldots \\
+% fontspec & FreeSerif, \textbf{GFS Didot}, Cambria\ldots \\
+% unicode-math & \textbf{Latin Modern Math}, STIX Two Math\ldots \\
+% upgreek & Euler, \textbf{Symbol}, Symbolsmallscale \\
+% mathdesign & Utopia, Garamond, \textbf{Charter} \\
+% kpfonts & \textbf{normal}, light \\
+% \hline
+% \end{tabular}
+% \hspace{1cm}
+% \begin{tabular}{l}
+% \hline
+% \vstrut{2ex}\normalfont{Booleans} \\
+% \hline
+% fourier \\
+% pxfonts \\
+% txfonts \\
+% libertinus \\
+% concrete \\
+% cmbright \\
+% \hline
+% \end{tabular}
+% \caption{font options\label{table:font}}
+% \end{center}
+% \end{table}
+%
+% \vspace{-1\baselineskip}
+% The \texttt{fontspec} and \texttt{unicode-math} options require loading
+% the corresponding packages, and these can only work when running through
+% \LuaLaTeX\ (or \XeLaTeX).
+% The \texttt{fontspec} option allows for the use of most TrueType or OpenType
+% fonts installed on your computer, those that have Greek letters.
+% Although the \textsf{unicode-math} package loads the \textsf{fontspec} package,
+% the fonts usable with one of these options are not necessarily usable with the other;
+% \texttt{fontspec} has a large number of possible values.
+%
+% When calling "\boldmath" (outside the math environment), you get the letters in bold face,
+% but the command "\mathbf" doesn't work here.
+%
+% \bigskip
+% The second table below presents the shape options. If the shape option
+% is not specified, the italic shape is chosen by default, meaning that the commands
+% "\alpha", "\beta", \ldots, "\Delta", "\Gamma"\ldots\ will produce the same result
+% as the corresponding "\it"\meta{letter} commands.
+%
+% \begin{table}[h]
+% \begin{center}
+% \begin{tabular}{ll}
+% \hline
+% \vstrut{2ex}\normalfont{Option} & \normalfont{Description} \\
+% \hline
+% \texttt{greekup} & lowercase letters in upright shape \\
+% \texttt{Greekup} & uppercase letters in upright shape \\
+% \texttt{TeX} & lowercase=italic, uppercase=upright \\
+% \texttt{ISO} & lowercase=italic, uppercase=italic \\
+% \texttt{upright} & lowercase=upright, uppercase=upright \\
+% \texttt{style} & possible values: \texttt{TeX}, \texttt{ISO}, \texttt{upright} \\
+% \hline
+% \end{tabular}
+% \caption{shape options\label{table:shape}}
+% \end{center}
+% \end{table}
+%
+% \vspace{-1\baselineskip}
+% \begin{itemize}
+% \item Except for \texttt{style}, all these options are booleans.
+% \item The \texttt{Greekup} option est initialized to \texttt{true} (corresponding
+% to the \texttt{TeX} style).
+% \item The \texttt{style=ISO} option produces the same result as the simple
+% \texttt{ISO} option, and the same applies to the other two styles
+% (\texttt{TeX}, \texttt{upright}).
+% \item To get lowercase letters in upright shape and uppercase letters in italic,
+% activate \begin{center}\texttt{greekup=true,Greekup=false}.\end{center}
+% \end{itemize}
+%
+% \bigskip
+% The following list presents the additional options, which are also booleans:
+% \begin{description}
+% \item[\texttt{savegreeks}] Saves the letters corresponding to the original commands
+% "\alpha", "\beta"\ldots so that they remain accessible through the commands
+% "\backalpha", "\backbeta"\ldots
+% \item[\texttt{otherfonts}] Allows dynamic font switching (see next section)
+% for later use of \texttt{lgrmath}, \texttt{fourier}, \texttt{libertinus}
+% or \texttt{upgreek}.
+% \item[\texttt{libsans}] This is a special option that works only with \texttt{libertinus}
+% to produce a sanserif font.
+% \item[\texttt{lowercase}] This option is initialized to \texttt{true};
+% \texttt{lowercase=false} allows keeping the original lowercase Greek letters
+% without redefining the commands "\alpha", "\beta"\ldots
+% \item[\texttt{uppercase}] This option is initialized to \texttt{true};
+% \texttt{uppercase=false} allows keeping the original uppercase Greek letters
+% without redefining the commands "\Gamma", "\Delta"\ldots
+% \end{description}
+%
+% \subsection{Dynamic settings commands}
+%
+% There are two commands for dynamic settings:
+% \begin{description}
+% \item[] "\setmathgreeks"
+% This command takes a mandatory parameter which is a list of
+% `\texttt{key=value}' settings among the shape options presented
+% in table~\ref{table:shape} (the other options are not usable in this command).
+% This allows modifying these settings in the body of the document,
+% with a global effect, or local if the command is called in an environment
+% or a group (delimited by braces).
+%
+% \item[] "\mathgreeksfont"
+% This command allows modifying the font of Greek letters throughout the document,
+% with a global or local effect.
+% The possible options fall into two categories:
+% \begin{center}
+% \texttt{fontspec}, \texttt{unicode-math}, \\
+% \texttt{enc}, \texttt{fam}, \texttt{series}, \texttt{shape}.
+% \end{center}
+% The \texttt{fontspec} and \texttt{unicode-math} options are identical
+% to those in table~\ref{table:font}. In that case, the shape is set by "\setmathgreeks"
+% (before or after).
+% The other previous font options (\texttt{lgrmath}, \texttt{mathdesign},
+% \texttt{fourier}, etc.)\@ are not usable in "\mathgreeksfont".
+% However, these fonts can be obtained by specifying the encoding (option \texttt{enc}),
+% family (option \texttt{fam}), series and shape: the New Font Selection Scheme (NFSS).
+% The series defines the `boldness' and has a default value: \texttt{series=m} (medium).
+% For the shape, the default value is \texttt{shape=it};
+% \texttt{enc} and \texttt{fam} have no default value.
+% For example,
+% \begin{center}
+% "\mathgreeksfont{enc=OML,fam=mdbch,shape=n}"
+% \end{center}
+% will produce upright letters from the Charter font provided by \textsf{mathdesign}.
+% For each font option seen previously,
+% the following examples (section~\ref{examples}) indicates
+% the values to give to \texttt{enc}, \texttt{fam}, and \texttt{shape}.
+% The font definition by NFSS attributes will not produce specific commands for italics
+% "\it"\meta{letter} or for upright letters "\up"\meta{letter}.
+% Only the commands "\alpha", "\beta"\ldots will be redefined according to the
+% selected shape.
+%
+% When using the \texttt{fontspec} or \texttt{unicode-math} option,
+% these NFSS options have no effect.
+%
+% Notice that the encoding obtained by the package font options is faster, moreover
+% the command "\boldmath" doesn't work anymore
+% when changing the font with \texttt{enc}, \texttt{fam} and \texttt{shape},
+% but you can obtain the boldface
+% letters with \texttt{series=b}, or \texttt{series=bx} (bold extended).
+%
+% \end{description}
+%
+% \section{Examples} \label{examples}
+% \begin{description}
+% \item[] "\greektable"
+% The following examples are produced with the "\greektable" command.
+% This command generates a table with two rows: the first contains the lowercase letters
+% obtained with "\alpha", \ldots, "\omega", and the second contains variants
+% "\varepsilon", "\vartheta"\ldots\ of certain letters as well as the uppercase letters
+% obtained with "\Gamma", "\Delta", \ldots, "\Omega"
+% (for those who differ from their Latin equivalent).
+% \end{description}
+%
+% \subsection{PostScript font options}
+%
+% The \texttt{upgreek} option, as its name suggests, produces only upright letters,
+% and the \texttt{Euler} font does not have the variants "\varrho" and "\varsigma".
+% The \texttt{Symbolsmallscale} font is identical to Symbol but reduced in size by 90\,\%;
+% \texttt{Symbol} and \texttt{Symbolsmallscale} have no bold version.
+% \texttt{mathdesign=Garamond} yields a virtual font
+% that may not always work.
+%
+% \newlength\legendwidth
+% \setlength\legendwidth{3.2cm}
+% \newcommand*\doublerows[1]{\multirow{2}{\legendwidth}[-1.5ex]{\bfseries#1}}
+
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{\:}c|}
+% \hline
+% \makebox[\legendwidth][l]{\textbf{upgreek=...}} & \makebox[8.4cm]{Résult}
+% & \makebox[1cm]{enc} & \makebox[1cm]{fam} & shape \\
+% \hline
+% \textbf{Symbol}
+% & \mathgreeksfont{enc=U,fam=psy,shape=n}\greektable
+% & U & psy & n \\
+% \hline
+% \textbf{Symbolsmallscale}
+% & \mathgreeksfont{enc=U,fam=fsy,shape=n} \greektable
+% & U & fsy & n \\
+% \hline
+% \textbf{Euler}
+% & \mathgreeksfont{enc=U,fam=eur,shape=n} \greektable
+% & U & eur & n \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \textbf{mathdesign=...} & \makebox[8.4cm]{Résult} & enc & fam & shape \\
+% \hline
+% \doublerows{Utopia}
+% & \mathgreeksfont{enc=OML,fam=mdput} \greektable
+% & OML & mdput & it \\
+% & \mathgreeksfont{enc=OML,fam=mdput,shape=n} \greektable
+% & OML & mdput & n \\
+% \hline
+% \doublerows{Garamond}
+% & \mathgreeksfont{enc=OML,fam=mdugm} \greektable
+% & OML & mdugm & it \\
+% & \mathgreeksfont{enc=OML,fam=mdugm,shape=n} \greektable
+% & OML & mdugm & n \\
+% \hline
+% \doublerows{Charter}
+% & \mathgreeksfont{enc=OML,fam=mdbch} \greektable
+% & OML & mdbch & it \\
+% & \mathgreeksfont{enc=OML,fam=mdbch,shape=n} \greektable
+% & OML & mdbch & n \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% \textbf{kpfonts=...} & \makebox[8.4cm]{Résult} & enc & fam & shape \\
+% \hline
+% \doublerows{normal}
+% & \mathgreeksfont{enc=OML,fam=jkp} \greektable
+% & OML & jkp & it \\
+% & \mathgreeksfont{enc=U,fam=jkpmia} \greektable
+% & U & jkpmia & it \\
+% \hline
+% \doublerows{light}
+% & \mathgreeksfont{enc=OML,fam=jkpl} \greektable
+% & OML & jkpl & it \\
+% & \mathgreeksfont{enc=U,fam=jkplmia} \greektable
+% & U & jkplmia & it \\
+% \hline
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|@{}c@{}|c@{$\;$}c@{}c|}
+% \hline
+% Boolean options & \makebox[8.2cm]{Résult} & enc & fam & shape \\
+% \hline
+% \doublerows{fourier}
+% & \mathgreeksfont{enc=FML,fam=futmi} \greektable
+% & FML & futmi & it \\
+% & \mathgreeksfont{enc=FML,fam=futm} \greektable
+% & FML & futm & it \\
+% \hline
+% % \doublerows{pxfonts}
+% & \mathgreeksfont{enc=OML,fam=pxmi} \greektable
+% & OML & pxmi & it \\
+% & \mathgreeksfont{enc=U,fam=pxmia} \greektable
+% & U & pxmia & it \\
+% \hline
+% \doublerows{txfonts}
+% & \mathgreeksfont{enc=OML,fam=txmi} \greektable
+% & OML & txmi & it \\
+% & \mathgreeksfont{enc=U,fam=txmia} \greektable
+% & U & txmia & it \\
+% \hline
+% \doublerows{libertinus}
+% & \mathgreeksfont{enc=LS1,fam=libertinust1math} \greektable
+% & LS1 & * & it \\
+% & \mathgreeksfont{enc=LS1,fam=libertinust1math,shape=n} \greektable
+% & LS1 & * & n \\
+% \hline
+% \textbf{concrete}
+% & \mathgreeksfont{enc=OML,fam=ccm} \greektable
+% & OML & ccl & it \\
+% \hline
+% \textbf{cmbright}
+% & \mathgreeksfont{enc=OML,fam=cmbrm} \greektable
+% & OML & cmbrm & it \\
+% \hline
+% \end{tabular}
+% \end{center}
+% \emph{* The asterisks for the} \textbf{libertinus} \emph{family corresponds to}
+% \textnormal{`libertinust1math'} \emph{a name too long to appear in this table.
+% Activating the} \texttt{libsans} \emph{package option yields a sanserif font.}
+%
+% \subsection{The \texttt{lgrmath} option}
+%
+% The \texttt{lgrmath} option, inspired by the eponymous package of J.F. Burnol,
+% has a large number of possible values. We present here only a few.
+% The documentation of the \textsf{lgrmath} package~\cite{LGR} explains how
+% to list the fonts available on your distribution with the LGR encoding.
+% One can also consult with profit the documentation of \textsf{cb-fonts}\cite{CB},
+% the Greek fonts of Claudio Beccari.
+%
+% With the \texttt{lgrmath} option, the alternative commands for the variants
+% produce the same glyphs as those of the normal letters except for "\varsigma".
+% However, the "\varsigma" $\varsigma$ often substitutes for the usual "\sigma" $\sigma$
+% when using dynamic font changes through "\mathgreeksfont" with \texttt{enc=LGR}.
+%
+% We have not presented here the third column previously indicating the values for
+% \texttt{enc}, \texttt{fam}, and \texttt{shape} because, for this entire section,
+% we have \texttt{enc=LGR}, \texttt{fam=\meta{font-name}}, the name of the font presented,
+% and \texttt{shape=it}, for the italic shape, or \texttt{shape=n}, for the upright shape.
+% Example:
+% \begin{center}
+% "\mathgreeksfont{enc=LGR,fam=Alegreya-LF,shape=n}"
+% \end{center}
+%
+%\setlength\legendwidth{4cm}
+% \newcommand\lgrtbl[1]{%
+% \doublerows{#1}
+% & \mathgreeksfont{enc=LGR,fam=#1} \greektable \\
+% & \mathgreeksfont{enc=LGR,fam=#1,shape=n} \greektable \\
+% \hline
+% }
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{lgrmath=...} & Résult \\
+% \hline
+% \lgrtbl{Alegreya-LF}
+% \lgrtbl{Cochineal-LF}
+% \lgrtbl{LibertinusSerif-LF}
+% \lgrtbl{LibertinusSans-LF}
+% \lgrtbl{NotoSerif-LF}
+% \lgrtbl{droidserif}
+% \lgrtbl{fcm}
+% \lgrtbl{gentium}
+% \lgrtbl{lmss}
+% \end{tabular}
+% \end{center}
+%
+% \ifluatex
+% \subsection{The \texttt{fontspec} option}
+%
+% Most TrueType or OpenType fonts can be used here.
+% ^^A Needs the \textsf{fontspec} package and must be run through \LuaLaTeX\ or \XeLaTeX.
+% Some of the fonts below are non free, and some do not have all the variants,
+% for example Arial, Palatino Linotype, Times New Roman.
+%
+% \newcommand\fontspectbl[2][fontspec]{%
+% \doublerows{#2}
+% & \mathgreeksfont{#1=#2}
+% \setmathgreeks{style=ISO} \greektable \\
+% & \mathgreeksfont{fontspec=#2}
+% \setmathgreeks{style=upright} \greektable \\
+% \hline
+% }
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{fontspec=...} & Résult \\
+% \hline
+% \fontspectbl{DejaVu Serif}
+% \fontspectbl{DejaVu Sans}
+% \fontspectbl{FreeSerif}
+% \fontspectbl{FreeSans}
+% \fontspectbl{GFS Artemisia}
+% \fontspectbl{GFS Didot}
+% \fontspectbl{Liberation Serif}
+% \fontspectbl{Liberation Sans}
+% \end{tabular}
+% \end{center}
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{fontspec=...} & Résult \\
+% \hline
+% \fontspectbl{Linux Libertine O}
+% ^^A\fontspectbl{Linux Biolinum O}
+% \fontspectbl{Arial}
+% \fontspectbl{Cambria}
+% \fontspectbl{Palatino Linotype}
+% \fontspectbl{Times New Roman}
+% \end{tabular}
+% \end{center}
+%
+%
+% \subsection{The \texttt{unicode-math} option}
+%
+% \begin{center}
+% \begin{tabular}{|l|c|}
+% \hline
+% \textbf{unicode-math=...} & Résult \\
+% \hline
+% \fontspectbl[unicode-math]{Latin Modern Math}
+% \fontspectbl[unicode-math]{STIX Two Math}
+% \fontspectbl[unicode-math]{Fira Math}
+% \end{tabular}
+% \end{center}
+%
+% \else
+% \typeout{This is a short version of the documentation.
+% Use LuaLaTeX to get the complete version}
+% \fi
+%
+% \StopEventually{
+% \begin{thebibliography}{20}
+% \begin{raggedright}
+% \bibitem{ICTNS} \emph{On the Use of Italic and up Fonts for Symbols in Scientific Text},
+% I.M.~Mills and W.V.~Metanomski, ICTNS (Interdivisional Committee
+% on Terminology, Nomenclature and Symbols), dec 1999,
+% \url{https://old.iupac.org/standing/idcns/italic-roman_dec99.pdf}.
+% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
+% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
+% Khaled Hosny, and others, CTAN, v0.8r 2023/08/13.
+% \bibitem{FSPEC} \emph{The \textsf{fontspec} package -- Font selection for \XeLaTeX\
+% and \LuaLaTeX}, Will Robertson, CTAN, v2.9b 2024/04/27.
+% \bibitem{FIXM} \emph{The \textsf{fixmath} package for \LaTeXe}, Walter Schmidt,
+% CTAN, v0.9 2000/04/11.
+% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology},
+% Günter Milde, CTAN, v0.6.1 2012/09/04.
+% \bibitem{PMISO} \emph{\textsf{PM-ISOmath}, The Poor Man ISO math bundle},
+% the \textsf{pm-isomath} package by Claudio Beccari, CTAN, v1.2.00 2021/08/04.
+% \bibitem{GREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt,
+% CTAN, v2.0 2003/02/12.
+% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
+% Paul Pichaureau, CTAN, v2.31 2013/08/29.
+% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
+% Christophe Caignaert, CTAN, v3.34 20/09/2022.
+% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
+% Michel Bovani, CTAN, v1.3 2005/01/30.
+% \bibitem{PX} \emph{\textsf{PX Fonts} -- Palatino-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/14.
+% \bibitem{TX} \emph{\textsf{TX Fonts} -- Times-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/15.
+% \bibitem{CB} \emph{The CB Greek fonts}, Claudio Beccari, CTAN, 2008/01/01.
+% \bibitem{PXG} \emph{The \textsf{pxgreeks} package}, Jean-François Burnol,
+% CTAN v1.0 2011/03/16.
+% \bibitem{TXG} \emph{The \textsf{txgreeks} package}, Jean-François Burnol,
+% CTAN v1.0 2011/03/16.
+% \bibitem{LIBG} \emph{The \textsf{libgreek} package}, Jean-François Burnol,
+% CTAN v1.1 2022/11/11.
+% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, v1.0 2022/11/16.
+% \bibitem{NTX} \emph{New TX font package}, Michael Sharpe, CTAN, v1.735 2024/03/01.
+% \bibitem{LIB} \emph{The LibertinusT1 Math Package}, Michael Sharpe, CTAN,
+% v2.0.4 2024/01/14.
+% \bibitem{CHEM} \emph{\textsf{chemgreek} -- Upright Greek letters in chemistry},
+% Clemens Niederberger, CTAN, v1.1a 2020/01/16.
+% \end{raggedright}
+% \end{thebibliography}
+% }
+%
+% \section{Implementation}
+%
+% \begin{macrocode}
+\RequirePackage{kvoptions}
+%\SetupKeyvalOptions{family=mgr} % mathgreeks by default
+
+\DeclareStringOption{lgrmath}[fcm]
+\newif\ifmathgreeks@lgrmath
+\AddToKeyvalOption*{lgrmath}{\mathgreeks@lgrmathtrue}
+\DeclareStringOption{fontspec}[GFS Didot]
+\newif\ifmathgreeks@fontspec
+\AddToKeyvalOption*{fontspec}{\mathgreeks@fontspectrue}
+\newif\ifmathgreeks@unicodemath
+\define@key{mathgreeks}{unicode-math}[Latin Modern Math]{
+ \newcommand*{\mathgreeks@unicodemath}{#1}
+ \mathgreeks@unicodemathtrue}
+\DeclareStringOption{upgreek}[Symbol]
+\newif\ifmathgreeks@upgreek
+\AddToKeyvalOption*{upgreek}{\mathgreeks@upgreektrue
+ \mathgreeks@Greekuptrue\mathgreeks@greekuptrue}
+\DeclareStringOption{mathdesign}[Charter]
+\newif\ifmathgreeks@mathdesign
+\AddToKeyvalOption*{mathdesign}{\mathgreeks@mathdesigntrue}
+\DeclareBoolOption{fourier}% false by default
+\DeclareStringOption{kpfonts}[normal]
+\newif\ifmathgreeks@kpfonts
+\AddToKeyvalOption*{kpfonts}{\mathgreeks@kpfontstrue}
+\DeclareBoolOption{pxfonts}
+\DeclareBoolOption{txfonts}
+\DeclareBoolOption{libertinus}
+\DeclareBoolOption{concrete}
+\DeclareBoolOption{cmbright}
+
+\DeclareBoolOption{savegreeks}
+\DeclareBoolOption{otherfonts}
+\DeclareBoolOption{libsans}
+\DeclareBoolOption[true]{lowercase}
+\DeclareBoolOption[true]{uppercase}
+
+% dynamic options
+\DeclareBoolOption[true]{Greekup}
+\DeclareBoolOption{greekup}
+\DeclareBoolOption{upright}
+\AddToKeyvalOption*{upright}{\mathgreeks@Greekuptrue
+ \mathgreeks@greekuptrue}
+\DeclareBoolOption{ISO}
+\AddToKeyvalOption*{ISO}{\mathgreeks@Greekupfalse
+ \mathgreeks@greekupfalse}
+\DeclareBoolOption{TeX}
+\AddToKeyvalOption*{TeX}{\mathgreeks@Greekuptrue
+ \mathgreeks@greekupfalse}
+\DeclareStringOption{style}
+\AddToKeyvalOption*{style}{\setkeys{mathgreeks}{\mathgreeks@style}}
+
+\DeclareDefaultOption{\PackageError{mathgreeks}{%
+ Option key `\CurrentOptionKey' undefined}{}}
+\ProcessLocalKeyvalOptions* % \setkeys is done here
+
+\RequirePackage{etoolbox} % provides \AtEndPreamble
+
+\newif\ifkp@upRm % from kpgonts, bugs if after \ifmathgreeks@kpfonts
+\newif\iflibus@sansmath % from libertinust1math
+\newif\ifmathgreeks@Symbol % for codes definition
+\newif\ifmathgreeks@itgreek % for fonts without upright shape
+\newif\ifmathgreeks@font % if font option at package call
+\mathgreeks@fonttrue
+
+
+%%%%%%%%%%%%%%%% INITIAL SETTINGS %%%%%%%%%%%%%%%
+
+\ifmathgreeks@otherfonts
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareFontSubstitution{FML}{futm}{m}{it}
+ \ifmathgreeks@libsans \libus@sansmathtrue\fi % taken up at encoding time
+ \DeclareFontEncoding{LS1}{}{}
+ \DeclareFontSubstitution{LS1}{libertinust1math}{m}{n}
+
+ % from the upgreek package
+ \DeclareFontFamily{U}{eur}{\skewchar\font'177}
+ \DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+ \DeclareFontShape{U}{eur}{b}{n}{%
+ <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
+ \DeclareFontFamily{U}{fsy}{}
+ \DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
+
+\fi
+
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{lgrmath}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{fontspec}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{unicodemath}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{upgreek}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{mathdesign}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{fourier}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{kpfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{pxfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{txfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{savegreeks}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{otherfonts}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{libsans}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{lowercase}
+\DisableKeyvalOption[action=warning,package=mathgreeks]{mathgreeks}{uppercase}
+
+
+\AtEndPreamble{\AtBeginDocument{
+ \@ifundefined{text}{\RequirePackage{amstext}}{}
+
+ \ifmathgreeks@lgrmath
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareSymbolFont{mgr@it}{LGR}{\mathgreeks@lgrmath}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{LGR}{\mathgreeks@lgrmath}{b}{it}
+ \DeclareSymbolFont{mgr@up}{LGR}{\mathgreeks@lgrmath}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{LGR}{\mathgreeks@lgrmath}{b}{n}
+
+ \else\ifmathgreeks@fontspec
+ \@ifpackageloaded{fontspec}{}{
+ \PackageError{mathgreeks}{`fontspec' or `unicodemath'
+ options need the fontspec package\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \newfontfamily\MathGreeksFont{\mathgreeks@fontspec}%
+ [NFSSFamily=mgru]
+ \DeclareSymbolFont{mgr@it}{TU}{mgru}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{TU}{mgru}{b}{it}
+ \DeclareSymbolFont{mgr@up}{TU}{mgru}{m}{n}
+ \SetSymbolFont{mgr@it}{bold}{TU}{mgru}{b}{n}
+
+ \else\ifmathgreeks@unicodemath
+ \@ifpackageloaded{unicode-math}{}{
+ \PackageError{mathgreeks}{`unicodemath' option needs
+ the unicode-math package\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \setmathfont{\mathgreeks@unicodemath}[range=it/{greek,Greek}]
+ \setmathfont{\mathgreeks@unicodemath}[range=up/{greek,Greek}]
+ \mathgreeks@fontspectrue % for \mgr@CodeGreeks
+ \let\mgr@UnicodeGreek\mgr@UnicodemathGreek
+
+ \else\ifmathgreeks@upgreek
+ \ifdefstring{\mathgreeks@upgreek}{Euler}{
+ \DeclareFontFamily{U}{eur}{\skewchar\font'177}
+ \DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+ \DeclareFontShape{U}{eur}{b}{n}{%
+ <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
+ \DeclareSymbolFont{mgr@up}{U}{eur}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{U}{eur}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@upgreek}{Symbol}{
+ \DeclareSymbolFont{mgr@up}{U}{psy}{m}{n} % no bold face
+ \mathgreeks@Symboltrue
+ }{
+ \ifdefstring{\mathgreeks@upgreek}{Symbolsmallscale}{
+ \DeclareFontFamily{U}{fsy}{}
+ \DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
+ \DeclareSymbolFont{mgr@up}{U}{fsy}{m}{n}
+ \mathgreeks@Symboltrue
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@upgreek' with `upgreek' key}{With `upgreek'
+ possible values are: Euler, Symbol, Symbolsmallscale.}
+ }}}
+
+ \else\ifmathgreeks@mathdesign
+ \ifdefstring{\mathgreeks@mathdesign}{Utopia}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdput}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdput}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdput}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdput}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@mathdesign}{Garamond}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdugm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdugm}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdugm}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdugm}{b}{n}
+ }{
+ \ifdefstring{\mathgreeks@mathdesign}{Charter}{
+ \DeclareSymbolFont{mgr@it}{OML}{mdbch}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{mdbch}{b}{it}
+ \DeclareSymbolFont{mgr@up}{OML}{mdbch}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{OML}{mdbch}{b}{n}
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@mathdesign' with `mathdesign' key}{With
+ `mathdesign' possible values are:
+ Utopia, Garamond, Charter.}
+ }}}
+
+ \else\ifmathgreeks@fourier
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareFontSubstitution{FML}{futm}{m}{it}
+ \DeclareSymbolFont{mgr@it}{FML}{futmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{FML}{futmi}{b}{it}
+ \DeclareSymbolFont{mgr@up}{FML}{futm}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{FML}{futm}{b}{it}
+
+ \else\ifmathgreeks@kpfonts
+ \ifdefstring{\mathgreeks@kpfonts}{normal}{
+ \DeclareSymbolFont{mgr@it}{OML}{jkp}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{jkp}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{jkpmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{jkpmia}{bx}{it}
+ }{
+ \ifdefstring{\mathgreeks@kpfonts}{light}{
+ \DeclareSymbolFont{mgr@it}{OML}{jkpl}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{jkpl}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{jkplmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{jkplmia}{bx}{it}
+ }{
+ \PackageError{mathgreeks}{Invalid value
+ `\mathgreeks@kpfonts' with `kpfonts' key}{With
+ `kpfonts' possible values are: normal, light.}
+ }}
+
+ \else\ifmathgreeks@pxfonts % no font option specified
+ \DeclareSymbolFont{mgr@it}{OML}{pxmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{pxmi}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{pxmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{pxmia}{bx}{it}
+
+ \else\ifmathgreeks@txfonts
+ \DeclareSymbolFont{mgr@it}{OML}{txmi}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{txmi}{bx}{it}
+ \DeclareSymbolFont{mgr@up}{U}{txmia}{m}{it}
+ \SetSymbolFont{mgr@up}{bold}{U}{txmia}{bx}{it}
+
+ \else\ifmathgreeks@libertinus
+ \ifmathgreeks@libsans \libus@sansmathtrue\fi
+ \DeclareFontEncoding{LS1}{}{}
+ \DeclareFontSubstitution{LS1}{libertinust1math}{m}{n}
+ \DeclareSymbolFont{mgr@it}{LS1}{libertinust1math}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{LS1}{libertinust1math}{m}{it}
+ \DeclareSymbolFont{mgr@up}{LS1}{libertinust1math}{m}{n}
+ \SetSymbolFont{mgr@up}{bold}{LS1}{libertinust1math}{m}{n}
+
+ \else\ifmathgreeks@concrete
+ \DeclareSymbolFont{mgr@it}{OML}{ccm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{ccm}{b}{it}
+ \mathgreeks@itgreektrue
+
+ \else\ifmathgreeks@cmbright
+ \DeclareSymbolFont{mgr@it}{OML}{cmbrm}{m}{it}
+ \SetSymbolFont{mgr@it}{bold}{OML}{cmbrm}{b}{it}
+ \mathgreeks@itgreektrue
+
+ \else
+ \PackageWarningNoLine{mathgreeks}{No font option specified}
+ \mathgreeks@fontfalse
+ \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+
+ \ifmathgreeks@savegreeks \SaveGreeks \fi
+
+ \ifmathgreeks@font
+ \ifmathgreeks@upgreek
+ \mathgreeks@Greekuptrue \mathgreeks@greekuptrue
+ \PackageWarningNoLine{mathgreeks}{Commands \string \italpha,
+ \string\itbeta... \MessageBreak
+ not available with the `upgreek' option}
+ \else
+ \mgr@CodeGreeks{it}
+ \fi
+ \ifmathgreeks@itgreek
+ \mathgreeks@Greekupfalse \mathgreeks@greekupfalse
+ \PackageWarningNoLine{mathgreeks}{Commands \string \upalpha,
+ \string\upbeta... \MessageBreak
+ not available with `concrete' or 'cmbright}
+ \else
+ \mgr@CodeGreeks{up}
+ \fi
+ \mgr@DefaultGreeks
+ \fi
+}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%% MACROS %%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+\def\re@DeclareMathSymbol#1#2#3#4{% from kpfonts, pxfonts, txfonts
+ \let#1=\undefined
+ \DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+%\def\re@DeclareMathSymbol#1#2#3#4{% from newtxmath
+%\if\relax\noexpand#1\let#1=\undefined \fi
+%\DeclareMathSymbol{#1}{#2}{#3}{#4}}
+
+\newcommand{\mgr@CodeGreek}[3]{% #1 = it or up
+ \expandafter\re@DeclareMathSymbol\csname#1#2\endcsname%
+ {\mathalpha}{mgr@#1}{#3} % perhaps \mathord is better
+}
+
+\newcommand{\mgr@UnicodeGreek}[3]{%
+ \expandafter\Umathchardef\csname#1#2\endcsname="7 % mathalpha
+ \csname symmgr@#1\endcsname #3
+}
+
+\def\mgr@UnicodemathGreek#1#2#3{\unskip
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\csname sym#1\endcsname{\symbol{#3}}}\ignorespaces
+}
+
+\newcommand{\mgr@CodeGreeks}[1]{% #1 = it or up
+ \ifmathgreeks@lgrmath % LGR encoding
+ \mgr@CodeGreek{#1}{Gamma}{71}
+ \mgr@CodeGreek{#1}{Delta}{68}
+ \mgr@CodeGreek{#1}{Theta}{74}
+ \mgr@CodeGreek{#1}{Lambda}{76}
+ \mgr@CodeGreek{#1}{Xi}{88}
+ \mgr@CodeGreek{#1}{Pi}{80}
+ \mgr@CodeGreek{#1}{Sigma}{83}
+ \mgr@CodeGreek{#1}{Upsilon}{85}
+ \mgr@CodeGreek{#1}{Phi}{70}
+ \mgr@CodeGreek{#1}{Psi}{89}
+ \mgr@CodeGreek{#1}{Omega}{87}
+ \mgr@CodeGreek{#1}{alpha}{97}
+ \mgr@CodeGreek{#1}{beta}{98}
+ \mgr@CodeGreek{#1}{gamma}{103}
+ \mgr@CodeGreek{#1}{delta}{100}
+ \mgr@CodeGreek{#1}{epsilon}{101}
+ \mgr@CodeGreek{#1}{zeta}{122}
+ \mgr@CodeGreek{#1}{eta}{104}
+ \mgr@CodeGreek{#1}{theta}{106}
+ \mgr@CodeGreek{#1}{iota}{105}
+ \mgr@CodeGreek{#1}{kappa}{107}
+ \mgr@CodeGreek{#1}{lambda}{108}
+ \mgr@CodeGreek{#1}{mu}{109}
+ \mgr@CodeGreek{#1}{nu}{110}
+ \mgr@CodeGreek{#1}{xi}{120}
+ \mgr@CodeGreek{#1}{pi}{112}
+ \mgr@CodeGreek{#1}{rho}{114}
+ \mgr@CodeGreek{#1}{sigma}{115}
+ \mgr@CodeGreek{#1}{tau}{116}
+ \mgr@CodeGreek{#1}{upsilon}{117}
+ \mgr@CodeGreek{#1}{phi}{102}
+ \mgr@CodeGreek{#1}{chi}{113}
+ \mgr@CodeGreek{#1}{psi}{121}
+ \mgr@CodeGreek{#1}{omega}{119}
+ \mgr@CodeGreek{#1}{varepsilon}{101} % = epsilon
+ \mgr@CodeGreek{#1}{vartheta}{106} % = theta
+ \mgr@CodeGreek{#1}{varpi}{112} % = pi
+ \mgr@CodeGreek{#1}{varrho}{114} % = rho
+ \mgr@CodeGreek{#1}{varsigma}{99}
+ \mgr@CodeGreek{#1}{varphi}{102} % = phi
+ \else\ifmathgreeks@fontspec % unicode encoding
+ \mgr@UnicodeGreek{#1}{Gamma}{"0393}
+ \mgr@UnicodeGreek{#1}{Delta}{"0394}
+ \mgr@UnicodeGreek{#1}{Theta}{"0398}
+ \mgr@UnicodeGreek{#1}{Lambda}{"039B}
+ \mgr@UnicodeGreek{#1}{Xi}{"039E}
+ \mgr@UnicodeGreek{#1}{Pi}{"03A0}
+ \mgr@UnicodeGreek{#1}{Sigma}{"03A3}
+ \mgr@UnicodeGreek{#1}{Upsilon}{"03A5}
+ \mgr@UnicodeGreek{#1}{Phi}{"03A6}
+ \mgr@UnicodeGreek{#1}{Psi}{"03A8}
+ \mgr@UnicodeGreek{#1}{Omega}{"03A9}
+ \mgr@UnicodeGreek{#1}{alpha}{"03B1}
+ \mgr@UnicodeGreek{#1}{beta}{"03B2}
+ \mgr@UnicodeGreek{#1}{gamma}{"03B3}
+ \mgr@UnicodeGreek{#1}{delta}{"03B4}
+ \mgr@UnicodeGreek{#1}{epsilon}{"03B5}
+ \mgr@UnicodeGreek{#1}{zeta}{"03B6}
+ \mgr@UnicodeGreek{#1}{eta}{"03B7}
+ \mgr@UnicodeGreek{#1}{theta}{"03B8}
+ \mgr@UnicodeGreek{#1}{iota}{"03B9}
+ \mgr@UnicodeGreek{#1}{kappa}{"03BA}
+ \mgr@UnicodeGreek{#1}{lambda}{"03BB}
+ \mgr@UnicodeGreek{#1}{mu}{"03BC}
+ \mgr@UnicodeGreek{#1}{nu}{"03BD}
+ \mgr@UnicodeGreek{#1}{xi}{"03BE} % not omicron
+ \mgr@UnicodeGreek{#1}{pi}{"03C0}
+ \mgr@UnicodeGreek{#1}{rho}{"03C1}
+ \mgr@UnicodeGreek{#1}{sigma}{"03C3}
+ \mgr@UnicodeGreek{#1}{tau}{"03C4}
+ \mgr@UnicodeGreek{#1}{upsilon}{"03C5}
+ \mgr@UnicodeGreek{#1}{phi}{"03C6}
+ \mgr@UnicodeGreek{#1}{chi}{"03C7}
+ \mgr@UnicodeGreek{#1}{psi}{"03C8}
+ \mgr@UnicodeGreek{#1}{omega}{"03C9}
+ \mgr@UnicodeGreek{#1}{varepsilon}{"03F5}
+ \mgr@UnicodeGreek{#1}{vartheta}{"03D1}
+ \mgr@UnicodeGreek{#1}{varpi}{"03D6}
+ \mgr@UnicodeGreek{#1}{varrho}{"03F1}
+ \mgr@UnicodeGreek{#1}{varsigma}{"03C2}
+ \mgr@UnicodeGreek{#1}{varphi}{"03D5}
+ \else\ifmathgreeks@Symbol % Symbol encoding
+ \mgr@CodeGreek{#1}{Gamma}{`G}
+ \mgr@CodeGreek{#1}{Delta}{`D}
+ \mgr@CodeGreek{#1}{Theta}{`Q}
+ \mgr@CodeGreek{#1}{Lambda}{`L}
+ \mgr@CodeGreek{#1}{Xi}{`X}
+ \mgr@CodeGreek{#1}{Pi}{`P}
+ \mgr@CodeGreek{#1}{Sigma}{`S}
+ \mgr@CodeGreek{#1}{Upsilon}{`U}
+ \mgr@CodeGreek{#1}{Phi}{`F}
+ \mgr@CodeGreek{#1}{Psi}{`Y}
+ \mgr@CodeGreek{#1}{Omega}{`W}
+ \mgr@CodeGreek{#1}{alpha}{`a}
+ \mgr@CodeGreek{#1}{beta}{`b}
+ \mgr@CodeGreek{#1}{gamma}{`g}
+ \mgr@CodeGreek{#1}{delta}{`d}
+ \mgr@CodeGreek{#1}{epsilon}{`e}
+ \mgr@CodeGreek{#1}{zeta}{`z}
+ \mgr@CodeGreek{#1}{eta}{`h}
+ \mgr@CodeGreek{#1}{theta}{`q}
+ \mgr@CodeGreek{#1}{iota}{`i}
+ \mgr@CodeGreek{#1}{kappa}{`k}
+ \mgr@CodeGreek{#1}{lambda}{`l}
+ \mgr@CodeGreek{#1}{mu}{`m}
+ \mgr@CodeGreek{#1}{nu}{`n}
+ \mgr@CodeGreek{#1}{xi}{`x}
+ \mgr@CodeGreek{#1}{pi}{`p}
+ \mgr@CodeGreek{#1}{rho}{`r}
+ \mgr@CodeGreek{#1}{sigma}{`s}
+ \mgr@CodeGreek{#1}{tau}{`t}
+ \mgr@CodeGreek{#1}{upsilon}{`u}
+ \mgr@CodeGreek{#1}{phi}{`f}
+ \mgr@CodeGreek{#1}{chi}{`c}
+ \mgr@CodeGreek{#1}{psi}{`y}
+ \mgr@CodeGreek{#1}{omega}{`w}
+ \mgr@CodeGreek{#1}{varepsilon}{`u} % = epsilon
+ \mgr@CodeGreek{#1}{vartheta}{`J}
+ \mgr@CodeGreek{#1}{varpi}{`v}
+ \mgr@CodeGreek{#1}{varrho}{`r} % = rho
+ \mgr@CodeGreek{#1}{varsigma}{`s} % = sigma
+ \mgr@CodeGreek{#1}{varphi}{`j}
+ \else % OML (or U) encoding
+ \mgr@CodeGreek{#1}{Gamma}{"00}
+ \mgr@CodeGreek{#1}{Delta}{"01}
+ \mgr@CodeGreek{#1}{Theta}{"02}
+ \mgr@CodeGreek{#1}{Lambda}{"03}
+ \mgr@CodeGreek{#1}{Xi}{"04}
+ \mgr@CodeGreek{#1}{Pi}{"05}
+ \mgr@CodeGreek{#1}{Sigma}{"06}
+ \mgr@CodeGreek{#1}{Upsilon}{"07}
+ \mgr@CodeGreek{#1}{Phi}{"08}
+ \mgr@CodeGreek{#1}{Psi}{"09}
+ \mgr@CodeGreek{#1}{Omega}{"0A}
+ \mgr@CodeGreek{#1}{alpha}{"0B}
+ \mgr@CodeGreek{#1}{beta}{"0C}
+ \mgr@CodeGreek{#1}{gamma}{"0D}
+ \mgr@CodeGreek{#1}{delta}{"0E}
+ \mgr@CodeGreek{#1}{epsilon}{"0F}
+ \mgr@CodeGreek{#1}{zeta}{"10}
+ \mgr@CodeGreek{#1}{eta}{"11}
+ \mgr@CodeGreek{#1}{theta}{"12}
+ \mgr@CodeGreek{#1}{iota}{"13}
+ \mgr@CodeGreek{#1}{kappa}{"14}
+ \mgr@CodeGreek{#1}{lambda}{"15}
+ \mgr@CodeGreek{#1}{mu}{"16}
+ \mgr@CodeGreek{#1}{nu}{"17}
+ \mgr@CodeGreek{#1}{xi}{"18}
+ \mgr@CodeGreek{#1}{pi}{"19}
+ \mgr@CodeGreek{#1}{rho}{"1A}
+ \mgr@CodeGreek{#1}{sigma}{"1B}
+ \mgr@CodeGreek{#1}{tau}{"1C}
+ \mgr@CodeGreek{#1}{upsilon}{"1D}
+ \mgr@CodeGreek{#1}{phi}{"1E}
+ \mgr@CodeGreek{#1}{chi}{"1F}
+ \mgr@CodeGreek{#1}{psi}{"20}
+ \mgr@CodeGreek{#1}{omega}{"21}
+ \mgr@CodeGreek{#1}{varepsilon}{"22}
+ \mgr@CodeGreek{#1}{vartheta}{"23}
+ \mgr@CodeGreek{#1}{varpi}{"24}
+ \mgr@CodeGreek{#1}{varrho}{"25}
+ \mgr@CodeGreek{#1}{varsigma}{"26}
+ \mgr@CodeGreek{#1}{varphi}{"27}
+ %\mgr@CodeGreek{#1}{varkappa}{"FE}
+ \fi\fi\fi
+}
+
+\newcommand\mgr@DefaultGreeks{%
+ \ifmathgreeks@uppercase
+ \ifmathgreeks@Greekup
+ \let\Gamma\upGamma
+ \let\Delta\upDelta
+ \let\Theta\upTheta
+ \let\Lambda\upLambda
+ \let\Xi\upXi
+ \let\Pi\upPi
+ \let\Sigma\upSigma
+ \let\Upsilon\upUpsilon
+ \let\Phi\upPhi
+ \let\Psi\upPsi
+ \let\Omega\upOmega
+ \else
+ \let\Gamma\itGamma
+ \let\Delta\itDelta
+ \let\Theta\itTheta
+ \let\Lambda\itLambda
+ \let\Xi\itXi
+ \let\Pi\itPi
+ \let\Sigma\itSigma
+ \let\Upsilon\itUpsilon
+ \let\Phi\itPhi
+ \let\Psi\itPsi
+ \let\Omega\itOmega
+ \fi\fi
+ \ifmathgreeks@lowercase
+ \ifmathgreeks@greekup
+ \let\alpha\upalpha
+ \let\beta\upbeta
+ \let\gamma\upgamma
+ \let\delta\updelta
+ \let\epsilon\upepsilon
+ \let\zeta\upzeta
+ \let\eta\upeta
+ \let\theta\uptheta
+ \let\iota\upiota
+ \let\kappa\upkappa
+ \let\lambda\uplambda
+ \let\mu\upmu
+ \let\nu\upnu
+ \let\xi\upxi
+ \let\pi\uppi
+ \let\rho\uprho
+ \let\sigma\upsigma
+ \let\tau\uptau
+ \let\upsilon\upupsilon
+ \let\phi\upphi
+ \let\chi\upchi
+ \let\psi\uppsi
+ \let\omega\upomega
+ \let\varepsilon\upvarepsilon
+ \let\vartheta\upvartheta
+ \let\varpi\upvarpi
+ \let\varrho\upvarrho
+ \let\varsigma\upvarsigma
+ \let\varphi\upvarphi
+ \else
+ \let\alpha\italpha
+ \let\beta\itbeta
+ \let\gamma\itgamma
+ \let\delta\itdelta
+ \let\epsilon\itepsilon
+ \let\zeta\itzeta
+ \let\eta\iteta
+ \let\theta\ittheta
+ \let\iota\itiota
+ \let\kappa\itkappa
+ \let\lambda\itlambda
+ \let\mu\itmu
+ \let\nu\itnu
+ \let\xi\itxi
+ \let\pi\itpi
+ \let\rho\itrho
+ \let\sigma\itsigma
+ \let\tau\ittau
+ \let\upsilon\itupsilon
+ \let\phi\itphi
+ \let\chi\itchi
+ \let\psi\itpsi
+ \let\omega\itomega
+ \let\varepsilon\itvarepsilon
+ \let\vartheta\itvartheta
+ \let\varpi\itvarpi
+ \let\varrho\itvarrho
+ \let\varsigma\itvarsigma
+ \let\varphi\itvarphi
+ \fi\fi
+}
+
+\providecommand\SaveGreeks{%
+ \let\backGamma\Gamma
+ \let\backDelta\Delta
+ \let\backTheta\Theta
+ \let\backLambda\Lambda
+ \let\backXi\Xi
+ \let\backPi\Pi
+ \let\backSigma\Sigma
+ \let\backUpsilon\Upsilon
+ \let\backPhi\Phi
+ \let\backPsi\Psi
+ \let\backOmega\Omega
+ \let\backalpha\alpha
+ \let\backbeta\beta
+ \let\backgamma\gamma
+ \let\backdelta\delta
+ \let\backepsilon\epsilon
+ \let\backzeta\zeta
+ \let\backeta\eta
+ \let\backtheta\theta
+ \let\backiota\iota
+ \let\backkappa\kappa
+ \let\backlambda\lambda
+ \let\backmu\mu
+ \let\backnu\nu
+ \let\backxi\xi
+ \let\backpi\pi
+ \let\backrho\rho
+ \let\backsigma\sigma
+ \let\backtau\tau
+ \let\backupsilon\upsilon
+ \let\backphi\phi
+ \let\backchi\chi
+ \let\backpsi\psi
+ \let\backomega\omega
+ \let\backvarepsilon\varepsilon
+ \let\backvartheta\vartheta
+ \let\backvarpi\varpi
+ \let\backvarrtho\varrho
+ \let\backvarsigma\varsigma
+ \let\backvarphi\varphi
+}
+
+
+%%%%%%%%%%%%%% Macros for changing font dynamically %%%%%%%%%%%%%
+
+\def\setmathgreeks#1{\setkeys{mathgreeks}{#1}\unskip
+ \ifmathgreeks@upgreek
+ \mathgreeks@Greekuptrue
+ \mathgreeks@greekuptrue
+ \PackageWarning{mathgreeks}{Style is set to `upright'
+ \MessageBreak with the `upgreek' option}
+ \fi
+ \mgr@DefaultGreeks\ignorespaces
+}
+
+\newif\ifmgrfont@unicodemath
+\define@key{mgrfont}{unicode-math}[Latin Modern Math]{%
+ \def\mgrfont@unicodemath{#1}\mgrfont@unicodemathtrue}
+\newif\ifmgrfont@fontspec
+\define@key{mgrfont}{fontspec}[GFS Didot]{%
+ \def\mgrfont@fontspec{#1}\mgrfont@fontspectrue}
+\define@key{mgrfont}{enc}{\def\mgrfont@enc{#1}}
+\define@key{mgrfont}{fam}{\def\mgrfont@fam{#1}}
+\newcommand*\mgrfont@series{m} % default value
+\define@key{mgrfont}{series}{\renewcommand*\mgrfont@series{#1}}
+\newcommand*\mgrfont@shape{it} % default value
+\define@key{mgrfont}{shape}{\renewcommand*\mgrfont@shape{#1}}
+
+\def\mathgreeksfont#1{%
+ \mgrfont@unicodemathfalse
+ \mgrfont@fontspecfalse
+ \renewcommand*\mgrfont@series{m}
+ \renewcommand*\mgrfont@shape{it}
+ \mathgreeks@lgrmathfalse
+ \mathgreeks@fontspecfalse
+ \mathgreeks@Symbolfalse
+ \mathgreeks@upgreekfalse
+ \setkeys{mgrfont}{#1}
+ \ifmgrfont@unicodemath
+ \setmathfont{\mgrfont@unicodemath}[range=it/{greek,Greek}]
+ \setmathfont{\mgrfont@unicodemath}[range=up/{greek,Greek}]
+ \let\mgr@UnicodeGreek\mgr@UnicodemathGreek
+ \mathgreeks@fontspectrue % for \mgr@CodeGreeks
+ \mgr@CodeGreeks{it}
+ \mgr@CodeGreeks{up}
+ \mgr@DefaultGreeks
+ \else\ifmgrfont@fontspec
+ \let\MathGreeksFont\relax
+ \newfontfamily\MathGreeksFont{\mgrfont@fontspec}
+ \let\mgr@UnicodeGreek\mgr@NewUnicodeGreek
+ \mathgreeks@fontspectrue
+ \mgr@CodeGreeks{it}
+ \mgr@CodeGreeks{up}
+ \mgr@DefaultGreeks
+ \else
+ \let\mgr@CodeGreek\mgr@NewCodeGreek
+ \ifdefstring{\mgrfont@enc}{LGR}{
+ \mathgreeks@lgrmathtrue
+ }{
+ \ifdefstring{\mgrfont@fam}{psy}{
+ \mathgreeks@Symboltrue
+ }{
+ \ifdefstring{\mgrfont@fam}{fsy}{
+ \mathgreeks@Symboltrue
+ }{
+ }}}
+ \mgr@CodeGreeks{}
+ \fi\fi
+}
+
+\def\mgr@NewCodeGreek#1#2#3{\unskip
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\mathalpha{\text{\usefont{\mgrfont@enc}{\mgrfont@fam}
+ {\mgrfont@series}{\mgrfont@shape}\symbol{#3}}
+ }}\ignorespaces
+}
+
+\def\mgr@NewUnicodeGreek#1#2#3{\unskip % only with fontspec
+ \expandafter\DeclareRobustCommand\csname#1#2\endcsname
+ {\mathalpha{\text{\csname#1shape\endcsname%
+ \MathGreeksFont\symbol{#3}}
+ }}\ignorespaces
+}
+
+\providecommand\greektable{
+ $\begin{array}{c}
+ \begin{array}{*{23}{@{\;}c}@{\;}}
+ \alpha & \beta & \gamma & \delta & \epsilon & \zeta & \eta &
+ \theta & \iota & \kappa & \lambda & \mu & \nu & \xi & \pi &
+ \rho & \sigma & \tau & \upsilon & \phi & \chi & \psi & \omega
+ \end{array}
+ \\
+ \begin{array}{*{18}{@{\;}c}@{\;}}
+ \varepsilon & \vartheta & \varpi & \varrho & \varsigma & \varphi
+ & | &
+ \Gamma & \Delta & \Theta & \Lambda & \Xi & \Pi & \Sigma &
+ \Upsilon & \Phi & \Psi & \Omega
+ \end{array}
+ \end{array}$
+}
+
+% \end{macrocode}
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.ins b/macros/latex/contrib/mathgreeks/mathgreeks.ins
new file mode 100644
index 0000000000..e7e74d9458
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.ins
@@ -0,0 +1,56 @@
+%%
+%% Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+%%
+%% 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/mathgreeks}
+
+\preamble
+
+This is a generated file.
+
+Copyright (C) 2024 by Antoine Missier <antoine.missier@ac-toulouse.fr>
+
+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{mathgreeks.sty}{\from{mathgreeks.dtx}{package}}}
+
+\obeyspaces
+\Msg{*************************************************************}
+\Msg{* *}
+\Msg{* To finish the installation you have to move the following *}
+\Msg{* files into a directory searched by TeX: *}
+\Msg{* *}
+\Msg{* mathgreeks.sty *}
+\Msg{* *}
+\Msg{* To produce the documentation run the file *}
+\Msg{* mathgreeks.dtx through LuaLaTeX *}
+\Msg{* (or LaTeX for a shorter version of the doc). *}
+\Msg{* *}
+\Msg{* Happy TeXing! *}
+\Msg{* *}
+\Msg{*************************************************************}
+
+\endbatchfile
diff --git a/macros/latex/contrib/mathgreeks/mathgreeks.pdf b/macros/latex/contrib/mathgreeks/mathgreeks.pdf
new file mode 100644
index 0000000000..284c293b56
--- /dev/null
+++ b/macros/latex/contrib/mathgreeks/mathgreeks.pdf
Binary files differ
diff --git a/macros/latex/contrib/mismath/README.md b/macros/latex/contrib/mismath/README.md
index 2ebf631307..9cafc74719 100644
--- a/macros/latex/contrib/mismath/README.md
+++ b/macros/latex/contrib/mismath/README.md
@@ -5,17 +5,19 @@
The package provides some mathematical macros to typeset:
- mathematical constants e, i, pi in upright shape (automatically) as recommended by ISO 80000-2,
-- vectors with nice arrows and adjusted norm (and tensors),
+- vectors with nice arrows and adjusted norm,
+- tensors in sans serif bold italic shape (ISO recommendation),
- some standard operator names,
+- several commands with useful aliases,
- improved spacings in mathematical formulas,
- systems of equations and small matrices,
-- displaymath in double columns for lengthy calculations.
+- displaymath in double columns for lengthy calculations with short expressions.
## Installation
- run LaTeX on mismath.ins, you obtain the file mismath.sty,
-- if then you run XeLaTeX or LuaLaTeX on mismath.dtx you get the file mismath.pdf which is also in the archive,
+- if then you run pdfLaTeX on mismath.dtx you get the file mismath.pdf which is also in the archive,
- put the files mismath.sty and mismath.pdf in your TeX Directory Structure.
diff --git a/macros/latex/contrib/mismath/mismath.dtx b/macros/latex/contrib/mismath/mismath.dtx
index 88793e7e9e..f3fd2168bc 100644
--- a/macros/latex/contrib/mismath/mismath.dtx
+++ b/macros/latex/contrib/mismath/mismath.dtx
@@ -20,16 +20,16 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{mismath}
- [2024/02/29 v2.12 .dtx Miscellaneous mathematical macros]
+ [2024/05/04 v3.0 .dtx Miscellaneous mathematical macros]
%</package>
%<*driver>
\documentclass{ltxdoc}
-%\usepackage[utf8]{inputenc} % running through XeLaTeX
+\usepackage[utf8]{inputenc} % run through XeLaTeX
\usepackage[T1]{fontenc}
\usepackage[english]{babel}
-\usepackage{fontspec}
+%\usepackage{fontspec}
\usepackage{fourier} % in case of font change, modify 2.1 (3rd §)
-\usepackage[ibrackets,decimalcomma]{mismath}
+\usepackage[ibrackets,decimalcomma,otherReIm]{mismath}
%\usepackage{amssymb} % unnecessary with fourier
\usepackage{multicol}
\usepackage{sectsty}
@@ -40,33 +40,37 @@
\definecolor{darkbrown}{rgb}{0.5,0.1,0.1}
\allsectionsfont{\color{darkbrown}}
-% The following commands provides several shapes of pi
-% the maximum number of authorized math fonts is reached
+
+% The following commands provide several shapes for pi
\DeclareFontEncoding{LGR}{}{}
-\DeclareSymbolFont{lgrlmr}{LGR}{lmr}{m}{n}
-\DeclareMathSymbol{\pilmr}{\mathalpha}{lgrlmr}{112}
-\DeclareSymbolFont{lgrAlegreya}{LGR}{Alegreya-LF}{m}{n}
-\DeclareMathSymbol{\piAlegreya}{\mathalpha}{lgrAlegreya}{112}
-\DeclareSymbolFont{lgrCochineal}{LGR}{Cochineal-LF}{m}{n}
-\DeclareMathSymbol{\piCochineal}{\mathalpha}{lgrCochineal}{112}
-\pinumber[upgreek=Euler]
-\DeclareSymbolFont{upgreekSymbol}{U}{psy}{m}{n}
-\DeclareMathSymbol{\piSymbol}{\mathord}{upgreekSymbol}{`p}
-\DeclareSymbolFont{mdCharter}{OML}{mdbch}{m}{n}
-\DeclareMathSymbol{\piCharter}{\mathord}{mdCharter}{"19}
-\DeclareSymbolFont{kp}{U}{jkpmia}{m}{it}
-\DeclareMathSymbol{\pikp}{\mathord}{kp}{"19}
-\DeclareSymbolFont{px}{U}{pxmia}{m}{it}
-\DeclareMathSymbol{\pipx}{\mathord}{px}{"19}
-\DeclareSymbolFont{tx}{U}{txmia}{m}{it}
-\DeclareMathSymbol{\pitx}{\mathord}{tx}{"19}
-% For showing original \i and \j in text mode:
-\DeclareTextFontCommand{\extrafont}{\fontfamily{lmr}\selectfont}
+\def\pilmr{\text{\usefont{LGR}{lmr}{m}{n}\symbol{112}}}
+\def\piAlegreya{\text{\usefont{LGR}{Alegreya-LF}{m}{n}\symbol{112}}}
+\def\piCochineal{\text{\usefont{LGR}{Cochineal-LF}{m}{n}\symbol{112}}}
+\def\piLibSerif{\text{\usefont{LGR}{LibertinusSerif-LF}{m}{n}\symbol{112}}}
+\def\piLibSans{\text{\usefont{LGR}{LibertinusSans-LF}{m}{n}\symbol{112}}}
+\def\pilmss{\text{\usefont{LGR}{lmss}{m}{n}\symbol{112}}}
+\def\pigentium{\text{\usefont{LGR}{gentium}{m}{n}\symbol{112}}}
+\def\pilato{\text{\usefont{LGR}{lato-LF}{m}{n}\symbol{112}}}
+\DeclareFontFamily{U}{eur}{\skewchar\font'177}
+\DeclareFontShape{U}{eur}{m}{n}{%
+ <-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
+\def\piEuler{\text{\usefont{U}{eur}{m}{n}\symbol{"19}}}
+\def\piSymbol{\text{\usefont{U}{psy}{m}{n}\symbol{`p}}}
+\def\piCharter{\text{\usefont{OML}{mdbch}{m}{n}\symbol{"19}}}
+\def\pikp{\text{\usefont{U}{jkpmia}{m}{it}\symbol{"19}}}
+\pinumber[otherpi] % fourier
+\def\pipx{\text{\usefont{U}{pxmia}{m}{it}\symbol{"19}}}
+\def\pitx{\text{\usefont{U}{txmia}{m}{it}\symbol{"19}}}
+
+% Next command is used for showing original Latin Modern \i and \j in text mode:
+%\DeclareTextFontCommand{\extrafont}{\fontfamily{lmr}\selectfont} % useless with fourier
\DisableCrossrefs
%\CodelineIndex
%\RecordChanges
+
\usepackage{hyperref}
+\let\C\relax % "\C already defined" with hyperref when compiling with xelatex or lualatex
\hypersetup{%
colorlinks,
linkcolor=blue,
@@ -83,7 +87,7 @@
%</driver>
% \fi
%
-% \CheckSum{831}
+% \CheckSum{845}
%
% \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
@@ -159,8 +163,8 @@
% (and LGR encoding pi by default), it is no longer compatible with the older,
% - paren command has been removed,
% - hvect and hlbar have been slightly modified (phantom t instead of phantom h),
-% - several changes in documentation,
-% - now using the Charter font (with the package mathdesign)}
+% - several changes in the documentation,
+% - now using the Charter font in the doc (with the package mathdesign)}
%
% \changes{v2.1}{2022/12/26}{
% - Improved management of square brackets with the ibrackets package,
@@ -225,26 +229,41 @@
%
% \changes{v2.12}{2024/02/29}{
% - The xparse package has been removed by mistake in v2.11,
-% this may cause some compatibility problems with unicode-math;
+% this may cause some compatibility problems;
% it is loaded again by mismath
% - Improvements to make pinumber work perfectly with unicode-math
% - Small corrections in the doc}
%
+% \changes{v3.0}{2024/03/15}{
+% - Rewriting of the pinumber command including the pifonts macro
+% - Presenting other lgrmath values for pinumber in the doc
+% - The \C macro is now in AtBeginDocument
+% - amsmath isn't loaded anymore because mathtools loads it
+% - Bug fix with options decimalcomma and ibrackets
+% - New option 'nofunction' to lighten the package loading
+% - Addition of coker and Res in standard operator names
+% - New option 'classicReIm' to deactivate Im and Re redefinition
+% - New option 'otherReIm' to provide an alternative writing with cmsy font
+% - Removal of the PEupright command
+% - Additional space in the lfrac macro increased from \: (5mu) to 7mu
+% - New optional parameter for adjusting the space in lfrac
+% - Changing the vphantom in hvect, hvec and lbar from `t' to `A', looks better}
+%
% \GetFileInfo{mismath.sty}
%
% \title{Miscellaneous mathematical macros \\The \textsf{mismath} package\thanks{This document
% corresponds to \textsf{mismath}~\fileversion, dated \filedate.
% Thanks to François Bastouil for initial help in English translation.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{February 29, 2024}
+% \date{May 04, 2024}
%
% \maketitle
% \tableofcontents
%
% \section{Introduction}
%
-% According to the International Standards ISO~31-0:1992 to ISO~31-13:1992
-% (superseded by ISO~80000-2:2009), mathematical \emph{constants} $\e$, $\i$, $\otherpi$
+% According to the International Standards ISO~31-0:1992 to ISO~31-13:1992
+% (superseded by ISO~80000-2:2009), mathematical \emph{constants} $\e$, $\i$, $\pi$
% should be typeset in roman (upright shape) and not in italic like
% variables (see~\cite{TYPMA}~\cite{NIST}~\cite{SI}~\cite{ICTNS}).
% This package provides some tools to achieve this automatically.
@@ -262,14 +281,15 @@
% or worse $\left\Vert \vect{AB} \right\Vert$ (when using |\left|\ldots |\right|).
%
% \smallskip
-% The package also offers other macros for:
+% The package also offers other macros to typeset:
% \begin{itemize}
-% \item tensors,
-% \item some common operator names,
-% \item a few useful aliases,
-% \item enhancing spacing in mathematical formulas,
+% \item tensors in sans serif bold italic shape
+% (ISO recommendation~\cite{TYPMA}~\cite{NIST}~\cite{SI}),
+% \item some standard operator names,
+% \item several commands with useful aliases,
+% \item improved spacings in mathematical formulas,
% \item systems of equations and small matrices,
-% \item displaymath in double columns for lengthy calculations.
+% \item displaymath in double columns for lengthy calculations with short expressions.
% \end{itemize}
%
% To avoid compatibility issues,
@@ -282,36 +302,38 @@
%
% \medskip
% \DescribeEnv{\oarg{options}}
-% The \textsf{mismath} package loads the \textsf{amsmath} package~\cite{AMS}
-% without any options.
-% If you want to use \textsf{amsmath} with specific options (refer to its documentation),
-% you can include these options when calling \textsf{mismath}, or
-% you can load \textsf{amsmath}
-% with the desired options before loading \textsf{mismath}.
-% \emph{When using the package \textsf{unicode-math}~\cite{UNIC}, \textsf{mismath}
-% must be loaded before \textsf{unicode-math}}, just like \textsf{amsmath}.
+% The \textsf{mismath} package loads the \textsf{mathtools}
+% \footnote{The \textsf{mathtools} package offers numerous helpful macros and improvements
+% of the \textsf{amsmath} package.}
+% package by Morten Høgholm and Lars Madsen~\cite{TOOL} which in turn loads
+% the \textsf{amsmath} package~\cite{AMS}.
+% If you want to use \mbox{\textsf{amsmath}} or \textsf{mathtools} with specific options,
+% you can include these options as options of \mbox{\textsf{mismath}}, or
+% you can load \textsf{amsmath} or \textsf{mathtools}
+% with the desired options before loading \mbox{\textsf{mismath}}.
+% When using the package \textsf{unicode-math}~\cite{UNIC}, \textsf{mismath}
+% should be loaded before \textsf{unicode-math}, just like \textsf{amsmath}.
%
% \medskip
-% In addition \textsf{mismath} loads the \textsf{mathtools} package
-% by Morten Høgholm and Lars Madsen~\cite{TOOL}.
-% This package offers numerous helpful macros and improvements of the \textsf{amsmath} package.
-%
-% \medskip
-% A recommendation, although rarely followed, is to typeset uppercase
+% An ISO recommendation, although rarely followed, is to typeset uppercase
% Greek letters in italic shape,
-% similar to other variables~\cite{ICTNS}. This can be automatically achieved,
+% as for other variables~\cite{ICTNS}. This is automatically achieved,
% for some particular fonts, with packages
% such as \textsf{fixmath} by Walter Schmidt~\cite{FIXM},
% \mbox{\textsf{isomath}} by Günter Milde~\cite{ISOM}
% or \textsf{pm-isomath} by Claudio Beccari~\cite{PMISO} and optionally with many others
% (such as \textsf{mathpazo} or \textsf{mathptmx} with the option \texttt{slantedGreek}).
+% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result
+% with the option \mbox{\texttt{math-style=ISO}} provided
+% by the \textsf{unicode-math} package.
+% We also have the new \mbox{\textsf{mathgreeks}} package~\cite{MGREEK} which offers
+% a wide range of fonts and different settings with Greek letters.
% However this feature is not implemented here due to a conflicting rule in France,
% where all capital letters in mathematics
% are required to be typeset in upright shape
% \footnote{The \textsf{frenchmath} package~\cite{FR}
% ensures to follow the recommended French rules.}.
-% When running through \LuaLaTeX\ or \XeLaTeX\ you can also get this result by
-% setting the option \mbox{\texttt{math-style=ISO}} in the \textsf{unicode-math} package.
+% The user is free to choose loading one of these packages or not.
%
%
% \section{Usage}
@@ -338,12 +360,12 @@
%
% \medskip
% \DescribeMacro{\e} \DescribeMacro{\i} \DescribeMacro{\j}
-% To avoid cluttering a document that contains many occurrences of Euler's number (e)
-% or imaginary numbers (i) with |\mathup{e}| or |\mathup{i}|,
-% the package provides the |\e| command for Euler’s number
+% To avoid cluttering a document that contains many occurrences of Euler's number $\e$,
+% or imaginary number $\i$, with |\mathup{e}| or |\mathup{i}|,
+% the package provides the |\e| command for Euler's number
% and |\i| or |\j| for imaginary numbers.
% Let us notice that |\i| and |\j| already exist in LaTeX. In LR (left-to-right) mode,
-% they produce \mbox{`\extrafont{\i,\ \j}'} without the dot,
+% they produce \mbox{`\i,\ \j'} without the dot,
% allowing you to place accents on them.
% However, in mathematical mode, they produce the warning
% ``\texttt{LaTeX Warning: Command \string \i\space invalid in math mode on input line}
@@ -355,19 +377,21 @@
% \DescribeMacro{\MathUp}
% Indeed, typing a lot of backslashes for constants like $\e$, $\i$, or $\j$
% in a document with numerous formulas can become tiresome.
-% To alleviate this, the package proposes a powerful solution
+% To alleviate this, the package proposes another solution
% with the macro |\MathUp|\marg{char}.
% For example, when |\MathUp{e}| is called, any subsequent occurrence of $\e$
% will automatically be set in roman (upright shape),
% without the need to type |\e| explicitly. The effect of this macro
% can be either global or local, depending on whether it is used outside or inside an
% environment or braces.
-% Furthermore, you can call this macro in the preamble to apply the change
-% from the beginning of the document. This powerful feature allows you
-% to bring a document up to the standards effortlessly.
+% Furthermore, you can also call this macro in the preamble, then the change will apply
+% from the beginning of the document. This powerful command allows you
+% to bring a document up to the standards effortlessly and without changing anything
+% in your mathematical formulas.
% In fact, |\MathUp| can be applied to any valid single character,
-% offering flexibility for various use cases (another use of it with probability
-% will be presented in section \ref{operators}).
+% offering flexibility for various use cases
+% \footnote{Another use of it with probability
+% will be presented in section \ref{operators}.}.
%
% \medskip
% \DescribeMacro{\MathIt}
@@ -387,37 +411,47 @@
% In |\MathNumbers|, the comma separator between letters can be modified
% or removed as needed. In fact, this macro only affects the letters e, i, or j;
% it has no effect on other characters.
-% On the other hand, |\MathNormal| can be utilized for probability as well
-% (refer to section \ref{operators}), and it accepts any comma-separated list of arguments.
+% On the other hand, |\MathNormal| accepts any comma-separated list of arguments.
% This means you can apply the normal italic math mode typesetting to various letters
% at once using |\MathNormal|.
+%
+% \medskip
+% \DescribeMacro{\enumber}\DescribeMacro{\inumber}\DescribeMacro{\jnumber}
+% These three commands, used until version 2.2 but only functioning within the preamble,
+% serve now as aliases for the commands |\MathUp{e}|, |\MathUp{i}| or |\MathUp{j}|,
+% so they can be used anywhere
+% in the document or preamble and has an inverse switches with |\MathIt|.
%
% \medskip
% \DescribeMacro{\pinumber[\meta{option}]}
-% The mathematical constant $\otherpi$ should also be typeset in upright shape
+% The constant $\pi$ should also be typeset in upright shape
% (see~\cite{TYPMA}, \cite{NIST}, \cite{ICTNS}), which is different from italicized $\itpi$.
% However, this recommendation is even less commonly followed compared to the one
% concerning $\e$ and $\i$~\cite{TYPMA}.
-% The |\pinumber| command replaces the italic $\itpi$ with an upright $\otherpi$
-% each time |\pi| is called. It functions in two different ways.
+% Thanks to the |\pinumber| command, the italic $\itpi$ will be replaced
+% with an upright $\pi$
+% each time |\pi| is called. Thus |\pinumber| makes your document compliant with standards
+% without changing the source code of your mathematical formulas.
+% It functions in two different ways.
%
% \begin{enumerate}
-% \item You can install a Greek letters package that provides the glyphs in upright shape.
+% \item You can load a Greek letters package that provides the glyphs in upright shape.
% There are many available.
% Notably, let us mention \textsf{upgreek}~\cite{GREEK},
% \mbox{\textsf{mathdesign}}~\cite{DESIGN},
% \mbox{\textsf{kpfonts}}~\cite{KPF},
-% \mbox{\textsf{fourier}}~\cite{FOUR} (used in the present document),
-% \mbox{\textsf{libertinust1math}},
-% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}), \mbox{\textsf{txgreeks}}
-% (using \textsf{txfonts})
+% \mbox{\textsf{fourier}}~\cite{FOUR} (used in the present document), but also
+% \mbox{\textsf{pxgreeks}} (using \textsf{pxfonts}~\cite{PX}), \mbox{\textsf{txgreeks}}
+% (using \textsf{txfonts}~\cite{TX})
% \footnote{When using \textsf{pxgreeks} or \textsf{txgreeks},
% they should be loaded \emph{after} \textsf{mismath} to avoid an error
% due to conflict with the existing macros \texttt{\string\iint}, \texttt{\string\iiint},
% \texttt{\string\iiiint}, \texttt{\string\idotsint} in \textsf{amsmath}.},
-% \textsf{libgreek}, etc.
+% \mbox{\textsf{libertinust1math}}~\cite{LIB}, \textsf{libgreek}, etc.
% A special mention goes to \textsf{lgrmath} of Jean-François Burnol~\cite{LGR}
-% which allows the use of any Greek LGR-encoded font in math mode.
+% which allows the use of any Greek LGR-encoded font in math mode,
+% an idea taken up in \textsf{mathgreeks}~\cite{MGREEK}.
+% Also note \textsf{newtxmath}~\cite{NTX} which has several font options.
% These packages provide commands like |\uppi| (\textsf{upgreek}),
% |\piup| (\textsf{mathdesign}, \textsf{kpfonts}, \textsf{lgrmath}),
% |\otherpi| (\textsf{fourier}), etc.
@@ -425,101 +459,122 @@
% letters in upright shape by default, but this in not our goal here.}
%
% In this case, |\pinumber| must be called in the preamble
-% with the name of the command (without the backslash) giving access to the upright pi
-% (piup, uppi, otherpi \ldots) as the argument for the optional parameter.
+% with an optional argument being the name of the command, \emph{without the backslash},
+% giving access to the upright pi:
+% piup, uppi, otherpi\ldots
% However, installing such a Greek letters package will modify
% all the other Greek letter glyphs.
% ^^A even if, except for pi, they will be in italics.
%
-% By using the preliminary code |\MathNumbers{ei}\pinumber[otherpi]|
-% (assuming the \textsf{fourier} package is loaded)
+% By calling in the preamble |\MathNumbers{ei}\pinumber[otherpi]|
+% (assuming the \textsf{fourier} package is loaded),
% you can achieve the following result:
% \begin{center}
-% |$e^{i\pi} = -1$| \quad yields \quad $\e^{\i\otherpi}=-1$.
+% |$e^{i\pi} = -1$| \quad yields \quad $\e^{\i\pi}=-1$.
% \end{center}
%
% \item Without installing a package, it is possible to change only the glyph of pi
-% without altering the original glyphs for the other Greek letters,
-% which are typically in italics.
-% ^^A The original pi will still be accessible with |\itpi|.
+% without altering the other Greek letters,
+% which are typically in italics.
%
% In this case, |\pinumber| must be called in the preamble with an optional argument
% of the \texttt{key=value} type. The key name corresponds to a package
% providing the same glyph.
-% When a key is given without a value, |\pinumber| will choose a default value
-% specified below (depending on the key) .
% The following table summarizes the available options.
+% When a key is given without a value, |\pinumber| will choose a default value
+% specified in the following text (depending on the key).
%
% \begin{center}
% \setlength{\extrarowheight}{1pt}
% \begin{tabular}{>{\ttfamily}l>{$}c<{$}}
% \hline
-% \normalfont Option & \mbox{Result} \\
+% {\normalfont Option} lgrmath=... & \mbox{Result} \\
% \hline
-% lgrmath=lmr & \pilmr \\
-% lgrmath=Alegreya-LF & \piAlegreya \\
-% lgrmath=Cochineal-LF & \piCochineal \\
-% lgrmath=\ldots & \ldots\\
-% upgreek=Euler & \pi \\
-% upgreek=Symbol & \piSymbol \\
+% Alegreya-LF & \piAlegreya \\
+% Cochineal-LF & \piCochineal \\
+% LibertinusSerif-LF & \piLibSerif \\
+% LibertinusSans-LF & \piLibSans \\
+% lmr & \pilmr \\
+% lmss & \pilmss \\
+% gentium & \pigentium\\
+% lato-LF & \pilato \\
% \hline
% \end{tabular}
-% \qquad
+% \qquad
% \begin{tabular}{>{\ttfamily}l>{$}c<{$}}
% \hline
-% \normalfont Option & \mbox{Result} \\
+% \normalfont Other options & \mbox{Result} \\
% \hline
+% fontspec=\ldots & \ldots \\
+% upgreek=Euler & \piEuler \\
+% upgreek=Symbol & \piSymbol \\
% mathdesign & \piCharter \\
% kpfonts & \pikp \\
-% fourier & \otherpi\\
+% fourier & \pi\\
% pxfonts & \pipx \\
% txfonts & \pitx \\
-% & \\
% \hline
% \end{tabular}
% \end{center}
%
+% \medskip
% \begin{itemize}
+%
% \item With the \texttt{lgrmath} key, we actually have numerous possibilities
-% for values (any Greek letters math fonts in LGR encoding).
+% for values (any Greek letters math font in LGR encoding).
% The documentation of the \textsf{lgrmath}
% package explains how to check an visualize all available fonts on your distribution.
-% We have only presented three of them. The default value is \texttt{lmr}.
+% We have only presented seven of them. The default value is \texttt{lmr}.
+% Other interesting values are \texttt{NotoSerif-LF}, \texttt{Clara-TLF},
+% \texttt{droidserif}, \texttt{fct}, \texttt{llcmss}.
%
+% \item When |\pinumber| is called without an argument in the preamble,
+% it corresponds to the option \texttt{lgrmath=lmr}.
+% This $\pilmr$ character is well-suited
+% for use with the Latin Modern font family
+% \footnote{It will look the same as the one provided by \texttt{lgrmath=cmr} or by
+% Günter Milde's \textsf{textalpha} package~\cite{ALPHA}.}.
+%
+% \item With the \texttt{fontspec} key, there are also many possible values,
+% corresponding to the TrueType or OpenType fonts installed on your system
+% (works with \LuaLaTeX\ or \XeLaTeX).
+% See the \textsf{mathgreeks} documentation for examples.
+
% \item With the \texttt{upgreek} key, the default value is \texttt{Symbol}.
% There is a third possible value, \texttt{Symbolsmallscale},
% which provides the same character as \texttt{Symbol} but reduced in size by 10\,\%.
%
% \item With the \texttt{mathdesign} key, there are actually 3 possible values:
-% \texttt{Utopia}, \texttt{Garamond}, or \texttt{Charter} (default value),
-% but the glyphs obtained for pi look very similar.
+% \texttt{Utopia}, \texttt{Garamond} or \texttt{Charter} (the default value),
+% but the glyphs obtained for pi look quite similar.
%
% \item With the \texttt{kpfonts} key, we have two possible values:
% \texttt{normal} (default) and \texttt{light}. The option \texttt{kpfonts=light}
% provides a slightly less bold character.
%
-% \item The keys \texttt{fourier} (based on Utopia), \texttt{pxfonts} (based on Palatino)
-% and \texttt{txfonts} (based on Times)
+% \item The last keys, \texttt{fourier} (based on Utopia), \texttt{pxfonts}
+% (based on Palatino),
+% \texttt{txfonts} (based on Times)
% are booleans whose default value is \texttt{true} (when called).
+% The \texttt{txfonts} option yields the same glyph than \texttt{lgrmath=txr}.
%
-% \item When |\pinumber| is called without an argument in the preamble,
-% it corresponds to the option \texttt{lgrmath=lmr}.
-% This $\pilmr$ character is particularly well-suited
-% for use with the default Computer Modern or Latin Modern font family
-% \footnote{It will look the same as the one provided by
-% Günter Milde's \textsf{textalpha} package~\cite{ALPHA}.}.
% \end{itemize}
% \end{enumerate}
%
% The \textsf{unicode-math} package~\cite{UNIC} provides |\uppi|, and you can use
-% |\pinumber[uppi]| to produce automatic upright pi, but, with \textsf{unicode-math},
-% it can be quite complicated
-% to make some other Greek letters packages work.
-% In any case, such a package must be loaded after \textsf{unicode-math} and in
-% |\AtBeginDocument|.
-% However, \textsf{unicode-math} supports |\pinumber| very well with the
-% previous \texttt{key=value} options, by calling |\pinumber[option]| after
-% \mbox{\textsf{unicode-math}}.
+% |\pinumber[uppi]| to produce automatic upright pi in the selected math font,
+% but |\pinumber[uppi]| must be called \emph{after} \mbox{\textsf{unicode-math}},
+% and a math font must have been explicitly chosen with |\setmathfont|.
+% You can also use the \texttt{fontspec} key option to obtain pi in any font
+% that is supported by \mbox{\textsf{unicode-math}} \eg
+% |\pinumber[fontspec=STIX Two Math]|.
+%
+% For other fonts, it can be quite complicated to make Greek letters packages
+% work with \textsf{unicode-math}. In any case, such a package must be loaded
+% after \textsf{unicode-math} and in |\AtBeginDocument|.
+% However, |\pinumber| supports \textsf{unicode-math} very well with any previous
+% \texttt{key=value} option, by calling |\pinumber|\oarg{option}
+% after \textsf{unicode-math}.
%
% \medskip
% \DescribeMacro{\itpi}
@@ -555,7 +610,7 @@
% If you wish to use a different type of arrow, you must call \textsf{esvect}
% with the appropriate option \emph{before} loading \textsf{mismath}.
% For example, using |\usepackage[d]{esvect}|
-% will provide the arrows produced by default in~\cite{VECT}.
+% will provide the same arrows that are used by default in~\cite{VECT}.
%
% \medskip
% \DescribeMacro{\boldvect}
@@ -567,11 +622,11 @@
% \begin{minipage}{8cm}
% \begin{verbatim}
%\[ \boldvect \vect{v}
-% =\lambda\vect{e}_x+\mu\vect{e}_y. \]
+% =\lambda\vect{e}_x+\mu\vect{e}_y \]
% \end{verbatim}
% \end{minipage}
% \begin{minipage}{4cm}\vspace{-2ex}
-% $\boldvect \vect{v}=\lambda\vect{e}_x +\mu\vect{e}_y$.
+% $\boldvect \vect{v}=\lambda\vect{e}_x +\mu\vect{e}_y$
% \end{minipage}
%
% \DescribeMacro{\boldvectcommand}
@@ -586,9 +641,12 @@
% \textsf{unicode-math} provides the |\symbfit| command.
% To use an alternative command instead of |\boldsymbol| in \textsf{mismath},
% redefine |\boldvectcommand|,
-% for instance after loading \textsf{fixmath}:
-% \begin{center} |\renewcommand\boldvectcommand{\mathbold}|. \end{center}
+% for instance after loading \textsf{fixmath}:
+%
+% \medskip
+% \centeredline{|\renewcommand\boldvectcommand{\mathbold}|}
%
+% \medskip
% According to ISO rules, symbols for matrices are also in bold italic.
% Therefore you can use the same |\boldvect| command or create another alias.
%
@@ -604,28 +662,31 @@
% \DescribeMacro{\hvect}
% When vectors with arrows are typeset side by side,
% the arrows can be set up slightly higher using |\hvect|
-% (which places a vertical phantom box containing ``$t$'')
+% (which places a vertical phantom box containing `$A$')
% to avoid inelegant effects. For example, writing
% \begin{itemize}
-% \item $\vect{AB}=\hvect{u}+ \vect{AC}$, obtained with |\hvect{u}|,
-% is better than $\vect{AB}=\vect{u}+ \vect{AC}$;
+% \item $\vect{AB}=\hvect{u} + \vect{AC}$, obtained with |\hvect{u}|,
+% looks better than $\vect{AB}=\vect{u}+ \vect{AC}$;
% \item $\hvect{a} \cdot \vect{b}=0$, obtained with |\hvect{a}|,
-% is better thant $\vect{a} \cdot \vect{b}=0$.
+% looks better than $\vect{a} \cdot \vect{b}=0$.
% \end{itemize}
-% This adjustment ensures a more visually pleasing appearance when vectors
-% with arrows are combined in an equation.
+% This adjustment ensures a nicer appearance when vectors
+% with arrows are combined in an equation
+% \footnote{For a fine tuning you can also use the \texttt{\string\vstrut} or
+% \texttt{\string\cstrut} macros from the \textsf{spacingtricks} package~\cite{SPA}.}.
% The |\boldvect| and |\arrowvect| switches have the same effect on |\hvect|
% as they do on |\vect|.
%
% \DescribeMacro{\hvec}
% In a similar way, |\hvec| raises the little arrow produced by
-% the \LaTeX\ command |\vec|, to the height of the letter ``$t$''
-% (but |\boldvect| have no effect here):
+% the \LaTeX\ command |\vec|, to the height of the letter `$A$'
+% (but |\boldvect| have no effect on |\vec| nor |\hvec|):
% \begin{itemize}
% \item $\mathcal{P}=\vec{f}\cdot\hvec{v}$, obtained with |\hvec{v}|,
-% is better than $\mathcal{P}=\vec{f}\cdot\vec{v}$.
+% seems better than $\mathcal{P}=\vec{f}\cdot\vec{v}$;
+% ^^A (the result of |\vec| with \textsf{fourier} may be bad with high letters, \eg $\vec{h}$)
% \item $\vec{f} =m \hvec{a}$, obtained with |\hvec{a}|,
-% is better than $\vec{f} =m \vec{a}$.
+% seems better than $\vec{f} =m \vec{a}$.
% \end{itemize}
%
% \DescribeMacro{\norm}
@@ -639,11 +700,11 @@
% instead of $\Vert\vec{h}\Vert$ or $\left\Vert \vec{h} \right\Vert$.
% Let's notice that the height of the bars don't adjust to content,
% but however to context: main text, subscripts or exponents,
-% \eg $\e^{\norm{\vec{h}}}$.
+% \eg $X^{\norm{\vec{h}}}$.
% This macro is useful only for arguments of special height, such as $\vec{h}$ or $\vect{AB}$
% and may give bad results in other situations.
%
-% \pagebreak
+% \medskip
% \DescribeMacro{\mathbfsfit}\DescribeMacro{\tensor}
% For tensors symbols, ISO rules recommend using
% sans serif bold italic, but there
@@ -651,7 +712,7 @@
% However, the \mbox{\textsf{mismath}} package defines this alphabet
% (assuming the font encoding and package you use permits it)
% and provides the macro |\mathbfsfit| or its alias |\tensor|.
-% By using |\tensor{T}| you can produce $\tensor{T}$.
+% By writing |\tensor{S}\otimes\tensor{T}|, you get $\tensor{S}\otimes\tensor{T}$.
%
% \subsection{Standard operator names}\label{operators}
%
@@ -681,12 +742,12 @@
% \[m\frac{\di^2x}{\di t^2}+h\frac{\di x}{\di t}+kx=0\]
% \end{minipage}
%
-% This command can also represent \emph{distance} (hence its name):
-% \[\lambda\di(A, \mathcal{F})+\mu\di(B, \mathcal{H}).\]
+% The command |\di| can also represent the \emph{distance}, hence its name:
+% \[\di(u, \cmmathcal{H}) = \frac{\abs{\langle u,v\rangle}}{\lVert v \rVert}.\]
%
% \DescribeMacro{\P} \DescribeMacro{\E}
% To refer to probability
-% \footnote{\LaTeX\ provides also \texttt{\string Pr} which gives $\Pr$.}
+% \footnote{\LaTeX\ provides also \texttt{\string \Pr} which gives $\Pr$.}
% and expectation the proper use is to typeset the capital letters $\P$, $\E$
% in roman just like any standard function identifier.
% This can be achieved with |\P| and |\E| commands.
@@ -698,43 +759,45 @@
%
% \medskip
% \DescribeMacro{\V}
-% Variance is generally denoted by $\var$ or $\Var$ (see table below),
+% Variance is generally denoted by $\var$ or $\Var$ (see the following table),
% but some authors prefer to use $\V$, which can be produced using |\V|.
%
-% \medskip
+% \pagebreak
% \DescribeMacro{\MathProba}\DescribeMacro{\MathNormal}
% As for $\e$, $\i$ or $\j$, you can use |\MathUp{P}|, |\MathUp{E}|
% or |\MathUp{V}| to avoid typing many |\P|, |\E| or |\V|.
% However you can also achieve this in a single command with |\MathProba|,
-% for example |\MathProba{P,E}|. We get the inverse toggle with
+% for example |\MathProba{PE}|. We get the inverse toggle with
% |\MathIt| for any individual letter or |\MathNormal| for a list.
%
% \medskip
% \DescribeMacro{\probastyle}
-% Some authors use ``blackboard bold'' font to represent probability, expectation
+% Some authors use ``outline'' font shape to represent probability, expectation
% and variance: $\mathbb{P}, \mathbb{E}, \mathbb{V}$.
% The |\probastyle| macro sets the appearance of |\P|, |\E| and |\V|.
% For instance |\renewcommand\probastyle{\mathbb}|
% \footnote{The effect of this redefinition is global or local to the container environment
% in which it is used.}
-% brings the previous ``double-struck'' letters.
-% The |\mathbb| command comes from \textsf{amsfonts} package
-% (loaded by \textsf{amssymb} but also available standalone)
-% which needs to be called in the preamble.
+% brings the double-struck letters.
+% The |\mathbb| command is provided by \textsf{amsfonts} package
+% (which needs to be called in the preamble), but also by other complete math font
+% packages such as \textsf{mathdesign}, \textsf{kpfonts}, \textsf{fourier},
+% \textsf{unicode-math}\ldots
+% \hypertarget{nofunction}{}
%
% \medskip
% The following standard operator names are defined in \textsf{mismath}:
% \begin{center}
% \begin{tabular}{rlrlrl}
-% |\adj| & $\adj$ \qquad\mbox{} & |\erf| & $\erf$ \qquad\mbox{} & |\Re| & $\Re$ \\
-% |\Aut| & $\Aut$ & |\grad| & $\grad$ & |\rot| & $\rot$ \\
-% |\codim| & $\codim$ & |\id| & $\id$ & |\sgn| & $\sgn$ \\
-% |\Conv| & $\Conv$ & |\Id| & $\Id$ & |\sinc| & $\sinc$ \\
-% |\cov| & $\cov$ & |\im| & $\im$ & |\spa| & $\spa$ \\
-% |\Cov| & $\Cov$ & |\Im| & $\Im$ & |\tr| & $\tr$ \\
-% |\curl| & $\curl$ & |\lb| & $\lb$ & |\var| & $\var$ \\
-% |\divg| & $\divg$ & |\lcm| & $ \lcm$ & |\Var| & $\Var$ \\
-% |\End| & $\End$ & |\rank| & $\rank$ & |\Zu| & $\Zu$
+% |\adj| & $\adj$ \qquad\mbox{} & |\End| & $\End$ \qquad\mbox{} & |\Res| & $\Res$ \\
+% |\Aut| & $\Aut$ & |\erf| & $\erf$ & |\rot| & $\rot$ \\
+% |\codim| & $\codim$ & |\grad| & $\grad$ & |\sgn| & $\sgn$ \\
+% |\coker| & $\coker$ & |\id| & $\id$ & |\sinc| & $\sinc$ \\
+% |\Conv| & $\Conv$ & |\Id| & $\Id$ & |\spa| & $\spa$ \\
+% |\Cov| & $\Cov$ & |\im| & $\im$ & |\tr| & $\tr$ \\
+% |\cov| & $\cov$ & |\lb| & $\lb$ & |\var| & $\var$ \\
+% |\curl| & $\curl$ & |\lcm| & $ \lcm$ & |\Var| & $\Var$ \\
+% |\divg| & $\divg$ & |\rank| & $\rank$ & |\Zu| & $\Zu$
% \end{tabular}
% \end{center}
%
@@ -745,26 +808,15 @@
% For the variance, the covariance and the identity function,
% two notations are proposed, with or without a first capital letter,
% because both are very common.
-% On the other hand, `$\im$' stands for the image of a linear transformation
-% (like `$\ker$' for the kernel)
-% whereas `$\Im$' is the imaginary part of a complex number.
% Please note that |\div| already exists ($\div$) and |\span| is a \TeX\ primitive;
% they haven't been redefined. Therefore the provided macros are called |\divg| (divergence)
% and |\spa| (span of a set of vectors).
% Furthermore |\Z| is used to denote the set of integers (see \ref{aliases}),
-% which is why we used |\Zu|,
+% which is why we propose |\Zu|,
% to designate the center of a group: $\Zu(G)$ (from German Zentrum).
%
-%\medskip
-% \DescribeMacro{\oldRe} \DescribeMacro{\oldIm}
-% The |\Re| and |\Im| macros already existed to refer to real and imaginary part
-% of a complex number, producing outdated symbols $\oldRe$ and $\oldIm$.
-% However, they have been redefined according to current usage,
-% as mentioned in the above table. Nevertheless,
-% it is still possible to obtain the old symbols with |\oldRe| and |\oldIm|.
-%
% \medskip
-% The package \textsf{mismath} also provides some (inverse) circular or hyperbolic functions,
+% The \textsf{mismath} package also provides some (inverse) circular or hyperbolic functions,
% that are missing in \LaTeX:
% \begin{center}
% \begin{tabular}{rlrlrl}
@@ -773,21 +825,44 @@
% |\sech| & $\sech$ & |\arcosh| & $\arcosh$ & |\arsech| & $\arsech$ \\
% |\csch| & $\csch$ & |\artanh| & $\artanh$ & |\arcsch| & $\arcsch$
% \end{tabular}
-% \end{center}
+% \end{center}
+%
+% \DescribeMacro{[nofunction]}
+% Some may find that the definition of all these operators and functions is not useful
+% for their needs. So, the above definitions (on this page)
+% can be disabled with the \texttt{nofunction} option.
+% \hypertarget{classicReIm}{}
+%
+% \medskip
+% \DescribeMacro{\Re} \DescribeMacro{\Im}
+% The |\Re| and |\Im| macros refer to real and imaginary part
+% of a complex number. They have been redefined to produce $\mathup{Re}$ and $\mathup{Im}$,
+% in place of outdated symbols $\oldRe$ and $\oldIm$.
+% Nevertheless, it is still possible to obtain the old symbols
+% with |\oldRe| and |\oldIm|.
+%
+% \medskip
+% \DescribeMacro{[otherReIm]}
+% An alternative notation $\Re$, $\Im$ is provided by invoking the \texttt{otherReIm}
+% package option,
+% \DescribeMacro{[classicReIm]}
+% whereas the \texttt{classicReIm} option deactivates these redefinitions.
%
% \DescribeMacro{\bigO} \DescribeMacro{\bigo} \DescribeMacro{\lito}
-% Asymptotic comparison operators (in Landau notation) are obtained with
-% |\bigO| or |\bigo| and |\lito| commands:
-% \[ n^2+\bigO(n\log n) \txt{or} n^2+\bigo(n\log n)\txt{and} \e^x=1+x+\lito(x^2).\]
+% Asymptotic comparison operators (in Bachmann-Landau notation) are obtained with
+% |\bigO| or |\bigo| and |\lito| commands. The first one uses
+% the |\cmmathcal| alphabet and the last two compose the letters `O' and `o' in
+% roman, as for any operator:
+% \[ n^2+\bigO(n\log n) \txt{or} n^2+\bigo(n\log n)\txt{and}
+% \e^x=1+x+\frac{x^2}{2}+\lito\bigl(x^2\bigr).\]
%
% \subsection{A few useful aliases} \label{aliases}
%
-% \onlymathC
% In the tradition of Bourbaki and D.~Knuth, proper use requires
% that classic sets of numbers are typeset in bold roman:
% $\R, \C, \Z, \N, \Q$,
-% whereas ``double-barred'' or ``openwork'' letters
-% ($\mathbb{R}, \mathbb{C}, \mathbb{Z}, \ldots$)
+% whereas double-struck letters
+% ($\mathbb{R}, \mathbb{C}, \mathbb{Z}, \mathbb{N}, \mathbb{Q}$)
% are reserved for writing at the blackboard~\cite{LSHORT}.
% Similarly, to designate a field we use $\F$ or $\K$ (Körper in German).
% We obtain these symbols with the following macros:
@@ -795,23 +870,22 @@
% |\R|, |\C|, |\Z|, |\N|, |\Q|, |\F|, |\K|.
% \end{center}
%
-% \medskip
+% \smallskip
% \DescribeMacro{\mathset}
% The |\mathset| command enables you to change the behavior
% of all these macros in a global way.
-% By default, |\mathset| is an alias for |\mathbf|, but if you prefer openwork letters,
-% you can simply place |\renewcommand\mathset{\mathbb}| where you want,
-% for instance in the preamble after loading the \textsf{amsfonts} package
-% (which provides the ``blackboard bold'' typeface,
-% also loaded by \textsf{amssymb}).
+% By default, |\mathset| is an alias for |\mathbf|, but if you prefer outline letters,
+% you can simply use |\renewcommand\mathset{\mathbb}| (with local effect when
+% inside an environment or a pair of curly braces).
%
% \smallskip
% \DescribeMacro{\onlymathC}
% The macro |\onlymathC| is designed for cases when |\C| is already defined,
-% but only in text mode (usually when loading the Russian language with \textsf{babel}
-% or \textsf{polyglossia}). The macro preserves the original definition for text mode
+% but only in text mode (usually with the Russian language). Then you get the message:
+% ``\texttt{Command \string\C\space invalid in math mode}''.
+% This macro preserves the original definition for text mode
% and allows you to use |\C| for the complex number set in math mode.
-% For this purpose, simply call |\onlymathC| once in the preamble or anywhere in the document.
+% Simply call |\onlymathC| once in the preamble or anywhere in the document.
%
% \medskip
% \DescribeMacro{\ds}
@@ -844,11 +918,11 @@
% \DescribeMacro{\lbar} \DescribeMacro{\hlbar}
% Large bars over expressions are obtained with |\overline|
% or its alias |\lbar|, to get for instance $\lbar{z_1z_2}$.
-% Similar to vectors, you can raise the bar (from the height of ``$h$'') with
+% Similar to vectors, you can raise the bar (from the height of `$A$') with
% the |\hlbar| command, to correct uneven bars heights.
% \begin{center}
% $\lbar{z+z'}=\hlbar{z}+\lbar{z'}$, obtained with |\hlbar{z}|,
-% is better than $\lbar{z+z'}=\lbar{z}+\lbar{z'}$.
+% looks better than $\lbar{z+z'}=\lbar{z}+\lbar{z'}$.
% \end{center}
%
% \DescribeMacro{\eqdef} \DescribeMacro{\eqdef*}
@@ -918,36 +992,36 @@
% (ordinary symbol) and leaving less space around than |\times|:
% \begin{center}
% $\lambda+\alpha \mul b-\beta \mul c$, obtained with |\mul|,
-% is better than $\lambda+\alpha \times b-\beta \times c$.
+% looks better than $\lambda+\alpha \times b-\beta \times c$.
% \end{center}
%
% When using |\mul| before a function name or around a |\left...\right| structure,
% the space may be too large on one side of |\mul|.
-% To ensure the same amount of space on both sides of |\mul|,
+% To ensure the same amount of space on both sides,
% you can use thin negative spaces |\!|
% or enclose the function or structure with braces:
% \begin{center}
-% $x\mul{\sin x}$, obtained with |x\mul{\sin x}|, is slightly better than $x\mul\sin x$.\\[1ex]
+% $x\mul{\sin x}$, obtained with |x\mul{\sin x}|, is slightly better than $x\mul\sin x$;\\[1ex]
% |$\sin\!{\left( \frac{\pi}{3} \right)} \mul 2$|\\
-% gives $\sin\!{\left(\frac{\pi}{3}\right)}\mul 2$, which is better than
+% yields $\sin\!{\left(\frac{\pi}{3}\right)}\mul 2$, which looks better than
% $\sin\left(\frac{\pi}{3}\right)\mul 2$.
% \end{center}
-% The thin negative space after the function name is not relative to |\mul|,
-% but is due to the fact that spaces around a |\left...\right| structure
-% are bigger than those produced by single parenthesis |(...)|.
+% The negative thin space after the function name is not related to |\mul|,
+% but to the ``excessive'' spaces around the |\left... \right| structure.
%
% \medskip
% \DescribeMacro{\pow}
% In the same way, when typesetting an exponent after a closing \emph{big}
% parenthesis produced by |\right)|,
% the exponent appears to be a little to far from the parenthesis.
-% To address this issue, the |\pow|\marg{expr}\marg{pow} command is provided, which sets
-% \meta{expr} between parentheses and adjusts the positioning of the exponent \meta{pow}
-% slightly closer to the right parenthesis
-% \footnote{This macro gives bad results with normal-sized parenthesis.}.
+% To address this issue, the |\pow|\marg{expr}\marg{pow} command is provided
+% \footnote{This macro gives bad results with \emph{normal-sized} parenthesis.},
+% which sets the positioning of the exponent \meta{pow}
+% slightly closer to the right parenthesis.
% Compare:
-% \[ \e^a \sim\pow{1+\frac{a}{n}}{n} \txt{which may be better than}
-% \e^a \sim\left(1+\frac{a}{n}\right)^{n}.\]
+% \[ \e^a =\lim_{n \to +\infty}\pow{1+\frac{a}{n}}{n}
+% \txt{obtained with \texttt{\string \pow}, rather than}
+% \e^a =\lim_{n \to +\infty}\left(1+\frac{a}{n}\right)^{n}.\]
%
% \DescribeMacro{\abs}
% The correct typesetting of absolute value (or modular for a complex number) is achieved
@@ -964,16 +1038,18 @@
% \DescribeMacro{\lfrac}
% The |\lfrac| macro behaves like |\frac|
% but with thicker spaces around the arguments,
-% making the corresponding fraction bar slightly longer:\\[2ex]
-% \begin{minipage}{8cm}
-% \begin{verbatim}
-%\[ \lbar{Z} =
-% \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \]
-% \end{verbatim}
-% \end{minipage}
-% \begin{minipage}{4cm}\vspace{-3ex}
-% \[ \lbar{Z} = \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \]
-% \end{minipage}
+% making the corresponding fraction bar slightly longer. See the following examples:
+% \[ \lbar{Z} = \lfrac{\lbar{z_1-z_2}}{\lbar{z_1+z_2}} \qquad
+% u(x)= \lfrac{\frac{1-2x}{5}}{x^2+1} \qquad
+% y'+xy=\lfrac[4mu]{1}{\sqrt{x}}
+% \]
+%
+% This macro has an optional parameter |\lfrac|\oarg{space}\marg{num}\marg{denom}
+% to adjust the length of the fraction bar. The optional \meta{space} argument must be given
+% in \emph{math units} (\texttt{mu});
+% the default value is \texttt{7mu} (equivalent to |\:\,|),
+% \texttt{4mu} in the last example.
+% \hypertarget{ibrackets}{}
%
% \medskip
% \DescribeMacro{[ibrackets]}
@@ -984,17 +1060,14 @@
% To address this issue, we have redefined the brackets in the \textsf{ibrackets}
% package~\cite{BRACKET}.
% This one can be optionally
-% \footnote{This functionality is optional because there is a conflict
-% when using another command for open intervals with square brackets defined by
-% \texttt{\string \DeclarePairedDelimiter} from \textsf{mathtools}~\cite{TOOL}.}
% loaded by \textsf{mismath} using the \texttt{ibrackets} package option.
% Thus |$x\in ]-\pi,0[ \cup ]2\pi,3\pi[$|
% \begin{align*}
% \mbox{yields \ }
-% x\in ]-\otherpi, 0[ \cup ]2\otherpi, 3\otherpi[ & \mbox{\ with \textsf{ibrackets}}, \\
+% x\in ]-\pi, 0[ \cup ]2\pi, 3\pi[ & \mbox{\ with \textsf{ibrackets}}, \\
% \mbox{instead of \ }
-% x\in \mathclose{]}-\otherpi, 0 \mathopen{[} \cup
-% \mathclose{]} 2\otherpi, 3\otherpi \mathopen{[}
+% x\in \mathclose{]}-\pi, 0 \mathopen{[} \cup
+% \mathclose{]} 2\pi, 3\pi \mathopen{[}
% &\mbox{\ without \textsf{ibrackets}}.
% \end{align*}
%
@@ -1017,10 +1090,15 @@
% For instance |$[a,b] +[c,d]$| yields $[a,b] +[c,d]$
% but |$[a,b]+ [c,d]$| yields $[a, b]+ [c, d]$.
%
-% Besides, there are other approaches, for example the |\interval| macro
+% \medskip
+% Note that there are other ways to proceed,
+% for example with |\interval|,
% from the \textsf{interval} package~\cite{INT},
-% or |\DeclarePairedDelimiters| from the \textsf{mathtools} package~\cite{TOOL}
-% (but this command is incompatible with \textsf{ibrackets}).
+% or with |\DeclarePairedDelimiter|
+% \footnote{You cannot use \texttt{\string\DeclarePairedDelimiter} with square brackets
+% when \textsf{ibrackets} is loaded.}
+% from \mbox{\textsf{mathtools}}~\cite{TOOL}.
+% \hypertarget{decimalcomma}{}
%
% \medskip
%\DescribeMacro{[decimalcomma]}
@@ -1040,11 +1118,10 @@
% in particular when running through Lua\LaTeX, using \textsf{unicode-math}
% and calling |\setmathfont|.
% Therefore we propose the \textsf{decimalcomma} package~\cite{DEC},
-% functionally identical to that of \textsf{ncccomma} but with lighter code
-% and without the aforementioned incompatibility.
+% functionally identical to that of \textsf{ncccomma} but
+% without the aforementioned incompatibility.
% It can be loaded by \textsf{mismath} using the \texttt{decimalcomma}
-% package option\footnote{\texttt{ibrackets} and \texttt{decimalcomma} are the only
-% options specific to the \textsf{mismath} package.}.
+% package option.
%
% \subsection{Environments for systems of equations and small matrices}
%
@@ -1159,7 +1236,8 @@
%
% \DescribeEnv{mathcols}
% The \texttt{mathcols} environment allows you to arrange
-% ``long'' calculations in double columns, separated with a central rule,
+% lengthy calculations with short expressions across two columns
+% separated by a vertical line,
% as shown in the following example.
% However, to use this feature, the \textsf{multicol} package must be loaded in the preamble.
% The \texttt{mathcols} environment activates mathematical mode
@@ -1194,96 +1272,85 @@
% \end{verbatim}
%
% \vspace{-4ex}
-% \subsection{Old commands}
-%
-% Here is a summary table of old commands that were used until version 2.2.
-% These commands are still functional and will be maintained for the time being,
-% but a warning message indicates the new alternative.
-% They used to work only in the preamble, affecting the entire document globally,
-% and lacked an inverse switch.
-% These old commands can now be replaced by the more
-% versatile and powerful |\MathUp| macro, which can be used anywhere
-% in the document or preamble and has an inverse switch |\MathIt|.
-%
-% \begin{center}
+% \subsection{Summary of the package options}
+%
+% The following table summarizes the possible package options.
+% You can add to them any option you want to pass to \textsf{amsmath} or \textsf{mathtools}.
+% The hyperlinks (in blue) redirect to the paragraphs in the documentation
+% where these options are described.
+% \begin{center}
% \setlength{\extrarowheight}{1pt}
-% \begin{tabular}{ll}
+% \begin{tabular}{>{\ttfamily}ll}
% \hline
-% Old command & New alternative \\
+% \normalfont Option & \mbox{Effect} \\
% \hline
-% |\enumber| & |\MathUp{e}| \\
-% |\inumber| & |\MathUp{i}| \\
-% |\jnumber| & |\MathUp{j}| \\
-% |\PEupright| & |\MathProba{PE}| \\
+% \hyperlink{nofunction}{nofunction} & don't load some additional function definitions \\
+% \hyperlink{classicReIm}{otherReIm} & typesets |\Re| and |\Im| as $\Re$ and $\Im$ \\
+% \hyperlink{classicReIm}{classicReIm} & preserves |\Re| and |\Im| as $\oldRe$ and $\oldIm$ \\
+% \hyperlink{ibrackets}{ibrackets} & loads the \textsf{ibrackets} package\\
+% \hyperlink{decimalcomma}{decimalcomma} & loads the \textsf{decimalcomma} package \\
% \hline
% \end{tabular}
% \end{center}
-%
-% \medskip
-% You can also utilize |\MathNumbers| instead of |\MathUp| with an argument containing
-% all the constants you want to be typeset in roman (among `e, i, j').
-%
-% Additionally you can include V in the argument of |\MathProba| to refer to variance,
-% (or even use |\MathUp{P}\MathUp{E}|).
-%
-% \medskip
-% In version 2.3 we attempted to replace these old commands
-% with package options based on keyval. However, we found that this method was
-% less efficient and have decided to abandon it.
-% As a result, the command |\mismathset| is now obsolete.
-% Additionally, the command, |\paren|, which was used before version 2.0,
-% is no longer supported.
-%
% \StopEventually{}
% \section{Implementation}
%
% We load certain packages conditionally to avoid 'option clash' errors in cases
% where these packages have been previously loaded with other options.
+% The \textsf{amsmath} package is loaded by \textsf{mathtools}.
% \begin{macrocode}
\newif\ifmm@ibrackets % initialized to false
-\newif\ifmm@decimalcomma
\DeclareOption{ibrackets}{\mm@ibracketstrue}
+\newif\ifmm@decimalcomma
\DeclareOption{decimalcomma}{\mm@decimalcommatrue}
-\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{amsmath}}
+\newif\ifmm@nofunction
+\DeclareOption{nofunction}{\mm@nofunctiontrue}
+\newif\ifmm@otherReIm
+\DeclareOption{otherReIm}{\mm@otherReImtrue}
+\newif\ifmm@classicReIm
+\DeclareOption{classicReIm}{\mm@classicReImtrue}
+\DeclareOption*{\PassOptionsToPackage{\CurrentOption}{mathtools}}
\ProcessOptions \relax
-\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
+%\@ifpackageloaded{amsmath}{}{\RequirePackage{amsmath}}
\@ifpackageloaded{mathtools}{}{\RequirePackage{mathtools}}
\@ifpackageloaded{esvect}{}{\RequirePackage[b]{esvect}}
\RequirePackage{ifthen}
\RequirePackage{xparse} % provides \NewDocumentCommand, now in LaTeX3
-\RequirePackage{xspace}
+\RequirePackage{xspace} % for \iif command
\RequirePackage{iftex}
\RequirePackage{etoolbox} % provides \AtEndPreamble
-\RequirePackage{xkeyval}
+\RequirePackage{xkeyval} % for \pinumber options
% \end{macrocode}
%
% The package \textsf{unicode-math} causes some compatibility issues
-% with the options \texttt{ibrackets} or \texttt{decimalcomma}: the respective packages
+% with \textsf{ibrackets} and \textsf{decimalcomma}: theses packages
% must be loaded \emph{after} \textsf{unicode-math},
-% but \textsf{mismath} (like \textsf{amsmath}) must be loaded \emph{before}
+% but \textsf{mismath} (like \textsf{amsmath}) should be loaded \emph{before}
% \textsf{unicode-math}.
-% And to complicate matters, \textsf{unicode-math} defines all its commands
+% And to complicate matters, \mbox{\textsf{unicode-math}} defines all its commands
% by |\AtBeginDocument|.
-% Therefore we used the command |\AtBeginDocument| within
-% |\AtEndPreamble| (from the \textsf{etoolbox} package).
+% Therefore we used the command |\AtEndPreamble|, from the \textsf{etoolbox} package,
+% which makes the job (because both \textsf{ibrackets} and \textsf{decimalcomma}
+% work also in |\AtBeginDocument|).
%
% Moreover the command |\mathbfsfit| (used for tensors) is already defined
% in \textsf{unicode-math} and will not be redefined if \textsf{unicode-math}
% is loaded.
% \begin{macrocode}
+\@ifpackageloaded{unicode-math}{
+ \PackageWarningNoLine{mismath}{The package unicode-math\MessageBreak
+ should be loaded after mismath}
+}{}
\newif\ifmm@unicodemath
\newif\ifmm@multicol
\AtEndPreamble{% necessary to work with unicode-math
- \@ifpackageloaded{multicol}{\mm@multicoltrue}{\mm@multicolfalse}
+ \ifmm@decimalcomma\RequirePackage{decimalcomma}\fi
+ \ifmm@ibrackets\RequirePackage{ibrackets}\fi
+ \@ifpackageloaded{multicol}{\mm@multicoltrue}{}
\@ifpackageloaded{unicode-math}{\mm@unicodemathtrue}{
- \mm@unicodemathfalse
\DeclareMathAlphabet{\mathbfsfit}{\encodingdefault}%
{\sfdefault}{bx}{it}}
- \AtBeginDocument{% necessary to work with unicode-math
- \ifmm@ibrackets\RequirePackage{ibrackets}\fi
- \ifmm@decimalcomma\RequirePackage{decimalcomma}\fi
- }
}
% \end{macrocode}
@@ -1299,7 +1366,6 @@
% \end{macrocode}
%
-% \medskip
% \DescribeMacro{\mm@warning} \DescribeMacro{\mm@macro} \DescribeMacro{\mm@operator}
% The next three internal macros serve as meta commands for
% conditionally defining macros while providing a warning message if the macro already exists.
@@ -1307,8 +1373,8 @@
% \medskip
% \begin{macrocode}
\newcommand\mm@warning[1]{
- \PackageWarningNoLine{mismath}{
- Command \bslash #1 already exist and will not be redefined}
+ \PackageWarningNoLine{mismath}{Command \bslash #1 already exist
+ \MessageBreak and will not be redefined}
}
\newcommand\mm@macro[2]{
\@ifundefined{#1}{
@@ -1336,7 +1402,7 @@
% \begin{macrocode}
\@ifundefined{mathup}{
\providecommand*{\mathup}[1]{{\operatorfont #1}}
- }{\mm@warning{mathup} } % also in kpfonts (and unicode-math)
+ }{\mm@warning{mathup} } % also in kpfonts and unicode-math
\mm@macro{e}{\mathup{e}}
\AtBeginDocument{\let\oldi\i \let\oldj\j
\renewcommand{\i}{\TextOrMath{\oldi}{\mathup{i}}}
@@ -1443,11 +1509,8 @@
% and may not have a straightforward solution.
%
% \medskip
-% In addition to |\MathUp| and |\MathIt|, we also offer the following two commands
-% to set a group of letters in roman typeface: one for for mathematical constants,
-% among `e, i, j', and the other for probability operators, among or `P, E, V'.
-%
-% \medskip
+% In addition to |\MathUp| and |\MathIt|, we also offer the following command
+% to set a group of letters, among `e, i, j', in roman typeface.
% \begin{macrocode}
\newcommand*\MathNumbers[1]{%
\in@{e}{#1} \ifin@ \MathUp{e} \fi
@@ -1455,12 +1518,6 @@
\in@{j}{#1} \ifin@ \MathUp{j} \fi
}
-\newcommand*\MathProba[1]{%
- \in@{P}{#1} \ifin@ \MathUp{P} \fi
- \in@{E}{#1} \ifin@ \MathUp{E} \fi
- \in@{V}{#1} \ifin@ \MathUp{V} \fi
-}
-
% \end{macrocode}
% \DescribeMacro{\apply}
% With the inverse switch |\MathNormal|, you can apply the normal (italic) style
@@ -1471,7 +1528,7 @@
% I discovered this powerfull macro on \texttt{iterate190.rssing.com} by searching for
% ``TeX How to iterate over a comma separated list''.
% The answer was posted under the pseudonym `wipet' on 2021/02/26.
-% Let its author, Petr Ol\v sák, be thanked.
+% Let its author, Petr Ol\v{s}ák, be thanked.
% This macro allows to accomplish tasks that
% usual loop instructions like |\@for| or |\foreach| cannot achieve due to
% errors like ``!~Improper alphabetic constant''.
@@ -1496,44 +1553,24 @@
% They were intended to set some letters in upright shape
% in math mode, but only worked in the preamble.
% This is now managed by the more powerful |\MathUp| command, and
-% the old commands are maintained for compatibility reasons.
+% the old commands are maintained but as alias for |\MathUp|.
% \medskip
%
% \begin{macrocode}
-\newcommand{\enumber}{%
- \PackageWarning{mismath}{Old command \string\enumber\space
- is used. \MessageBreak
- It can be replaced by \string\MathUp{e}}
- \MathUp{e}
-}
-\newcommand{\inumber}{%
- \PackageWarning{mismath}{Old command \string\inumber\space
- is used. \MessageBreak
- It can be replaced by \string\MathUp{i}}
- \MathUp{i}
-}
-\newcommand{\jnumber}{
- \PackageWarning{mismath}{Old command \string\jnumber\space
- is used. \MessageBreak
- It can be replaced by \string\MathUp{j}}
- \MathUp{j}
-}
-\newcommand{\PEupright}{
- \PackageWarning{mismath}{Old command \string\PEupright\space
- is used. \MessageBreak
- It can be replaced by \string\MathProba{PE}}
- \MathUp{P}\MathUp{E}
-}
+\newcommand{\enumber}{\MathUp{e}}
+\newcommand{\inumber}{\MathUp{i}}
+\newcommand{\jnumber}{\MathUp{j}}
% \end{macrocode}
%
-% Obtaining an upright Greek letter $\otherpi$ must be handled differently.
+% Obtaining an upright Greek letter $\pi$ must be handled differently.
% The switches are called |\pinumber| and |\pinormal|
% and can be used anywhere in the document.
%
% But |\pinumber| must be called first in the preamble with an optional argument.
% This argument can be a valid command name that produces an upright pi letter
% (after having loading an appropriate package).
+% Compatibility with \textsf{unicode-math} is a bit tricky!
% When given without an argument in the preamble,
% |\pinumber| uses an LGR font encoding called \texttt{lmr}.
% A new feature (v2.11) is to use |\pinumber| with a keyval option to
@@ -1541,129 +1578,130 @@
% a whole package, thus without altering the other (italic) Greek letters.
% We achieve this with |\DeclareSymbolFont| and |\DeclareMathSymbol|.
% We just have to know the ``name'' of the desired symbol font.
-% Compatibility with \textsf{unicode-math} is a bit tricky!
%
% \medskip
% \begin{macrocode}
\newif\ifmm@lgr
-\define@cmdkey{pinumber}[mm@]{lgrmath}[lmr]{\mm@lgrtrue}
+\define@cmdkey{pifonts}[mm@]{lgrmath}[lmr]{\mm@lgrtrue}
\newif\ifmm@upgreek
-\define@choicekey{pinumber}{upgreek}[\mm@upgreek@option]%
- {Euler,Symbol,Symbolsmallscale}[Symbol]{\mm@upgreektrue}
+\define@choicekey{pifonts}{upgreek}[\mm@upgreek@option]%
+ {Euler,Symbol,Symbolsmallscale}[Symbol]{\mm@upgreektrue}
\newif\ifmm@mathdesign
-\define@choicekey{pinumber}{mathdesign}[\mm@mathdesign@option]%
- {Utopia,Garamond,Charter}[Charter]{\mm@mathdesigntrue}
+\define@choicekey{pifonts}{mathdesign}[\mm@mathdesign@option]%
+ {Utopia,Garamond,Charter}[Charter]{\mm@mathdesigntrue}
\newif\ifmm@kpfonts
-\define@choicekey{pinumber}{kpfonts}[\mm@kp@option]%
- {normal,light}[normal]{\mm@kpfontstrue}
-\define@boolkey{pinumber}[mm@]{fourier}[true]{}
-\define@boolkey{pinumber}[mm@]{pxfonts}[true]{}
-\define@boolkey{pinumber}[mm@]{txfonts}[true]{}
+\define@choicekey{pifonts}{kpfonts}[\mm@kp@option]%
+ {normal,light}[normal]{\mm@kpfontstrue}
+\define@boolkeys{pifonts}[mm@]{fourier,pxfonts,txfonts}[true]
+\newif\ifmm@fontspec
+\define@cmdkey{pifonts}[mm@]{fontspec}[GFS Didot]{\mm@fontspectrue}
-\newcommand*\pinumber[1][]{%
- \ifthenelse{\equal{#1}{}}{% no argument given
- \ifx\@onlypreamble\@notprerr % not in preamble
- \@ifundefined{savedpi}{
- \PackageWarning{mismath}{%
- \string\pinumber\space
- must be used in the preamble first}
- }{\let\pi\savedpi}
- \else % in the preamble
- \AtBeginDocument{\let\itpi\pi}% must be here with unicode-math
- \AtEndPreamble{\AtBeginDocument{
- %\let\itpi\pi
- \let\pi\relax
- \DeclareFontEncoding{LGR}{}{}
- \DeclareSymbolFont{mm@grup}{LGR}{lmr}{m}{n}
- \DeclareMathSymbol{\pi}\mathalpha{mm@grup}{"70}
- \let\savedpi\pi
- }}
- \fi
- }{% command name or keyval options, necessarily in the preamble
- \AtBeginDocument{\let\itpi\pi}% must be here with unicode-math
- \AtEndPreamble{\AtBeginDocument{
- \@ifundefined{#1}{%
- \setkeys{pinumber}{#1}
- \let\pi\relax
- \ifmm@lgr
- \DeclareFontEncoding{LGR}{}{}
- \DeclareSymbolFont{mm@grup}{LGR}{\mm@lgrmath}{m}{n}
- % may work with bold (b) instead of m
- \DeclareMathSymbol{\pi}{\mathalpha}{mm@grup}{112}
-
- \else\ifmm@upgreek
- \ifdefstring{\mm@upgreek@option}{Euler}{
+\newcommand*\pifonts[1]{%
+ \setkeys{pifonts}{#1}
+ \let\pi\relax
+
+ \ifmm@lgr
+ \DeclareFontEncoding{LGR}{}{}
+ \DeclareSymbolFont{mmupgr}{LGR}{\mm@lgrmath}{m}{n}
+ % may work with bold (b) instead of m
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{112}
+
+ \else\ifmm@fontspec
+ \@ifpackageloaded{fontspec}{}{
+ \PackageError{mismath}{\string\pinumber\space with
+ the `fontspec' option\MessageBreak
+ needs the fontspec package,\MessageBreak
+ which must be run with LuaLaTeX or XeLaTeX}{}
+ }
+ \newfontfamily\mismathgreekfont{\mm@fontspec}[NFSSFamily=mgr]
+ \DeclareSymbolFont{mmupgr}{TU}{mgr}{m}{n}
+ \Umathchardef\pi="7 \symmmupgr "03C0
+
+ \else\ifmm@upgreek
+ \ifdefstring{\mm@upgreek@option}{Euler}{
\DeclareFontFamily{U}{eur}{\skewchar\font'177}
\DeclareFontShape{U}{eur}{m}{n}{%
<-6> eurm5 <6-8> eurm7 <8-> eurm10}{}
- \DeclareFontShape{U}{eur}{b}{n}{%
- <-6> eurb5 <6-8> eurb7 <8-> eurb10}{}
- \DeclareSymbolFont{mm@grup}{U}{eur}{m}{n}
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{"19} % 25
- }{
- \ifdefstring{\mm@upgreek@option}{Symbol}{
- \DeclareSymbolFont{mm@grup}{U}{psy}{m}{n}
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{`p}
- }{
- \ifdefstring{\mm@upgreek@option}{Symbolsmallscale}{
+ \DeclareSymbolFont{mmupgr}{U}{eur}{m}{n}
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{"19}
+ }{
+ \ifdefstring{\mm@upgreek@option}{Symbol}{
+ \DeclareSymbolFont{mmupgr}{U}{psy}{m}{n}
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{`p}
+ }{
+ \ifdefstring{\mm@upgreek@option}{Symbolsmallscale}{
\DeclareFontFamily{U}{fsy}{}
\DeclareFontShape{U}{fsy}{m}{n}{<->s*[.9]psyr}{}
- \DeclareSymbolFont{mm@grup}{U}{fsy}{m}{n}
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{`p}
- }{}}}
+ \DeclareSymbolFont{mmupgr}{U}{fsy}{m}{n}
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{`p}
+ }{}}}
- \else\ifmm@mathdesign
- \ifdefstring{\mm@mathdesign@option}{Utopia}{
- \DeclareSymbolFont{mm@grup}{OML}{mdput}{m}{n}
- }{
- \ifdefstring{\mm@mathdesign@option}{Garamond}{
- \DeclareSymbolFont{mm@grup}{OML}{mdugm}{m}{n}
- }{
- \ifdefstring{\mm@mathdesign@option}{Charter}{
- \DeclareSymbolFont{mm@grup}{OML}{mdbch}{m}{n}
- }{}}}
+ \else\ifmm@mathdesign
+ \ifdefstring{\mm@mathdesign@option}{Utopia}{
+ \DeclareSymbolFont{mmupgr}{OML}{mdput}{m}{n}
+ }{
+ \ifdefstring{\mm@mathdesign@option}{Garamond}{
+ \DeclareSymbolFont{mmupgr}{OML}{mdugm}{m}{n}
+ }{
+ \ifdefstring{\mm@mathdesign@option}{Charter}{
+ \DeclareSymbolFont{mmupgr}{OML}{mdbch}{m}{n}
+ }{}}}
- \else\ifmm@fourier
- \DeclareFontEncoding{FML}{}{}
- \DeclareSymbolFont{mm@grup}{FML}{futm}{m}{it}
-
- \else\ifmm@kpfonts
- \ifdefstring{\mm@kp@option}{normal}{
- \DeclareSymbolFont{mm@grup}{U}{jkpmia}{m}{it}
- }{
- \ifdefstring{\mm@kp@option}{light}{
- \DeclareSymbolFont{mm@grup}{U}{jkplmia}{m}{it}
- }}
-
- \else\ifmm@pxfonts
- \DeclareSymbolFont{mm@grup}{U}{pxmia}{m}{it}
-
- \else\ifmm@txfonts
- \DeclareSymbolFont{mm@grup}{U}{txmia}{m}{it}
- \fi\fi\fi\fi\fi
-
- \DeclareMathSymbol{\pi}{\mathord}{mm@grup}{"19}
- \fi\fi
-
- \let\savedpi\pi
+ \else\ifmm@fourier
+ \DeclareFontEncoding{FML}{}{}
+ \DeclareSymbolFont{mmupgr}{FML}{futm}{m}{it}
+
+ \else\ifmm@kpfonts
+ \ifdefstring{\mm@kp@option}{normal}{
+ \DeclareSymbolFont{mmupgr}{U}{jkpmia}{m}{it}
}{
- \ifmm@unicodemath
- \ifthenelse{\equal{#1}{uppi}}{
- \AtBeginDocument{%
- \let\pi\relax
- \def\pi{\symup{\symbol{"003C0}}}
- \let\itpi\relax
- \def\itpi{\symit{\symbol{"003C0}}} % or "1D70B
- }
- }{\renewcommand{\pi}{\csname #1\endcsname}}
- \else
- \renewcommand{\pi}{\csname #1\endcsname}
- \fi
-
- \let\savedpi\pi
- }
- }}
- }
+ \ifdefstring{\mm@kp@option}{light}{
+ \DeclareSymbolFont{mmupgr}{U}{jkplmia}{m}{it}
+ }{}}
+
+ \else\ifmm@pxfonts
+ \DeclareSymbolFont{mmupgr}{U}{pxmia}{m}{it}
+
+ \else\ifmm@txfonts
+ \DeclareSymbolFont{mmupgr}{U}{txmia}{m}{it}
+
+ \fi\fi\fi\fi\fi
+ \DeclareMathSymbol{\pi}{\mathord}{mmupgr}{"19}
+ \fi\fi\fi
+}
+
+\newcommand*\pinumber[1][]{%
+ \ifthenelse{\equal{#1}{}}{% no argument given
+ \ifx\@onlypreamble\@notprerr % not in preamble
+ \@ifundefined{savedpi}{
+ \PackageWarning{mismath}{%
+ \string\pinumber\space
+ must be used in the preamble first}
+ }{\let\pi\savedpi}
+ \else % in the preamble
+ \AtBeginDocument{
+ \let\itpi\pi
+ \pifonts{lgrmath}
+ \let\savedpi\pi
+ }
+ \fi
+ }{% command name or keyval options, necessarily in the preamble
+ \AtBeginDocument{% must be here with unicode-math
+ \let\itpi\pi
+ \@ifundefined{#1}{%
+ \pifonts{#1}
+ }{
+ \ifmm@unicodemath
+ \ifthenelse{\equal{#1}{uppi}}{% or "1D70B
+ \renewcommand\pi{\symup{\symbol{"03C0}}}
+ \renewcommand\itpi{\symit{\symbol{"03C0}}}
+ }{\renewcommand{\pi}{\csname #1\endcsname}}
+ \else
+ \renewcommand{\pi}{\csname #1\endcsname}
+ \fi
+ }
+ \let\savedpi\pi}
+ }
}
\newcommand{\pinormal}{%
@@ -1683,8 +1721,29 @@
}
% \end{macrocode}
+% When |\pinumber|\oarg{keyval} has been called, you can also get
+% some other mathematical constants using Greek letters,
+% \eg $\othergamma$, the Euler-Mascheroni constant:
+% \begin{verbatim}
+% \let\gamma\relax
+% \DeclareMathSymbol{\gamma}{\mathord}{mmupgr}{"0D}
+% \end{verbatim}
+% \vspace{-2ex}
+% If \textsf{unicode-math} is used, you must put these commands in
+% |\AtBeginDocument|.
+% The hexadecimal code |"0D| depends on the option passed to |\pinumber|
+% in the preamble (see the command |\pifonts| above and search in package docs). \\
+% And to get the golden ratio $\othervarphi$:
+% \begin{verbatim}
+% \let\phi\relax
+% \DeclareMathSymbol{\varphi}{\mathord}{mmupgr}{"27}
+% \end{verbatim}
+% \vspace{-2ex}
+% To preserve the original $\gamma$ or $\varphi$,
+% you can define |\upgamma| or |\upvarphi| instead.
%
-% And now the commands for vectors (and tensors).
+% \medskip
+% And now the commands for vectors and tensors.
% \medskip
% \begin{macrocode}
\newboolean{arrowvect}
@@ -1693,9 +1752,9 @@
\newcommand{\boldvect}{\setboolean{arrowvect}{false}}
\newcommand{\boldvectcommand}{\boldsymbol} % from amsbsy package
\mm@macro{vect}{\ifthenelse{\boolean{arrowvect}}{
- \vv}{\boldvectcommand}} % doesn't work well with \if... \fi
-\newcommand*{\hvect}[1]{\vect{\vphantom{t}#1}}
-\newcommand*{\hvec}[1]{\vec{\vphantom{t}#1}}
+ \vv}{\boldvectcommand}} % doesn't work well with \if... \fi
+\newcommand*{\hvect}[1]{\vect{\vphantom{A}#1}}
+\newcommand*{\hvec}[1]{\vec{\vphantom{A}#1}}
\newcommand*{\@norm}[1]{
\mbox{\raisebox{1.75pt}{\small$\bigl\Vert$}} #1
@@ -1715,9 +1774,7 @@
\newcommand{\tensor}{\mathbfsfit} % isomath uses \mathsfbfit
% \end{macrocode}
-%
-% Classic identifiers are presented below.
-% \medskip
+
% \begin{macrocode}
\mm@macro{di}{\mathop{}\!\mathup{d}}
\newcommand\probastyle{}
@@ -1726,62 +1783,121 @@
\mm@macro{E}{\operatorname{\probastyle{E}}}
\mm@macro{V}{\operatorname{\probastyle{V}}}
-\mm@operator{\adj}{adj}
-\mm@operator{\Aut}{Aut}
-\mm@operator{\codim}{codim}
-\mm@operator{\Conv}{Conv}
-\mm@operator{\cov}{cov}
-\mm@operator{\Cov}{Cov}
-\mm@macro{curl}{\operatorname{\vect{\mathup{curl}}}}
-\mm@operator[divg]{\divg}{div}
-\mm@operator{\End}{End}
+\newcommand*\MathProba[1]{%
+ \in@{P}{#1} \ifin@ \MathUp{P} \fi
+ \in@{E}{#1} \ifin@ \MathUp{E} \fi
+ \in@{V}{#1} \ifin@ \MathUp{V} \fi
+}
-\mm@operator{\erf}{erf}
-\mm@macro{grad}{\operatorname{\vect{\mathup{grad}}}}
-\mm@operator{\id}{id} % mathop or mathord?
-\mm@operator{\Id}{Id}
-\mm@operator{\im}{im}
-\let\oldIm\Im \renewcommand{\Im}{\operatorname{Im}}
-\mm@operator{\lb}{lb}
-\mm@operator{\lcm}{lcm}
+% \end{macrocode}
+% Classic identifiers are presented below. They will be defined only
+% if the option \texttt{nofunction} has not been activated.
+% \medskip
+% \begin{macrocode}
+\ifmm@nofunction\else
+ \mm@operator{\adj}{adj}
+ \mm@operator{\Aut}{Aut}
+ \mm@operator{\codim}{codim}
+ \mm@operator{\coker}{coker}
+ \mm@operator{\Conv}{Conv}
+ \mm@operator{\cov}{cov}
+ \mm@operator{\Cov}{Cov}
+ \mm@macro{curl}{\operatorname{\vect{\mathup{curl}}}}
+ \mm@operator[divg]{\divg}{div}
+
+ \mm@operator{\End}{End}
+ \mm@operator{\erf}{erf}
+ \mm@macro{grad}{\operatorname{\vect{\mathup{grad}}}}
+ \mm@operator{\id}{id} % mathop or mathord?
+ \mm@operator{\Id}{Id}
+ \mm@operator{\im}{im}
+ \mm@operator{\lb}{lb}
+ \mm@operator{\lcm}{lcm}
+ \mm@operator{\rank}{rank}
+
+ \mm@operator{\Res}{Res}
+ \mm@macro{rot}{\operatorname{\vect{\mathup{rot}}}}
+ \mm@operator{\sgn}{sgn}
+ \mm@operator{\sinc}{sinc}
+ \mm@operator[spa]{\spa}{span}
+ \mm@operator{\tr}{tr}
+ \mm@operator{\var}{var}
+ \mm@operator{\Var}{Var}
+ \mm@operator[Zu]{\Zu}{Z}
+
+ \mm@operator{\arccot}{arccot}
+ \mm@operator{\sech}{sech}
+ \mm@operator{\csch}{csch}
+ \mm@operator{\arsinh}{arsinh}
+ \mm@operator{\arcosh}{arcosh}
+ \mm@operator{\artanh}{artanh}
+ \mm@operator{\arcoth}{arcoth}
+ \mm@operator{\arsech}{arsech}
+ \mm@operator{\arcsch}{arcsch}
+\fi
-\mm@operator{\rank}{rank}
-\let\oldRe\Re \renewcommand{\Re}{\operatorname{Re}}
-\mm@macro{rot}{\operatorname{\vect{\mathup{rot}}}}
-\mm@operator{\sgn}{sgn}
-\mm@operator{\sinc}{sinc}
-\mm@operator[spa]{\spa}{span}
-\mm@operator{\tr}{tr}
-\mm@operator{\var}{var}
-\mm@operator{\Var}{Var}
-\mm@operator[Zu]{\Zu}{Z}
+% \end{macrocode}
+%
+% The |\mathcal| alphabet, from the original Computer Modern font family,
+% is used here to produce $\Re$, $\Im$ and $\bigO$.
+% Several font packages redefines this alphabet producing glyphs that may seem less
+% suitable for the commands below.
+% We have therefore retained the original |\cmmathcal| math alphabet,
+% which can be used for other letters.
+% If \textsf{unicode-math} is called, it will redefine the commands |\Re| and |\Im|
+% in |\AtBeginDocument|, hence the use of `|\AtEndPreamble{\AtBeginDocument{|'
+% to ensure that the \textsf{mismath} redefinition occur after the actions
+% of \textsf{unicode-math}.
+%
+% \begin{macrocode}
+\DeclareFontFamily{U}{cmsy}{\skewchar\font48 }
+\DeclareFontShape{U}{cmsy}{m}{n}{% from mathalpha
+ <-5.5> cmsy5%
+ <5.5-6.5> cmsy6%
+ <6.5-7.5> cmsy7%
+ <7.5-8.5> cmsy8%
+ <8.5-9.5> cmsy9%
+ <9.5-> cmsy10}{}
+\DeclareMathAlphabet{\cmmathcal}{U}{cmsy}{m}{n}
-\mm@operator{\arccot}{arccot}
-\mm@operator{\sech}{sech}
-\mm@operator{\csch}{csch}
-\mm@operator{\arsinh}{arsinh}
-\mm@operator{\arcosh}{arcosh}
-\mm@operator{\artanh}{artanh}
-\mm@operator{\arcoth}{arcoth}
-\mm@operator{\arsech}{arsech}
-\mm@operator{\arcsch}{arcsch}
+\AtEndPreamble{\AtBeginDocument{
+ \ifmm@classicReIm\else
+ \let\oldRe\Re
+ \let\oldIm\Im
+ \ifmm@otherReIm
+ \renewcommand{\Re}{\cmmathcal{R}\mathit{e}}
+ \renewcommand{\Im}{\cmmathcal{I}\mathit{m}}
+ \else
+ \renewcommand{\Re}{\operatorname{Re}}
+ \renewcommand{\Im}{\operatorname{Im}}
+ \fi\fi
+}}
-\mm@operator[bigO]{\bigO}{\mathcal{O}}
+\mm@operator[bigO]{\bigO}{\cmmathcal{O}}
\mm@operator[bigo]{\bigo}{O}
\mm@operator[lito]{\lito}{o}
% \end{macrocode}
% And finally we present the remaining macros.
%
-% With Cyrillic languages, the command |\C| may already be defined (only for text mode).
-% Thus, it will not be redefined by \textsf{mismath}. However, one may still want
-% to use our |\C| macro only for math mode without interfering the definition of
-% the text |\C|, therefore the |\onlymathC| macro.
+% With Cyrillic languages, the command |\C| may already be defined but only for text mode.
+% Thus, it will not be redefined by \textsf{mismath}. However, when activating
+% |\onlymathC|, you can to use our |\C| macro only for math mode,
+% without interfering the definition of the text |\C| that is already defined.
+%
+% When using \XeTeX\ or \LuaTeX\ engines with the \textsf{hyperref} package,
+% |\C| will be already defined and
+% you get the message "\texttt{Command \string\C\space unavailable in encoding TU}".
+% Therefore |\onlymathC| is automatically called in that case.
% \medskip
% \begin{macrocode}
\mm@macro{mathset}{\mathbf}
\mm@macro{R}{\mathset{R}}
-\mm@macro{C}{\mathset{C}}
+\AtBeginDocument{
+ \@ifpackageloaded{hyperref}%
+ {\iftutex\onlymathC\fi}% LuaTex or XeTeX engines
+ {\mm@macro{C}{\mathset{C}}}
+}
\providecommand\onlymathC{\let\oldC\C
\renewcommand{\C}{\TextOrMath{\oldC}{\mathset{C}}} }
\mm@macro{N}{\mathset{N}}
@@ -1799,7 +1915,7 @@
\mm@macro{lbar}{\overline}
\@ifundefined{hlbar}{
- \providecommand*{\hlbar}[1]{\overline{\vphantom{t}#1}}}{
+ \providecommand*{\hlbar}[1]{\overline{\vphantom{A}#1}}}{
\mm@warning{hlbar} }
\newcommand\@eqdef{\stackrel{\mathup{def}}{=}}
\newcommand\@@eqdef{\stackrel{\mathrm{\Delta}}{=}}
@@ -1827,7 +1943,8 @@
\providecommand*{\abs}[1]{\left\vert#1\right\vert} }{
\mm@warning{abs} }
\@ifundefined{lfrac}{
- \providecommand*{\lfrac}[2]{\frac{\;#1\;}{\;#2\;}} }{
+ \providecommand*{\lfrac}[3][7mu]{%
+ \frac{\mkern#1#2\mkern#1}{\mkern#1#3\mkern#1}} }{
\mm@warning{lfrac} }
\newcommand{\systemstretch}{1.2}
@@ -1850,8 +1967,8 @@
\begin{math}\begin{aligned}\displaystyle
\else
\PackageError{mismath}{The mathcols environment
- needs the multicol package}{Add the package multicol
- to your preamble.}
+ needs the multicol package}{Call the package multicol
+ in your preamble.}
\fi
}{%
\end{aligned}\end{math} \hfill\mbox{}
@@ -1864,7 +1981,7 @@
}
% \end{macrocode}
%
-% \begin{thebibliography}{28}
+% \begin{thebibliography}{34}
% \begin{raggedright}
% \bibitem{TYPMA} \emph{Typesetting mathematics for science and technology according
% to ISO 31/XI}, Claudio Beccari, TUGboat Volume 18 (1997), No.~1.
@@ -1880,31 +1997,43 @@
% \url{https://old.iupac.org/standing/idcns/italic-roman_dec99.pdf}.
% \bibitem{VECT} \emph{\textsf{esvect} -- Typesetting vectors with beautiful
% arrow with \LaTeXe}, Eddie Saudrais, CTAN, v1.3 2013/07/11.
+% \bibitem{TOOL} \emph{The \textsf{mathtools} package}, Morten Høgholm, Lars Madsen, CTAN,
+% v1.29 2022/06/29.
% \bibitem{AMS} \emph{\textsf{amsmath} -- \AmS\ mathmatical facilities for \LaTeX},
% Frank Mittelbach, Rainer Schöpf, Michael Downes, Davis M.~Jones, David Carlisle,
% CTAN, v2.17n 2022/04/08.
% \bibitem{UNIC} \emph{Experimental Unicode mathematical typesetting:
% The \textsf{unicode-math} package}, Will Robertson, Philipp Stephani, Joseph Wright,
% Khaled Hosny, and others, CTAN, v0.8r 2023/08/13.
-% \bibitem{TOOL} \emph{The \textsf{mathtools} package}, Morten Høgholm, Lars Madsen, CTAN,
-% v1.29 2022/06/29.
% \bibitem{FIXM} \emph{The \textsf{fixmath} package for \LaTeXe}, Walter Schmidt,
% CTAN, v0.9 2000/04/11.
% \bibitem{ISOM} \emph{\textsf{isomath} -- Mathematical style for science and technology},
% Günter Milde, CTAN, v0.6.1 2012/09/04.
% \bibitem{PMISO} \emph{\textsf{PM-ISOmath}, The Poor Man ISO math bundle},
% the \textsf{pm-isomath} package by Claudio Beccari, CTAN, v1.2.00 2021/08/04.
+% \bibitem{MGREEK} \emph{The \textsf{mathgreeks} package}, Antoine Missier, CTAN,
+% v1.1 2024/05/04.
% \bibitem{GREEK} \emph{The \textsf{upgreek} package for \LaTeXe}, Walter Schmidt,
% CTAN, v2.0 2003/02/12.
% \bibitem{DESIGN} \emph{The \textsf{mathdesign} package},
% Paul Pichaureau, CTAN, v2.31 2013/08/29.
-% \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
-% (part of the \textsf{greek-fontenc} bundle), Günter Milde, CTAN, v2.1 14/06/2022.
% \bibitem{KPF} \emph{\textsf{Kp-Fonts} -- The Johannes Kepler project},
% Christophe Caignaert, CTAN, v3.34 20/09/2022.
% \bibitem{FOUR} \textsf{Fourier-GUT\hspace{-0.1em}\emph{enberg}},
-% Michel Bovani, CTAN, v1.3 30/01/2005.
+% Michel Bovani, CTAN, v1.3 2005/01/30.
+% \bibitem{PX} \emph{\textsf{PX Fonts} -- Palatino-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/14.
+% \bibitem{TX} \emph{\textsf{TX Fonts} -- Times-like fonts in support of mathematics},
+% Young Ryu, CTAN, 2000/12/15.
+% \bibitem{LIB} \emph{The LibertinusT1 Math Package}, Michael Sharpe, CTAN, v2.0.4 2024/01/14.
% \bibitem{LGR} \emph{The \textsf{lgrmath} package}, Jean-François B., CTAN, v1.0 2022/11/16.
+% \bibitem{NTX} \emph{New TX font package}, Micahel Sharpe, CTAN, v1.735 2024/03/01.
+% \bibitem{ALPHA} \emph{The \textsf{textalpha} package}
+% (part of the \textsf{greek-fontenc} bundle), Günter Milde, CTAN, v2.1 2022/06/14.
+% \bibitem{SPA} \emph{The \textsf{spacingtricks} package}, Antoine Missier, CTAN,
+% v1.8 2023/12/06.
+% \bibitem{BRACKET} \emph{Intelligent brackets -- The \textsf{ibrackets} package},
+% Antoine Missier, CTAN, v1.2, 2023/07/26.
% \bibitem{INT} \emph{The \textsf{interval} package}, Lars Madsen, CTAN,
% v0.4 2019/03/06.
% \bibitem{ICOMMA} \emph{The \textsf{icomma} package for \LaTeXe},
@@ -1918,9 +2047,7 @@
% \bibitem{SPAL} \emph{The \textsf{spalign} package}, Joseph Rabinoff, CTAN, 2016/10/05.
% \bibitem{NMATX} \emph{The package \textsf{nicematrix}}, François Pantigny, CTAN,
% v6.14 2023/02/18.
-% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, CTAN, v2.10 2024/02/25.
-% \bibitem{BRACKET} \emph{Intelligent brackets -- The \textsf{ibrackets} package},
-% Antoine Missier, CTAN, v1.2, 2023/07/26.
+% \bibitem{FR} \emph{L'extension \textsf{frenchmath}}, Antoine Missier, CTAN, v3.0 2024/05/04.
% \bibitem{LSHORT} \emph{The Not So Short Introduction to \LaTeXe},
% the \textsf{lshort} package by
% Tobias Oetiker, Hubert Partl, Irene Hyna and Elisabeth Schlegl, CTAN, v6.4 2021/04/09.
diff --git a/macros/latex/contrib/mismath/mismath.ins b/macros/latex/contrib/mismath/mismath.ins
index b57ee6b828..5a39f8da29 100644
--- a/macros/latex/contrib/mismath/mismath.ins
+++ b/macros/latex/contrib/mismath/mismath.ins
@@ -46,7 +46,7 @@ and version 1.3 or later is part of all distributions of LaTeX version
\Msg{* mismath.sty *}
\Msg{* *}
\Msg{* To produce the documentation run the file mismath.dtx *}
-\Msg{* through XeLaTeX or LuaLaTeX. *}
+\Msg{* through LaTeX. *}
\Msg{* *}
\Msg{* Happy TeXing! *}
\Msg{* *}
diff --git a/macros/latex/contrib/mismath/mismath.pdf b/macros/latex/contrib/mismath/mismath.pdf
index 5b97173faa..fd41e6702c 100644
--- a/macros/latex/contrib/mismath/mismath.pdf
+++ b/macros/latex/contrib/mismath/mismath.pdf
Binary files differ
diff --git a/macros/latex/contrib/nmbib/Makefile b/macros/latex/contrib/nmbib/Makefile
index 4b59427e24..4f4135521a 100644
--- a/macros/latex/contrib/nmbib/Makefile
+++ b/macros/latex/contrib/nmbib/Makefile
@@ -7,7 +7,7 @@
#
PACKAGE=nmbib
-SAMPLES = nmsample.tex
+SAMPLES = nmbib-sample.tex
PERLSCRIPTS = nmbibtex.pl
@@ -62,9 +62,9 @@ distclean: veryclean
# Archive for the distribution. Includes typeset documentation
#
archive: all clean
- tar -czvf $(PACKAGE).tgz -C .. --exclude '*~' --exclude '*.tgz' --exclude CVS $(PACKAGE)
+ COPYFILE_DISABLE=1 tar -C .. -czvf ../$(PACKAGE).tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip' --exclude CVS --exclude '.git*' $(PACKAGE); mv ../$(PACKAGE).tgz .
zip: all clean
${MAKE} $(PACKAGE).sty
$(RM) *.log
- zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*' \ No newline at end of file
+ zip -r $(PACKAGE).zip * -x '*~' -x '*.tgz' -x '*.zip' -x CVS -x 'CVS/*'
diff --git a/macros/latex/contrib/nmbib/README b/macros/latex/contrib/nmbib/README
index 833fa7992e..00a3fe6b5d 100644
--- a/macros/latex/contrib/nmbib/README
+++ b/macros/latex/contrib/nmbib/README
@@ -9,4 +9,6 @@ provides other improvments.
Changes:
+ v1.05. nmsample is renamed to nmbib-sample to avoid TeXLive name clash
+
v1.04 An embarrassing typo corrected. \ No newline at end of file
diff --git a/macros/latex/contrib/nmbib/nmsample.pdf b/macros/latex/contrib/nmbib/nmbib-sample.pdf
index bfcf4824b5..cb3c42b895 100644
--- a/macros/latex/contrib/nmbib/nmsample.pdf
+++ b/macros/latex/contrib/nmbib/nmbib-sample.pdf
Binary files differ
diff --git a/macros/latex/contrib/nmbib/nmsample.tex b/macros/latex/contrib/nmbib/nmbib-sample.tex
index 56ff2a807a..56ff2a807a 100644
--- a/macros/latex/contrib/nmbib/nmsample.tex
+++ b/macros/latex/contrib/nmbib/nmbib-sample.tex
diff --git a/macros/latex/contrib/nmbib/nmbib.dtx b/macros/latex/contrib/nmbib/nmbib.dtx
index 24647ae06f..f84fc00877 100644
--- a/macros/latex/contrib/nmbib/nmbib.dtx
+++ b/macros/latex/contrib/nmbib/nmbib.dtx
@@ -1,7 +1,7 @@
% \iffalse
% $Id: nmbib.dtx,v 1.21 2015/07/27 20:22:45 boris Exp $
%
-%% Copyright 2015, Michael Cohen <mcohen@u-aizu.ac.jp>
+%% Copyright 2015-2024, Michael Cohen <mcohen@u-aizu.ac.jp>
%% and Boris Veytsman <borisv@lk.net>
%% This work may be distributed and/or modified under the
%% conditions of the LaTeX Project Public License, either
@@ -59,7 +59,7 @@
% \changes{v1.00}{2014/01/23}{Preliminary release}
% \changes{v1.03}{2015/07/25}{Added day field in the chrono bst}
%
-% \title{New Multibibliography Package\thanks{\copyright 2015 Michael
+% \title{New Multibibliography Package\thanks{\copyright 2015--2024 Michael
% Cohen and Boris Veytsman}}
% \author{Boris Veytsman\thanks{borisv@lk.net}
% \and Michael Cohen\thanks{mcohen@u-aizu.ac.jp}}
diff --git a/macros/latex/contrib/nmbib/nmbib.pdf b/macros/latex/contrib/nmbib/nmbib.pdf
index ba4aeed009..2258288207 100644
--- a/macros/latex/contrib/nmbib/nmbib.pdf
+++ b/macros/latex/contrib/nmbib/nmbib.pdf
Binary files differ
diff --git a/macros/latex/contrib/nmbib/nmbibtex.1 b/macros/latex/contrib/nmbib/nmbibtex.1
index bb7bb38f4b..d96236dde8 100644
--- a/macros/latex/contrib/nmbib/nmbibtex.1
+++ b/macros/latex/contrib/nmbib/nmbibtex.1
@@ -1,4 +1,5 @@
-.\" Automatically generated by Pod::Man 2.22 (Pod::Simple 3.07)
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
.\"
.\" Standard preamble:
.\" ========================================================================
@@ -15,141 +16,71 @@
.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'
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
.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 turned on, we'll generate index entries on stderr for
+.\" 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.
-.ie \nF \{\
-. de IX
-. tm Index:\\$1\t\\n%\t"\\$2"
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
..
-. nr % 0
-. rr F
-.\}
-.el \{\
-. 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
+. \}
+. \}
.\}
-.\"
-.\" 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
+.rr rF
.\" ========================================================================
.\"
.IX Title "NMBIBTEX 1"
-.TH NMBIBTEX 1 "2015-04-25" "perl v5.10.1" "User Contributed Perl Documentation"
+.TH NMBIBTEX 1 2015-04-26 "perl v5.38.2" "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
-.SH "NAME"
+.SH NAME
nmbibtex \- a program to compile bibliographies for the package nmbib
-.SH "SYNOPSIS"
+.SH SYNOPSIS
.IX Header "SYNOPSIS"
-nmbibtex \fI\s-1OPTIONS\s0\fR \fI\s-1FILE\s0\fR
-.SH "DESCRIPTION"
+nmbibtex \fIOPTIONS\fR \fIFILE\fR
+.SH DESCRIPTION
.IX Header "DESCRIPTION"
-nmbibtex calls \fIbibtex\fR\|(1) for all aux files produced by the package
+nmbibtex calls \fBbibtex\fR\|(1) for all aux files produced by the package
nmbib
-.SH "OPTIONS"
+.SH OPTIONS
.IX Header "OPTIONS"
-.IP "\fB\-h\fR" 4
+.IP \fB\-h\fR 4
.IX Item "-h"
Print the help information and exit
.IP "\fB\-min\-crossrefs\fR \fInumber\fR" 4
.IX Item "-min-crossrefs number"
-Send the option \f(CW\*(C`\-min\-crossref=NUMBER\*(C'\fR to \fIbibtex\fR\|(1)
-.IP "\fB\-terse\fR" 4
+Send the option \f(CW\*(C`\-min\-crossref=NUMBER\*(C'\fR to \fBbibtex\fR\|(1)
+.IP \fB\-terse\fR 4
.IX Item "-terse"
-Send the option \f(CW\*(C`\-terse\*(C'\fR to \fIbibtex\fR\|(1)
-.IP "\fB\-v\fR" 4
+Send the option \f(CW\*(C`\-terse\*(C'\fR to \fBbibtex\fR\|(1)
+.IP \fB\-v\fR 4
.IX Item "-v"
Print the copyright information and exit
.SH "AUTHORS AND LICENSE"
diff --git a/macros/latex/contrib/notebeamer/README.md b/macros/latex/contrib/notebeamer/README.md
index 70e97e633b..5f8a8393b9 100644
--- a/macros/latex/contrib/notebeamer/README.md
+++ b/macros/latex/contrib/notebeamer/README.md
@@ -1,22 +1,19 @@
-# The `NoteBeamer` document
+# The `notebeamer` package
-This template provides an easy way to input Beamers on note papers and make notebook quickly. It's optimized for Goodnotes' default paper size and there won’t have difference between papers.
+This package provides macros for inputting slides on note papers quickly.
-Modules of `NoteBeamer` provide the following supports:
-
-- Draft module to compile quickly;
-- Lighter or darker colors of the cover page;
-
-**Welcome to pull requests
-[here](https://github.com/xiamyphys/NoteBeamer).**
+**Welcome to pull requests [here](https://github.com/xiamyphys/notebeamer/pulls).**
## License
-This work may be distributed and/or modified under the conditions of the
-[LaTeX Project Public License](http://www.latex-project.org/lppl.txt),
-either version 1.3c of this license or (at your option) any later version.
+This work may be distributed and/or modified under the conditions of the [LaTeX Project Public License](http://www.latex-project.org/lppl.txt), either version 1.3c of this license or (at your option) any later version.
This work has the LPPL maintenance status `maintained`.
-The Current Maintainer of this work is
-[Mingyu Xia](https://www.ctan.org/author/xia-my). \ No newline at end of file
+The Current Maintainer of this work is [Mingyu Hsia](https://www.ctan.org/author/xia-my).
+
+## Derivative Works
+
+- [fadingimage](https://ctan.org/pkg/fadingimage): Package provides macros for inputting full width picture at the edges of pages quickly.
+
+- [litesolution](https://ctan.org/pkg/litesolution): Class designed for typesetting solutions of problems in exams, textbooks, etc.
diff --git a/macros/latex/contrib/notebeamer/doc/notebeamer.pdf b/macros/latex/contrib/notebeamer/doc/notebeamer.pdf
index 804e18b158..6a882ce051 100644
--- a/macros/latex/contrib/notebeamer/doc/notebeamer.pdf
+++ b/macros/latex/contrib/notebeamer/doc/notebeamer.pdf
Binary files differ
diff --git a/macros/latex/contrib/notebeamer/doc/notebeamer.tex b/macros/latex/contrib/notebeamer/doc/notebeamer.tex
index 79f518807f..c0e59b9287 100644
--- a/macros/latex/contrib/notebeamer/doc/notebeamer.tex
+++ b/macros/latex/contrib/notebeamer/doc/notebeamer.tex
@@ -1,6 +1,7 @@
\documentclass[11pt,svgnames]{article}
\usepackage[notelinecolor=MidnightBlue,notemargin=.75in]{notebeamer}
-\usepackage{geometry,titlesec,authblk,hyperref,hologo,pgfpages,lipsum}
+\usepackage{indentfirst,titlesec,authblk,hyperref,hologo,pgfpages,lipsum}
+\geometry{margin=1in}
\titleformat*{\section}{\bfseries\large}
\titleformat*{\subsection}{\bfseries\normalsize}
\hologoFontSetup{general=\sffamily}
@@ -14,9 +15,9 @@
\def\cmd#1{\textcolor{MidnightBlue}{\texttt{\string#1}}}
\title{\bfseries The \pkg{notebeamer} Package}
-\author{Mingyu Hsia, \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com}}
+\author{Mingyu Hsia, \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn}}
\affil{Hangzhou Dianzi University}
-\date{\today\quad Version 3.0a\thanks{\url{https://github.com/xiamyphys/notebeamer}}}
+\date{\today\quad Version 3.0b\thanks{\url{https://github.com/xiamyphys/notebeamer}}}
\begin{document}
\maketitle
@@ -25,13 +26,13 @@
This is the document for the \pkg{notebeamer} package, which provides an easy way to input slides on notepages quickly for making annotations.
-Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@gmail.com}{\ttfamily xiamyphys@gmail.com} or \href{https://github.com/xiamyphys/fadingimage}{GitHub}.
+Welcome to feedback bugs or ideas via email \href{mailto:xiamyphys@hdu.edu.cn}{\ttfamily xiamyphys@hdu.edu.cn} or \href{https://github.com/xiamyphys/notebeamer}{GitHub}.
\end{abstract}
\section{Installing \pkg{notebeamer} and loading it}
-Simply download \verb|notebeamer.cls| file from \href{https://github.com/xiamyphys/notebeamer}{GitHub} or \href{https://ctan.org/pkg/fadingimage}{CTAN} and save it under your working directory. However, I strongly suggest to use terminal to install and update all packages to the latest version
+Simply download \verb|notebeamer.cls| file from \href{https://github.com/xiamyphys/notebeamer}{GitHub} or \href{https://ctan.org/pkg/notebeamer}{CTAN} and save it under your working directory. However, I strongly suggest to use terminal to install and update all packages to the latest version
\begin{verbatim}
sudo tlmgr update --self --all
@@ -111,9 +112,15 @@ The \cmd{newnotepage} command can create empty notepage(s). If a star (*) is add
This commands will create notepages that were inserted images on the left sidnumber of slides per page and the last two variables can set the start page and end page of the PDF file you want to insert that assigned by the command \cmd{notechap}.
\appendix
-\section{The \pkg{litesolution} class}
+\section{Related packages}
-This class provides a lite design for typesetting solutions of exams, textbooks or other exercises. The \pkg{notebeamer} package is contained in the \pkg{litesolution} class now.
+\subsection{The \pkg{fadingimage} package}
+
+This package provides macros for inputting full width picture at the edges of pages quickly.
+
+\subsection{The \pkg{litesolution} class}
+
+This class is designed for typesetting solutions of problems in exams, textbooks, etc. The \pkg{notebeamer} package is contained in the \pkg{litesolution} class now.
\clearpage
\pgfpagesuselayout{4 on 1}[letterpaper]
diff --git a/macros/latex/contrib/notebeamer/tex/notebeamer.sty b/macros/latex/contrib/notebeamer/tex/notebeamer.sty
index 84e06bf49a..86189cb513 100644
--- a/macros/latex/contrib/notebeamer/tex/notebeamer.sty
+++ b/macros/latex/contrib/notebeamer/tex/notebeamer.sty
@@ -1,5 +1,5 @@
%% ***********************************************************
-%% Copyright 2024 by Mingyu Hsia <xiamyphys@gmail.com> *
+%% Copyright 2024 by Mingyu Hsia <xiamyphys@hdu.edu.cn> *
%% *
%% This work may be distributed and/or modified under *
%% the conditions of the LaTeX Project Public License *
@@ -21,7 +21,7 @@
%% ***********************************************************
% !Mode:: "TeX:UTF-8"
\NeedsTeXFormat{LaTeX2e}[2020/10/01]
-\ProvidesPackage{notebeamer}[2024/04/19 v3.0a notebeamer package]
+\ProvidesPackage{notebeamer}[2024/05/06 v3.0b Package provides macros for inputting slides on note papers quickly.]
\RequirePackage{xkeyval}
\DeclareOptionX{notelinecolor}{\gdef\@notelinecolor{#1}}
@@ -157,4 +157,4 @@
\loop
\unless\ifnum\tmpnum>#3 \@fourbeamer{\valnum0}{\valnum1}{\valnum2}{\valnum3}
\advance\tmpnum by4
- \repeat\fi} \ No newline at end of file
+ \repeat\fi}
diff --git a/macros/latex/contrib/osda/README.md b/macros/latex/contrib/osda/README.md
index 03de404407..07396d51d5 100644
--- a/macros/latex/contrib/osda/README.md
+++ b/macros/latex/contrib/osda/README.md
@@ -28,7 +28,7 @@ above.
```
\usepackage[
- 2023,
+ 2024,
cc-by,
pages={1}{6},
url=https://osda.ws/r/aaVHo,
@@ -59,7 +59,7 @@ pdflatex osda.dtx
## License information
-Copyright 2023 by Christian Krieg (christian@osda.ws)
+Copyright 2023-2024 by Christian Krieg (christian@osda.ws)
This work (excluding the OSDA logo) may be distributed and/or modified under the
conditions of the LaTeX Project Public License, either version 1.3 of this
diff --git a/macros/latex/contrib/osda/example.png b/macros/latex/contrib/osda/example.png
index 4f8b01b361..2b1a2f49b1 100644
--- a/macros/latex/contrib/osda/example.png
+++ b/macros/latex/contrib/osda/example.png
Binary files differ
diff --git a/macros/latex/contrib/osda/osda.dtx b/macros/latex/contrib/osda/osda.dtx
index b0ad170e90..7406112206 100644
--- a/macros/latex/contrib/osda/osda.dtx
+++ b/macros/latex/contrib/osda/osda.dtx
@@ -1,7 +1,7 @@
% \iffalse meta-comment
%
% osda.ins
-% Copyright 2023 by Christian Krieg (christian@osda.ws)
+% Copyright 2023-2024 by Christian Krieg (christian@osda.ws)
%
% This work (excluding the OSDA logo) may be distributed and/or modified under
% the conditions of the LaTeX Project Public License, either version 1.3 of this
@@ -29,7 +29,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\ProvidesPackage{osda}
%<*package>
- [2023/04/03 v1.2.0 OSDA copyright notice generator]
+ [2024/05/01 v1.4.0 OSDA copyright notice generator]
%</package>
%
%<*driver>
@@ -52,7 +52,7 @@
moredelim=**[is][\ttfamily\bfseries\color{red}]{(*}{*)},
}
\usepackage[
- 2023,
+ 2024,
cc-by,
pages={1}{6},
url=https://osda.ws/r/0slLz,
@@ -93,6 +93,11 @@
% \changes{v1.0.0}{2023/03/30}{Initial version}
% \changes{v1.1.0}{2023/04/03}{Adding 'auto' option}
% \changes{v1.2.0}{2023/04/03}{Updating README}
+% \changes{v1.3.0}{2023/04/04}{
+% Adding presets for the years 2019 and 2020,
+% adding inline OSDA logo
+% }
+% \changes{v1.4.0}{2024/05/01}{Adding preset for 2020}
%
% \GetFileInfo{osda.sty}
%
@@ -107,7 +112,7 @@
% \author{Christian Krieg\\ Workshop on Open-Source Design Automation (OSDA) \\
% \texttt{christian@osda.ws}
% }
-% \date{April 03, 2023}
+% \date{May 01, 2024}
%
% \newcommand{\Example}{\vspace{1em}\noindent\textbf{Example:}\vspace{1em}}
%
@@ -139,7 +144,7 @@
% \begin{lstlisting}[gobble=6,float=tb,label=lst:usage-example,caption={An
% example for the most-frequent use case to use this package}]
% \usepackage[
-% 2023,
+% 2024,
% cc-by,
% pages={1}{6},
% url=https://osda.ws/r/0slLz,
@@ -190,7 +195,7 @@
% setting package options}]
% \usepackage[auto=false]{osda}
% \osdaset{
-% 2023,
+% 2024,
% cc-by,
% pages={1}{6},
% url=https://osda.ws/r/0slLz,
@@ -237,10 +242,13 @@
% example is given in \Cref{lst:option-year}.
%
% \begin{lstlisting}[gobble=6, label=lst:option-year, caption={Setting all
-% workshop-related options for the year 2023}]
-% \osdaset{2023}
+% workshop-related options for the year 2024}]
+% \osdaset{2024}
% \end{lstlisting}
%
+% Currently, presets for the following years are available:
+% |2024|, |2023|, |2020|, |2019|
+%
% \subsection{Paper license}
%
% \DescribeMacro{cc-by}
@@ -436,6 +444,36 @@
% \end{tabular}
% \end{table}
%
+% \section{Useful commands}
+%
+% \subsection{Inline logo}
+%
+% \DescribeMacro{\osda}
+% This command prints the OSDA logo inline as shown in the following examples at
+% different font sizes (\Cref{lst:inline-logo}):
+%
+% \begin{lstlisting}[gobble=6, label=lst:inline-logo, caption={Inline OSDA logo}]
+% Hello there, \osda{} is the place to be
+%
+% {\large I agree, \osda{} is the place to be!}
+%
+% {\small I agree, \osda{} is the place to be!}
+%
+% {\Huge I agree, \osda{} is the place to be!}
+%
+% {\tiny I agree, \osda{} is the place to be!}
+% \end{lstlisting}
+%
+% Hello there, \osda{} is the place to be
+%
+% {\large I agree, \osda{} is the place to be!}
+%
+% {\small I agree, \osda{} is the place to be!}
+%
+% {\Huge I agree, \osda{} is the place to be!}
+%
+% {\tiny I agree, \osda{} is the place to be!}
+%
%
% \StopEventually{}
%
@@ -560,6 +598,19 @@
%
% Default values for specific editions of OSDA
%
+ 2024/.style={
+ proceedings/title = Proceedings of the 4th Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 4th,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Valencia,
+ location/country = Spain,
+ date/month = March,
+ date/day = 25,
+ date/year = 2024,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
2023/.style={
proceedings/title = Proceedings of the 3rd Workshop on Open-Source Design Automation (OSDA),
workshop/counter = 3rd,
@@ -573,6 +624,32 @@
hostconference/longname = {Design, Automation, and Test in Europe Conference},
hostconference/acronym = DATE,
},
+ 2020/.style={
+ proceedings/title = Proceedings of the 2nd Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 2nd,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Grenoble,
+ location/country = France,
+ date/month = March,
+ date/day = 13,
+ date/year = 2020,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
+ 2019/.style={
+ proceedings/title = Proceedings of the 1st Workshop on Open-Source Design Automation (OSDA),
+ workshop/counter = 1st,
+ workshop/longname = Workshop on Open-Source Design Automation,
+ workshop/acronym = OSDA,
+ location/city = Florence,
+ location/country = Italy,
+ date/month = March,
+ date/day = 29,
+ date/year = 2019,
+ hostconference/longname = {Design, Automation, and Test in Europe Conference},
+ hostconference/acronym = DATE,
+ },
%
% Licenses
%
@@ -737,6 +814,24 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\osda}
+%%
+%% |\osda|
+%%
+%% This command prints the OSDA logo inline at a height of 1ex
+%%
+%% Usage:
+%%
+%% |\osda{}|
+%%
+% \begin{macrocode}
+%
+\newcommand{\osda}{\raisebox{.6\baselineskip}{\osdalogo{.7\baselineskip}}}
+%
+% \end{macrocode}
+% \end{macro}
+%
+%
% \begin{macro}{\osdanotice}
%%
%% |\osdanotice|
diff --git a/macros/latex/contrib/osda/osda.ins b/macros/latex/contrib/osda/osda.ins
index a76841c47b..21524ff0ac 100644
--- a/macros/latex/contrib/osda/osda.ins
+++ b/macros/latex/contrib/osda/osda.ins
@@ -1,5 +1,5 @@
%% osda.ins
-%% Copyright 2023 by Christian Krieg <christian@osda.ws>
+%% Copyright 2023-2024 by Christian Krieg <christian@osda.ws>
%%
%% This work (excluding the OSDA logo) may be distributed and/or modified under
%% the conditions of the LaTeX Project Public License, either version 1.3
@@ -29,7 +29,7 @@
This is a generated file.
-Copyright (C) 2023 by Christian Krieg <christian@osda.ws>
+Copyright (C) 2023-2024 by Christian Krieg <christian@osda.ws>
This work (excluding the OSDA logo) 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/osda/osda.pdf b/macros/latex/contrib/osda/osda.pdf
index 51bdfa0b02..5399ddcda0 100644
--- a/macros/latex/contrib/osda/osda.pdf
+++ b/macros/latex/contrib/osda/osda.pdf
Binary files differ
diff --git a/macros/latex/contrib/ppt-slides/README.md b/macros/latex/contrib/ppt-slides/README.md
index f1f92da99d..d742b04bb0 100644
--- a/macros/latex/contrib/ppt-slides/README.md
+++ b/macros/latex/contrib/ppt-slides/README.md
@@ -1,3 +1,5 @@
+# LaTeX Slidedeck à la PPT
+
[![make](https://github.com/yegor256/ppt-slides/actions/workflows/l3build.yml/badge.svg)](https://github.com/yegor256/ppt-slides/actions/workflows/l3build.yml)
[![CTAN](https://img.shields.io/ctan/v/ppt-slides)](https://ctan.org/pkg/ppt-slides)
[![License](https://img.shields.io/badge/license-MIT-green.svg)](https://github.com/yegor256/ppt-slides/blob/master/LICENSE.txt)
@@ -8,7 +10,8 @@ but more precise, uniform, and visually strict.
Check [this series of lectures](https://github.com/yegor256/ssd16)
fully designed with the use of this package.
-First, [install it](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages)
+First,
+[install it](https://en.wikibooks.org/wiki/LaTeX/Installing_Extra_Packages)
from [CTAN](https://ctan.org/pkg/ppt-slides)
and then use in preamble:
@@ -25,7 +28,9 @@ and then use in preamble:
\end{document}
```
-Otherwise, you can download [`ppt-slides.sty`](https://yegor256.github.io/ppt-slides/ppt-slides.sty) and add to your project.
+Otherwise, you can download
+[`ppt-slides.sty`](https://yegor256.github.io/ppt-slides/ppt-slides.sty)
+and add to your project.
If you want to contribute yourself, make a fork, then create a branch,
then run `l3build ctan` in the root directory.
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.dtx b/macros/latex/contrib/ppt-slides/ppt-slides.dtx
index e0618f0a8d..0509442173 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.dtx
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.dtx
@@ -50,7 +50,7 @@
%<package>\NeedsTeXFormat{LaTeX2e}
%<package>\ProvidesPackage{ppt-slides}
%<*package>
-[2024-01-23 0.3.2 Slide Decks a la Power Point]
+[2024-05-02 0.3.3 Slide Decks a la Power Point]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -610,7 +610,7 @@
}%
}%
&%
- ``#3''%
+ ``#3{}''%
\def\param{#4}%
\ifx\param\empty\else%
\par\vspace*{1em}%
diff --git a/macros/latex/contrib/ppt-slides/ppt-slides.pdf b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
index 95c1024bff..39b45d9a9a 100644
--- a/macros/latex/contrib/ppt-slides/ppt-slides.pdf
+++ b/macros/latex/contrib/ppt-slides/ppt-slides.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
index 206f5547a1..d71cc56e94 100644
--- a/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
+++ b/macros/latex/contrib/profcollege/doc/ProfCollege-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profcollege/latex/PfCAssemblagesSolides.tex b/macros/latex/contrib/profcollege/latex/PfCAssemblagesSolides.tex
index 9ac580e644..5521dbb419 100644
--- a/macros/latex/contrib/profcollege/latex/PfCAssemblagesSolides.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCAssemblagesSolides.tex
@@ -435,8 +435,6 @@
boolean Trace;
Trace=\useKV[Assemblage]{Trace};
- Initialisation(1500,22,20,50);
-
nb:=36;
subh:=1;
incolor:=white;
@@ -455,6 +453,10 @@
AffichageObjetCylindreSansBase1;
AffichageObjetCalotte2;
AffichageObjetCalotte3;
+ %
+ if Trace:
+ \useKV[Assemblage]{Traces};
+ fi;
\end{mplibcode}
\fi
}%
@@ -477,8 +479,6 @@
boolean Trace;
Trace=\useKV[Assemblage]{Trace};
- Initialisation(1500,22,20,50);
-
nb:=72;%36
subh:=1;%
incolor:=white;
@@ -488,10 +488,14 @@
angx:=180+angx;
nb:=12;
subh:=72;%
- Objetcalotte2("R="&"Rayon","phib="&"0","phih="&"pi/2");
+ Objetcalotte2("R="&"Rayon","phib="&"-pi/144","phih="&"pi/2");
TR:=(0,0,0);
AffichageObjetConeAvecBase1;
AffichageObjetCalotte2;%Cone3;
+ %
+ if Trace:
+ \useKV[Assemblage]{Traces};
+ fi;
\end{mplibcode}
\fi
}% \ No newline at end of file
diff --git a/macros/latex/contrib/profcollege/latex/PfCCartographie.tex b/macros/latex/contrib/profcollege/latex/PfCCartographie.tex
index ec56dceb89..2b5ef28fbc 100644
--- a/macros/latex/contrib/profcollege/latex/PfCCartographie.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCCartographie.tex
@@ -1,7 +1,7 @@
%%%
% Cartographie
%%%
-\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,VillesSupI=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2023/texmf-dist/metapost/profcollege/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2,Codes=false,Epaisseur=2,ModeleCouleur,Boussole=false,Allegee=1}
+\setKVdefault[Cartographie]{Echelle=1,Carte=false,All=false,Europe=false,Asie=false,Amsud=false,Amnord=false,Amcentre=false,Caraibes=false,Afrique=false,AfficheEchelle=false,PaysSeul=false,VillesSup=false,VillesSupI=false,Capitales=false,Impression=false,Fleuves=false,CouleurFond=ciel,Largeur=12,Hauteur=12,Arborescence="/usr/local/texlive/2023/texmf-dist/metapost/profcollege/",Projection=false,TypeProjection="mercator",CouleurPays=Cornsilk,Pasl=2,PasL=2,Codes=false,Epaisseur=2,ModeleCouleur=5,Boussole=false,Allegee=1}
\defKV[Cartographie]{EchelleCarte=\setKV[Cartographie]{Carte}}
\defKV[Cartographie]{Pays=\setKV[Cartographie]{PaysSeul}}
\defKV[Cartographie]{Villes=\setKV[Cartographie]{VillesSup}}
@@ -233,10 +233,11 @@
Epaisseur:=\useKV[Cartographie]{Epaisseur};
distanceecran=100*\useKV[Cartographie]{Echelle};
fleuves:=\useKV[Cartographie]{Fleuves};
- boolean Carte,Impression,VillesSup,Codes;
+ boolean Carte,Impression,VillesSup,VillesSupI,Codes;
Carte=\useKV[Cartographie]{Carte};
Impression=\useKV[Cartographie]{Impression};
VillesSup=\useKV[Cartographie]{VillesSup};
+ VillesSupI=\useKV[Cartographie]{VillesSupI};
Codes=\useKV[Cartographie]{Codes};
if defaultcolormodel=7:
cmykcolor couleurfond,white,payscolor,couleurfleuve;
@@ -268,6 +269,53 @@
Amcentrale:=\useKV[Cartographie]{Amcentre};
Caraibes:=\useKV[Cartographie]{Caraibes};
Afrique:=\useKV[Cartographie]{Afrique};
+
+ vardef Villes(text t)=
+ pair CoordVille;
+ string NomVille;
+ n:=0;
+ for p_:=t:
+ n:=n+1;
+ if n=1:
+ %nblec:=p;
+ else:
+ if pair p_:
+ if projection="mercator":
+ CoordVille:=mercatorc(ypart(p_),xpart(p_));
+ elseif projection="winkel":
+ CoordVille:=winkelc(ypart(p_),xpart(p_));
+ elseif projection="cylindrique":
+ CoordVille:=cylindriquec(ypart(p_),xpart(p_));
+ elseif projection="simple":
+ CoordVille:=simplec(ypart(p_),xpart(p_));
+ elseif projection="bonne":
+ CoordVille:=bonnec(ypart(p_),xpart(p_));
+ fi;
+ elseif string p_:
+ NomVille:=p_;
+ else:
+ marque_p:="croix";
+ pointe(CoordVille);
+ label.position(p_)(TEX(""&NomVille&""),CoordVille);
+ fi;
+ fi;
+ endfor;
+ drawoptions();
+ enddef;
+
+ def position(expr t)=
+ if t=1:rt
+ elseif t=2:urt
+ elseif t=3:top
+ elseif t=4:ulft
+ elseif t=5:lft
+ elseif t=6:llft
+ elseif t=7:bot
+ elseif t=8:lrt
+ fi
+ enddef;
+
+
if Carte:
Echelle:=\useKV[Cartographie]{AfficheEchelle};
figure(-0.5u*LargeurCadre,-0.5u*HauteurCadre,0.5u*LargeurCadre,0.5u*HauteurCadre);
@@ -308,10 +356,14 @@
endfor;
drawoptions();
closefrom nomfichiermul;
- fi;
+ fi;
+ if VillesSupI:
+ Villes(\useKV[Cartographie]{VillesI});
+ fi;
if Codes:
\useKV[Cartographie]{Traces};
fi;
+
else:
draw(0,0)--(50,50);
mappemonde(#2,#3);
diff --git a/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex b/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
index 216d44d8ec..f1bdc0307f 100644
--- a/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCProgrammeCalcul.tex
@@ -212,7 +212,7 @@
\StrSubstitute{\tempab}{*}{\div}[\tempac]%
\StrSubstitute{\tempac}{/}{\times}[\tempad]%
\StrSubstitute{\tempad}{-}{+}[\tempae]%
- \StrSubstitute{\tempae}{+}{-}[\tempaf]%
+ \StrSubstitute{\tempae}{++}{-}[\tempaf]%
\ifnum\fpeval{\useKV[ClesProg]{Reponses}}>0\relax%
\ifnum\fpeval{\listlen\ListeProg[2]-\compteurcnt}<\fpeval{\useKV[ClesProg]{Reponses}}\relax%
\ifboolKV[ClesProg]{OpReciproques}{%
diff --git a/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex b/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
index 35eed81431..0e6162aa76 100644
--- a/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCRepresenterTableur.tex
@@ -1,7 +1,7 @@
%%%
% Tableur
%%%
-\setKVdefault[Tableur]{Colonnes=4,Largeur=30pt,LargeurUn=30pt,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false,DebutColonnes=0,DebutLignes=0}%
+\setKVdefault[Tableur]{Colonnes=4,Largeur=30pt,LargeurUn=30pt,Bandeau=true,Formule={},Cellule=A1,Ligne=0,Colonne=0,PasL=1,PasC=1,Selection=false,DebutColonnes=0,DebutLignes=0,LargeurNombre=10pt}%
%Idee de P. Nuns
\defKV[Tableur]{Couleur=\setKV[Tableur]{Selection}}%
%
@@ -41,12 +41,14 @@
\newlength\PfCLongInter%
\newlength\PfCTableurLargeurUn%
\newlength\PfCTableurLargeur%
+\newlength\PfCTableurLargeurZero%
\NewDocumentEnvironment{Tableur}{so}{%
\useKVdefault[Tableur]%
\setKV[Tableur]{#2}%
\setlength{\PfCTableurLargeurUn}{\fpeval{\useKV[Tableur]{LargeurUn}}pt}%
\setlength{\PfCTableurLargeur}{\fpeval{\useKV[Tableur]{Largeur}}pt}%
+ \setlength{\PfCTableurLargeurZero}{\fpeval{\useKV[Tableur]{LargeurNombre}}pt}%
\ifnum\useKV[Tableur]{DebutColonnes}=0\relax
\Affichecntcol\z@%
\else
@@ -61,7 +63,8 @@
\newcolumntype{A}{>{\centering\arraybackslash}m{\PfCTableurLargeurUn}}%
\newcolumntype{B}{>{\centering\arraybackslash}m{\PfCTableurLargeur}}%
\IfBooleanTF{#1}{%
- \setlength{\PfCLongInter}{-40pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}-3}\arrayrulewidth}%
+ %%Bandeau avec 20pt :( en largeurZero
+ \setlength{\PfCLongInter}{-60pt+\fpeval{\useKV[Tableur]{LargeurNombre}}pt+\fpeval{\useKV[Tableur]{LargeurUn}}pt+\fpeval{(\useKV[Tableur]{Colonnes}-2)*\useKV[Tableur]{Largeur}}pt+\fpeval{2*\useKV[Tableur]{Colonnes}-6}\tabcolsep+\fpeval{\useKV[Tableur]{Colonnes}-3}\arrayrulewidth}%
\ifboolKV[Tableur]{Bandeau}{%
\begin{tabular}{|p{\PfCTableurLargeur}|p{10pt}|p{50pt}|p{\PfCLongInter}|}%
\hhline{--~-}%
@@ -81,7 +84,7 @@
\centering\arraybackslash%
\ifnum\cntlin>\@ne%
\fpeval{\cntlin+\Affichecntlin-1}\fi}%
- wc{20pt}|A|*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{B|}}%
+ wc{\PfCTableurLargeurZero}|A|*{\fpeval{\useKV[Tableur]{Colonnes}-1}}{B|}}%
\hline%
\rowcolor{gray!15}%
}%
diff --git a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
index 6223f887cd..98566be426 100644
--- a/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
+++ b/macros/latex/contrib/profcollege/latex/PfCStatistiques.tex
@@ -515,7 +515,7 @@ ModeleCouleur=5%
fi;
endfor;
if DonneesSup:
- maxAxey:=floor(maxy/10)*10+4*PasGrilley;
+ maxAxey:=maxy;%floor(maxy/10)*10+4*PasGrilley;
else:
maxAxey:=maxy;
fi;
@@ -586,15 +586,23 @@ ModeleCouleur=5%
if Date:
label.bot(TEX(decimal(xpart(p_))) rotated AngleRotation,A[l]);
else:
+ if GrandNombrex:
+ label.bot(TEX("\num{\fpeval{\useKV[ClesStat]{GrandNombreA}*"&decimal(xpart(p_))&"}}") rotated AngleRotation,A[l]);
+ else:
label.bot(TEX("\num{"&decimal(xpart(p_))&"}") rotated AngleRotation,A[l]);
fi;
+ fi;
else :
if Date:
label.bot(TEX(decimal(xpart(p_))),A[l]);
else:
+ if GrandNombrex:
+
+ else:
label.bot(TEX("\num{"&decimal(xpart(p_))&"}"),A[l]);
fi;
fi;
+ fi;
if Reponses:
if DonneesSup:
Test(l);
diff --git a/macros/latex/contrib/profcollege/latex/ProfCollege.sty b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
index 3963e71e7d..7c1bad8c3d 100644
--- a/macros/latex/contrib/profcollege/latex/ProfCollege.sty
+++ b/macros/latex/contrib/profcollege/latex/ProfCollege.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2024/04/20}%
+\def\filedate{2024/04/26}%
\let\PfCfiledate\filedate%
-\def\fileversion{0.99-A-c}%
+\def\fileversion{0.99-A-d}%
\let\PfCfileversion\fileversion%
\ProvidesPackage{ProfCollege}[\filedate\space v\fileversion\space Aide pour utiliser LaTeX au college]%
diff --git a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf
index dbd1708aaf..655d73fe6e 100644
--- a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf
+++ b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty
index 62f7313ca3..9aa462bb76 100644
--- a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty
+++ b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty
@@ -2,9 +2,9 @@
% licence : Released under the LaTeX Project Public License v1.3c
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}%
-\def\filedate{2024/04/13}%
+\def\filedate{2024/05/02}%
\let\PfMfiledate\filedate%
-\def\fileversion{0.91}%
+\def\fileversion{0.94}%
\let\PfMfileversion\fileversion%
\ProvidesPackage{ProfMaquette}[\filedate\space v\fileversion\space Maquettage de documents]%
@@ -37,15 +37,16 @@
\makeatletter
\gdef\PfMFontSize{\@ptsize}
+%\gdef\PfMFontSize{\f@size}
\makeatother
%définition des clés
\RequirePackage{simplekv}%
-\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,VersSolution=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé
+\setKVdefault[Boulot]{Dys=false,Taille=14,Cours=false,Base=false,BaseHTML=false,CAN=false,Fiche=false,DM=false,DS=false,IE=false,Kholle=false,RecapBrevet=false,PdT=false,Parcours=false,Contrat=false,FdR=false,ParcoursPerso=false,OlympiadesAPMEP=false,CorrigeInverse=false,CorrigeSeul=false,CorrigeApres=false,CorrigeFin=false,CorrigeAll=false,Brevet=false,BaremeComplet=false,BaremeGlobal=false,CorrectionColonnes=false,Epaisseur=0pt,VersSolution=false,AvecEntrainement=false,Small=false,Footnotesize=false,Scriptsize=false,AllDirect=false,AllPouce=false}%Les deux derniers pour essayer de mettre tous les exercices d'un même fichier en mode Reponse, en mode Indice. Pas implanté, pas testé
\defKV[Boulot]{Colonnes=\setKV[Boulot]{CorrectionColonnes}}%
\setKVdefault[Cours]{Couleur=Crimson,Theme=Trace écrite,NomExercice=Exercice}%
\setKVdefault[DM]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname}%
\setKVdefault[DS]{Numero=1,Date=\today,Classe={},Niveau=3,Code=\jobname,Calculatrice=false,Sujet=A}%
-\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
+\setKVdefault[Fiche]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,}%
\setKVdefault[PdT]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
\setKVdefault[FdR]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice}%
\setKVdefault[Parcours]{Theme=Les nombres décimaux,Date=\today,Niveau=6,Classe={},Code={},NomExercice=Exercice,Vertical=false}%
@@ -57,7 +58,7 @@
\setKVdefault[Kholle]{Sujet=1,Numero=1,Date=15,Niveau=TSI-1,Code=\jobname,Lieu=Lycée
du Hainaut (Valenciennes),NomEleve=Albert Einstein,CR=false}%
\setKVdefault[CAN]{Date=\today,Niveau=6,Duree=9,CoefQ=0.4,CoefR=0.35,CoefJ=0.1}%
-\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false}%
+\setKVdefault[ClesExercices]{NbQuestions=1,PasTitre=false,AffichageSource=false,BaremeTotal,BaremeDetaille=false,MotPoint=point,AffichageTitre=false,Calculatrice=true,Oral=false,Difficulte=0,AffichageCompetence=false,PasCorrige=false,Direct=false,Pouce=false,Parcours=false,Contrat=false,FdR=false,Routes=false,Stops=false,Background=white,Cadre=gray!50,Numerote,Ligne=false,Doublespacing=false,Onehalfspacing=false,Cadres=false,TitreSol=false,NonUtilise=false,Profile=false,PasEntrainement=false}%
\defKV[ClesExercices]{TitreSolution=\setKV[ClesExercices]{TitreSol}}%
\defKV[ClesExercices]{Source=\setKV[ClesExercices]{AffichageSource}}%
\defKV[ClesExercices]{Titre=\setKV[ClesExercices]{AffichageTitre}}%
@@ -85,12 +86,28 @@
\IfNoValueTF{#1}{\PfMDotfill}{\makebox[#1]{\PfMDotfill}}%
}%
%
-\NewDocumentCommand\PfMLignespointilles{m}{%
- \xintifboolexpr{\fpeval{#1}>1}{%
- \xintFor* ##1 in {\xintSeq {1}{\fpeval{#1}}}\do{%
- \PfMpointilles\par%
- }%
- }{}%
+\NewDocumentCommand\PfMNbLignesRestantes{}{%
+ \edef\measurepage{\dimexpr\pagegoal-\pagetotal\relax}%
+ \xdef\PfMResteLignes{\fpeval{trunc((\the\measurepage)/(\baselineskip),0)}}%
+}%
+
+\NewDocumentCommand\PfMLignesFinales{}{%
+ \PfMNbLignesRestantes%
+ \xintFor* ##1 in {\xintSeq {1}{\PfMResteLignes}}\do{%
+ \PfMpointilles\par%
+ }%
+}%
+
+\NewDocumentCommand\PfMLignespointilles{sm}{%
+ \IfBooleanTF{#1}{%
+ \par\PfMLignesFinales%
+ }{%
+ \xintifboolexpr{\fpeval{#2}>1}{%
+ \xintFor* ##1 in {\xintSeq {1}{#2}}\do{%
+ \PfMpointilles\par%
+ }%
+ }{}%
+ }%
}%
% Definition de longueurs
\newlength\PfMLargeurSchemaParcours%
@@ -124,6 +141,8 @@
\setcounter{PfMExo}{0}%
\newcounter{PfMExoSol}%Pour repérer les valeurs aléatoires construites automatiquement dans la solution
\setcounter{PfMExoSol}{0}%
+\newcounter{PfMExoEntrai}%Pour repérer les entrainements
+\setcounter{PfMExoEntrai}{0}%
\newcounter{PfMCorrigeParcoursPerso}%affichage des solutions ou pas dans le cadre d'un parcours perso
\setcounter{PfMCorrigeParcoursPerso}{0}%
\newcounter{PfMSOS}%Numéro des SOS dans les parcours fléchés
@@ -143,6 +162,8 @@
\newcounter{Nbcolonnes}
+\newbox\PfMSauvegardeBox%
+
\newif\ifPfMDeuxColonnes
\newif\ifPfMRectoVerso
\makeatletter
@@ -220,6 +241,15 @@
\repeat
}%
+% On bloque la graine de fabrication des nombres aléatoires.
+\ExplSyntaxOn
+\cs_new_eq:NN \PfMGraineAlea \sys_gset_rand_seed:n
+\ExplSyntaxOff
+
+\ExplSyntaxOn
+\cs_new_eq:NN \PfMChoisisGraineAlea \int_rand:n
+\ExplSyntaxOff
+
%% Gestion de l'affichage ou pas des item (Pour élèves PAP) par exemple
% Code by egreg : https://tex.stackexchange.com/questions/627250/hide-specific-item-in-a-list
\ExplSyntaxOn
@@ -876,7 +906,7 @@
\]%
}%
%
-%%%%
+%
%%% Définitions des environnements pour la correction
\makeatletter
\newwrite\verbatim@out
@@ -1021,6 +1051,7 @@
}%
\def\PfMTexteDuCorrige{Corrigé de l'exercice}
+\def\PfMTexteDeLEntrainement{Automatisme(s) lié(s) à l'exercice}
\NewDocumentCommand\PfMAffichageCorrige{}{%
\ifboolKV[Boulot]{CAN}{%
@@ -1043,6 +1074,43 @@
}%
}%
}%
+
+\NewDocumentEnvironment{Entrainement}{}{}{}%
+
+\makeatletter
+\def\EntrainementWrite{%
+ \@bsphack%
+ \immediate\openout \verbatim@out "\jobname-Ex\thePfMExo.qrc"%
+ \let\do\@makeother\dospecials%
+ \catcode`\^^M\active%
+ \def\verbatim@processline{%
+ \immediate\write\verbatim@out{\the\verbatim@line}}%
+ \verbatim@start}%
+\def\endEntrainementWrite{\immediate\closeout\verbatim@out\@esphack}%
+
+\let\Entrainement\EntrainementWrite\let\endEntrainement\endEntrainementWrite%
+\makeatother
+
+\NewDocumentCommand\PfMAffichageEntrainement{}{%
+ \clearpage
+ \TikzAutomatismes
+ \setcounter{PfMExoEntrai}{0}%
+ \xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{%
+ \refstepcounter{PfMExoEntrai}%
+ \IfFileExists{\jobname-Ex##1.qrc}{%
+ \begin{center}
+ \label{pageentrai-\thePfMMaquette-\thePfMExoEntrai}%
+ \textbf{\PfMTexteDeLEntrainement\ifnum\thePfMExo=1\relax\else~\ref{page-\thePfMMaquette-##1}\fi}\par\nopagebreak\input{\jobname-Ex##1.qrc}\end{center}}{}%
+ }%
+}%
+
+\NewDocumentCommand\TikzAutomatismes{}{%
+ \begin{tcolorbox}
+ \begin{center}
+ \Large\sffamily Automatismes%
+ \end{center}
+ \end{tcolorbox}%
+}%
%%%%%%%% BAREME %%%%%%%%%%%
%% Bareme
\newlength{\brouillon}
@@ -1176,7 +1244,18 @@
\node[%
fill=tcbcolback,%
anchor=center,%
- ] at (frame.east){\hyperref[pagesol-\thePfMMaquette-\thePfMExo]{\faKey}};%
+ ] at ($(frame.north east)!0.25!(frame.south east)$){\hyperref[pagesol-\thePfMMaquette-\thePfMExo]{\faKey}};%
+ }%
+ }{}%
+}%
+
+\NewDocumentCommand{\PfMLienVersEntrainement}{}{%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \ifboolKV[ClesExercices]{PasEntrainement}{}{%
+ \node[%
+ fill=tcbcolback,%
+ anchor=center,rotate=45%
+ ] at ($(frame.north east)!0.75!(frame.south east)$){\hyperref[pageentrai-\thePfMMaquette-\thePfMExo]{\faDumbbell}};%
}%
}{}%
}%
@@ -1535,6 +1614,8 @@
\PfMAffichageSource%
%
\PfMLienVersSolution%
+ %
+ \PfMLienVersEntrainement%
}%
}%
}%
@@ -1853,7 +1934,7 @@
\setsepchar{,}%
\readlist*\ListePetitsObjets{bonbons,billes,biscuits,gommes,clous,vis,cahiers,trousses}%
\readlist*\ListeFruits{pommes,poires,abricots,cerises,fraises,framboises,noix,pêches,nectarines,myrtilles,oranges,mandarines,kiwis}%
-\readlist*\ListeVariables{a,b,c,m,n,p,r,s,t,x,y,z}%
+\readlist*\ListeVariables{a,b,c,\ell,m,n,p,r,s,t,x,y,z}%
\makeatletter
\def\ExoCANWrite{%
@@ -2007,6 +2088,8 @@
\PfMAffichageSource%
%
\PfMLienVersSolution%
+ %
+ \PfMLienVersEntrainement%
}%
}%
}%
@@ -2278,6 +2361,8 @@
\fi%
}%
+\newbox\PfMBoxSauvegarde%
+
\NewDocumentEnvironment{exerciceFiche}{so+b}{%
\setcounter{PfMAlea}{0}%
\setcounter{PfMNbLogo}{1}%
@@ -2979,6 +3064,8 @@
\PfMAffichageSource%
% Lien vers la solution
\PfMLienVersSolution
+ % Lien vers les entrainements
+ \PfMLienVersEntrainement
}%
}%
}%
@@ -3070,6 +3157,8 @@
\PfMAffichageSource%
%
\PfMLienVersSolution%
+ %
+ \PfMLienVersEntrainement%
}%
}%
}%
@@ -3274,14 +3363,15 @@
}{%
\ifnum\thePfMMaquette=1\relax%
\else%
- \ifnum\PfMFontSize=0\relax%
- \fontsize{10}{\fpeval{1.2*10}}%
- \else\ifnum\PfMFontSize=1\relax%
- \fontsize{11}{\fpeval{1.2*11}}%
- \else%
- \fontsize{12}{\fpeval{1.2*12}}%
- \fi%
- \fi%
+ %\ifnum\PfMFontSize=0\relax%
+ % \fontsize{10}{\fpeval{1.2*10}}%
+ %\else\ifnum\PfMFontSize=1\relax%
+ % \fontsize{11}{\fpeval{1.2*11}}%
+ % \else%
+ % \fontsize{12}{\fpeval{1.2*12}}%
+ % \fi%
+ %\fi%
+ \fontsize{\fpeval{10+\PfMFontSize}}{\fpeval{1.2*(10+\PfMFontSize)}}%
\selectfont%
\renewcommand{\JustifyingParindent}{\parindent}
\justifying%
@@ -3313,6 +3403,7 @@
\fi%
\PfMBasculeDys%
\setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
+ \PfMChangerTailleCorrection%
}%
\NewDocumentCommand\PfMAffichageCorrectionColonnes{}{%
@@ -3321,6 +3412,12 @@
\ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
}%
+\NewDocumentCommand\PfMAffichageEntrainementColonnes{}{%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
+ \PfMAffichageEntrainement%
+ \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
+}%
+
%%%%%%%%%%%%%%% Debut Maquette %%%%%%%
% Environnement englobant le tout.
\makeatletter
@@ -3336,7 +3433,7 @@
\stepcounter{PfMMaquette}%
% options de boulot
\IfHookExistsTF{env/Maquette/after}{\RemoveFromHook{env/Maquette/after}[*]}{}%
- \IfHookExistsTF{env/exercice/after}{\RemoveFromHook{env/exercice/after}[*]}{}%
+ %\IfHookExistsTF{env/exercice/after}{\RemoveFromHook{env/exercice/after}[*]}{}%
% \AddToHook{env/exercice/after}[ChoixExo]{\PfMChoixAffichageCorrection}%
\useKVdefault[Boulot]%
\setKV[Boulot]{#1}%
@@ -3355,108 +3452,116 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \clearpage
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
-% \TikzOlympiadesAPMEPCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
}{%
\ifboolKV[Boulot]{CAN}{%
\setKV[CAN]{#2}%
- \ifboolKV[Boulot]{CorrigeSeul}{}{\TikzCAN}%
- \PfMChangerTailleCorrection%
- \setcounter{PfMCNNumQ}{0}%
- \setlength{\PfMLargeurQuestion}{\useKV[CAN]{CoefQ}\linewidth}\setlength{\PfMLargeurReponse}{\useKV[CAN]{CoefR}\linewidth}\setlength{\PfMLargeurJury}{\useKV[CAN]{CoefJ}\linewidth}%
- \let\exercice\ExoCANWrite\let\endexercice\endExoCANWrite%
- \AddToHook{env/exercice/begin}{\setcounter{PfMAlea}{0}}%
- \AddToHook{env/Maquette/end}{%
- \xdef\PfMCANTotalExo{\thePfMExo}%
- \ifboolKV[Boulot]{CorrigeSeul}{}{
- \setcounter{PfMExo}{0}%
- \renewcommand{\arraystretch}{2}%
- \begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
- \hhline{~---}%
- \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering Question&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
- \hline%
- \endhead%
- \xintFor* ##1 in {\xintSeq{1}{\PfMCANTotalExo}}\do{%
- \refstepcounter{PfMCNNumQ}\ttfamily{\thePfMCNNumQ}\label{TestCAN-\thePfMCNNumQ}&\Complement{}\stepcounter{PfMExo}\setcounter{PfMAlea}{0}\input{\jobname-Ex##1.can}&\CNReponse&\\
- \hline%
- }%
- \end{longtable}%
- \renewcommand{\arraystretch}{1}%
- }%
- }%
- \ifboolKV[Boulot]{CorrigeFin}{%
- \AddToHook{env/Maquette/after}[Correction]{%
- \PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
- \TikzCANCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
- \PfMAffichageCorrectionColonnes%
- }%
- }{}%
+ %\ifboolKV[Boulot]{CorrigeSeul}{}{\TikzCAN}%
+ \setcounter{PfMCNNumQ}{0}%
+ \setlength{\PfMLargeurQuestion}{\useKV[CAN]{CoefQ}\linewidth}\setlength{\PfMLargeurReponse}{\useKV[CAN]{CoefR}\linewidth}\setlength{\PfMLargeurJury}{\useKV[CAN]{CoefJ}\linewidth}%
+ \let\exercice\ExoCANWrite\let\endexercice\endExoCANWrite%
+ \AddToHook{env/exercice/begin}{\setcounter{PfMAlea}{0}}%
+ \AddToHook{env/Maquette/end}{%
+ \xdef\PfMAncienneGraine{\PfMChoisisGraineAlea{123456789}}
+ \xdef\PfMCANTotalExo{\thePfMExo}%
+ \setbox\PfMSauvegardeBox\vbox{%
+ \PfMGraineAlea{\thePfMMaquette}
+ \setcounter{PfMExo}{0}%
+ \renewcommand{\arraystretch}{2}%
+ \begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
+ \hhline{~---}%
+ \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering Question&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+ \hline%
+ \endhead%
+ \xintFor* ##1 in {\xintSeq{1}{\PfMCANTotalExo}}\do{%
+ \refstepcounter{PfMCNNumQ}\ttfamily{\thePfMCNNumQ}\label{TestCAN-\thePfMCNNumQ}&\Complement{}\stepcounter{PfMExo}\setcounter{PfMAlea}{0}\input{\jobname-Ex##1.can}&\CNReponse&\\
+ \hline%
+ }%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1}%
+ }
+ \ifboolKV[Boulot]{CorrigeInverse}{%
+ \PfMPrepareCorrection{#1}%
+ \TikzCANCor{#2}%
+ \PfMAffichageCorrectionColonnes%
+ \clearpage
+ \normalsize%
+ \TikzCAN%
+ \PfMGraineAlea{\thePfMMaquette}%
+ \setcounter{PfMCNNumQ}{0}%
+ \setcounter{PfMExo}{0}%
+ \renewcommand{\arraystretch}{2}%
+ \begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
+ \hhline{~---}%
+ \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering Question&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+ \hline%
+ \endhead%
+ \xintFor* ##1 in {\xintSeq{1}{\PfMCANTotalExo}}\do{%
+ \refstepcounter{PfMCNNumQ}\ttfamily{\thePfMCNNumQ}\label{TestCAN-\thePfMCNNumQ}&\Complement{}\stepcounter{PfMExo}\setcounter{PfMAlea}{0}\input{\jobname-Ex##1.can}&\CNReponse&\\
+ \hline%
+ }%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1}%
+ }{%
+ \PfMGraineAlea{\PfMAncienneGraine}%
+ \TikzCAN%
+ \setcounter{PfMCNNumQ}{0}%
+ \setcounter{PfMExo}{0}%
+ \renewcommand{\arraystretch}{2}%
+ \begin{longtable}{|c|m{\PfMLargeurQuestion}|>{\centering\arraybackslash}m{\PfMLargeurReponse}|m{\PfMLargeurJury}|}%
+ \hhline{~---}%
+ \multicolumn{1}{c|}{}&\cellcolor{gray!15}\centering Question&\cellcolor{gray!15}\centering Réponse&\cellcolor{gray!15}\centering\arraybackslash Jury\\%
+ \hline%
+ \endhead%
+ \xintFor* ##1 in {\xintSeq{1}{\PfMCANTotalExo}}\do{%
+ \refstepcounter{PfMCNNumQ}\ttfamily{\thePfMCNNumQ}\label{TestCAN-\thePfMCNNumQ}&\Complement{}\stepcounter{PfMExo}\setcounter{PfMAlea}{0}\input{\jobname-Ex##1.can}&\CNReponse&\\
+ \hline%
+ }%
+ \end{longtable}%
+ \renewcommand{\arraystretch}{1}%
+ \ifboolKV[Boulot]{CorrigeFin}{\ifboolKV[Boulot]{CorrigeInverse}{}{\clearpage
+ \PfMPrepareCorrection{#1}%
+ \TikzCANCor{#2}%
+ \PfMAffichageCorrectionColonnes%
+ }
+ }{}
+ }
+ }%
}{%
\ifboolKV[Boulot]{FdR}{%
- \ifboolKV[Boulot]{CorrigeSeul}{}{%
- \setKV[FdR]{#2}\TikzFdR%
- }
- \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR%
+ \ifboolKV[Boulot]{CorrigeSeul}{}{%
+ \setKV[FdR]{#2}\TikzFdR%
+ }
+ \let\exercice\exerciceFdR\let\endexercice\endexerciceFdR%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzFdRCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
}{%
\ifboolKV[Boulot]{Contrat}{%
- \ifboolKV[Boulot]{CorrigeSeul}{}{%
- \setKV[Contrat]{#2}\TikzContrat%
- }
- \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat%
+ \ifboolKV[Boulot]{CorrigeSeul}{}{%
+ \setKV[Contrat]{#2}\TikzContrat%
+ }
+ \let\exercice\exerciceContrat\let\endexercice\endexerciceContrat%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzContratCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3468,17 +3573,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzFicheCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
@@ -3490,17 +3585,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzRecapBrevetCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3516,24 +3601,19 @@
}%
}{%
\ifboolKV[Boulot]{Parcours}{%
- \ifboolKV[Boulot]{CorrigeSeul}{}{%
- \setKV[Parcours]{#2}\TikzParcours%
- }
- \let\exercice\exerciceParcours\let\endexercice\endexerciceParcours%
+ \ifboolKV[Boulot]{CorrigeSeul}{}{%
+ \setKV[Parcours]{#2}\TikzParcours%
+ }
+ \let\exercice\exerciceParcours\let\endexercice\endexerciceParcours%
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzParcoursCor{#2}
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
@@ -3546,17 +3626,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzPdTCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3566,17 +3636,9 @@
\setKV[DM]{#2}\TikzDM%
}
\let\exercice\exerciceDM\let\endexercice\endexerciceDM%
-% \let\Exercice\exercice\let\endExercice\endexercice%
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzDMCor{#2}%
\PfMAffichageCorrectionColonnes%
}%
@@ -3588,18 +3650,15 @@
\TikzFiche%
}%
\let\exercice\exerciceFiche\let\endexercice\endexerciceFiche%
- %\let\Exercice\exercice\let\endExercice\endexercice
+ \ifboolKV[Boulot]{AvecEntrainement}{%
+ \AddToHook{env/Maquette/end}[Haltere]{%
+ \PfMAffichageEntrainementColonnes%
+ }%
+ }{}%
\ifboolKV[Boulot]{CorrigeFin}{%
\ifboolKV[Boulot]{CorrigeAll}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}%
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzFicheCor{#2}%
\ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
\xintFor* ##1 in{\xintSeq{1}{\thePfMExo}}\do{%
@@ -3651,17 +3710,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzDSCor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes%
}%
}{}%
@@ -3674,17 +3723,7 @@
\ifboolKV[Boulot]{CorrigeFin}{%
\AddToHook{env/Maquette/after}[Correction]{%
\PfMPrepareCorrection{#1}
-% \useKVdefault[Boulot]%
-% \setKV[Boulot]{#1}%
-% \if@Dyslexie
-% \setKV[Boulot]{Dys}
-% \fi
-% \PfMBasculeDys%
-% \setlength{\columnseprule}{\useKV[Boulot]{Epaisseur}}%
\TikzIECor{#2}%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\begin{multicols}{\useKV[Boulot]{Colonnes}}}{}%
-% \PfMAffichageCorrige%
-% \ifboolKV[Boulot]{CorrectionColonnes}{\end{multicols}}{}%
\PfMAffichageCorrectionColonnes
}%
}{}%
diff --git a/macros/latex/contrib/rpgicons/LICENSE b/macros/latex/contrib/rpgicons/LICENSE
new file mode 100644
index 0000000000..4db9b5af29
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/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.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `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/rpgicons/README.md b/macros/latex/contrib/rpgicons/README.md
new file mode 100644
index 0000000000..febd990253
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/README.md
@@ -0,0 +1,30 @@
+![Version 1.8.2](https://img.shields.io/badge/version-1.8.2-blue)
+
+<img width="200" alt="rpgicons-example" src="https://github.com/jasperhabicht/rpgicons/assets/6378801/81a1d0aa-7a4f-4f83-bbdc-3bc3332023b2" />
+
+# The `rpgicons` package
+
+This package provides a set of high-quality icons for use in notes for tabletop role-playing games.
+The icons are meant to be used in the body text, but they can also be used in other contexts such
+as graphics or diagrams. The package comes in two variants, one based on the `l3draw` package and one
+based on PGF/Ti*k*Z.
+
+As of version 1.4.0, an `l3draw` variant of the `rpgicons` package exists which is loaded by default.
+The `l3draw` package does not provide the same variety of styles as Ti*k*Z does.
+
+The PGF veriant of the `rpgicons` package provides the icons as Ti*k*Z shapes. Since the commands to
+typeset the icons use `tikzpicture` environments, these commands should not be used inside another
+`tikzpicture`. However, because the package defines the icons as Ti*k*Z shapes, it is possible to
+use the icons in `tikzpicture` environments directly. Apart from that, as of version 1.1.0, the
+package provides a way to define custom commands to typeset the icons as boxed material which is
+safe to use in a tikzpicture context. As of version 1.3.1, the package provides an additional way
+to use the icons as Ti*k*Z pics.
+
+The `rpgicons` package is installed by copying the relevant `.sty` file into the working or `texmf`
+directory. The package is loaded by calling `\usepackage{rpgicons}` in the preamble of the document.
+To load the PGF variant, the package can be loaded with the option `pgf`. The `l3draw` variant is
+loaded per default. The PGF or `l3draw` variants can be loaded directly via
+`\usepackage{rpgicons-pgf}` or`\usepackage{rpgicons-l3}`.
+
+This package including all files is subject to the LPPL 1.3c license.
+Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.de).
diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.pdf b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf
new file mode 100644
index 0000000000..7eab416244
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/rpgicons/rpgicons-doc.tex b/macros/latex/contrib/rpgicons/rpgicons-doc.tex
new file mode 100644
index 0000000000..72aad456a7
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-doc.tex
@@ -0,0 +1,831 @@
+% File: rpgicons-doc.tex
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.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/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\documentclass[a4paper]{article}
+\def\rpgiconsfileversion{1.8.2}
+\def\rpgiconsfiledate{28 April 2024}
+
+\usepackage[T1]{fontenc}
+\usepackage{Alegreya}
+\usepackage{AlegreyaSans}
+\usepackage{FiraMono}
+
+\usepackage{geometry, longtable, booktabs, tcolorbox, hyperref}
+\geometry{margin=25mm, left=45mm}
+
+\usepackage{fancyhdr}
+\pagestyle{fancy}
+\fancyhf{}
+\renewcommand{\headrulewidth}{0pt}
+\fancyfoot[R]{\thepage}
+
+\linespread{1.1}\selectfont
+\addtolength{\skip\footins}{1em plus 5pt}
+\makeatletter
+\renewcommand*{\thefootnote}{\fnsymbol{footnote}}
+\renewcommand{\@makefntext}[1]{%
+ \noindent\hbox to 0.75em{\normalfont\@thefnmark\hss}~#1%
+}
+\makeatother
+
+\tcbuselibrary{listings}
+\lstdefinestyle{rpgiconsdocmacro}{
+ basicstyle=\small\ttfamily,
+ literate=*{<}{{{\color{black!50}\guilsinglleft}}}1
+ {>}{{{\color{black!50}\guilsinglright}}}1,
+ keywords={},
+ moredelim=[is][\bfseries]{|}{|},
+ moredelim=[is][\color{black!50}]{!}{!},
+}
+\lstdefinestyle{rpgiconsdoccodeexample}{
+ basicstyle=\small\ttfamily,
+ keywords={},
+}
+
+\hypersetup{colorlinks}
+
+\ExplSyntaxOn
+\int_new:N \l_rpgicons_doc_change_int
+\NewDocumentCommand{\changes}{ m m m }{
+ \int_incr:N \l_rpgicons_doc_change_int
+ \prop_new:c { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop }
+ \prop_put:cnn { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { version } {#1}
+ \prop_put:cnn { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { date } {#2}
+ \prop_put:cnn { l_rpgicons_doc_change_
+ \int_to_roman:n { \l_rpgicons_doc_change_int } _prop } { changes } {#3}
+}
+\NewDocumentCommand{\printchanges}{ }{
+ \section{Changes}
+ \begin{description}
+ \int_step_inline:nn { \l_rpgicons_doc_change_int } {
+ \item[
+ \prop_item:cn { l_rpgicons_doc_change_
+ \int_to_roman:n { ##1 } _prop } { version } ]
+ ( \prop_item:cn { l_rpgicons_doc_change_
+ \int_to_roman:n { ##1 } _prop } { date } ) \\
+ \prop_item:cn { l_rpgicons_doc_change_
+ \int_to_roman:n { ##1 } _prop } { changes }
+ }
+ \end{description}
+}
+
+\tl_new:N \l_rpgicons_doc_doctitle_tl
+\NewExpandableDocumentCommand{\makedoctitle}{ o m o m m o m }{
+ \hypersetup{
+ pdfauthor={#5},
+ pdftitle={\IfValueTF{#1}{#1}{#2}},
+ pdfsubject={\IfValueTF{#3}{#3}{#4}}
+ }
+ \tl_set:Nn \l_rpgicons_doc_doctitle_tl {
+ \group_begin:
+ \tcbset{
+ title ~ style ~ hook/.style={
+ boxrule=2pt,
+ fontupper=\huge\ttfamily
+ }
+ }
+ \setlength{\parindent}{0pt}\sffamily
+ \Huge{\bfseries #2}\par\bigskip
+ \Large #4\par\bigskip
+ \large #5
+ \IfValueT{#6}{
+ \,\footnote{#6}\par\bigskip
+ }
+ #7\par\bigskip
+ \rule{\textwidth}{.08em}
+ \group_end:
+ }
+}
+
+\NewExpandableDocumentCommand{\printdoctitle}{ }{
+ \tl_use:N \l_rpgicons_doc_doctitle_tl
+}
+\ExplSyntaxOff
+
+\tcbset{
+ size=small,
+ arc=2.5pt,
+ outer arc=2.5pt,
+ colframe=black!10,
+ colback=black!10,
+ title style hook/.style={}
+}
+
+\NewTCBListing{macrodef}{ }{
+ listing only,
+ listing style={rpgiconsdocmacro},
+ grow to left by=2cm,
+ boxrule=0pt,
+ after={\par\smallskip\noindent}
+}
+
+\NewTCBListing{codeexample}{ }{
+ text side listing,
+ lefthand width=4.5cm,
+ listing style={rpgiconsdoccodeexample},
+ after={\par\smallskip\noindent}
+}
+
+\NewTotalTCBox{\macro}{ O{} v }{
+ verbatim,
+ size=tight,
+ arc=1pt,
+ outer arc=1pt,
+ top=0.5pt,
+ bottom=0.5pt,
+ left=2pt,
+ right=2pt,
+ boxrule=0pt,
+ colframe=black!10,
+ colback=black!10,
+ fontupper=\small\ttfamily,
+ #1
+}{\vphantom{/g}\lstinline^#2^}
+
+\NewTotalTCBox{\titlemacro}{ s O{} m }{
+ verbatim,
+ size=tight,
+ arc=1pt,
+ outer arc=1pt,
+ top=0.5pt,
+ bottom=0.5pt,
+ left=2pt,
+ right=2pt,
+ boxrule=0pt,
+ colframe=black!10,
+ colback=black!10,
+ fontupper=\small\ttfamily,
+ title style hook,
+ #2
+}{\vphantom{/g}\IfBooleanT{#1}{\textbackslash}#3}
+
+\usepackage{rpgicons-l3}
+\usepackage[pics]{rpgicons-pgf}
+
+\ExplSyntaxOn
+\clist_new:N \l_rpgicons_doc_logo_icons_clist
+\clist_new:N \l_rpgicons_doc_logo_colors_clist
+\cs_generate_variant:Nn { \color_set:nnn } { nne }
+
+\clist_set:Nn \l_rpgicons_doc_logo_colors_clist {
+ 264653 , 287271 , 2a9d8f , e9c46a , f4a261 , e76f51
+}
+\int_step_inline:nn { \clist_count:N \l_rpgicons_doc_logo_colors_clist } {
+ \color_set:nne { rpgiconslogo \int_to_roman:n { #1 } } { HTML } {
+ \clist_item:Nn \l_rpgicons_doc_logo_colors_clist { #1 }
+ }
+}
+\clist_set:Nn \l_rpgicons_doc_logo_icons_clist {
+ twentyside , charisma , armor , buff , ranged , proficiency
+}
+
+\NewDocumentCommand{\rpgiconslogo}{ O{1} }{
+ \draw_begin:
+ \draw_transform_scale:n { #1 }
+ \int_step_inline:nn { \clist_count:N \l_rpgicons_doc_logo_icons_clist } {
+ \hcoffin_set:Nn \l_tmpa_coffin {
+ \draw_suspend_begin:
+ \RPGIconsAbility[negative]{
+ \clist_item:Nn \l_rpgicons_doc_logo_icons_clist { ##1 }
+ }[color=rpgiconslogo \int_to_roman:n { ##1 } ]
+ \draw_suspend_end:
+ }
+ \draw_scope_begin:
+ \draw_transform_shift:n {
+ % fix bug in older l3draw version
+ \cs_if_exist:NTF \__draw_transform_shift:nnnn {
+ \draw_point_polar:nn { 0.33cm } { 60 * ##1 + 10 }
+ } {
+ \draw_point_transform:n { \draw_point_polar:nn { 0.33cm } { 60 * ##1 + 10 } }
+ }
+ }
+ \draw_coffin_use:Nnn \l_tmpa_coffin { hc } { vc }
+ \draw_scope_end:
+ }
+ \draw_end:
+}
+\ExplSyntaxOff
+
+\NewDocumentEnvironment{rpgiconsiconlist}{ }{
+ \begin{longtable}{ @{} p{20em} p{5em} p{\dimexpr\linewidth-25em-4\tabcolsep} @{} }
+ \toprule
+ \textbf{Command} & \textbf{Icon} & \textbf{Shape} \\
+ \midrule\endhead
+}{
+ \bottomrule
+ \end{longtable}
+}
+
+\makedoctitle
+ [The rpgicons package]
+ {The \titlemacro{rpgicons} package}
+ {A set of high-quality icons for use in notes for tabletop role-playing games}
+ {Jasper Habicht}[E-mail: \href{mailto:mail@jasperhabicht.de}{mail@jasperhabicht.de}]
+ {Version \rpgiconsfileversion, released on \rpgiconsfiledate}
+
+\changes{v1.1.0}{2023/08/15}{First public release.}
+\changes{v1.1.1}{2023/11/15}{Fudge dice icon added.}
+\changes{v1.1.2}{2023/11/16}{Bug fixed that caused wrong spacing when using dice icons without quantifier.}
+\changes{v1.2.0}{2023/11/20}{Corrections in the manual. Icons for six-sided dice with one to nine pips, plus sign and minus sign added.}
+%\changes{v1.2.1}{2023/11/20}{Documentation of lengths for spacing added.}
+%\changes{v1.2.2}{2023/11/21}{Corrections in the manual.}
+\changes{v1.3.0}{2023/11/21}{Option to set background color added. Renamed global option.}
+\changes{v1.3.1}{2024/02/18}{Correction of initializing code. Correction of default value of after sep. Addition of pics.}
+%\changes{v1.3.2}{2024/02/19}{Reformatting of the manual.}
+%\changes{v1.3.4}{2024/02/20}{Minor corrections of some shapes.}
+\changes{v1.4.0}{2024/02/21}{L3 variant added.}
+\changes{v1.4.1}{2024/02/21}{Corrections in L3 variant.}
+\changes{v1.4.2}{2024/02/21}{Alternative set of commands in L3 variant defined.}
+\changes{v1.4.3}{2024/02/22}{Added option to L3 variant to enable upward compatibility.}
+\changes{v1.4.4}{2024/02/24}{Added styles for every instance of command or shape, correction of recent \titlemacro{l3draw} code.}
+\changes{v1.5.0}{2024/02/25}{Alternative set of commands defined, added support of styles in pics.}
+\changes{v1.5.1}{2024/02/28}{Addition of opacity to L3 variant.}
+\changes{v1.5.2}{2024/02/29}{Unification of scaling, minor corrections.}
+\changes{v1.5.3}{2024/03/03}{Optimisation of code in L3 variant.}
+\changes{v1.5.4}{2024/03/06}{Correction of baseline settings in L3 variant, added accessibililty support for L3 variant.}
+%\changes{v1.5.5}{2024/03/07}{Optimsation of accessibililty support for L3 variant.}
+\changes{v1.6.0}{2024/03/15}{Four attribute icons added, minor correction of styles.}
+\changes{v1.6.1}{2024/03/16}{Unified size of negative attribute icon.}
+\changes{v1.7.0}{2024/03/16}{Macro for easy typesetting using roll dice syntax added in L3 variant, compatibility mode updated.}
+\changes{v1.8.0}{2024/03/24}{Unified wrapper to load either package variant.}
+\changes{v1.8.2}{2024/04/28}{Roll dice syntax for PGF variant.}
+
+\begin{document}
+
+\vspace*{-1cm}
+\noindent\rpgiconslogo[4]
+
+\bigskip
+
+\printdoctitle
+
+\bigskip
+
+\section{Introduction}
+
+The \macro{rpgicons} package provides a set of high-quality icons for use in notes for tabletop role-playing games. The icons are meant to be used in the body text, but they can also be used in other contexts such as graphics or diagrams.
+
+The package comes in two variants, a L3 variant based on the \macro{l3draw} package which is loaded per default and a PGF veriant based on PGF/Ti\emph{k}Z.
+
+\section{Loading the package}
+
+To install the package, copy the relevant package files \macro{rpgicons.sty}, \macro{rpgicons-l3.sty} and \macro{rpgicons-pgf.sty} into the working directory or into the \macro{texmf} directory. After the package has been installted, the \macro{rpgicons} package is loaded by calling \macro{\usepackage{rpgicons}} in the preamble of the document.
+
+\begin{macrodef}l3\end{macrodef}
+The L3 variant of the package is loaded by default. To load it explicitly, the package can be loaded using the option \macro{l3}. Alternatively, \macro{\usepackage{rpgicons-l3}} can be called instead.
+
+\begin{macrodef}pgf\end{macrodef}
+To load the PGF variant of the package the package needs to be loaded with the option \macro{pgf}. Alternatively, \macro{\usepackage{rpgicons-pgf}} can be called instead.
+
+\subsection{Dependencies}
+
+The L3 variant of the package loads the \macro{l3draw} package. If the package is loaded with the \macro{opacity} option to enable transparency, the \macro{l3opacity} package is also loaded.
+
+The PGF variant of the package loads the \macro{tikz} package which in turn loads the \macro{xcolor} package. To make use of specific options these packages provide, you need to load the packages with the relevant options beforehand or use, such as \macro{\PassOptionsToPackage{svgnames}{xcolor}}.
+
+\section{Main user commands}
+
+Regardless of the variant of the package, a set of user commands is always available. These are described in the following. Depending on the use of the L3 or the PGF veriant, certain specific commands or options are available that are explained in the following sections in further detail.
+
+Because of the way the package defines the icons, every of the below described user commands can actually be used together with every shape. However, the combinations of shapes and commands as described in the following subsections are preferable.
+
+\subsection[Command \textbackslash die]{Command \titlemacro*{die}}
+
+\begin{macrodef}
+|\die|[<style>]{<shape>}[<options>]{<integer>}
+\end{macrodef}
+The command \macro{\die} prints an icon to depict a die with a certain number of sides. Two special icons exist for a two-sided die (which would be equivalent to a coin) and for a hundred-sided die (which typically comes in the shape of a sphere). There is also a special icon for a fudge die.
+
+For the six-sided die, nine additional shapes exists representing the values one to nine as pips. Also, additional shapes exist representing the plus or minus side of a fudge die.
+
+The command takes two mandatory commands, the first of which describes the shape (see the lists below) and the second can take an integer that is placed in front of the shape. For example, \macro{\die{eightside}{2}} results in \die{eightside}{2} (meaning two eight-sided dice are rolled).
+
+The command also takes two optional arguments, the second of which can take additional options to style the icon. The options affect the shape, not the integer when it is printed before the icon. These options differ depending on the package variant. See the relevant sections below.
+
+The first optional argument can take the value \macro{normal} or \macro{large}, \macro{normal} being the default value. With \macro{large} given as argument, the icon is drawn larger and the additional integer is printed inside of the shape instead of before it. As an example, \macro{\die[large]{eightside}{2}} results in \die[large]{eightside}{2}. Note that the integer will always be printed on top of the shape, even if the shape does not have an open center as in the case of the \macro{fudge} shapes or the shapes featuring pips.
+
+\begin{rpgiconsiconlist}
+\macro{\die}
+ & \die{twoside}{} & \macro{twoside} \\
+ & \die{fourside}{} & \macro{fourside} \\
+ & \die{sixside}{} & \macro{sixside} \\
+ & \die{eightside}{} & \macro{eightside} \\
+ & \die{tenside}{} & \macro{tenside} \\
+ & \die{twelveside}{} & \macro{twelveside} \\
+ & \die{twentyside}{} & \macro{twentyside} \\
+ & \die{hundredside}{} & \macro{hundredside} \\
+ & \die{fudge}{} & \macro{fudge} \\
+ & \die{sixside one}{} & \macro{sixside one} \\
+ & \die{sixside two}{} & \macro{sixside two} \\
+ & \die{sixside three}{} & \macro{sixside three} \\
+ & \die{sixside four}{} & \macro{sixside four} \\
+ & \die{sixside five}{} & \macro{sixside five} \\
+ & \die{sixside six}{} & \macro{sixside six} \\
+ & \die{sixside seven}{} & \macro{sixside seven} \\
+ & \die{sixside eight}{} & \macro{sixside eight} \\
+ & \die{sixside nine}{} & \macro{sixside nine} \\
+ & \die{fudge plus}{} & \macro{fudge plus} \\
+ & \die{fudge minus}{} & \macro{fudge minus} \\
+\end{rpgiconsiconlist}
+
+\subsection[Commands \textbackslash ability and \textbackslash saving]{Commands \titlemacro*{ability} and \titlemacro*{saving}}
+
+\begin{macrodef}
+|\ability|[<style>]{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\ability} prints icons depicting an ability of a character. The abilities are represented by animal-like shapes. The relevant shape should be given as mandatory argument to the command. The second optional argument can take additional options to style the icon.
+
+The first optional argument can take the value \macro{positive} or \macro{negative}, \macro{positive} being the default value. With \macro{negative} given as argument, the icon is drawn negative inside a circle. As an example, \macro{\ability[negative]{charisma}} results in \ability[negative]{charisma}.
+
+\begin{macrodef}
+|\saving|[<style>]{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\saving} prints the icons that can be typeset using the \macro{\ability} command inside a small shield. It can take the same values for the mandatory argument as the \macro{\ability} command. The optional argument can take additional options to style the icon.
+
+The first optional argument can take the value \macro{normal} or \macro{empty}, \macro{normal} being the default value. With \macro{empty} given as argument, the icon inside the shield is not printed. In this case, the mandatory argument can be left empty. As an example, \macro{\saving[empty]{}} results in \saving[empty]{}.
+
+\begin{rpgiconsiconlist}
+\macro{\ability}
+ & \ability{strength} & \macro{strength} \\
+ & \ability{dexterity} & \macro{dexterity} \\
+ & \ability{dexterity alt} & \macro{dexterity alt} \\
+ & \ability{constitution} & \macro{constitution} \\
+ & \ability{intelligence} & \macro{intelligence} \\
+ & \ability{wisdom} & \macro{wisdom} \\
+ & \ability{charisma} & \macro{charisma} \\
+ & \ability{resilience} & \macro{resilience} \\
+ & \ability{sanity} & \macro{sanity} \\
+ & \ability{perception} & \macro{perception} \\
+ & \ability{luck} & \macro{luck} \\
+ & \ability{armor} & \macro{armor} \\
+ & \ability{proficiency} & \macro{proficiency} \\
+\midrule
+\macro{\saving}
+ & \saving{strength} & \macro{strength} \\
+ & \saving{dexterity} & \macro{dexterity} \\
+ & \saving{dexterity alt} & \macro{dexterity alt} \\
+ & \saving{constitution} & \macro{constitution} \\
+ & \saving{intelligence} & \macro{intelligence} \\
+ & \saving{wisdom} & \macro{wisdom} \\
+ & \saving{charisma} & \macro{charisma} \\
+ & \saving{resilience} & \macro{resilience} \\
+ & \saving{sanity} & \macro{sanity} \\
+ & \saving{perception} & \macro{perception} \\
+ & \saving{luck} & \macro{luck} \\
+ & \saving{armor} & \macro{armor} \\
+ & \saving{proficiency} & \macro{proficiency} \\
+\end{rpgiconsiconlist}
+
+\subsection[Command \textbackslash spell]{Command \titlemacro*{spell}}
+
+\begin{macrodef}
+|\spell|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\spell} prints icons depicting the effect of a spell or how it is to be effected. The optional argument can take additional options to style the icon.
+
+\begin{rpgiconsiconlist}
+\macro{\spell}
+ & \spell{linear} & \macro{linear} \\
+ & \spell{conic} & \macro{conic} \\
+ & \spell{quadratic} & \macro{quadratic} \\
+ & \spell{cubic} & \macro{cubic} \\
+ & \spell{spheric} & \macro{spheric} \\
+ & \spell{cylindric} & \macro{cylindric} \\
+ & \spell{verbal} & \macro{verbal} \\
+ & \spell{somatic} & \macro{somatic} \\
+ & \spell{material} & \macro{material} \\
+ & \spell{focus} & \macro{focus} \\
+\end{rpgiconsiconlist}
+
+\subsection[Command \textbackslash spellschool]{Command \titlemacro*{spellschool}}
+
+\begin{macrodef}
+|\spellschool|[<style>]{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\spellschool} prints icons that represent the school a spell belongs to. The second optional argument can take additional options to style the icon.
+
+The first optional argument can take the value \macro{negative} or \macro{positive}, \macro{negative} being the default value. Per default the icon is drawn in white inside a filled escutcheon. With \macro{positive} given as argument, the icon as well as the escutcheon are drawn in the currently selected color. As an example, \macro{\spellschool[positive]{evocation}} results in \spellschool[positive]{evocation}.
+
+\begin{rpgiconsiconlist}
+\macro{\spellschool}
+ & \spellschool{abjuration} & \macro{abjuration} \\
+ & \spellschool{conjuration} & \macro{conjuration} \\
+ & \spellschool{divination} & \macro{divination} \\
+ & \spellschool{enchantment} & \macro{enchantment} \\
+ & \spellschool{evocation} & \macro{evocation} \\
+ & \spellschool{illusion} & \macro{illusion} \\
+ & \spellschool{necromancy} & \macro{necromancy} \\
+ & \spellschool{transmutation} & \macro{transmutation} \\
+\end{rpgiconsiconlist}
+
+\subsection[Commands \textbackslash damage, \textbackslash attack, and \textbackslash condition]{Commands \titlemacro*{damage}, \titlemacro*{attack}, and \titlemacro*{condition}}
+
+\begin{macrodef}
+|\damage|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\damage} prints icons depicting the damage of an attack. The icon is printed inside a circle. The optional argument can take additional options to style the icon.
+
+\begin{macrodef}
+|\attack|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\attack} prints icons depicting the kind of an attack. The optional argument can take additional options to style the icon.
+
+\begin{macrodef}
+|\condition|{<shape>}[<options>]
+\end{macrodef}
+The command \macro{\condition} prints icons depicting a condition of a character. The optional argument can take additional options to style the icon.
+
+\begin{rpgiconsiconlist}
+\macro{\damage}
+ & \damage{acid} & \macro{acid} \\
+ & \damage{bludgeoning} & \macro{bludgeoning} \\
+ & \damage{cold} & \macro{cold} \\
+ & \damage{fire} & \macro{fire} \\
+ & \damage{force} & \macro{force} \\
+ & \damage{lightning} & \macro{lightning} \\
+ & \damage{necrotic} & \macro{necrotic} \\
+ & \damage{piercing} & \macro{piercing} \\
+ & \damage{poison} & \macro{poison} \\
+ & \damage{psychic} & \macro{psychic} \\
+ & \damage{radiant} & \macro{radiant} \\
+ & \damage{slashing} & \macro{slashing} \\
+ & \damage{thunder} & \macro{thunder} \\
+ & \damage{healing} & \macro{healing} \\
+\midrule
+\macro{\attack}
+ & \attack{melee} & \macro{melee} \\
+ & \attack{ranged} & \macro{ranged} \\
+ & \attack{magic} & \macro{magic} \\
+ & \attack{singlehanded} & \macro{singlehanded} \\
+ & \attack{doublehanded} & \macro{doublehanded} \\
+\midrule
+\macro{\condition}
+ & \condition{buff} & \macro{buff} \\
+ & \condition{blinded} & \macro{blinded} \\
+ & \condition{charmed} & \macro{charmed} \\
+ & \condition{deafened} & \macro{deafened} \\
+ & \condition{exhausted} & \macro{exhausted} \\
+ & \condition{frightened} & \macro{frightened} \\
+ & \condition{grappled} & \macro{grappled} \\
+ & \condition{incapacitated} & \macro{incapacitated} \\
+ & \condition{invisible} & \macro{invisible} \\
+ & \condition{paralyzed} & \macro{paralyzed} \\
+ & \condition{petrified} & \macro{petrified} \\
+ & \condition{poisoned} & \macro{poisoned} \\
+ & \condition{prone} & \macro{prone} \\
+ & \condition{restrained} & \macro{restrained} \\
+ & \condition{stunned} & \macro{stunned} \\
+ & \condition{unconscious} & \macro{unconscious} \\
+ & \condition{hearing} & \macro{hearing} \\
+ & \condition{seeing} & \macro{seeing} \\
+\end{rpgiconsiconlist}
+
+% l3 variant
+
+\section{Specifics of the L3 package variant}
+
+The L3 variant of the package that uses the \macro{l3draw} package is loaded by default or explicitly by either calling \macro{\usepackage[l3]{rpgicons}} or \macro{\usepackage{rpgicons-l3}} in the preamble of the document after having installed the files \macro{rpgicons.sty} and \macro{rpgicons-l3.sty}. The \macro{l3draw} package is an experimental package that provides only basic drawing functionality. The L3 variant thus only supports a certain set of option for styling the icons.
+
+The L3 variant of the package does not load the \macro{xcolor} package, but makes use of the \macro{l3color} module which uses a similar syntax like the \macro{xcolor} package, but color defintions made using the \macro{l3color} module are not directly usable via commands provided by the \macro{xcolor} package. Therefore, setting a color using the \macro{\color} macro provided by the \macro{xcolor} package won't affect the color of the icons.
+
+\begin{macrodef}compat\end{macrodef}
+The \macro{l3draw} package is experimental and subject to ongoing updates. Loading the L3 variant of the package with the option \macro{compat} will use macro definitions that have been available since the last major TeX Live release as replacement for certain functions that only became available in the most recent versions of the \macro{l3draw} and related packages.
+
+\label{macro:opacity}
+\begin{macrodef}opacity\end{macrodef}
+With the \macro{opacity} option, the L3 variant of the package supports transparency using the functionality of the \macro{l3opacity} package. Since transparency requires the management of certain PDF settings, it is necessary to call \macro{\DocumentMetadata{}} before loading a \macro{\documentclass}. The \macro{l3opacity} package is experimental.
+
+\subsection{Icon commands}
+
+\begin{macrodef}
+|\RPGIconsUseIcon|[<options>][<integer>]{<shape>}
+|\RPGIconsUseIcon*|[<options>][<integer>]{<shape>}
+\end{macrodef}
+\macro{\RPGIconsUseIcon} is the primary command to typeset icons using the L3 variant of the package. The commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} are based on this command.
+
+The \macro{\RPGIconsUseIcon} command has a starred version and two optional arguments as well as one mandatory argument. The mandatory argument holds the shape of the icon. The second optional argument can be used to add an integer when used with shapes for dice.
+
+The starred version of the command is used to fill a frame with color instead of drawing its outline. Frames can be put around the shape via the relevant \macro{frame} option.
+
+\begin{macrodef}
+|\RPGIconsDie|[<style>]{<shape>}[<options>]{<integer>}
+|\RPGIconsAbiliy|[<style>]{<shape>}[<options>]
+|\RPGIconsSaving|[<style>]{<shape>}[<options>]
+|\RPGIconsSpell|{<shape>}[<options>]
+|\RPGIconsSpellschool|[<style>]{<shape>}[<options>]
+|\RPGIconsDamage|{<shape>}[<options>]
+|\RPGIconsAttack|{<shape>}[<options>]
+|\RPGIconsCondition|{<shape>}[<options>]
+\end{macrodef}
+The L3 variant of the package defines a set of commands on which the user commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} are based. This set of commands can be used in cases where another package defines one of these user commands. These user commands are exact copies of this set of commands.
+
+\subsection{Icon options}
+
+\begin{macrodef}
+frame
+stroke
+fill
+text
+color
+background
+stroke opacity
+fill opacity
+text opacity
+opacity
+background opacity
+line width
+scale
+scale inner
+rotate
+\end{macrodef}
+The \macro{\RPGIconsUseIcon} command and the commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} can be used with certain options that each consist of a key-value pair and can be combined. When used with the \macro{\RPGIconsUseIcon} command or the other commands based on this command, these options should be used directly without wrapping them inside the \macro{style} option.
+
+For example, \macro{\die{eightside}[color=blue, line width=0.8pt]{2}} would result in \die{eightside}[color=blue, line width=0.8pt]{2}.
+
+With the \macro{frame} option, one of four different frames can be selected that are drawn around the shape of the icon. The values \macro{ability} and \macro{damage} draw a circle around the shape. The value \macro{saving} draws a rounded shield and the value \macro{spellschool} draws an angular shield around the shape. The commands \macro{\ability}, \macro{\saving}, \macro{\spellschool} and \macro{\damage} make use of the relevant frame.
+
+Some icons can be used with a negative color scheme where the icon is drawn negatively inside a filled shape. Per default, the icons are drawn in white in such cases, but it might be desirable that the icons are in the same color as the background. To this end, the \macro{background} option sets the color of the shape when it is printed over a filled frame which can be achieved by setting the \macro{negative} option for the \macro{\ability} or the \macro{\spellschool} command or using the starred version of the \macro{\RPGIconsUseIcon} command.
+
+The \macro{color} option sets the color of strokes, fills and text in general while the \macro{stroke} option, the \macro{fill} option and the \macro{text} option set the color only for strokes, fills or text respectively. Similarly, the \macro{opacity} macro sets the opacity generally, while the options \macro{stroke opacity}, \macro{fill opacity} and \macro{text opacity} allow for setting the opacity of strokes, fill and text separately. The opacity styles are only available when loading the package with the \macro{opacity} option (see the \hyperref{macro:opacity}{description above}). The \macro{line width} sets the line width for strokes. Using the \macro{scale} and \macro{rotate} options, the shape can be scaled and rotated.
+
+The \macro{scale inner} option can be used to change the scaling of the icon when placed inside a frame when using the \macro{\ability}, \macro{\saving}, \macro{\spellschool} and \macro{\damage} macros. The default value is 0.675.
+
+\begin{macrodef}
+accessible
+accessible = basic
+accessible = full
+accessible = false
+\end{macrodef}
+Using the \macro{accessible} option with no value or the value \macro{basic}, a replacement text to the relevant icon can be added which can be copied to the clipboard. The value \macro{full} additionally places an \macro{\Alt} mark in the PDF which means that the shape of the relevant icon is read by screen readers. For this to work, is necessary to call \macro{\DocumentMetadata{}} before loading a \macro{\documentclass}, preferably with tagging enabled to make use of the \macro{accessible} option. The value \macro{full} can be used to disable the function explicitly. Note that depending on the compiler and PDF viewer, there might be line breaks or no spaces before and after the replacement text.
+
+\begin{macrodef}
+every die
+every ability
+every saving
+every spell
+every spellschool
+every damage
+every attack
+every condition
+every <shape>
+\end{macrodef}
+Styles following the pattern \macro{rpg icons/every} followed by a space and the name of the command or the shape can be used to apply styles to every instance of this command or shape. For example, \macro{\rpgiconsset{every die={color={red}}}} can be used to draw in red all icons created using the \macro{\die} command. Calling \macro{\rpgiconsset{every charisma={color={red}}}} will draw every instace of the \macro{charisma} shape in red.
+
+\subsection{Setting options globally}
+
+\begin{macrodef}
+|\rpgiconsset|
+\end{macrodef}
+Apart from setting the options to the commands directly, it is also possible to set them globally using the \macro{\rpgiconsset} command. Globally set options are overridden by options that are selected directly.
+
+\begin{codeexample}
+\rpgiconsset{
+ color=blue
+}
+
+\ability{charisma}
+\ability{charisma}[color=red]
+\ability{charisma}
+\end{codeexample}
+
+\begin{macrodef}
+before sep
+after sep
+baseline
+\end{macrodef}
+The spacing before and after the icons can be set using the options \macro{before sep} and \macro{after sep}. The option \macro{baseline} can be used to adjust the baseline of the icons. These options can also be applied to the icon commands directly.
+
+\begin{codeexample}
+Roll\die{eightside}{}a die!
+
+\rpgiconsset{
+ before sep={1cm}
+}
+Roll\die{eightside}{}a die!
+\end{codeexample}
+
+\subsection{Roll dice syntax}\label{sec:roll-dice-syntax}
+
+\begin{macrodef}
+|\roll|{<roll syntax>}
+|\RPGIconsRoll|{<roll syntax>}
+\end{macrodef}
+The \macro{\roll} macro can be used to quickly typeset dice rolls with the relevant icons using the established dice rolling syntax. This syntax consists of a sequence of dice and numbers concatenated by mathematical operators (plus, minus or times). Typically, the letter \macro{d} is used to denote a die with a certain number of sides. For example \macro{d6} denotes a six-sided die. A number can be added to specify the number of such dice that are rolled together. The letter to denote the die can be changed using the option \macro{roll syntax}.
+
+For example, \macro{2d6 + 3d4 - 1} means ``roll two six-sided dice and three four-sided dice and subtract one from the result''. The command \macro{\roll{2d6 + 3d4 - 1}} results in \roll{2d6 + 3d4 - 1}.
+
+The die notations \macro{d2}, \macro{d4}, \macro{d6}, \macro{d8}, \macro{d10}, \macro{d12}, \macro{d20} and \macro{d100} are defined. To denote a fudge die, \macro{dF} can be used. To denote that the lowest or highest die should be removed from the result, the letters \macro{L} and \macro{H} can be used. The syntax \macro{2d6 x 2} or \macro{2d6 * 2} can be used to denote several rolls with the same set of dice.
+
+If the \macro{rpgicons} package is to be loaded together with some other package that defines the command \macro{\roll}, the command \macro{\RPGIconsRoll} can be used. This alternative command is an exact copy of the \macro{\roll} command.
+
+\begin{macrodef}
+roll syntax
+\end{macrodef}
+The option \macro{roll syntax} can be used to change the character that denotes a die in the dice rolling syntax. Multiple characters can be given using a comma separated list. The default setting is \macro{d,D} which allows notations such as \macro{2d6} or \macro{2D6}.
+
+With \macro{\rpgiconsset{roll syntax={w,W}}}, for example, notations such as \macro{2w6} or \macro{2W6} could be used.
+
+% PGF variant
+
+\RenewCommandCopy\die\rpgiconsdie
+\RenewCommandCopy\ability\rpgiconsability
+
+\section{Specifics of the PGF package variant}
+
+The PGF variant of the package is loaded by either calling \macro{\usepackage[pgf]{rpgicons}} or \macro{\usepackage{rpgicons-pgf}} in the preamble of the document after having installed the files \macro{rpgicons.sty} and \macro{rpgicons-pgf.sty}.
+
+Since the commands to typeset the icons with the PGF variant of the package use \macro{tikzpicture} environments, these commands should not be used inside another \macro{tikzpicture}. However, because the package defines the icons as Ti\emph{k}Z shapes, it is possible to use the icons in \macro{tikzpicture} environments directly.
+
+Apart from that, the PGF variant of the package provides a way to define custom commands to typeset the icons as boxed material which is safe to use in a \macro{tikzpicture} context. Furthermore, the icons can be used as Ti\emph{k}Z pics.
+
+Once loaded, the PGF variant of the package defines a set of node shapes that can be used inside a \macro{tikzpicture} environment.
+
+\begin{macrodef}pics\end{macrodef}
+The PGF variant of the package provides the option \macro{pics}. If the package is loaded with this option, every icon is also available as Ti\emph{k}Z pic. On the use of pics, see section \ref{sec:pics} below.
+
+\subsection{Icon commands}
+
+\begin{macrodef}
+|\rpgiconsdie|[<style>]{<shape>}[<options>]{<integer>}
+|\rpgiconsability|[<style>]{<shape>}[<options>]
+|\rpgiconssaving|[<style>]{<shape>}[<options>]
+|\rpgiconsspell|{<shape>}[<options>]
+|\rpgiconsspellschool|[<style>]{<shape>}[<options>]
+|\rpgiconsdamage|{<shape>}[<options>]
+|\rpgiconsattack|{<shape>}[<options>]
+|\rpgiconscondition|{<shape>}[<options>]
+\end{macrodef}
+The PGF variant of the package defines a set of commands on which the user commands \macro{\die}, \macro{\ability}, \macro{\saving}, \macro{\spell}, \macro{\spellschool}, \macro{\damage}, \macro{\attack} and \macro{\condition} are based. This set of commands can be used in cases where another package defines one of these user commands. These user commands are exact copies of this set of commands.
+
+\subsection{Icon styles}
+
+Using the PGF variant of the package, all icons can by styled using arbitrary Ti\emph{k}Z styles in general. As an example, \macro{\die{eightside}[blue, thick]{2}} results in \die{eightside}[blue, thick]{2}.
+
+\begin{macrodef}
+!rpg icons/!every die
+!rpg icons/!every ability
+!rpg icons/!every saving
+!rpg icons/!every spell
+!rpg icons/!every spellschool
+!rpg icons/!every damage
+!rpg icons/!every attack
+!rpg icons/!every condition
+!rpg icons/!every <shape>
+\end{macrodef}
+Using Ti\emph{k}Z styles, all instances of a certain command or a certain shape can be styled at once. These styles all follow the pattern \macro{rpg icons/every} followed by a space and the name of the command or the shape. For example, \macro{\tikzset{rpg icons/every die/.append style={red}}} can be used to draw in red all icons created using the \macro{\die} command. To draw every instace of the \macro{charisma} shape in red, \macro{\tikzset{rpg icons/every charisma/.append style={red}}} can be used.
+
+\subsection{Setting styles lobally}
+
+\begin{macrodef}rpg icons\end{macrodef}
+All icons share the Ti\emph{k}Z style \macro{rpg icons} that has no options per default but can be used to style all icons at once. For example, if \macro{\tikzset{rpg icons/.append style={draw=red}}} is placed at the beginning of the document, all icons will be drawn in red. Per default, the icons are drawn in the color of the surrounding text.
+
+Note that it may be necessary to add the Ti\emph{k}Z option \macro{transform shape} when applying transformations to the icons, because the icons are realised as Ti\emph{k}Z nodes which are not affected by some transformations per default.
+
+\begin{macrodef}!rpg icons/!background color\end{macrodef}
+Some icons can be used with a negative color scheme where the icon is drawn negatively inside a filled shape. Per default, the icons are drawn in white in such cases, but it might be desirable that the icons are in the same color as the background. To this end, the color can be changed using the Ti\emph{k}Z option \macro{rpg icons/background color} in the following way:
+
+\begin{codeexample}
+\colorbox{blue!50}{%
+ \ability[negative]{charisma}
+ [scale=2, transform shape]%
+}
+
+\tikzset{
+ rpg icons/background color={blue!50}
+}
+\colorbox{blue!50}{%
+ \ability[negative]{charisma}
+ [scale=2, transform shape]%
+}
+\end{codeexample}
+This feature can, of course, also be used to change the color of the icon independently from the color of the background.
+
+\begin{macrodef}
+!rpg icons/!before sep
+!rpg icons/!after sep
+!rpg icons/!baseline
+\end{macrodef}
+The Ti\emph{k}Z options \macro{rpg icons/before sep} and \macro{rpg icons/after sep} are used to define the width of the space that is added before and after the icons respectively. The default value of both lengths is 0.05\,em. For example, setting the space before icons to 1\,cm can be achieved as follows:
+
+\begin{codeexample}
+Roll\die{eightside}{}a die!
+
+\tikzset{
+ rpg icons/before sep={1cm}
+}
+Roll\die{eightside}{}a die!
+\end{codeexample}
+
+The option \macro{baseline} can be used to adjust the baseline of the icons. A larger value for the baseline will shift the icon downwards relative to the baseline of the surrounding text. The default value of the baseline is \textminus 3.5\,pt.
+
+\subsection{Direct use of shapes}
+
+Because the icons are defined as Ti\emph{k}Z shapes, they can directly be applied to Ti\emph{k}Z nodes. However, the shapes don't have a shape border and no anchors except for the \macro{center} anchor that sits exactly in the center of the shape. Therefore, if nodes with these shapes are connected using edges, the \macro{center} anchor will be used to connect the nodes. If nodes with these shapes are being positioned, only the \macro{center} anchor is available. Text content of these nodes is simply printed on top of the center of the node. Compare the following example.
+
+\begin{codeexample}
+\begin{tikzpicture}
+ \node[eightside, blue, thick]
+ at (0,0) (A) {A};
+ \node[charisma] at (2,0) (B) {B};
+ \draw[red] (A) -- (B);
+\end{tikzpicture}
+\end{codeexample}
+
+\subsection{Boxing of icons}
+
+Because the icons cannot simply be used inside \macro{tikzpicture} environments, the PGF variant of the package provides a workaround to place icons inside of boxes for later use. Icons that are boxed this way can safely used inside \macro{tikzpicture} environments. This might be necessary, if an icon should be used in inline text that sits inside a node.
+
+\begin{macrodef}|\provideprotectedrpgicon|{<command>}[<style>]{<shape>}[<options>]{<box name>}\end{macrodef}
+The command \macro{\provideprotectedrpgicon} creates a box containing the icon that would be created using one of the regular commands this package provides.
+
+\macro{\provideprotectedrpgicon{die}[large]{eightside}[blue, thick]{mybox}}, for example, stores the icon of an eight-sided die with the relevant style and Ti\emph{k}Z options in a new box named \macro{mybox}. Note that no integer can be added to the \macro{die} command in this context.
+
+\provideprotectedrpgicon{die}[large]{eightside}[blue, thick]{mybox}
+
+\begin{macrodef}|\useprotectedrpgicon|{<box name>}\end{macrodef}
+Using the command \macro{\useprotectedrpgicon}, the previously defined box can be used to place the relevant icon. With the above definition, \macro{\useprotectedrpgicon{mybox}} would result in \useprotectedrpgicon{mybox}.
+
+Having created a boxed icon, it is safe to use it, for example, inside a Ti\emph{k}Z node:
+
+\begin{codeexample}
+\begin{tikzpicture}
+ \node[circle, draw, align=center] {
+ \useprotectedrpgicon{mybox} \\
+ Roll a die!
+ };
+\end{tikzpicture}
+\end{codeexample}
+
+
+\subsection{Icons as pics}\label{sec:pics}
+
+If the PGF variant of the package is loaded with the option \macro{pics}, every icon is also available as Ti\emph{k}Z pic. The names of the pic always start with \macro{rpg icons} followed by a space and the name of the relevant icon (see the lists above). For abilities, savings, spellschools and damages, additional pics exists where the name has the suffixes \macro{ability}, \macro{saving}, \macro{spellschool}, and \macro{damage} respectively.
+
+The icon is embedded as a node in the pic which has the name \macro{-node}. Thus, it is possible to name the pic and refer to the node inside. Due to the fact that the icon is a node, the option `transform shape` has to be used if transformations on the pic are to affect the node as well. It is easily possible to apply styles to the node using the Ti\emph{k}Z option \macro{every node} as shown in the following example.
+
+\begin{codeexample}
+\begin{tikzpicture}
+ \pic[
+ transform shape,
+ scale=2,
+ fill=blue,
+ draw=red,
+ every node/.append style={
+ white,
+ thick
+ }
+ ] (p) {rpg icons charisma ability};
+ \draw[red] (p-node) -- +(2,0);
+\end{tikzpicture}
+\end{codeexample}
+
+\begin{macrodef}
+!rpg icons/!create pic from shape
+!rpg icons/!create pic from ability shape
+!rpg icons/!create pic from saving shape
+!rpg icons/!create pic from spellschool shape
+!rpg icons/!create pic from damage shape
+!rpg icons/!create every style
+\end{macrodef}
+The PGF variant of the package defines five Ti\emph{k}Z keys that are used to create pics using the relevant node shapes. Another key is defined to create keys that can be used to style all instances of a command or shape. In normal circumstances, it is not necessary to use these keys. They are mentioned here only for reference.
+
+\subsection{Roll dice syntax}
+
+\begin{macrodef}
+|\roll|{<roll syntax>}
+|\rpgiconsroll|{<roll syntax>}
+\end{macrodef}
+The \macro{\roll} macro can be used to quickly typeset dice rolls with the relevant icons using the established dice rolling syntax. This syntax consists of a sequence of dice and numbers concatenated by mathematical operators (plus, minus or times). Typically, the letter \macro{d} is used to denote a die with a certain number of sides. For example \macro{d6} denotes a six-sided die. A number can be added to specify the number of such dice that are rolled together. The letter to denote the die can be changed using the Ti\emph{k}Z style \macro{rpg icons/roll syntax}.
+
+For example, \macro{2d6 + 3d4 - 1} means ``roll two six-sided dice and three four-sided dice and subtract one from the result''. The command \macro{\roll{2d6 + 3d4 - 1}} results in \roll{2d6 + 3d4 - 1}.
+
+The die notations \macro{d2}, \macro{d4}, \macro{d6}, \macro{d8}, \macro{d10}, \macro{d12}, \macro{d20} and \macro{d100} are defined. To denote a fudge die, \macro{dF} can be used. To denote that the lowest or highest die should be removed from the result, the letters \macro{L} and \macro{H} can be used. The syntax \macro{2d6 x 2} or \macro{2d6 * 2} can be used to denote several rolls with the same set of dice.
+
+If the \macro{rpgicons} package is to be loaded together with some other package that defines the command \macro{\roll}, the command \macro{\rpgiconsroll} can be used. This alternative command is an exact copy of the \macro{\roll} command.
+
+\begin{macrodef}
+!rpg icons/!roll syntax
+\end{macrodef}
+The Ti\emph{k}Z style \macro{rpg icons/roll syntax} can be used to change the character that denotes a die in the dice rolling syntax. Multiple characters can be given using a comma separated list. The default setting is \macro{d,D} which allows notations such as \macro{2d6} or \macro{2D6}.
+
+With \macro{\tikzset{rpg icons/roll syntax={w,W}}}, for example, notations such as \macro{2w6} or \macro{2W6} could be used.
+
+% =====
+
+\printchanges
+
+\end{document}
+
+%% End of file `rpgicons-doc.tex`.
diff --git a/macros/latex/contrib/rpgicons/rpgicons-l3.sty b/macros/latex/contrib/rpgicons/rpgicons-l3.sty
new file mode 100644
index 0000000000..491d05b17d
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-l3.sty
@@ -0,0 +1,2025 @@
+% File: rpgicons-l3.sty
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.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/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\ProvidesExplPackage {rpgicons-l3} {2024-04-28} {1.8.2}
+ {rpg Icons Package (l3 Variant)}
+
+\bool_new:N \l__rpgicons_unicode_mode_bool
+\sys_if_engine_luatex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+}
+\sys_if_engine_xetex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+}
+
+\bool_new:N \l__rpgicons_compat_mode_bool
+\bool_new:N \l__rpgicons_use_opacity_bool
+\keys_define:nn { rpgicons / package ~ options } {
+ compat .bool_set:N = \l__rpgicons_compat_mode_bool ,
+ compat .default:n = { true } ,
+ opacity .bool_set:N = \l__rpgicons_use_opacity_bool ,
+ opacity .default:n = { true } ,
+}
+\ProcessKeyOptions [ rpgicons / package ~ options ]
+
+\msg_new:nnn { rpgicons } { documentmetadata-missing } {
+ \msg_warning_text:n { dnicons } \iow_newline:
+ In ~ order ~ to ~ use ~ opacity, ~ \token_to_str:N \DocumentMetadata \c_space_tl must ~ be ~ set.
+}
+\msg_new:nnn { rpgicons } { opacity-option-missing } {
+ \msg_warning_text:n { dnicons } \iow_newline:
+ In ~ order ~ to ~ use ~ opacity, ~ the ~ package ~ must ~ be ~ loaded ~ with ~ the ~ `opacity' ~ option.
+}
+\msg_new:nnn { rpgicons } { l3draw-old } {
+ \msg_warning_text:n { dnicons } \iow_newline:
+ The ~ version ~ of ~ the ~ `l3draw' ~ package ~ is ~ older ~ than ~ 2024-03-14. ~
+ Consider ~ using ~ the ~ `compat' ~ option.
+}
+
+\bool_if:NT \l__rpgicons_use_opacity_bool {
+ \IfDocumentMetadataTF { } {
+ \msg_error:nn { rpgicons } { documentmetadata-missing }
+ }
+ \RequirePackage { l3opacity }
+ \bool_if:NT \l__rpgicons_compat_mode_bool {
+ % l3opacity fix
+ \tl_set:Nn \l__opacity_backend_fill_tl { 1 }
+ \tl_set:Nn \l__opacity_backend_stroke_tl { 1 }
+ }
+}
+
+\RequirePackage { l3draw }
+
+\IfPackageAtLeastTF { l3draw } { 2024/03/14 } { } {
+ \bool_if:NF \l__rpgicons_compat_mode_bool {
+ \msg_warning:nn { rpgicons } { l3draw-old }
+ }
+}
+
+% DICE
+
+\cs_new:Npn \rpgicons_draw_shape_twoside: {
+ \draw_path_ellipse:nnn { 0cm , 0cm } { 0cm , .25cm } { .425cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fourside: {
+ \draw_path_moveto:n { 0cm , .35cm }
+ \draw_path_lineto:n { .433cm , -.4cm }
+ \draw_path_lineto:n { -.433cm , -.4cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_sixside: {
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ \draw_path_moveto:n { -.4cm , -.4cm }
+ \draw_path_lineto:n { -.4cm , .4cm }
+ \draw_path_lineto:n { .4cm , .4cm }
+ \draw_path_lineto:n { .4cm , -.4cm }
+ \draw_path_close:
+ } {
+ \draw_path_rectangle_corners:nn { -.4cm , -.4cm } { .4cm , .4cm }
+ }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_eightside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { .433cm , .25cm }
+ \draw_path_lineto:n { .433cm , -.25cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.433cm , -.25cm }
+ \draw_path_lineto:n { -.433cm , .25cm }
+ \draw_path_close:
+ \draw_path_lineto:n { .433cm , -.25cm }
+ \draw_path_lineto:n { -.433cm , -.25cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_tenside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { .475cm , .1cm }
+ \draw_path_lineto:n { .475cm , -.1cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.475cm , -.1cm }
+ \draw_path_lineto:n { -.475cm , .1cm }
+ \draw_path_close:
+ \draw_path_lineto:n { .294cm , -.154cm }
+ \draw_path_lineto:n { 0cm , -.3cm }
+ \draw_path_lineto:n { -.294cm , -.154cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .294cm , -.154cm }
+ \draw_path_lineto:n { .475cm , -.1cm }
+ \draw_path_moveto:n { -.475cm , -.1cm }
+ \draw_path_lineto:n { -.294cm , -.154cm }
+ \draw_path_moveto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { 0cm , -.3cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_twelveside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { 0.294cm , .405cm }
+ \draw_path_lineto:n { .475cm , .173cm }
+ \draw_path_lineto:n { .475cm , -.173cm }
+ \draw_path_lineto:n { .294cm , -.405cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.294cm , -.405cm }
+ \draw_path_lineto:n { -.475cm , -.173cm }
+ \draw_path_lineto:n { -.475cm , .173cm }
+ \draw_path_lineto:n { -.294cm , .405cm }
+ \draw_path_close:
+ \draw_path_moveto:n { 0cm , .349cm }
+ \draw_path_lineto:n { .332cm , .108cm }
+ \draw_path_lineto:n { .205cm , -.282cm }
+ \draw_path_lineto:n { -.205cm , -.282cm }
+ \draw_path_lineto:n { -.332cm , .108cm }
+ \draw_path_close:
+ \draw_path_lineto:n { 0cm , .5cm }
+ \draw_path_moveto:n { .475cm , .173cm }
+ \draw_path_lineto:n { .332cm , .108cm }
+ \draw_path_moveto:n { .294cm , -.405cm }
+ \draw_path_lineto:n { .205cm , -.282cm }
+ \draw_path_moveto:n { -.294cm , -.405cm }
+ \draw_path_lineto:n { -.205cm , -.282cm }
+ \draw_path_moveto:n { -.475cm , .173cm }
+ \draw_path_lineto:n { -.332cm , .108cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_twentyside: {
+ \draw_path_moveto:n { 0cm , .5cm }
+ \draw_path_lineto:n { .454cm , .262cm }
+ \draw_path_lineto:n { .454cm , -.262cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.454cm , -.262cm }
+ \draw_path_lineto:n { -.454cm , .262cm }
+ \draw_path_close:
+ \draw_path_moveto:n { 0cm , .292cm }
+ \draw_path_lineto:n { .253cm , -.146cm }
+ \draw_path_lineto:n { -.253cm , -.146cm }
+ \draw_path_close:
+ \draw_path_lineto:n { .454cm , .262cm }
+ \draw_path_lineto:n { .253cm , -.146cm }
+ \draw_path_lineto:n { 0cm , -.5cm }
+ \draw_path_lineto:n { -.253cm , -.146cm }
+ \draw_path_lineto:n { -.454cm , .262cm }
+ \draw_path_close:
+ \draw_path_lineto:n { 0cm , .5cm }
+ \draw_path_moveto:n { .454cm , -.262cm }
+ \draw_path_lineto:n { .253cm , -.146cm }
+ \draw_path_moveto:n { -.454cm , -.262cm }
+ \draw_path_lineto:n { -.253cm , -.146cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_hundredside: {
+ \draw_path_circle:nn { 0cm, 0cm } { .425cm }
+ \draw_path_moveto:n { .425cm , 0cm }
+ \draw_path_arc:nnnn { 180 } { 50 } { -.425cm } { -.2cm }
+ \draw_path_moveto:n { 0cm , -.425cm }
+ \draw_path_arc:nnnn { 270 } { 140 } { -.2cm } { .425cm }
+}
+
+\clist_new:N \l_rpgnicons_pips_clist
+\fp_new:N \l_rpgnicons_pips_coordx_fp
+\fp_new:N \l_rpgnicons_pips_coordy_fp
+\cs_new:Npn \rpgicons_draw_shape_sixside_pips:n #1 {
+ \str_case:nn {#1} {
+ { one } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { 0cm , 0cm }
+ } }
+ { two } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , -.2cm }
+ } }
+ { three } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { 0cm , 0cm } , { .2cm , -.2cm }
+ } }
+ { four } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { five } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { 0cm , 0cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { six } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { seven } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { 0cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { eight } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { 0cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { 0cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ { nine } { \clist_set:Nn \l_rpgnicons_pips_clist {
+ { -.2cm , .2cm } , { 0cm , .2cm } , { .2cm , .2cm } ,
+ { -.2cm , 0cm } , { 0cm , 0cm } , { .2cm , 0cm } ,
+ { -.2cm , -.2cm } , { 0cm , -.2cm } , { .2cm , -.2cm }
+ } }
+ }
+ \clist_map_inline:Nn \l_rpgnicons_pips_clist {
+ \fp_set:Nn \l_rpgnicons_pips_coordx_fp { \clist_item:nn {##1} { 1 } }
+ \fp_set:Nn \l_rpgnicons_pips_coordy_fp { \clist_item:nn {##1} { 2 } }
+ \draw_path_circle:nn { \l_rpgnicons_pips_coordx_fp , \l_rpgnicons_pips_coordy_fp } { 2pt }
+ }
+ \draw_path_use_clear:n { fill }
+ \rpgicons_draw_shape_sixside:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fudge: {
+ \rpgicons_draw_shape_sixside:
+ \draw_path_moveto:n { -.15cm , .1cm }
+ \draw_path_lineto:n { .15cm , .1cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { 0cm , -.05cm }
+ \draw_path_moveto:n { -.15cm , -.2cm }
+ \draw_path_lineto:n { .15cm , -.2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fudge_plus: {
+ \rpgicons_draw_shape_sixside:
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_lineto:n { 0cm , -.15cm }
+ \draw_path_moveto:n { -.15cm , 0cm }
+ \draw_path_lineto:n { .15cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fudge_minus: {
+ \rpgicons_draw_shape_sixside:
+ \draw_path_moveto:n { -.15cm , 0cm }
+ \draw_path_lineto:n { .15cm , 0cm }
+}
+
+% ABILITIES
+
+\cs_new:Npn \rpgicons_draw_shape_strength: {
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 60 } { .425cm }
+ \draw_path_arc:nnn { 200 } { -40 } { .1cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 45 } ) }
+ \draw_path_arc:nnn { 45 } { -20 } { .425cm }
+ \draw_path_arc:nnn { -50 } { -80 } { .35cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 120 } { .425cm }
+ \draw_path_arc:nnn { -20 } { 220 } { .1cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 135 } ) }
+ \draw_path_arc:nnn { 135 } { 200 } { .425cm }
+ \draw_path_arc:nnn { 230 } { 260 } { .35cm }
+ \draw_path_moveto:n { -.2cm , -.025cm }
+ \draw_path_lineto:n { -.1cm , -.05cm }
+ \draw_path_lineto:n { -.125cm , -.325cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .125cm } { .1cm }
+ \draw_path_lineto:n { .1cm , -.05cm }
+ \draw_path_lineto:n { .2cm , -.025cm }
+ \draw_path_moveto:n { 0cm , -.3cm }
+ \draw_path_arc:nnn { 90 } { 70 } { .1cm }
+ \draw_path_moveto:n { 0cm , -.3cm }
+ \draw_path_arc:nnn { 90 } { 110 } { .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_constitution: {
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { .125cm , .25cm }
+ \draw_path_arc:nnn { -90 } { -30 } { .325cm }
+ \draw_path_arc:nnn { 0 } { -80 } { .3cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { -.125cm , .25cm }
+ \draw_path_arc:nnn { 270 } { 210 } { .325cm }
+ \draw_path_arc:nnn { 180 } { 260 } { .3cm }
+ \draw_path_moveto:n { .325cm , .1cm }
+ \draw_path_lineto:n { .425cm , .075cm }
+ \draw_path_arc:nnnn { 0 } { -90 } { .175cm } { .1cm }
+ \draw_path_lineto:n { .2cm , -.15cm }
+ \draw_path_moveto:n { -.325cm , .1cm }
+ \draw_path_lineto:n { -.425cm , .075cm }
+ \draw_path_arc:nnnn { 180 } { 270 } { .175cm } { .1cm }
+ \draw_path_lineto:n { -.2cm , -.15cm }
+ \draw_path_moveto:n { -.15cm , -.225cm }
+ \draw_path_arc:nnn { 90 } { 270 } { .1cm }
+ \draw_path_lineto:n { .15cm , -.425cm }
+ \draw_path_arc:nnn { -90 } { 90 } { .1cm }
+ \draw_path_moveto:n { -.125cm , -.35cm }
+ \draw_path_arc:nnn { -90 } { 0 } { .05cm }
+ \draw_path_moveto:n { .125cm , -.35cm }
+ \draw_path_arc:nnn { 90 } { 0 } { -.05cm }
+ \draw_path_moveto:n { -.125cm , -.025cm }
+ \draw_path_lineto:n { -.075cm , -.05cm }
+ \draw_path_lineto:n { -.075cm , -.1cm }
+ \draw_path_moveto:n { .125cm , -.025cm }
+ \draw_path_lineto:n { .075cm , -.05cm }
+ \draw_path_lineto:n { .075cm , -.1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_wisdom: {
+ \draw_path_moveto:n { 0cm , .175cm }
+ \draw_path_arc:nnn { 60 } { 90 } { .425cm }
+ \draw_path_arc:nnn { 270 } { 240 } { .425cm }
+ \draw_path_moveto:n { 0cm , .175cm }
+ \draw_path_arc:nnn { 120 } { 90 } { .425cm }
+ \draw_path_arc:nnn { 270 } { 300 } { .425cm }
+ \draw_path_circle:nn { -.175cm , 0cm } { .075cm }
+ \draw_path_circle:nn { .175cm , 0cm } { .075cm }
+ \draw_path_moveto:n { .075cm , -.125cm }
+ \draw_path_lineto:n { 0cm , -.325cm }
+ \draw_path_lineto:n { -.075cm , -.125cm }
+ \draw_path_moveto:n { -.375cm , .125cm }
+ \draw_path_arc:nnn { 150 } { 270 } { .25cm }
+ \draw_path_moveto:n { .375cm , .125cm }
+ \draw_path_arc:nnn { 30 } { -90 } { .25cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_charisma: {
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_arc:nnnn { 270 } { 190 } { .15cm } { .1cm }
+ \draw_path_arc:nnnn { 10 } { 90 } { .175cm } { .225cm }
+ \draw_path_arc:nnnn { 40 } { 0 } { .125cm } { .175cm }
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_arc:nnnn { 270 } { 350 } { .15cm } { .1cm }
+ \draw_path_arc:nnnn { 170 } { 90 } { .175cm } { .225cm }
+ \draw_path_arc:nnnn { 140 } { 180 } { .125cm } { .175cm }
+ \draw_path_moveto:n { -.2cm , .125cm }
+ \draw_path_arc:nnnn { 0 } { 90 } { .175cm } { .1cm }
+ \draw_path_arc:nnnn { 180 } { 270 } { .15cm } { .2cm }
+ \draw_path_lineto:n { -.25cm , -.05cm }
+ \draw_path_arc:nnn { 40 } { 0 } { .45cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { .2cm , .125cm }
+ \draw_path_arc:nnnn { 180 } { 90 } { .175cm } { .1cm }
+ \draw_path_arc:nnnn { 0 } { -90 } { .15cm } { .2cm }
+ \draw_path_lineto:n { .25cm , -.05cm }
+ \draw_path_arc:nnn { 140 } { 180 } { .45cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { -.05cm , -.275cm }
+ \draw_path_arc:nnn { -30 } { 60 } { .05cm }
+ \draw_path_moveto:n { .05cm , -.275cm }
+ \draw_path_arc:nnn { 210 } { 120 } { .05cm }
+ \draw_path_moveto:n { -.125cm , -.05cm }
+ \draw_path_lineto:n { -.05cm , -.075cm }
+ \draw_path_moveto:n { .125cm , -.05cm }
+ \draw_path_lineto:n { .05cm , -.075cm }
+ \draw_path_moveto:n { -.35cm , -.05cm }
+ \draw_path_lineto:n { -.425cm , -.05cm }
+ \draw_path_arc:nnn { 30 } { -30 } { .15cm }
+ \draw_path_arc:nnn { 80 } { 10 } { .15cm }
+ \draw_path_lineto:n { -.25cm , -.275cm }
+ \draw_path_moveto:n { .35cm , -.05cm }
+ \draw_path_lineto:n { .425cm , -.05cm }
+ \draw_path_arc:nnn { 150 } { 210 } { .15cm }
+ \draw_path_arc:nnn { 100 } { 170 } { .15cm }
+ \draw_path_lineto:n { .25cm , -.275cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_dexterity: {
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 65 } { .425cm }
+ \draw_path_arc:nnnn { 200 } { 90 } { .1cm } { .075cm }
+ \draw_path_arc:nnnn { 90 } { -30 } { .1cm } { .075cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 45 } ) }
+ \draw_path_arc:nnnn { 45 } { -20 } { .425cm } { .35cm }
+ \draw_path_arc:nnn { 110 } { 160 } { .175cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 115 } { .425cm }
+ \draw_path_arc:nnnn { -20 } { 90 } { .1cm } { .075cm }
+ \draw_path_arc:nnnn { 90 } { 220 } { .1cm } { .075cm }
+ \draw_path_moveto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .425cm } { 135 } ) }
+ \draw_path_arc:nnnn { 135 } { 200 } { .425cm } { .35cm }
+ \draw_path_arc:nnn { 70 } { 20 } { .175cm }
+ \draw_path_moveto:n { -.075cm , -.175cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .075cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.225cm }
+ \draw_path_lineto:n { 0cm , -.25cm }
+ \draw_path_moveto:n { -.2cm , .025cm }
+ \draw_path_lineto:n { -.075cm , 0cm }
+ \draw_path_lineto:n { -.125cm , -.075cm }
+ \draw_path_moveto:n { .125cm , -.075cm }
+ \draw_path_lineto:n { .075cm , 0cm }
+ \draw_path_lineto:n { .2cm , .025cm }
+ \draw_path_moveto:n { 0cm , -.25cm }
+ \draw_path_arc:nnnn { 360 } { 140 } { .1cm } { .075cm }
+ \draw_path_moveto:n { 0cm , -.25cm }
+ \draw_path_arc:nnnn { 180 } { 400 } { .1cm } { .075cm }
+ \draw_path_moveto:n { -.1cm , -.325cm }
+ \draw_path_lineto:n { -.1cm , -.375cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .1cm } { .05cm }
+ \draw_path_lineto:n { .1cm , -.325cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_dexterity_alt: {
+ \draw_path_moveto:n { ( 0cm , -.15cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 75 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.15cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 105 } { .425cm }
+ \draw_path_moveto:n { .125cm , .175cm }
+ \draw_path_lineto:n { .375cm , .425cm }
+ \draw_path_arc:nnn { 30 } { -20 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .425cm } { 30 } ) }
+ \draw_path_arc:nnnn { 30 } { -45 } { .425cm } { .35cm }
+ \draw_path_moveto:n { -.125cm , .175cm }
+ \draw_path_lineto:n { -.375cm , .425cm }
+ \draw_path_arc:nnn { 150 } { 200 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .425cm } { 150 } ) }
+ \draw_path_arc:nnnn { 150 } { 225 } { .425cm } { .35cm }
+ \draw_path_moveto:n { .075cm , -.075cm }
+ \draw_path_arc:nnnn { 170 } { 90 } { .15cm } { .05cm }
+ \draw_path_moveto:n { -.075cm , -.075cm }
+ \draw_path_arc:nnnn { 10 } { 90 } { .15cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 0 } { 90 } { .075cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 180 } { 90 } { .075cm } { .05cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 360 } { 180 } { .1cm } { .075cm }
+ \draw_path_moveto:n { 0cm , -.275cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .1cm } { .075cm }
+ \draw_path_moveto:n { -.1cm , -.35cm }
+ \draw_path_lineto:n { -.1cm , -.375cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .1cm } { .05cm }
+ \draw_path_lineto:n { .1cm , -.35cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_intelligence: {
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 60 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .6cm } { 60 } ) }
+ \draw_path_arc:nnn { 40 } { -2.5 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 90 } ) }
+ \draw_path_arc:nnn { 90 } { 120 } { .25cm }
+ \draw_path_lineto:n { ( 0cm , -.1cm ) + ( \draw_point_polar:nn { .6cm } { 120 } ) }
+ \draw_path_arc:nnn { 140 } { 182.5 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 45 } ) }
+ \draw_path_arc:nnn { 45 } { 0 } { .425cm }
+ \draw_path_lineto:n { .2cm , -.275cm }
+ \draw_path_moveto:n { ( 0cm , -.2cm ) + ( \draw_point_polar:nn { .425cm } { 135 } ) }
+ \draw_path_arc:nnn { 135 } { 180 } { .425cm }
+ \draw_path_lineto:n { -.2cm , -.275cm }
+ \draw_path_moveto:n { -.2cm , -.075cm }
+ \draw_path_lineto:n { -.1cm , -.1cm }
+ \draw_path_lineto:n { -.075cm , -.375cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .075cm } { .05cm }
+ \draw_path_lineto:n { .1cm , -.1cm }
+ \draw_path_lineto:n { .2cm , -.075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_resilience: {
+ \draw_path_moveto:n { ( -.425cm , -.475cm ) + ( \draw_point_polar:nn { .5cm } { 65 } ) }
+ \draw_path_arc:nnn { 65 } { 90 } { .5cm }
+ \draw_path_lineto:n { ( 0cm , -.075cm ) + ( \draw_point_polar:nn { .55cm } { 135 } ) }
+ \draw_path_arc:nnn { 135 } { 45 } { .55cm }
+ \draw_path_lineto:n { .425cm , .025cm }
+ \draw_path_arc:nnn { 90 } { 115 } { .5cm }
+ \draw_path_moveto:n { .2cm , .3cm }
+ \draw_path_lineto:n { .125cm , .275cm }
+ \draw_path_lineto:n { .2cm , .15cm }
+ \draw_path_moveto:n { .125cm , .075cm }
+ \draw_path_lineto:n { .05cm , .05cm }
+ \draw_path_moveto:n { .15cm , -.1cm }
+ \draw_path_arc:nnn { 200 } { 230 } { .4cm }
+ \draw_path_moveto:n { -.2cm , .3cm }
+ \draw_path_lineto:n { -.125cm , .275cm }
+ \draw_path_lineto:n { -.2cm , .15cm }
+ \draw_path_moveto:n { -.125cm , .075cm }
+ \draw_path_lineto:n { -.05cm , .05cm }
+ \draw_path_moveto:n { -.15cm , -.1cm }
+ \draw_path_arc:nnn { 340 } { 310 } { .4cm }
+ \draw_path_moveto:n { -.065cm , -.075cm }
+ \draw_path_lineto:n { -.045cm , -.425cm }
+ \draw_path_lineto:n { .045cm , -.425cm }
+ \draw_path_lineto:n { .065cm , -.075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_sanity: {
+ \draw_path_moveto:n { ( -.125cm + .175cm * sind(30) , .425cm - .175cm * cosd(30) ) +
+ ( \draw_point_polar:nn { .175cm } { 210 } ) }
+ \draw_path_arc:nnn { 210 } { 120 } { .175cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm } { 110 } }
+ \draw_path_arc:nnn { 110 } { 70 } { .25cm }
+ \draw_path_lineto:n { .125cm , .425cm }
+ \draw_path_arc:nnn { 420 } { 330 } { .175cm }
+ \draw_path_moveto:n { .25cm , .1cm }
+ \draw_path_arc:nnn { 390 } { 305 } { .15cm }
+ \draw_path_moveto:n { -.25cm , .1cm }
+ \draw_path_arc:nnn { 150 } { 235 } { .15cm }
+ \draw_path_moveto:n { -.15cm , .075cm }
+ \draw_path_lineto:n { -.1cm , .05cm }
+ \draw_path_lineto:n { -.1cm , .025cm }
+ \draw_path_moveto:n { .15cm , .075cm }
+ \draw_path_lineto:n { .1cm , .05cm }
+ \draw_path_lineto:n { .1cm , .025cm }
+ \draw_path_moveto:n { ( -.55cm , -.35cm ) + ( \draw_point_polar:nnn { .125cm } { .075cm} { 135 } ) +
+ ( \draw_point_polar:nn { .55cm } { 20 } ) }
+ \draw_path_arc:nnn { 380 } { 360 } { .55cm }
+ \draw_path_arc:nnnn { 135 } { 405 } { .125cm } { .075cm }
+ \draw_path_arc:nnn { 180 } { 160 } { .55cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_perception: {
+ \draw_path_moveto:n { ( 0cm , .35cm ) + ( \draw_point_polar:nn { .125cm } { 150 } ) }
+ \draw_path_arc:nnn { 150 } { 390 } { .125cm }
+ \draw_path_moveto:n { -.3cm , .425cm }
+ \draw_path_arc:nnnn { 180 } { 360 } { .3cm } { .2cm }
+ \draw_path_moveto:n { ( 0cm , .425cm ) + ( \draw_point_polar:nnn { .3cm } { .2cm } { 330 } ) }
+ \draw_path_arc:nnnn { 270 } { 350 } { .15cm } { .1cm }
+ \draw_path_moveto:n { ( 0cm , .425cm ) + ( \draw_point_polar:nnn { .3cm } { .2cm } { 210 } ) }
+ \draw_path_arc:nnnn { 270 } { 190 } { .15cm } { .1cm }
+ \draw_path_moveto:n { -.2cm , .15cm }
+ \draw_path_lineto:n { -.375cm , .125cm }
+ \draw_path_arc:nnn { 210 } { 250 } { .225cm }
+ \draw_path_moveto:n { .2cm , .15cm }
+ \draw_path_lineto:n { .375cm , .125cm }
+ \draw_path_arc:nnn { 330 } { 290 } { .225cm }
+ \draw_path_moveto:n { -.15cm , 0cm }
+ \draw_path_lineto:n { -.075cm , -.025cm }
+ \draw_path_lineto:n { -.075cm , -.05cm }
+ \draw_path_moveto:n { .15cm , 0cm }
+ \draw_path_lineto:n { .075cm , -.025cm }
+ \draw_path_lineto:n { .075cm , -.05cm }
+ \draw_path_moveto:n { ( -.075cm , ( -.35cm + .075cm * ( 2 + sqrt(3) ) ) ) +
+ ( \draw_point_polar:nnn { .1cm } { .075cm } { 195 } ) }
+ \draw_path_lineto:n { ( 0cm , -.35cm ) + ( \draw_point_polar:nnn { .1cm } { .075cm } { 195 } ) }
+ \draw_path_arc:nnnn { 195 } { 345 } { .1cm } { .075cm }
+ \draw_path_lineto:n { ( .075cm , ( -.35cm + .075cm * ( 2 + sqrt(3) ) ) ) +
+ ( \draw_point_polar:nnn { .1cm } { .075cm } { 345 } ) }
+ \draw_path_moveto:n { .025cm , -.325cm }
+ \draw_path_arc:nnn { 0 } { 180 } { .025cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_luck: {
+ \draw_path_moveto:n { .1cm , .15cm }
+ \draw_path_lineto:n { .1cm , -.05cm }
+ \draw_path_arc:nnn { -75 } { -15 } { .425cm }
+ \draw_path_arc:nnn { 40 } { 85 } { .425cm }
+ \draw_path_moveto:n { -.1cm , .15cm }
+ \draw_path_lineto:n { -.1cm , -.05cm }
+ \draw_path_arc:nnn { -105 } { -165 } { .425cm }
+ \draw_path_arc:nnn { 140 } { 95 } { .425cm }
+ \draw_path_moveto:n { ( 0cm , -.05cm ) + ( \draw_point_polar:nn { .425cm } { 15 } ) }
+ \draw_path_arc:nnnn { 15 } { -55 } { .425cm } { .3cm }
+ \draw_path_moveto:n { ( 0cm , -.05cm ) + ( \draw_point_polar:nn { .425cm } { 165 } ) }
+ \draw_path_arc:nnnn { 165 } { 235 } { .425cm } { .3cm }
+ \draw_path_moveto:n { 0cm , -.175cm }
+ \draw_path_arc:nnnn { 90 } { 250 } { .175cm } { .125cm }
+ \draw_path_lineto:n { -.05cm , -.325cm }
+ \draw_path_moveto:n { 0cm , -.175cm }
+ \draw_path_arc:nnnn { 90 } { -70 } { .175cm } { .125cm }
+ \draw_path_lineto:n { .05cm , -.325cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_armor: {
+ \draw_path_moveto:n { -.25cm , -.425cm }
+ \draw_path_lineto:n { .25cm , -.425cm }
+ \draw_path_lineto:n { .2cm , -.225cm }
+ \draw_path_lineto:n { .25cm , .125cm }
+ \draw_path_lineto:n { .425cm , .125cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .3cm }
+ \draw_path_lineto:n { .125cm , .35cm }
+ \draw_path_arc:nnn { 360 } { 180 } { .125cm }
+ \draw_path_lineto:n { -.125cm , .425cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .3cm }
+ \draw_path_lineto:n { -.25cm , .125cm }
+ \draw_path_lineto:n { -.2cm , -.225cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .125cm , .425cm }
+ \draw_path_lineto:n { .125cm , .25cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_moveto:n { -.125cm , .425cm }
+ \draw_path_lineto:n { -.125cm , .25cm }
+ \draw_path_arc:nnn { 360 } { 270 } { .125cm }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_moveto:n { -.2cm , -.225cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_lineto:n { .2cm , -.225cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_proficiency: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 126 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 162 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 198 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 234 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 306 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 342 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 18 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 54 } }
+ \draw_path_close:
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 270 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 342 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 342 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 54 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 54 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm } { 126 }}
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 126 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 198 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 198 } }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_linear: {
+ \draw_path_circle:nn { -.4cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_moveto:n { -.4cm , 0cm }
+ \draw_path_lineto:n { .4cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_conic: {
+ \draw_path_circle:nn { -.425cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_ellipse:nnn { .2125cm , 0cm } { .2cm , 0cm } { 0cm , .425cm }
+ \draw_path_moveto:n { .2125cm - .2cm * sin( asin( .2cm / .6375cm ) ) ,
+ -.425cm * cos( asin( .2cm / ( .6375cm ) ) ) }
+ \draw_path_lineto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { .2125cm - .2cm * sin( asin( .2cm / .6375cm ) ) ,
+ .425cm * cos( asin( .2cm / ( .6375cm ) ) ) }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_quadratic: {
+ \draw_path_circle:nn { 0cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ \draw_path_moveto:n { -.4cm , -.4cm }
+ \draw_path_lineto:n { -.4cm , .4cm }
+ \draw_path_lineto:n { .4cm , .4cm }
+ \draw_path_lineto:n { .4cm , -.4cm }
+ \draw_path_close:
+ } {
+ \draw_path_rectangle_corners:nn { -.4cm , -.4cm } { .4cm , .4cm }
+ }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_cubic: {
+ \draw_path_circle:nn { .1125cm , -.1125cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_moveto:n { -.425cm , .425cm }
+ \draw_path_lineto:n { -.425cm , -.2cm }
+ \draw_path_lineto:n { -.2cm , -.425cm }
+ \draw_path_lineto:n { .425cm , -.425cm }
+ \draw_path_lineto:n { .425cm , .2cm }
+ \draw_path_lineto:n { .2cm , .425cm }
+ \draw_path_close:
+ \draw_path_lineto:n { -.2cm , .2cm }
+ \draw_path_lineto:n { -.2cm , -.425cm }
+ \draw_path_moveto:n { -.2cm , .2cm }
+ \draw_path_lineto:n { .425cm , .2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_spheric: {
+ \draw_path_circle:nn { 0cm , 0cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { .425cm , 0cm }
+ \draw_path_arc:nnnn { 180 } { 50 } { -.425cm } { -.2cm }
+ \draw_path_moveto:n { 0cm , -.425cm }
+ \draw_path_arc:nnnn { 270 } { 140 } { -.2cm } { .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_cylindric: {
+ \draw_path_circle:nn { 0cm , -.2125cm } { 2pt }
+ \draw_path_use_clear:n { fill }
+ \draw_path_ellipse:nnn { 0cm , .2125cm } { 0cm , .2cm } { .425cm , 0cm }
+ \draw_path_moveto:n { -.425cm , .2125cm }
+ \draw_path_lineto:n { -.425cm , -.2125cm }
+ \draw_path_arc:nnnn { 0 } { 180 } { -.425cm } { -.2cm }
+ \draw_path_lineto:n { .425cm , .2125cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_verbal: {
+ \draw_path_moveto:n { -.35cm , 0cm }
+ \draw_path_arc:nnn { 180 } { -115 } { .35cm }
+ \draw_path_lineto:n { -.4cm , -.4cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm } { 215 } }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_somatic: {
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_arc:nnnn { 0 } { 270 } { -.425cm } { -.2cm }
+ \draw_path_moveto:n { 0cm , -.425cm }
+ \draw_path_arc:nnnn { 90 } { 360 } { -.2cm } { -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_material: {
+ \draw_path_moveto:n { -.4cm , .2cm }
+ \draw_path_lineto:n { -.4cm , -.2cm }
+ \draw_path_lineto:n { 0cm , -.4cm }
+ \draw_path_lineto:n { .4cm , -.2cm }
+ \draw_path_lineto:n { .4cm , .2cm }
+ \draw_path_lineto:n { 0cm , .4cm }
+ \draw_path_close:
+ \draw_path_lineto:n { 0cm , 0cm }
+ \draw_path_lineto:n { .4cm , .2cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { 0cm , -.4cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_focus: {
+ \draw_path_circle:nn { 0cm , 0cm } { .35cm }
+ \draw_path_moveto:n { -.15cm , 0 }
+ \draw_path_lineto:n { -.425cm , 0 }
+ \draw_path_moveto:n { .15cm , 0 }
+ \draw_path_lineto:n { .425cm , 0 }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+}
+
+% SPELLSCHOOLS
+
+\cs_new:Npn \rpgicons_draw_shape_abjuration: {
+ \draw_path_moveto:n { 0cm , .025cm }
+ \draw_path_arc:nnnn { 270 } { 390 } { .275cm } { .175cm }
+ \draw_path_arc:nnn { 210 } { 120 } { .095cm }
+ \draw_path_moveto:n { 0cm , .025cm }
+ \draw_path_arc:nnnn { 270 } { 150 } { .275cm } { .175cm }
+ \draw_path_arc:nnn { -30 } { 60 } { .095cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { -.25cm , -.125cm }
+ \draw_path_lineto:n { .25cm , -.125cm }
+ \draw_path_moveto:n { -.25cm , -.3cm }
+ \draw_path_lineto:n { .25cm , -.3cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_conjuration: {
+ \draw_path_moveto:n { -.425cm , .425cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+ \draw_path_moveto:n { -.225cm , .05cm }
+ \draw_path_lineto:n { .225cm , .05cm }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_arc:nnn { 110 } { 70 } { .5cm }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_arc:nnn { 110 } { 70 } { -.5cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_divination: {
+ \draw_path_moveto:n { -.35cm , -.175cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .15cm } { -.25cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .4cm }
+ \draw_path_moveto:n { -.05cm , -.175cm }
+ \draw_path_lineto:n { -.05cm , 0cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .4cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_enchantment: {
+ \draw_path_moveto:n { -.2cm , -.425cm }
+ \draw_path_lineto:n { -.2cm , .425cm }
+ \draw_path_moveto:n { -.425cm , .175cm }
+ \draw_path_lineto:n { .025cm , .175cm }
+ \draw_path_moveto:n { -.2cm , -.225cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .1cm } { .2cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .1cm } { .2cm }
+ \draw_path_arc:nnnn { 180 } { 0 } { .1cm } { -.2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_evocation: {
+ \draw_path_ellipse:nnn { 0cm , 0cm } { .325cm , 0cm } { 0cm , .225cm }
+ \draw_path_moveto:n { 0cm , .425cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 30 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 30 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 60 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 60 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 120 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 120 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 150 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 150 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 210 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 210 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 240 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 240 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 300 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 300 } { .4cm} }
+ \draw_path_moveto:n { \draw_point_polar:nnn { 330 } { .325cm } { .225cm } }
+ \draw_path_lineto:n { \draw_point_polar:nn { 330 } { .4cm} }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_illusion: {
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .45cm }
+ \draw_path_arc:nnn { 330 } { 210 } { .45cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .45cm }
+ \draw_path_moveto:n { ( 0cm , .225cm ) + ( \draw_point_polar:nn { .45cm } { 270 } ) }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 270 } }
+ \draw_path_moveto:n { ( 0cm , .225cm ) + ( \draw_point_polar:nn { .45cm } { 240 } ) }
+ \draw_path_lineto:n { \draw_point_polar:nn { .4cm} { 225 } }
+ \draw_path_moveto:n { ( 0cm , .225cm ) + ( \draw_point_polar:nn { .45cm } { 300 } ) }
+ \draw_path_lineto:n { \draw_point_polar:nn { .4cm} { 315 } }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_circle:nn { 0cm , .075cm } { .15cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_necromancy: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .25cm} { 210 } }
+ \draw_path_arc:nnn { 210 } { -30 } { .25cm }
+ \draw_path_arc:nnn { 150 } { 390 } { .1cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .25cm} { 210 } }
+ \draw_path_arc:nnn { 390 } { 150 } { .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_transmutation: {
+ \draw_path_moveto:n { -.25cm , .35cm }
+ \draw_path_lineto:n { -.25cm , -.35cm }
+ \draw_path_moveto:n { 0cm , .35cm }
+ \draw_path_lineto:n { 0cm , -.35cm }
+ \draw_path_moveto:n { -.425cm , .35cm }
+ \draw_path_lineto:n { .15cm , .35cm }
+ \draw_path_arc:nnn { 90 } { -45 } { .1cm }
+ \draw_path_arc:nnn { 135 } { 360 } { .1cm }
+}
+
+% DAMAGES
+
+\cs_new:Npn \rpgicons_draw_shape_acid: {
+ \draw_path_moveto:n { ( -.175cm , .05cm ) + ( \draw_point_polar:nn { .175 } { -20 } ) }
+ \draw_path_arc:nnn { -20 } { 200 } { -.175cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+ \draw_path_close:
+ \draw_path_moveto:n {
+ \draw_point_intersect_lines:nnnn
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 20 } ) }
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 160 } ) }
+ { -.425cm , -.425cm } { -.425cm , .425cm }
+ }
+ \draw_path_lineto:n { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 20 } ) }
+ \draw_path_arc:nnn { 20 } { 160 } { -.25cm }
+ \draw_path_lineto:n {
+ \draw_point_intersect_lines:nnnn
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 20 } ) }
+ { ( 0cm , -.175cm ) + ( \draw_point_polar:nn { -.25cm } { 160 } ) }
+ { .425cm , -.425cm } { .425cm , .425cm }
+ }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_bludgeoning: {
+ \draw_path_moveto:n { -.2cm , .225cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_lineto:n { .225cm , -.2cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .05cm , -.025cm }
+ \draw_path_lineto:n { -.35cm , -.425cm }
+ \draw_path_lineto:n { -.425cm , -.35cm }
+ \draw_path_lineto:n { -.025cm , .05cm }
+ \draw_path_moveto:n { .2375cm , .1875cm }
+ \draw_path_arc:nnn { 135 } { 315 } { -.05cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_cold: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 270 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 110 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 70 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 250 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 290 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 210 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 50 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 30 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 10 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 190 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 210 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 230 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 150 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 330 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 130 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 150 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 170 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .35cm} { 310 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .25cm} { 330 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 350 } }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_fire: {
+ \draw_path_moveto:n { .15cm , -.425cm }
+ \draw_path_arc:nnnn { -60 } { 0 } { .45cm } { .375cm }
+ \draw_path_curveto:nnn { .375cm , .15cm } { .15cm , .375cm } { -.05cm , .425cm }
+ \draw_path_moveto:n { -.15cm , -.425cm }
+ \draw_path_arc:nnnn { 240 } { 135 } { .45cm } { .35cm }
+ \draw_path_curveto:nnn { -.15cm , .2cm } { 0cm , .25cm } { -.05cm , .425cm }
+ \draw_path_moveto:n { .075cm , -.3cm }
+ \draw_path_curveto:nnn { .2cm , -.2cm } { .2cm , -.05cm } { .05cm , .1cm }
+ \draw_path_moveto:n { -.075cm , -.3cm }
+ \draw_path_arc:nnnn { 220 } { 150 } { .35cm } { .2cm }
+ \draw_path_curveto:nnn { 0cm , -.2cm } { .05cm , -.1cm } { .05cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_force: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 90 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 120 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 150 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 180 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 210 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 240 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 270 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 300 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 330 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 0 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .15cm} { 60 } }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_lightning: {
+ \draw_path_moveto:n { 0cm , .425cm }
+ \draw_path_lineto:n { -.25cm , -.15cm }
+ \draw_path_lineto:n { .25cm , .15cm }
+ \draw_path_lineto:n { 0cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_necrotic: {
+ \draw_path_moveto:n { -.35cm , -.425cm }
+ \draw_path_lineto:n { -.35cm , .075cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .35cm }
+ \draw_path_lineto:n { .35cm , -.425cm }
+ \draw_path_close:
+ \draw_path_moveto:n { 0cm , -.2cm }
+ \draw_path_lineto:n { 0cm , .25cm }
+ \draw_path_moveto:n { -.15cm , .1cm }
+ \draw_path_lineto:n { .15cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_piercing: {
+ \draw_path_moveto:n { -.425cm , .075cm }
+ \draw_path_lineto:n { .3cm , .075cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_lineto:n { .3cm , -.075cm }
+ \draw_path_lineto:n { -.425cm , -.075cm }
+ \draw_path_moveto:n { .25cm , .2cm }
+ \draw_path_lineto:n { -.05cm , .35cm }
+ \draw_path_moveto:n { .25cm , -.2cm }
+ \draw_path_lineto:n { -.05cm , -.35cm }
+ \draw_path_moveto:n { .425cm , .15cm }
+ \draw_path_lineto:n { .25cm , .425cm }
+ \draw_path_moveto:n { .425cm , -.15cm }
+ \draw_path_lineto:n { .25cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_poison: {
+ \draw_path_moveto:n { ( 0cm , .175cm ) + ( \draw_point_polar:nn { .25cm } { -40 } ) }
+ \draw_path_arc:nnn { -40 } { 220 } { .25cm }
+ \draw_path_lineto:n { -.15cm , -.1cm }
+ \draw_path_lineto:n { .15cm , -.1cm }
+ \draw_path_close:
+ \draw_path_circle:nn { -.1cm , .15cm } { .05cm }
+ \draw_path_circle:nn { .1cm , .15cm } { .05cm }
+ \draw_path_moveto:n { .425cm , -.2cm }
+ \draw_path_lineto:n { -.425cm , -.425cm }
+ \draw_path_moveto:n { -.425cm , -.2cm }
+ \draw_path_lineto:n { .425cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_psychic: {
+ \draw_path_moveto:n { .075cm , .4cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .425cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .375cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .325cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .275cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .225cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .175cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .125cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_radiant: {
+ \draw_path_circle:nn { 0cm , 0cm } { .225cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 15 } }
+ \draw_path_arc:nnn { 15 } { 45 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 75 } }
+ \draw_path_arc:nnn { 75 } { 105 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 135 } }
+ \draw_path_arc:nnn { 135 } { 165 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 195 } }
+ \draw_path_arc:nnn { 195 } { 225 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 255 } }
+ \draw_path_arc:nnn { 255 } { 285 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 315 } }
+ \draw_path_arc:nnn { 315 } { 345 } { .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_slashing: {
+ \draw_path_moveto:n { -.15cm , .225cm }
+ \draw_path_lineto:n { -.275cm , .35cm }
+ \draw_path_arc:nnn { 0 } { 240 } { .075cm }
+ \draw_path_lineto:n { -.35cm , .275cm }
+ \draw_path_lineto:n { -.225cm , .15cm }
+ \draw_path_lineto:n { -.425cm , -.05cm }
+ \draw_path_lineto:n { -.35cm , -.125cm }
+ \draw_path_lineto:n { .125cm , .35cm }
+ \draw_path_lineto:n { .05cm , .425cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , .025cm }
+ \draw_path_lineto:n { .225cm , -.425cm }
+ \draw_path_lineto:n { .425cm , -.425cm }
+ \draw_path_lineto:n { .425cm , -.225cm }
+ \draw_path_lineto:n { -.025cm , .2cm }
+ \draw_path_moveto:n { .325cm , -.325cm }
+ \draw_path_lineto:n { 0cm , 0cm }
+ \draw_path_moveto:n { .425cm , .3cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_moveto:n { .275cm , .425cm }
+ \draw_path_lineto:n { .275cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_thunder: {
+ \draw_path_moveto:n { .225cm , -.075cm }
+ \draw_path_arc:nnn { -90 } { 120 } { .2cm }
+ \draw_path_arc:nnn { 30 } { 180 } { .225cm }
+ \draw_path_lineto:n { -.3cm , .125cm + cosd( 30 ) * .2cm - sind( 30 ) * .225cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_lineto:n { -.425cm , .05cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.1cm , -.225cm }
+ \draw_path_arc:nnn { 240 } { 300 } { .3cm }
+ \draw_path_moveto:n { -.2cm , -.35cm }
+ \draw_path_arc:nnn { 240 } { 300 } { .5cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_healing: {
+ \draw_path_moveto:n { 0cm , .125cm }
+ \draw_path_arc:nnn { 0 } { 225 } { .2cm }
+ \draw_path_lineto:n { 0cm , -.375cm }
+ \draw_path_moveto:n { 0cm , .125cm }
+ \draw_path_arc:nnn { 180 } { -45 } { .2cm }
+ \draw_path_lineto:n { 0cm , -.375cm }
+}
+
+% ATTACKS
+
+\cs_new:Npn \rpgicons_draw_shape_melee: {
+ \draw_path_moveto:n { -.15cm , -.225cm }
+ \draw_path_lineto:n { -.275cm , -.35cm }
+ \draw_path_arc:nnn { 360 } { 90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , -.275cm }
+ \draw_path_lineto:n { -.225cm , -.15cm }
+ \draw_path_lineto:n { -.425cm , .05cm }
+ \draw_path_lineto:n { -.35cm , .125cm }
+ \draw_path_lineto:n { .125cm , -.35cm }
+ \draw_path_lineto:n { .05cm , -.425cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , -.025cm }
+ \draw_path_lineto:n { .225cm , .425cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+ \draw_path_lineto:n { .425cm , .225cm }
+ \draw_path_lineto:n { -.025cm , -.2cm }
+ \draw_path_moveto:n { .325cm , .325cm }
+ \draw_path_lineto:n { 0cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_ranged: {
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { 0cm , -.225cm }
+ \draw_path_arc:nnn { 0 } { -30 } { .4cm }
+ \draw_path_arc:nnn { -45 } { 0 } { .6cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 0 } { 30 } { .4cm }
+ \draw_path_arc:nnn { 45 } { 0 } { .6cm }
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_moveto:n { .275cm , .1cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_lineto:n { .275cm , -.1cm }
+ \draw_path_moveto:n { ( -.4cm , -.225cm ) + ( \draw_point_polar:nn { .4cm } { -20 } ) }
+ \draw_path_lineto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { ( -.4cm , .225cm ) + ( \draw_point_polar:nn { .4cm } { 20 } ) }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_magic: {
+ \draw_path_moveto:n { -.225cm , -.425cm }
+ \draw_path_lineto:n { -.425cm , -.225cm }
+ \draw_path_lineto:n { -.3cm , -.1cm }
+ \draw_path_lineto:n { -.3cm , .125cm }
+ \draw_path_lineto:n { 0cm , .425cm }
+ \draw_path_arc:nnn { 405 } { 315 } { .1cm }
+ \draw_path_lineto:n { -.15cm , .1cm }
+ \draw_path_lineto:n { -.15cm , -.05cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .05cm }
+ \draw_path_lineto:n { -.05cm , 0cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .1cm }
+ \draw_path_lineto:n { .05cm , -.1cm }
+ \draw_path_arc:nnn { 360 } { 315 } { .125cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.225cm , -.25cm }
+ \draw_path_lineto:n { -.325cm , -.15cm }
+ \draw_path_moveto:n { .2cm , .2cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .1cm }
+ \draw_path_arc:nnn { 0 } { 45 } { .1cm }
+ \draw_path_arc:nnn { 225 } { 180 } { .2cm }
+ \draw_path_circle:nn { .3cm , -.075cm } { .075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_singlehanded: {
+ \draw_path_moveto:n { -.25cm , -.425cm }
+ \draw_path_lineto:n { .025cm , -.425cm }
+ \draw_path_lineto:n { .325cm , -.125cm }
+ \draw_path_arc:nnn { 45 } { 135 } { .1cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_lineto:n { -.15cm , -.275cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_lineto:n { -.1cm , -.175cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_lineto:n { -.2cm , -.075cm }
+ \draw_path_arc:nnn { 90 } { 135 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.25cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_doublehanded: {
+ \draw_path_moveto:n { -.25cm , -.425cm }
+ \draw_path_lineto:n { .025cm , -.425cm }
+ \draw_path_lineto:n { .325cm , -.125cm }
+ \draw_path_arc:nnn { 45 } { 135 } { .1cm }
+ \draw_path_lineto:n { 0cm , -.275cm }
+ \draw_path_lineto:n { -.15cm , -.275cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_lineto:n { -.1cm , -.175cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_lineto:n { -.2cm , -.075cm }
+ \draw_path_arc:nnn { 90 } { 135 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.25cm }
+ \draw_path_moveto:n { .25cm , .425cm }
+ \draw_path_lineto:n { -.025cm , .425cm }
+ \draw_path_lineto:n { -.325cm , .125cm }
+ \draw_path_arc:nnn { 225 } { 315 } { .1cm }
+ \draw_path_lineto:n { 0cm , .275cm }
+ \draw_path_lineto:n { .15cm , .275cm }
+ \draw_path_arc:nnn { 450 } { 270 } { .05cm }
+ \draw_path_lineto:n { .1cm , .175cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .1cm }
+ \draw_path_lineto:n { .2cm , .075cm }
+ \draw_path_arc:nnn { 270 } { 315 } { .125cm }
+ \draw_path_lineto:n { .425cm , .25cm }
+}
+
+% CONDITIONS
+
+\cs_new:Npn \rpgicons_draw_shape_buff: {
+ \draw_path_moveto:n { -.425cm , -.225cm }
+ \draw_path_lineto:n { -.225cm , -.425cm }
+ \draw_path_lineto:n { -.1cm , -.3cm }
+ \draw_path_lineto:n { .125cm , -.3cm }
+ \draw_path_lineto:n { .425cm , 0cm }
+ \draw_path_arc:nnn { 45 } { 135 } { .1cm }
+ \draw_path_lineto:n { .1cm , -.15cm }
+ \draw_path_lineto:n { -.05cm , -.15cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_lineto:n { 0cm , -.05cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_lineto:n { -.1cm , .05cm }
+ \draw_path_arc:nnn { 90 } { 135 } { .125cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.25cm , -.225cm }
+ \draw_path_lineto:n { -.15cm , -.325cm }
+ \draw_path_moveto:n { 0cm , .425cm }
+ \draw_path_lineto:n { .25cm , .425cm }
+ \draw_path_lineto:n { .25cm , .275cm }
+ \draw_path_arc:nnn { 360 } { 180 } { .125cm }
+ \draw_path_close:
+
+}
+
+\cs_new:Npn \rpgicons_draw_shape_blinded: {
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .45cm }
+ \draw_path_arc:nnn { 330 } { 210 } { .45cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .45cm }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_circle:nn { 0cm , 0cm } { .15cm }
+ \draw_path_moveto:n { -.425cm , -.425cm }
+ \draw_path_lineto:n { -.25cm , -.25cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_charmed: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.1cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .175cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.175cm , .15cm }
+ \draw_path_arc:nnn { 0 } { 225 } { .0625cm }
+ \draw_path_lineto:n { -.175cm , 0cm }
+ \draw_path_moveto:n { -.175cm , .15cm }
+ \draw_path_arc:nnn { 180 } { -45 } { .0625cm }
+ \draw_path_lineto:n { -.175cm , 0cm }
+ \draw_path_moveto:n { .175cm , .15cm }
+ \draw_path_arc:nnn { 0 } { 225 } { .0625cm }
+ \draw_path_lineto:n { .175cm , 0cm }
+ \draw_path_moveto:n { .175cm , .15cm }
+ \draw_path_arc:nnn { 180 } { -45 } { .0625cm }
+ \draw_path_lineto:n { .175cm , 0cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_deafened: {
+ \draw_path_moveto:n { -.175cm , -.275cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .15cm }
+ \draw_path_lineto:n { .125cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 135 } { .25cm }
+ \draw_path_arc:nnn { 315 } { 360 } { .25cm }
+ \draw_path_arc:nnn { 0 } { 180 } { .275cm }
+ \draw_path_moveto:n { -.15cm , -.1cm }
+ \draw_path_arc:nnn { -90 } { 90 } { .075cm }
+ \draw_path_lineto:n { -.15cm , .125cm }
+ \draw_path_arc:nnn { 180 } { 45 } { .15cm }
+ \draw_path_moveto:n { -.425cm , -.425cm }
+ \draw_path_lineto:n { -.2cm , -.2cm }
+ \draw_path_moveto:n { 0cm , 0cm }
+ \draw_path_lineto:n { .425cm , .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_exhausted: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .175cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .275cm , .15cm }
+ \draw_path_arc:nnn { 180 } { 0 } { -.1cm }
+ \draw_path_moveto:n { -.075cm , .15cm }
+ \draw_path_arc:nnn { 180 } { 0 } { -.1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_frightened: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .175cm }
+ \draw_path_close:
+ \draw_path_circle:nn { -.175cm , .125cm } { .075cm }
+ \draw_path_circle:nn { .175cm , .125cm } { .075cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_grappled: {
+ \draw_path_moveto:n { -.25cm , .3cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , .15cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , .15cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , 0cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , 0cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.35cm , -.15cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { -.2cm , -.15cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .075cm }
+ \draw_path_lineto:n { -.3cm , -.3cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .075cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .425cm , .05cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .25cm }
+ \draw_path_lineto:n { -.05cm , .3cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .15cm }
+ \draw_path_lineto:n { .175cm , .15cm }
+ \draw_path_lineto:n { .175cm , -.425cm }
+ \draw_path_moveto:n { .175cm , -.275cm }
+ \draw_path_lineto:n { .425cm , -.275cm }
+ \draw_path_moveto:n { .175cm , .3cm }
+ \draw_path_lineto:n { .175cm , .425cm }
+ \draw_path_moveto:n { -.3cm , .3cm }
+ \draw_path_lineto:n { -.3cm , .425cm }
+ \draw_path_moveto:n { -.3cm , -.3cm }
+ \draw_path_lineto:n { -.3cm , -.425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_incapacitated: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_arc:nnn { 270 } { 210 } { .425cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { -.425cm} { 90 } }
+ \draw_path_arc:nnn { 30 } { 90 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 90 } }
+ \draw_path_arc:nnn { 330 } { 270 } { .425cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { -.425cm} { 150 } }
+ \draw_path_arc:nnn { 90 } { 150 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 150 } }
+ \draw_path_arc:nnn { 30 } { -30 } { .425cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { -.425cm} { 210 } }
+ \draw_path_arc:nnn { 150 } { 210 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .25cm} { 30 } }
+ \draw_path_arc:nnn { 270 } { 210 } { .25cm }
+ \draw_path_arc:nnn { 330 } { 270 } { .25cm }
+ \draw_path_arc:nnn { 30 } { -30 } { .25cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .25cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .25cm }
+ \draw_path_arc:nnn { 210 } { 150 } { .25cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_invisible: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { -15 } }
+ \draw_path_arc:nnn { -15 } { 15 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 30 } }
+ \draw_path_arc:nnn { 30 } { 60 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 75 } }
+ \draw_path_arc:nnn { 75 } { 105 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 120 } }
+ \draw_path_arc:nnn { 120 } { 150 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 165 } }
+ \draw_path_arc:nnn { 165 } { 195 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 210 } }
+ \draw_path_arc:nnn { 210 } { 240 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 255 } }
+ \draw_path_arc:nnn { 255 } { 285 } { .425cm }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 300 } }
+ \draw_path_arc:nnn { 300 } { 330 } { .425cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_paralyzed: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.175cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 0 } { .175cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .25cm , .2cm }
+ \draw_path_lineto:n { .1cm , .05cm }
+ \draw_path_moveto:n { .25cm , .05cm }
+ \draw_path_lineto:n { .1cm , .2cm }
+ \draw_path_moveto:n { -.25cm , .2cm }
+ \draw_path_lineto:n { -.1cm , .05cm }
+ \draw_path_moveto:n { -.25cm , .05cm }
+ \draw_path_lineto:n { -.1cm , .2cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_petrified: {
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 45 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 100 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 135 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 190 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 230 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 250 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 300 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .425cm} { 350 } }
+ \draw_path_close:
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 135 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 130 } }
+ \draw_path_lineto:n { -.25cm , .075cm }
+ \draw_path_lineto:n { \draw_point_polar:nn { .2cm} { 220 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .325cm} { 240 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 300 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .3cm} { 330 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .225cm} { 350 } }
+ \draw_path_moveto:n { \draw_point_polar:nn { .425cm} { 45 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .3cm} { 60 } }
+ \draw_path_lineto:n { \draw_point_polar:nn { .35cm} { 130 } }
+ \draw_path_moveto:n { -.15cm , -.175cm }
+ \draw_path_lineto:n { .075cm , -.15cm }
+ \draw_path_lineto:n { .125cm , -.2cm }
+ \draw_path_moveto:n { -.25cm , .075cm }
+ \draw_path_lineto:n { -.1cm , .1cm }
+ \draw_path_moveto:n { .25cm , .075cm }
+ \draw_path_lineto:n { .1cm , .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_poisoned: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_moveto:n { -.15cm , -.2cm }
+ \draw_path_lineto:n { -.075cm , -.125cm }
+ \draw_path_lineto:n { 0cm , -.2cm }
+ \draw_path_lineto:n { .075cm , -.125cm }
+ \draw_path_lineto:n { .15cm , -.2cm }
+ \draw_path_moveto:n { .25cm , .175cm }
+ \draw_path_lineto:n { .1cm , .1cm }
+ \draw_path_lineto:n { .25cm , .025cm }
+ \draw_path_moveto:n { -.25cm , .175cm }
+ \draw_path_lineto:n { -.1cm , .1cm }
+ \draw_path_lineto:n { -.25cm , .025cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_prone: {
+ \draw_path_circle:nn { .2cm , -.125cm } { .125cm }
+ \draw_path_moveto:n { -.425cm , 0cm }
+ \draw_path_lineto:n { -.15cm , 0cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.25cm }
+ \draw_path_moveto:n { .225cm , .15cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .1cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .1cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .1cm }
+ \draw_path_moveto:n { 0cm , .25cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .1cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .1cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .1cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .1cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_restrained: {
+ \draw_path_moveto:n { -.075cm , -.225cm }
+ \draw_path_lineto:n { -.075cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_lineto:n { -.2cm , 0cm }
+ \draw_path_arc:nnn { 270 } { 180 } { .1cm }
+ \draw_path_lineto:n { -.3cm , .3cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .125cm }
+ \draw_path_lineto:n { -.425cm , -.075cm }
+ \draw_path_arc:nnn { 180 } { 235 } { .1cm }
+ \draw_path_lineto:n { -.3cm , -.225cm }
+ \draw_path_moveto:n { .075cm , -.225cm }
+ \draw_path_lineto:n { .075cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 0 } { .125cm }
+ \draw_path_lineto:n { .2cm , 0cm }
+ \draw_path_arc:nnn { -90 } { 0 } { .1cm }
+ \draw_path_lineto:n { .3cm , .3cm }
+ \draw_path_arc:nnn { 180 } { 90 } { .125cm }
+ \draw_path_lineto:n { .425cm , -.075cm }
+ \draw_path_arc:nnn { 360 } { 330 } { .1cm }
+ \draw_path_lineto:n { .3cm , -.225cm }
+ \draw_path_moveto:n { .35cm , -.225cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .05cm }
+ \draw_path_lineto:n { -.35cm , -.325cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_close:
+ \draw_path_moveto:n { .35cm , -.325cm }
+ \draw_path_arc:nnn { 90 } { -90 } { .05cm }
+ \draw_path_lineto:n { -.35cm , -.425cm }
+ \draw_path_arc:nnn { 270 } { 90 } { .05cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_stunned: {
+ \draw_path_circle:nn { 0cm , 0cm } { .425cm }
+ \draw_path_ellipse:nnn { 0cm , -.175cm } { 0cm , .1cm } { .175cm , 0cm }
+ \draw_path_moveto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 90 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 126 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 162 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 198 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 234 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 270 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 306 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 342 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 18 } ) }
+ \draw_path_lineto:n { ( -.175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 54 } ) }
+ \draw_path_close:
+ \draw_path_moveto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 90 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 126 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 162 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 198 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 234 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 270 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 306 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 342 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .125cm } { 18 } ) }
+ \draw_path_lineto:n { ( .175cm , .125cm ) + ( \draw_point_polar:nn { .05cm } { 54 } ) }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_shape_unconscious: {
+ \draw_path_moveto:n { 0cm , .15cm }
+ \draw_path_arc:nnnn { 90 } { -30 } { .425cm } { .15cm }
+ \draw_path_moveto:n { 0cm , -.15cm }
+ \draw_path_arc:nnnn { 270 } { 150 } { .425cm } { .15cm }
+ \draw_path_moveto:n { -.35cm , .15cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .125cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .125cm }
+ \draw_path_moveto:n { .1cm , -.15cm }
+ \draw_path_arc:nnn { 270 } { 360 } { .125cm }
+ \draw_path_arc:nnn { 180 } { 270 } { .125cm }
+ \draw_path_arc:nnn { 90 } { 180 } { .125cm }
+ \draw_path_arc:nnn { 0 } { 90 } { .125cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_hearing: {
+ \draw_path_moveto:n { -.175cm , -.275cm }
+ \draw_path_arc:nnn { 180 } { 360 } { .15cm }
+ \draw_path_lineto:n { .125cm , -.225cm }
+ \draw_path_arc:nnn { 180 } { 135 } { .25cm }
+ \draw_path_arc:nnn { 315 } { 360 } { .25cm }
+ \draw_path_arc:nnn { 0 } { 180 } { .275cm }
+ \draw_path_moveto:n { -.15cm , -.1cm }
+ \draw_path_arc:nnn { -90 } { 90 } { .075cm }
+ \draw_path_lineto:n { -.15cm , .125cm }
+ \draw_path_arc:nnn { 180 } { 45 } { .15cm }
+}
+
+\cs_new:Npn \rpgicons_draw_shape_seeing: {
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_arc:nnn { 90 } { 30 } { .45cm }
+ \draw_path_arc:nnn { 330 } { 210 } { .45cm }
+ \draw_path_arc:nnn { 150 } { 90 } { .45cm }
+ \draw_path_moveto:n { 0cm , .225cm }
+ \draw_path_circle:nn { 0cm , 0cm } { .15cm }
+}
+
+% FRAMES
+
+\cs_new:Npn \rpgicons_draw_frame_ability: {
+ \draw_path_circle:nn { 0cm , 0cm } { .45cm }
+}
+
+\cs_new:Npn \rpgicons_draw_frame_saving: {
+ \draw_path_moveto:n { -.45cm, . 45cm }
+ \draw_path_lineto:n { .45cm , .45cm }
+ \draw_path_lineto:n { .45cm , -.05cm }
+ \draw_path_arc:nnn { 360 } { 180 } { .45cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_frame_spellschool: {
+ \draw_path_moveto:n { -.475cm, . 35cm }
+ \draw_path_lineto:n { -.35cm , .475cm }
+ \draw_path_lineto:n { .35cm , .475cm }
+ \draw_path_lineto:n { .475cm , .35cm }
+ \draw_path_lineto:n { .425cm , -.375cm }
+ \draw_path_lineto:n { 0cm , -.475cm }
+ \draw_path_lineto:n { -.425cm , -.375cm }
+ \draw_path_close:
+}
+
+\cs_new:Npn \rpgicons_draw_frame_damage: {
+ \draw_path_circle:nn { 0cm , 0cm } { .45cm }
+}
+
+% USER COMMANDS
+
+\NewDocumentCommand { \rpgiconsset } { m } {
+ \keys_set:nn { rpgicons / local ~ options } {#1}
+}
+
+\dim_new:N \l_rpgicons_icon_before_sep_dim
+\dim_new:N \l_rpgicons_icon_after_sep_dim
+\dim_new:N \l_rpgicons_icon_baseline_dim
+\dim_new:N \l_rpgicons_icon_linewidth_dim
+
+\tl_new:N \l_rpgicons_icon_frame_tl
+\tl_new:N \l_rpgicons_icon_color_stroke_tl
+\tl_new:N \l_rpgicons_icon_color_fill_tl
+\tl_new:N \l_rpgicons_icon_color_text_tl
+\tl_new:N \l_rpgicons_icon_color_background_tl
+
+\fp_new:N \l_rpgicons_icon_opacity_stroke_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_stroke_fp { 1.0 }
+\fp_new:N \l_rpgicons_icon_opacity_fill_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_fill_fp { 1.0 }
+\fp_new:N \l_rpgicons_icon_opacity_text_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_text_fp { 1.0 }
+\fp_new:N \l_rpgicons_icon_opacity_background_fp
+\fp_set:Nn \l_rpgicons_icon_opacity_background_fp { 1.0 }
+
+\fp_new:N \l_rpgicons_icon_transform_scale_fp
+\fp_new:N \l_rpgicons_icon_transform_scale_inner_fp
+\fp_new:N \l_rpgicons_icon_transform_rotate_fp
+
+\bool_new:N \l_rpgicons_icon_accessible_basic_bool
+\bool_new:N \l_rpgicons_icon_accessible_full_bool
+
+\cs_generate_variant:Nn \color_select:n { V }
+\cs_generate_variant:Nn \color_stroke:n { V }
+\cs_generate_variant:Nn \color_fill:n { V }
+
+\bool_new:N \l__rpgicons_opacity_warning_bool
+\cs_new:Npn \__rpgicons_opacity_check: {
+ \bool_lazy_and:nnT {
+ \bool_not_p:n { \l__rpgicons_opacity_warning_bool }
+ } {
+ \bool_not_p:n { \l__rpgicons_use_opacity_bool }
+ } {
+ \msg_warning:nn { rpgicons } { opacity-option-missing }
+ \bool_set_true:N \l__rpgicons_opacity_warning_bool
+ }
+}
+\cs_new:Npn \__rpgicons_accessible_check: {
+ \IfDocumentMetadataTF { } {
+ \msg_error:nn { rpgicons } { documentmetadata-missing }
+ }
+}
+
+\cs_generate_variant:Nn \bool_set:Nn { Ne }
+\keys_define:nn { rpgicons / local ~ options } {
+ before ~ sep .groups:n = { extra } ,
+ before ~ sep .dim_set:N = \l_rpgicons_icon_before_sep_dim ,
+ before ~ sep .initial:n = { 0.05em } ,
+ after ~ sep .groups:n = { extra } ,
+ after ~ sep .dim_set:N = \l_rpgicons_icon_after_sep_dim ,
+ after ~ sep .initial:n = { 0.05em } ,
+ accessible .choice: ,
+ accessible / false .code:n = {
+ \bool_set_false:N \l_rpgicons_icon_accessible_basic_bool
+ \bool_set_false:N \l_rpgicons_icon_accessible_full_bool
+ } ,
+ accessible / basic .code:n = {
+ \bool_set_true:N \l_rpgicons_icon_accessible_basic_bool
+ \bool_set_false:N \l_rpgicons_icon_accessible_full_bool
+ } ,
+ accessible / full .code:n = {
+ \bool_set_true:N \l_rpgicons_icon_accessible_basic_bool
+ \bool_set_true:N \l_rpgicons_icon_accessible_full_bool
+ } ,
+ accessible .default:n = { basic } ,
+ baseline .dim_set:N = \l_rpgicons_icon_baseline_dim ,
+ baseline .initial:n = { -3.5pt } ,
+ frame .tl_set:N = \l_rpgicons_icon_frame_tl ,
+ frame .initial:n = { } ,
+ stroke .tl_set:N = \l_rpgicons_icon_color_stroke_tl ,
+ stroke .initial:n = { . } ,
+ fill .tl_set:N = \l_rpgicons_icon_color_fill_tl ,
+ fill .initial:n = { . } ,
+ text .tl_set:N = \l_rpgicons_icon_color_text_tl ,
+ text .initial:n = { . } ,
+ color .code:n = {
+ \tl_set:Nn \l_rpgicons_icon_color_stroke_tl {#1}
+ \tl_set:Nn \l_rpgicons_icon_color_fill_tl {#1}
+ \tl_set:Nn \l_rpgicons_icon_color_text_tl {#1}
+ } ,
+ background .tl_set:N = \l_rpgicons_icon_color_background_tl ,
+ background .initial:n = { white } ,
+ stroke ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_stroke_fp {#1}
+ } ,
+ fill ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_fill_fp {#1}
+ } ,
+ text ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_text_fp {#1}
+ } ,
+ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_stroke_fp {#1}
+ \fp_set:Nn \l_rpgicons_icon_opacity_fill_fp {#1}
+ \fp_set:Nn \l_rpgicons_icon_opacity_text_fp {#1}
+ } ,
+ background ~ opacity .code:n = {
+ \__rpgicons_opacity_check:
+ \fp_set:Nn \l_rpgicons_icon_opacity_background_fp {#1}
+ } ,
+ line ~ width .dim_set:N = \l_rpgicons_icon_linewidth_dim ,
+ line ~ width .initial:n = { \l_draw_default_linewidth_dim } ,
+ scale .fp_set:N = \l_rpgicons_icon_transform_scale_fp ,
+ scale .initial:n = { 1.0 } ,
+ scale ~ inner .fp_set:N = \l_rpgicons_icon_transform_scale_inner_fp ,
+ scale ~ inner .initial:n = { 0.675 } ,
+ rotate .fp_set:N = \l_rpgicons_icon_transform_rotate_fp ,
+ rotate .initial:n = { 0.0 } ,
+}
+
+\clist_const:Nn \c__rpgicons_types_clist {
+ die , ability , saving , spell , spellschool , damage , attack , condition
+}
+
+\str_new:N \l__rpgicons_icon_shape_name_str
+\clist_map_inline:Nn \c__rpgicons_types_clist {
+ \str_set:Nn \l__rpgicons_icon_shape_name_str {#1}
+ \str_replace_all:Nnn \l__rpgicons_icon_shape_name_str { ~ } { _ }
+ \clist_new:c { l_rpgicons_types_every_ \l__rpgicons_icon_shape_name_str _style_clist }
+ \keys_define:nn { rpgicons / local ~ options } {
+ every ~ #1 .code:n = {
+ \clist_set:cn {
+ l_rpgicons_types_every_ \l__rpgicons_icon_shape_name_str _style_clist
+ } {##1}
+ }
+ }
+}
+
+\clist_const:Nn \c__rpgicons_shapes_clist {
+ twoside , fourside , sixside , eightside , tenside , twelveside , twentyside , hundredside ,
+ fudge , sixside ~ one , sixside ~ two , sixside ~ three, sixside ~ four, sixside ~ five ,
+ sixside ~ six , sixside ~ seven, sixside ~ eight, sixside ~ nine, fudge ~ plus, fudge ~ minus ,
+ strength , dexterity , dexterity ~ alt , constitution , intelligence , wisdom , charisma ,
+ resilience , sanity , perception , luck , armor , proficiency ,
+ linear , conic , quadratic , cubic , spheric , cylindric , verbal , somatic , material , focus ,
+ abjuration , conjuration , divination , enchantment , evocation , illusion , necromancy , transmutation ,
+ acid , bludgeoning , cold , fire , force , lightning , necrotic , piercing , poison , psychic ,
+ radiant , slashing , thunder , healing ,
+ melee , ranged , magic , singlehanded , doublehanded ,
+ buff , blinded , charmed , deafened , exhausted , frightened , grappled , incapacitated , invisible ,
+ paralyzed , petrified , poisoned , prone , restrained , stunned , unconscious , hearing , seeing
+}
+
+\clist_map_inline:Nn \c__rpgicons_shapes_clist {
+ \str_set:Nn \l__rpgicons_icon_shape_name_str {#1}
+ \str_replace_all:Nnn \l__rpgicons_icon_shape_name_str { ~ } { _ }
+ \clist_new:c { l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist }
+ \keys_define:nn { rpgicons / local ~ options } {
+ every ~ #1 .code:n = {
+ \clist_set:cn {
+ l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist
+ } {##1}
+ }
+ }
+}
+
+\seq_new:N \l__rpgicons_icon_shape_name_parts_seq
+\coffin_new:N \l__rpgicons_icon_accessible_coffin
+\coffin_new:N \l__rpgicons_icon_label_coffin
+\bool_if:NT \l__rpgicons_compat_mode_bool {
+ % l3keys cs name fix
+ \cs_generate_variant:Nn \keys_set:nn { ne }
+ \cs_generate_variant:Nn \str_set:Nn { Ne }
+ \cs_generate_variant:Nn \seq_set_split:Nnn { Nee }
+}
+\prg_generate_conditional_variant:Nnn \clist_if_in:nn { ne } { T , TF }
+\cs_generate_variant:Nn \hcoffin_set:Nn { Ne }
+\cs_generate_variant:Nn \keys_set_groups:nnn { nne }
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnn { nne }
+\NewDocumentCommand \RPGIconsUseIcon { s O{} o m } {
+ \bool_if:NT \l_rpgicons_icon_accessible_full_bool {
+ \__rpgicons_accessible_check:
+ \pdf_bdc:nn { Span } { /Alt ~ ( #4 ) }
+ }
+ \draw_begin:
+ \draw_cap_round:
+ \draw_join_round:
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3keys cs name fix
+ \keys_set:ne { rpgicons / local ~ options } {#2}
+ } {
+ \keys_set_exclude_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ }
+ \str_set:Ne \l__rpgicons_icon_shape_name_str {#4}
+ \str_replace_all:Nnn \l__rpgicons_icon_shape_name_str { ~ } { _ }
+ \str_if_empty:NF \l__rpgicons_icon_shape_name_str {
+ \clist_if_exist:cT { l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist } {
+ \keys_set:ne { rpgicons / local ~ options } {
+ \clist_use:cn { l_rpgicons_shapes_every_ \l__rpgicons_icon_shape_name_str _style_clist } { , }
+ }
+ }
+ }
+ \color_stroke:V { \l_rpgicons_icon_color_stroke_tl }
+ \color_fill:V { \l_rpgicons_icon_color_fill_tl }
+ \bool_if:NT \l__rpgicons_use_opacity_bool {
+ \opacity_stroke:n { \l_rpgicons_icon_opacity_stroke_fp }
+ \opacity_fill:n { \l_rpgicons_icon_opacity_fill_fp }
+ }
+ \draw_linewidth:n { \l_rpgicons_icon_linewidth_dim }
+ \draw_transform_scale:n { \l_rpgicons_icon_transform_scale_fp }
+ \draw_transform_rotate:n { \l_rpgicons_icon_transform_rotate_fp }
+ \draw_baseline:n { \l_rpgicons_icon_baseline_dim }
+ \bool_if:NT \l_rpgicons_icon_accessible_basic_bool {
+ \draw_scope_begin:
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ % l3draw bounding box workaround
+ \draw_path_moveto:n { -.5cm , .5cm }
+ \draw_path_lineto:n { -.5cm , .5cm }
+ \draw_path_lineto:n { .5cm , .5cm }
+ \draw_path_lineto:n { .5cm , .5cm }
+ \draw_path_close:
+ \draw_path_use_clear:n { clip }
+ } {
+ \draw_path_rectangle_corners:nn
+ { -.5cm , .5cm }
+ { .5cm , .5cm }
+ \draw_path_use_clear:n { clip }
+ }
+ \bool_if:NTF \l_rpgicons_icon_accessible_full_bool {
+ \hcoffin_set:Nn \l__rpgicons_icon_accessible_coffin { \pdffakespace #4 \pdffakespace }
+ } {
+ \hcoffin_set:Nn \l__rpgicons_icon_accessible_coffin {#4}
+ }
+ \coffin_resize:Nnn \l__rpgicons_icon_accessible_coffin { 1cm } { 1cm }
+ \draw_coffin_use:Nnnn \l__rpgicons_icon_accessible_coffin { hc } { vc } { 0cm , 0cm }
+ \draw_scope_end:
+ }
+ \bool_if:NTF \l__rpgicons_compat_mode_bool {
+ % l3draw rectangle fix
+ % l3draw bounding box workaround
+ \draw_path_moveto:n { -.5cm , -.5cm - \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_lineto:n { -.5cm , .5cm + \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_lineto:n { .5cm , .5cm + \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_lineto:n { .5cm , -.5cm - \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_close:
+ \draw_path_use_clear:n { clip }
+ } {
+ \draw_path_rectangle_corners:nn
+ { -.5cm , -.5cm - \l_rpgicons_icon_linewidth_dim / 2 }
+ { .5cm , .5cm + \l_rpgicons_icon_linewidth_dim / 2 }
+ \draw_path_replace_bb:
+ \bool_set_false:N \l_draw_bb_update_bool
+ }
+ \draw_scope_begin:
+ \clist_if_in:neT { ability , saving , spellschool , damage } { \l_rpgicons_icon_frame_tl } {
+ \use:c { rpgicons_draw_frame_ \l_rpgicons_icon_frame_tl : }
+ \IfBooleanTF {#1} {
+ \draw_path_use_clear:n { fill }
+ \color_select:V { \l_rpgicons_icon_color_background_tl }
+ \bool_if:NT \l__rpgicons_use_opacity_bool {
+ \opacity_select:n { \l_rpgicons_icon_opacity_background_fp }
+ }
+ } {
+ \draw_path_use_clear:n { stroke }
+ }
+ \draw_transform_scale:n { \l_rpgicons_icon_transform_scale_inner_fp }
+ }
+ \clist_if_in:neTF { sixside ~ one , sixside ~ two , sixside ~ three , sixside ~ four ,
+ sixside ~ five , sixside ~ six , sixside ~ seven , sixside ~ eight , sixside ~ nine } {#4} {
+ \seq_set_split:Nee \l__rpgicons_icon_shape_name_parts_seq
+ { \c_underscore_str } { \l__rpgicons_icon_shape_name_str }
+ \exp_args:Ne \rpgicons_draw_shape_sixside_pips:n {
+ \seq_item:Nn \l__rpgicons_icon_shape_name_parts_seq { 2 }
+ }
+ } {
+ \use:c { rpgicons_draw_shape_ \l__rpgicons_icon_shape_name_str : }
+ }
+ \draw_path_use_clear:n { stroke }
+ \IfValueT {#3} {
+ \draw_scope_begin:
+ \color_select:V { \l_rpgicons_icon_color_text_tl }
+ \bool_if:NT \l__rpgicons_use_opacity_bool {
+ \opacity_select:n { \l_rpgicons_icon_opacity_text_fp }
+ }
+ \hcoffin_set:Ne \l__rpgicons_icon_label_coffin {#3}
+ \draw_coffin_use:Nnn \l__rpgicons_icon_label_coffin { hc } { vc }
+ \draw_scope_end:
+ }
+ \draw_scope_end:
+ \draw_end:
+ \bool_if:NT \l_rpgicons_icon_accessible_full_bool {
+ \pdf_emc:
+ }
+}
+
+\str_new:N \l__rpgicons_icon_integer_str
+\cs_generate_variant:Nn \str_if_eq:nnTF { ne }
+\NewDocumentCommand { \RPGIconsDie } { O{normal} m O{} m } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_die_style_clist { , } }
+ \str_set:Ne \l__rpgicons_icon_integer_str {#4}
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { large } {#1} {
+ \RPGIconsUseIcon[scale=.675, #3][#4]{#2}
+ } {
+ \str_if_empty:NF \l__rpgicons_icon_integer_str { \str_use:N \l__rpgicons_icon_integer_str \, }
+ \RPGIconsUseIcon[scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \die { \cs_new_eq:NN \die \RPGIconsDie }
+
+\NewDocumentCommand { \RPGIconsAbility } { O{positive} m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_ability_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { negative } {#1} {
+ \RPGIconsUseIcon*[frame=ability, scale=.333, #3]{#2}
+ } {
+ \RPGIconsUseIcon[scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \ability { \cs_new_eq:NN \ability \RPGIconsAbility }
+
+\NewDocumentCommand { \RPGIconsSaving } { O{} m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_saving_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { empty } {#1} {
+ \RPGIconsUseIcon[frame=saving, scale=.333, #3]{}
+ } {
+ \RPGIconsUseIcon[frame=saving, scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \saving { \cs_new_eq:NN \saving \RPGIconsSaving }
+
+\NewDocumentCommand { \RPGIconsSpell } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_spell_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \spell { \cs_new_eq:NN \spell \RPGIconsSpell }
+
+\NewDocumentCommand { \RPGIconsSpellschool } { O{positive} m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#3}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_spellschool_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \str_if_eq:neTF { negative } {#1} {
+ \RPGIconsUseIcon*[frame=spellschool, scale=.333, #3]{#2}
+ } {
+ \RPGIconsUseIcon[frame=spellschool, scale=.333, #3]{#2}
+ }
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \spellschool { \cs_new_eq:NN \spellschool \RPGIconsSpellschool }
+
+\NewDocumentCommand { \RPGIconsDamage } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_damage_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[frame=damage, scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \damage { \cs_new_eq:NN \damage \RPGIconsDamage }
+
+\NewDocumentCommand { \RPGIconsAttack } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_attack_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \attack { \cs_new_eq:NN \attack \RPGIconsAttack }
+
+\NewDocumentCommand { \RPGIconsCondition } { m O{} } {
+ \group_begin:
+ \keys_set_groups:nne { rpgicons / local ~ options } { extra } {#2}
+ \keys_set:ne { rpgicons / local ~ options } { \clist_use:Nn \l_rpgicons_types_every_condition_style_clist { , } }
+ \hspace { \l_rpgicons_icon_before_sep_dim }
+ \RPGIconsUseIcon[scale=.333, #2]{#1}
+ \hspace { \l_rpgicons_icon_after_sep_dim }
+ \group_end:
+}
+\cs_if_exist:NF \condition { \cs_new_eq:NN \condition \RPGIconsCondition }
+
+% ROLL SYNTAX
+
+\regex_new:N \l__rpgicons_roll_syntax_die_regex
+\cs_generate_variant:Nn \regex_set:Nn { Ne }
+\cs_new:Npn \rpgicons_roll_syntax_die_set:n #1 {
+ \regex_set:Ne \l__rpgicons_roll_syntax_die_regex { [ \clist_use:nn {#1} { } ] }
+}
+
+\keys_define:nn { rpgicons / local ~ options } {
+ roll ~ syntax .code:n = { \rpgicons_roll_syntax_die_set:n {#1} } ,
+ roll ~ syntax .initial:n = { d , D } ,
+}
+
+\cs_new:Npn \rpgicons_roll_syntax_convert:n #1 {
+ \str_case:nnF {#1} {
+ { 2 } { twoside }
+ { 4 } { fourside }
+ { 6 } { sixside }
+ { 8 } { eightside }
+ { 10 } { tenside }
+ { 12 } { twelveside }
+ { 20 } { twentyside }
+ { 100 } { hundredside }
+ { F } { fudge }
+ }
+ {#1}
+}
+
+\seq_new:N \l__rpgicons_roll_syntax_seq
+\tl_new:N \l__rpgicons_roll_syntax_part_tl
+\regex_new:N \l__rpgicons_roll_syntax_split_regex
+\regex_new:N \l__rpgicons_roll_syntax_plusminus_regex
+\regex_new:N \l__rpgicons_roll_syntax_times_regex
+\bool_if:NTF \l__rpgicons_unicode_mode_bool {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-\x{2212}x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-\x{2212}])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+} {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+}
+\regex_new:N \l__rpgicons_roll_syntax_dice_regex
+\cs_new:Npn \rpgicons_roll_syntax_parse:n #1 {
+ \regex_set:Nn \l__rpgicons_roll_syntax_dice_regex { \A(\d*)\ur{l__rpgicons_roll_syntax_die_regex}([F\d]+)\Z }
+ \regex_split:NnN \l__rpgicons_roll_syntax_split_regex {#1} \l__rpgicons_roll_syntax_seq
+ \seq_map_inline:Nn \l__rpgicons_roll_syntax_seq {
+ \tl_set:Ne \l__rpgicons_roll_syntax_part_tl {##1}
+ \regex_replace_case_once:nNTF {
+ { \l__rpgicons_roll_syntax_plusminus_regex } { \c{,} $\1$ \c{,} }
+ { \l__rpgicons_roll_syntax_times_regex } { \c{,} $\c{times}$ \c{,} }
+ { \l__rpgicons_roll_syntax_dice_regex }
+ { \c{ RPGIconsDie } { \c{ rpgicons_roll_syntax_convert:n } { \2 } } { \1 } }
+ } \l__rpgicons_roll_syntax_part_tl
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ }
+}
+
+\NewDocumentCommand{\RPGIconsRoll}{ m }{
+ \rpgicons_roll_syntax_parse:n {#1}
+}
+\cs_if_exist:NF \roll { \cs_new_eq:NN \roll \RPGIconsRoll }
+
+% EOF \ No newline at end of file
diff --git a/macros/latex/contrib/rpgicons/rpgicons-pgf.sty b/macros/latex/contrib/rpgicons/rpgicons-pgf.sty
new file mode 100644
index 0000000000..2b235beb48
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons-pgf.sty
@@ -0,0 +1,2596 @@
+% File: rpgicons-pgf.sty
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.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/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{rpgicons-pgf}[2024-04-28 rpg Icons Package (PGF Variant) (1.8.2)]
+
+% provide pics option
+\newif\ifrpgicons@pics\rpgicons@picsfalse
+\DeclareOption{pics}{\rpgicons@picstrue}
+\ProcessOptions\relax
+
+\RequirePackage{tikz}
+\newlength{\rpgicons@beforesep}
+\newlength{\rpgicons@aftersep}
+\newlength{\rpgicons@baseline}
+
+\def\rpgicons@allshapes{%
+ twoside, fourside, sixside, eightside, tenside, twelveside, twentyside, hundredside,
+ fudge, sixside one, sixside two, sixside three, sixside four, sixside five,
+ sixside six, sixside seven, sixside eight, sixside nine, fudge plus, fudge minus,
+ strength, dexterity, dexterity alt, constitution, intelligence, wisdom, charisma,
+ resilience, sanity, perception, luck, armor, proficiency,
+ linear, conic, quadratic, cubic, spheric, cylindric, verbal, somatic, material, focus,
+ abjuration, conjuration, divination, enchantment, evocation, illusion, necromancy, transmutation,
+ acid, bludgeoning, cold, fire, force, lightning, necrotic, piercing, poison, psychic,
+ radiant, slashing, thunder, healing,
+ melee, ranged, magic, singlehanded, doublehanded,
+ buff, blinded, charmed, deafened, exhausted, frightened, grappled, incapacitated, invisible,
+ paralyzed, petrified, poisoned, prone, restrained, stunned, unconscious, hearing, seeing%
+}
+
+\tikzset{
+ rpg icons/background color/.code={
+ \colorlet{rpgicons@bg}{#1}
+ },
+ rpg icons/background color={white},
+ rpg icons/before sep/.code={
+ \setlength{\rpgicons@beforesep}{#1}
+ },
+ rpg icons/before sep={.05em},
+ rpg icons/after sep/.code={
+ \setlength{\rpgicons@aftersep}{#1}
+ },
+ rpg icons/after sep={.05em},
+ rpg icons/baseline/.code={
+ \setlength{\rpgicons@baseline}{#1}
+ },
+ rpg icons/baseline={-3.5pt},
+ rpg icons/.style={},
+ rpg icons/.append style={
+ every node/.style={
+ line cap=round,
+ line join=round
+ }
+ },
+ %
+ rpg icons/every die/.style={},
+ rpg icons/every ability/.style={},
+ rpg icons/every saving/.style={},
+ rpg icons/every spell/.style={},
+ rpg icons/every spellschool/.style={},
+ rpg icons/every damage/.style={},
+ rpg icons/every attack/.style={},
+ rpg icons/every condition/.style={},
+ %
+ rpg icons/create every style/.code={
+ \tikzset{
+ rpg icons/every #1/.style={}
+ }
+ },
+ rpg icons/create every style/.list/.expanded={%
+ \rpgicons@allshapes%
+ }
+}
+
+% make tikz icons usable inside tikz environments
+\NewDocumentCommand{\provideprotectedrpgicon}{ m o m O{} m }{%
+ \expandafter\newsavebox\csname rpgicons@protectbox@#5\endcsname%
+ \expandafter\savebox\csname rpgicons@protectbox@#5\endcsname{%
+ \IfValueTF{#2}{%
+ \csname #1\endcsname[#2]{#3}[#4]{}%
+ }{%
+ \csname #1\endcsname{#3}[#4]{}%
+ }%
+ }%
+}
+
+\NewDocumentCommand{\useprotectedrpgicon}{ m }{%
+ \expandafter\usebox\csname rpgicons@protectbox@#1\endcsname%
+}
+
+% DICE
+
+% disc
+\pgfdeclareshape{twoside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{0cm}{.25cm}}{\pgfpoint{.425cm}{0cm}}
+ \pgfusepath{draw} % draw ellipse
+ }
+}
+
+% tetrahedron
+\pgfdeclareshape{fourside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{.433cm}{-.4cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{-.4cm}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw triangle
+ }
+}
+
+% cube
+\pgfdeclareshape{sixside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ }
+}
+
+% octahedron
+\pgfdeclareshape{eightside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{.433cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{.433cm}{-.25cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{-.25cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{.25cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{.433cm}{-.25cm}}
+ \pgfpathlineto{\pgfpoint{-.433cm}{-.25cm}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% decahedron
+\pgfdeclareshape{tenside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{.1cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{.294cm}{-.154cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.3cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{-.154cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.294cm}{-.154cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{-.1cm}}
+ \pgfpathmoveto{\pgfpoint{-.475cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{-.154cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.3cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% dodecahedron
+\pgfdeclareshape{twelveside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{0.294cm}{.405cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{.475cm}{-.173cm}}
+ \pgfpathlineto{\pgfpoint{.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{-.173cm}}
+ \pgfpathlineto{\pgfpoint{-.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{-.294cm}{.405cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{0cm}{.349cm}}
+ \pgfpathlineto{\pgfpoint{.332cm}{.108cm}}
+ \pgfpathlineto{\pgfpoint{.205cm}{-.282cm}}
+ \pgfpathlineto{\pgfpoint{-.205cm}{-.282cm}}
+ \pgfpathlineto{\pgfpoint{-.332cm}{.108cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathmoveto{\pgfpoint{.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{.332cm}{.108cm}}
+ \pgfpathmoveto{\pgfpoint{.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{.205cm}{-.282cm}}
+ \pgfpathmoveto{\pgfpoint{-.294cm}{-.405cm}}
+ \pgfpathlineto{\pgfpoint{-.205cm}{-.282cm}}
+ \pgfpathmoveto{\pgfpoint{-.475cm}{.173cm}}
+ \pgfpathlineto{\pgfpoint{-.332cm}{.108cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% icosahedron
+\pgfdeclareshape{twentyside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathlineto{\pgfpoint{.454cm}{.262cm}}
+ \pgfpathlineto{\pgfpoint{.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{-.454cm}{.262cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{0cm}{.292cm}}
+ \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}}
+ \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{.454cm}{.262cm}}
+ \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.5cm}}
+ \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}}
+ \pgfpathlineto{\pgfpoint{-.454cm}{.262cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{0cm}{.5cm}}
+ \pgfpathmoveto{\pgfpoint{.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{.253cm}{-.146cm}}
+ \pgfpathmoveto{\pgfpoint{-.454cm}{-.262cm}}
+ \pgfpathlineto{\pgfpoint{-.253cm}{-.146cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% sphere
+\pgfdeclareshape{hundredside}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.425cm}
+ \pgfpathmoveto{\pgfpoint{.425cm}{0cm}}
+ \pgfpatharc{180}{50}{-.425cm and -.2cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpatharc{270}{140}{-.2cm and .425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% cube (one)
+\pgfdeclareshape{sixside one}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ 0cm/0cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (two)
+\pgfdeclareshape{sixside two}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ .2cm/-.2cm, -.2cm/.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (three)
+\pgfdeclareshape{sixside three}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ .2cm/-.2cm, 0cm/0cm, -.2cm/.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (four)
+\pgfdeclareshape{sixside four}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (five)
+\pgfdeclareshape{sixside five}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ 0cm/0cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (six)
+\pgfdeclareshape{sixside six}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (seven)
+\pgfdeclareshape{sixside seven}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, 0cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (eight)
+\pgfdeclareshape{sixside eight}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, 0cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, 0cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (nine)
+\pgfdeclareshape{sixside nine}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \foreach \x/\y in {
+ -.2cm/.2cm, 0cm/.2cm, .2cm/.2cm,
+ -.2cm/0cm, 0cm/0cm, .2cm/0cm,
+ -.2cm/-.2cm, 0cm/-.2cm, .2cm/-.2cm
+ } {
+ \pgfpathcircle{\pgfpoint{\x}{\y}}{2pt}
+ }
+ \pgfusepath{fill}
+ }
+}
+
+% cube (fudge)
+\pgfdeclareshape{fudge}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{.1cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.05cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.2cm}}
+ \pgfusepath{draw}
+ }
+}
+
+% cube (fudge plus)
+\pgfdeclareshape{fudge plus}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{0cm}}
+ \pgfusepath{draw}
+ }
+}
+
+% cube (fudge)
+\pgfdeclareshape{fudge minus}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw rectangle
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{0cm}}
+ \pgfusepath{draw}
+ }
+}
+
+\ExplSyntaxOn
+\NewDocumentCommand{\rpgicons@ifEmptyF}{ m m }{
+ \tl_if_empty:nF { #1 } { #2 }
+}
+\ExplSyntaxOff
+
+\NewDocumentCommand{\rpgiconsdie}{ O{normal} m O{} m }{%
+ \edef\rpgicons@diceiconnrmlrg{#1}%
+ \edef\rpgicons@diceiconlrg{large}%
+ \ifx\rpgicons@diceiconnrmlrg\rpgicons@diceiconlrg%
+ \def\rpgicons@diceiconfg{fglrg}\else%
+ \def\rpgicons@diceiconfg{fgnrm}\fi%
+ \ifx\rpgicons@diceiconnrmlrg\rpgicons@diceiconlrg\else\rpgicons@ifEmptyF{#4}{#4\,}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every die, rpg icons/every #2,
+ baseline=\rpgicons@baseline, fgnrm/.style={scale=.333}, fglrg/.style={scale=.675}, #3] {
+ \node[#2, \rpgicons@diceiconfg, font={\footnotesize}] (0cm,0cm)
+ {\ifx\rpgicons@diceiconnrmlrg\rpgicons@diceiconlrg\textbf{#4}\fi};
+ \path[draw=none, \rpgicons@diceiconfg] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{die}{\NewCommandCopy\die\rpgiconsdie}{}
+
+% ABILITIES
+
+% strength
+\pgfdeclareshape{strength}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{60}{.425cm}
+ \pgfpatharc{200}{-40}{.1cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{45}{.425cm}}}
+ \pgfpatharc{45}{-20}{.425cm}
+ \pgfpatharc{-50}{-80}{.35cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{120}{.425cm}
+ \pgfpatharc{-20}{220}{.1cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{135}{.425cm}}}
+ \pgfpatharc{135}{200}{.425cm}
+ \pgfpatharc{230}{260}{.35cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{-.325cm}}
+ \pgfpatharc{180}{360}{.125cm and .1cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.025cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.3cm}}
+ \pgfpatharc{90}{70}{.1cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.3cm}}
+ \pgfpatharc{90}{110}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% dexterity
+\pgfdeclareshape{dexterity}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{65}{.425cm}
+ \pgfpatharc{200}{90}{.1cm and .075cm}
+ \pgfpatharc{90}{-30}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{45}{.425cm}}}
+ \pgfpatharc{45}{-20}{.425cm and .35cm}
+ \pgfpatharc{110}{160}{.175cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{115}{.425cm}
+ \pgfpatharc{-20}{90}{.1cm and .075cm}
+ \pgfpatharc{90}{220}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{135}{.425cm}}}
+ \pgfpatharc{135}{200}{.425cm and .35cm}
+ \pgfpatharc{70}{20}{.175cm}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.175cm}}
+ \pgfpatharc{180}{360}{.075cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.25cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.025cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{.025cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.25cm}}
+ \pgfpatharc{360}{140}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.25cm}}
+ \pgfpatharc{180}{400}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{-.1cm}{-.325cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.375cm}}
+ \pgfpatharc{180}{360}{.1cm and .05cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.325cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% dexterity alt
+\pgfdeclareshape{dexterity alt}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.15cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{75}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.15cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{105}{.425cm}
+ \pgfpathmoveto{\pgfpoint{.125cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{.375cm}{.425cm}}
+ \pgfpatharc{30}{-20}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{30}{.425cm}}}
+ \pgfpatharc{30}{-45}{.425cm and .35cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{-.375cm}{.425cm}}
+ \pgfpatharc{150}{200}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{150}{.425cm}}}
+ \pgfpatharc{150}{225}{.425cm and .35cm}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.075cm}}
+ \pgfpatharc{170}{90}{.15cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.075cm}}
+ \pgfpatharc{10}{90}{.15cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{0}{90}{.075cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{180}{90}{.075cm and .05cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{360}{180}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpatharc{180}{360}{.1cm and .075cm}
+ \pgfpathmoveto{\pgfpoint{-.1cm}{-.35cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.375cm}}
+ \pgfpatharc{180}{360}{.1cm and .05cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.35cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% constitution
+\pgfdeclareshape{constitution}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.25cm}}
+ \pgfpatharc{-90}{-30}{.325cm}
+ \pgfpatharc{0}{-80}{.3cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.25cm}}
+ \pgfpatharc{270}{210}{.325cm}
+ \pgfpatharc{180}{260}{.3cm}
+ \pgfpathmoveto{\pgfpoint{.325cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.075cm}}
+ \pgfpatharc{0}{-90}{.175cm and .1cm}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.325cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{.075cm}}
+ \pgfpatharc{180}{270}{.175cm and .1cm}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.225cm}}
+ \pgfpatharc{90}{270}{.1cm}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.425cm}}
+ \pgfpatharc{-90}{90}{.1cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{-.35cm}}
+ \pgfpatharc{-90}{0}{.05cm}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.35cm}}
+ \pgfpatharc{90}{0}{-.05cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.1cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% intelligence
+\pgfdeclareshape{intelligence}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{60}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{60}{.6cm}}}
+ \pgfpatharc{40}{-2.5}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{90}{.425cm}}}
+ \pgfpatharc{90}{120}{.25cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.1cm}}{\pgfpointpolar{120}{.6cm}}}
+ \pgfpatharc{140}{182.5}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{45}{.425cm}}}
+ \pgfpatharc{45}{0}{.425cm}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.2cm}}{\pgfpointpolar{135}{.425cm}}}
+ \pgfpatharc{135}{180}{.425cm}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.375cm}}
+ \pgfpatharc{180}{360}{.075cm and .05cm}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.075cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% wisdom
+\pgfdeclareshape{wisdom}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.175cm}}
+ \pgfpatharc{60}{90}{.425cm}
+ \pgfpatharc{270}{240}{.425cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.175cm}}
+ \pgfpatharc{120}{90}{.425cm}
+ \pgfpatharc{270}{300}{.425cm}
+ \pgfpathcircle{\pgfpoint{-.175cm}{0cm}}{.075cm}
+ \pgfpathcircle{\pgfpoint{.175cm}{0cm}}{.075cm}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.325cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.125cm}}
+ \pgfpathmoveto{\pgfpoint{-.375cm}{.125cm}}
+ \pgfpatharc{150}{270}{.25cm}
+ \pgfpathmoveto{\pgfpoint{.375cm}{.125cm}}
+ \pgfpatharc{30}{-90}{.25cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% charisma
+\pgfdeclareshape{charisma}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpatharc{270}{190}{.15cm and .1cm}
+ \pgfpatharc{10}{90}{.175cm and .225cm}
+ \pgfpatharc{40}{0}{.125cm and .175cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpatharc{270}{350}{.15cm and .1cm}
+ \pgfpatharc{170}{90}{.175cm and .225cm}
+ \pgfpatharc{140}{180}{.125cm and .175cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.125cm}}
+ \pgfpatharc{0}{90}{.175cm and .1cm}
+ \pgfpatharc{180}{270}{.15cm and .2cm}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.05cm}}
+ \pgfpatharc{40}{0}{.45cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.125cm}}
+ \pgfpatharc{180}{90}{.175cm and .1cm}
+ \pgfpatharc{0}{-90}{.15cm and .2cm}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.05cm}}
+ \pgfpatharc{140}{180}{.45cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.05cm}{-.275cm}}
+ \pgfpatharc{-30}{60}{.05cm}
+ \pgfpathmoveto{\pgfpoint{.05cm}{-.275cm}}
+ \pgfpatharc{210}{120}{.05cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{-.35cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.05cm}}
+ \pgfpatharc{30}{-30}{.15cm}
+ \pgfpatharc{80}{10}{.15cm}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{.35cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.05cm}}
+ \pgfpatharc{150}{210}{.15cm}
+ \pgfpatharc{100}{170}{.15cm}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.275cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% resilience
+\pgfdeclareshape{resilience}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.425cm}{-.475cm}}{\pgfpointpolar{65}{.5cm}}}
+ \pgfpatharc{65}{90}{.5cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.075cm}}{\pgfpointpolar{135}{.55cm}}}
+ \pgfpatharc{135}{45}{.55cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{.025cm}}
+ \pgfpatharc{90}{115}{.5cm}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.275cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{.15cm}}
+ \pgfpathmoveto{\pgfpoint{.125cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{-.1cm}}
+ \pgfpatharc{200}{230}{.4cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.275cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{.15cm}}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpatharc{340}{310}{.4cm}
+ \pgfpathmoveto{\pgfpoint{-.065cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{-.045cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.045cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.065cm}{-.075cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% sanity
+\pgfdeclareshape{sanity}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.125cm + .175cm * sin(30)}{.425cm - .175cm * cos(30)}}
+ {\pgfpointpolar{210}{.175cm}}}
+ \pgfpatharc{210}{120}{.175cm}
+ \pgfpathlineto{\pgfpointpolar{110}{.25cm}}
+ \pgfpatharc{110}{70}{.25cm}
+ \pgfpathlineto{\pgfpoint{.125cm}{.425cm}}
+ \pgfpatharc{420}{330}{.175cm}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.1cm}}
+ \pgfpatharc{390}{305}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.1cm}}
+ \pgfpatharc{150}{235}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.025cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.025cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.55cm}{-.35cm}}
+ {\pgfpointadd{\pgfpointpolar{135}{.125cm and .075cm}}{\pgfpointpolar{20}{.55cm}}}}
+ \pgfpatharc{380}{360}{.55cm}
+ \pgfpatharc{135}{405}{.125cm and .075cm}
+ \pgfpatharc{180}{160}{.55cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% perception
+\pgfdeclareshape{perception}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.35cm}}{\pgfpointpolar{150}{.125cm}}}
+ \pgfpatharc{150}{390}{.125cm}
+ \pgfpathmoveto{\pgfpoint{-.3cm}{.425cm}}
+ \pgfpatharc{180}{360}{.3cm and .2cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.425cm}}{\pgfpointpolar{330}{.3cm and .2cm}}}
+ \pgfpatharc{270}{350}{.15cm and .1cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.425cm}}{\pgfpointpolar{210}{.3cm and .2cm}}}
+ \pgfpatharc{270}{190}{.15cm and .1cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{-.375cm}{.125cm}}
+ \pgfpatharc{210}{250}{.225cm}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.375cm}{.125cm}}
+ \pgfpatharc{330}{290}{.225cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.05cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.05cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.075cm}{-.35cm + .075cm * ( 2 + sqrt(3) )}}
+ {\pgfpointpolar{195}{.1cm and .075cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.35cm}}{\pgfpointpolar{195}{.1cm and .075cm}}}
+ \pgfpatharc{195}{345}{.1cm and .075cm}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.075cm}{-.35cm + .075cm * ( 2 + sqrt(3) )}}
+ {\pgfpointpolar{345}{.1cm and .075cm}}}
+ \pgfpathmoveto{\pgfpoint{.025cm}{-.325cm}}
+ \pgfpatharc{0}{180}{.025cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% luck
+\pgfdeclareshape{luck}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.1cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{-.05cm}}
+ \pgfpatharc{-75}{-15}{.425cm}
+ \pgfpatharc{40}{85}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.1cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{-.05cm}}
+ \pgfpatharc{-105}{-165}{.425cm}
+ \pgfpatharc{140}{95}{.425cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.05cm}}{\pgfpointpolar{15}{.425cm}}}
+ \pgfpatharc{15}{-55}{.425cm and .3cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{-.05cm}}{\pgfpointpolar{165}{.425cm}}}
+ \pgfpatharc{165}{235}{.425cm and .3cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.175cm}}
+ \pgfpatharc{90}{250}{.175cm and .125cm}
+ \pgfpathlineto{\pgfpoint{-.05cm}{-.325cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.175cm}}
+ \pgfpatharc{90}{-70}{.175cm and .125cm}
+ \pgfpathlineto{\pgfpoint{.05cm}{-.325cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% armor
+\pgfdeclareshape{armor}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.125cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.125cm}}
+ \pgfpatharc{0}{90}{.3cm}
+ \pgfpathlineto{\pgfpoint{.125cm}{.35cm}}
+ \pgfpatharc{360}{180}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.425cm}}
+ \pgfpatharc{90}{180}{.3cm}
+ \pgfpathlineto{\pgfpoint{-.25cm}{.125cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.225cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.125cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.25cm}}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpathmoveto{\pgfpoint{-.125cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{-.125cm}{.25cm}}
+ \pgfpatharc{360}{270}{.125cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.275cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{-.225cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% proficiency
+\pgfdeclareshape{proficiency}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{90}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{126}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{162}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{198}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{234}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{306}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{342}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{18}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{54}{.15cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpointpolar{270}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{342}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{342}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{54}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{54}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{126}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{126}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{198}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{198}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsability}{ O{positive} m O{} }{%
+ \edef\rpgicons@abilityiconposneg{#1}%
+ \edef\rpgicons@abilityiconneg{negative}%
+ \ifx\rpgicons@abilityiconposneg\rpgicons@abilityiconneg%
+ \def\rpgicons@abilityiconfg{fgneg}\else%
+ \def\rpgicons@abilityiconfg{fgpos}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every ability, rpg icons/every #2,
+ baseline=\rpgicons@baseline, fgpos/.style={draw}, fgneg/.style={draw=rpgicons@bg, line width=.6pt}, #3] {
+ \ifx\rpgicons@abilityiconposneg\rpgicons@abilityiconneg%
+ \path[scale=.333, fill] (0cm,0cm) circle[radius=.45cm];
+ \node[#2, \rpgicons@abilityiconfg, scale=.225] (0cm,0cm) {};
+ \else
+ \node[#2, \rpgicons@abilityiconfg, scale=.333] (0cm,0cm) {};
+ \fi%
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{ability}{\NewCommandCopy\ability\rpgiconsability}{}
+
+\NewDocumentCommand{\rpgiconssaving}{ O{normal} m O{} }{%
+ \edef\rpgicons@abilityiconnrmemp{#1}%
+ \edef\rpgicons@abilityiconemp{empty}%
+ \ifx\rpgicons@abilityiconnrmemp\rpgicons@abilityiconemp%
+ \def\rpgicons@savingstyle{}\else%
+ \def\rpgicons@savingstyle{rpg icons/every #2}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every saving, \rpgicons@savingstyle,
+ baseline=\rpgicons@baseline, #3] {
+ \path[draw, scale=.333] (-.45cm,.45cm) -- (.45cm,.45cm) -- (.45cm,-.05cm)
+ arc[start angle=360, end angle=180, radius=.45cm] -- cycle;
+ \ifx\rpgicons@abilityiconnrmemp\rpgicons@abilityiconemp\else%
+ \node[#2, draw,scale=.225] (0cm,0cm) {};
+ \fi%
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{saving}{\NewCommandCopy\saving\rpgiconssaving}{}
+
+% SPELLS
+
+% line
+\pgfdeclareshape{linear}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.4cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{0cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{-.4cm}{0cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% cone
+\pgfdeclareshape{conic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \def\rx{.425cm}
+ \def\ry{.2cm}
+ \def\z{(.425cm+.2125cm)}
+ \pgfpathellipse{\pgfpoint{\z-.425cm}{0cm}}{\pgfpoint{\ry}{0cm}}{\pgfpoint{0cm}{\rx}}
+ \pgfmathparse{asin(\ry/\z)}
+ \let\angle\pgfmathresult
+ \pgfmathparse{-\rx*cos(\angle)}
+ \let\coordya\pgfmathresult
+ \pgfmathparse{\rx*cos(\angle)}
+ \let\coordyb\pgfmathresult
+ \pgfmathparse{\z-\ry*sin(\angle)}
+ \let\coordx\pgfmathresult
+ \pgfpathmoveto{\pgfpoint{\coordx-.425cm}{\coordya}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{\coordx-.425cm}{\coordyb}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{-.425cm}{0cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% square
+\pgfdeclareshape{quadratic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathrectanglecorners{\pgfpoint{.4cm}{.4cm}}{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpointorigin}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% cube
+\pgfdeclareshape{cubic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{.2cm}{.425cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{-.2cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.2cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{.1125cm}{-.1125cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% sphere
+\pgfdeclareshape{spheric}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.425cm}
+ \pgfpathmoveto{\pgfpoint{.425cm}{0cm}}
+ \pgfpatharc{180}{50}{-.425cm and -.2cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpatharc{270}{140}{-.2cm and .425cm}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpointorigin}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% cylinder
+\pgfdeclareshape{cylindric}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathellipse{\pgfpoint{0cm}{.2125cm}}{\pgfpoint{0cm}{.2cm}}{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.2125cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.2125cm}}
+ \pgfpatharc{0}{180}{-.425cm and -.2cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{.2125cm}}
+ \pgfusepath{draw} % draw shape
+ \pgfpathcircle{\pgfpoint{0cm}{-.2125cm}}{2pt}
+ \pgfusepath{fill} % draw origin
+ }
+}
+
+% verbal
+\pgfdeclareshape{verbal}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.35cm}{0cm}}
+ \pgfpatharc{180}{-115}{.35cm}
+ \pgfpathlineto{\pgfpoint{-.4cm}{-.4cm}}
+ \pgfpathlineto{\pgfpointpolar{215}{.35cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% somatic
+\pgfdeclareshape{somatic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpatharc{0}{270}{-.425cm and -.2cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpatharc{90}{360}{-.2cm and -.425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% material
+\pgfdeclareshape{material}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.4cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.4cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.4cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.4cm}}
+ \pgfpathclose
+ \pgfpathlineto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.4cm}{.2cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.4cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% focus
+\pgfdeclareshape{focus}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.35cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.15cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsspell}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every spell, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \node[#1, draw,scale=.333] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{spell}{\NewCommandCopy\spell\rpgiconsspell}{}
+
+% SPELLSCHOOLS
+
+% abjuration
+\pgfdeclareshape{abjuration}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.025cm}}
+ \pgfpatharc{270}{390}{.275cm and .175cm}
+ \pgfpatharc{210}{120}{.095cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.025cm}}
+ \pgfpatharc{270}{150}{.275cm and .175cm}
+ \pgfpatharc{-30}{60}{.095cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.125cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.3cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.3cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% conjuration
+\pgfdeclareshape{conjuration}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.225cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpatharc{110}{70}{.5cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpatharc{110}{70}{-.5cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% divination
+\pgfdeclareshape{divination}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.35cm}{-.175cm}}
+ \pgfpatharc{180}{0}{.15cm and -.25cm}
+ \pgfpatharc{180}{90}{.4cm}
+ \pgfpathmoveto{\pgfpoint{-.05cm}{-.175cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{0cm}}
+ \pgfpatharc{180}{90}{.4cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% enchantment
+\pgfdeclareshape{enchantment}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{-.2cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{.025cm}{.175cm}}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.1cm and .2cm}
+ \pgfpatharc{180}{0}{.1cm and .2cm}
+ \pgfpatharc{180}{0}{.1cm and -.2cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% evocation
+\pgfdeclareshape{evocation}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathellipse{\pgfpointorigin}{\pgfpoint{.325cm}{0cm}}{\pgfpoint{0cm}{.225cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpointpolar{30}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{30}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{60}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{60}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{120}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{120}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{150}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{150}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{210}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{240}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{240}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{300}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{300}{.4cm}}
+ \pgfpathmoveto{\pgfpointpolar{330}{.325cm and .225cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.4cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% illusion
+\pgfdeclareshape{illusion}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{90}{30}{.45cm}
+ \pgfpatharc{330}{210}{.45cm}
+ \pgfpatharc{150}{90}{.45cm}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.225cm}}{\pgfpointpolar{270}{.45cm}}}
+ \pgfpathlineto{\pgfpointpolar{270}{.35cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.225cm}}{\pgfpointpolar{240}{.45cm}}}
+ \pgfpathlineto{\pgfpointpolar{225}{.4cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.225cm}}{\pgfpointpolar{300}{.45cm}}}
+ \pgfpathlineto{\pgfpointpolar{315}{.4cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathcircle{\pgfpoint{0cm}{.075cm}}{.15cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% necromancy
+\pgfdeclareshape{necromancy}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{210}{.25cm}}
+ \pgfpatharc{210}{-30}{.25cm}
+ \pgfpatharc{150}{390}{.1cm}
+ \pgfpathmoveto{\pgfpointpolar{210}{.25cm}}
+ \pgfpatharc{390}{150}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% transmutation
+\pgfdeclareshape{transmutation}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.35cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.35cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{.35cm}}
+ \pgfpatharc{90}{-45}{.1cm}
+ \pgfpatharc{135}{360}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsspellschool}{ O{negative} m O{} }{%
+ \edef\rpgicons@spellschooliconposneg{#1}%
+ \edef\rpgicons@spellschooliconpos{positive}%
+ \ifx\rpgicons@spellschooliconposneg\rpgicons@spellschooliconpos%
+ \def\rpgicons@spellschooliconfg{fgneg}\else%
+ \def\rpgicons@spellschooliconfg{fgpos}\fi%
+ \ifx\rpgicons@spellschooliconposneg\rpgicons@spellschooliconpos%
+ \def\rpgicons@spellschooliconbg{bgneg}\else%
+ \def\rpgicons@spellschooliconbg{bgpos}\fi%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every spellschool, rpg icons/every #2,
+ baseline=\rpgicons@baseline, fgpos/.style={draw=rpgicons@bg, line width=.6pt}, fgneg/.style={draw},
+ bgpos/.style={fill}, bgneg/.style={draw}, #3] {
+ \path[scale=.333, \rpgicons@spellschooliconbg] (-.475cm,.35cm)
+ -- (-.35cm,.475cm) -- (.35cm,.475cm) -- (.475cm,.35cm) -- (.425cm,-.375cm) -- (0cm,-.475cm) -- (-.425cm,-.375cm) -- cycle;
+ \node[#2, scale=.225, \rpgicons@spellschooliconfg] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425,.425) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{spellschool}{\NewCommandCopy\spellschool\rpgiconsspellschool}{}
+
+% DAMAGES
+
+% acid
+\pgfdeclareshape{acid}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.175cm}{.05cm}}{\pgfpointpolar{-20}{.175}}}
+ \pgfpatharc{-20}{200}{-.175cm}
+ \pgfpathlineto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathclose
+ \newdimen\rpgicons@py
+ \pgfextracty{\rpgicons@py}{\pgfpointadd{\pgfpoint{0cm}{-.175cm}}{\pgfpointpolar{20}{-.25cm}}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{\rpgicons@py}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{0cm}{-.175cm}}{\pgfpointpolar{20}{-.25cm}}}
+ \pgfpatharc{20}{160}{-.25cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{\rpgicons@py}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% bludgeoning
+\pgfdeclareshape{bludgeoning}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{-.2cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.05cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.35cm}}
+ \pgfpathlineto{\pgfpoint{-.025cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{.2375cm}{.1875cm}}
+ \pgfpatharc{135}{315}{-.05cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% cold
+\pgfdeclareshape{cold}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{90}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{110}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{90}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{70}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{250}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{290}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{30}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{50}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{30}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{10}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{190}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{230}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{150}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.425cm}}
+ \pgfpathmoveto{\pgfpointpolar{130}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{150}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{170}{.35cm}}
+ \pgfpathmoveto{\pgfpointpolar{310}{.35cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.25cm}}
+ \pgfpathlineto{\pgfpointpolar{350}{.35cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% fire
+\pgfdeclareshape{fire}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.15cm}{-.425cm}}
+ \pgfpatharc{-60}{0}{.45cm and .375cm}
+ \pgfpathcurveto{\pgfpoint{.375cm}{.15cm}}{\pgfpoint{.15cm}{.375cm}}{\pgfpoint{-.05cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.425cm}}
+ \pgfpatharc{240}{135}{.45cm and .35cm}
+ \pgfpathcurveto{\pgfpoint{-.15cm}{.2cm}}{\pgfpoint{0cm}{.25cm}}{\pgfpoint{-.05cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.3cm}}
+ \pgfpathcurveto{\pgfpoint{.2cm}{-.2cm}}{\pgfpoint{.2cm}{-.05cm}}{\pgfpoint{.05cm}{.1cm}}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.3cm}}
+ \pgfpatharc{220}{150}{.35cm and .2cm}
+ \pgfpathcurveto{\pgfpoint{0cm}{-.2cm}}{\pgfpoint{.05cm}{-.1cm}}{\pgfpoint{.05cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% force
+\pgfdeclareshape{force}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{90}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{120}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{150}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{180}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{210}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{240}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{270}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{300}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{0}{.15cm}}
+ \pgfpathlineto{\pgfpointpolar{30}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{60}{.15cm}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% lightning
+\pgfdeclareshape{lightning}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% necrotic
+\pgfdeclareshape{necrotic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.35cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.075cm}}
+ \pgfpatharc{180}{0}{.35cm}
+ \pgfpathlineto{\pgfpoint{.35cm}{-.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{0cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.25cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% piercing
+\pgfdeclareshape{piercing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.3cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.3cm}{-.075cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.075cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{.35cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.05cm}{-.35cm}}
+ \pgfpathmoveto{\pgfpoint{.425cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{.425cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% poison
+\pgfdeclareshape{poison}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{0cm}{.175cm}}{\pgfpointpolar{-40}{.25cm}}}
+ \pgfpatharc{-40}{220}{.25cm}
+ \pgfpathlineto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.1cm}}
+ \pgfpathclose
+ \pgfpathcircle{\pgfpoint{-.1cm}{.15cm}}{.05cm}
+ \pgfpathcircle{\pgfpoint{.1cm}{.15cm}}{.05cm}
+ \pgfpathmoveto{\pgfpoint{.425cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% psychic
+\pgfdeclareshape{psychic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.075cm}{.4cm}}
+ \pgfpatharc{90}{180}{.425cm}
+ \pgfpatharc{180}{270}{.375cm}
+ \pgfpatharc{270}{360}{.325cm}
+ \pgfpatharc{0}{90}{.275cm}
+ \pgfpatharc{90}{180}{.225cm}
+ \pgfpatharc{180}{270}{.175cm}
+ \pgfpatharc{270}{360}{.125cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% radiant
+\pgfdeclareshape{radiant}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpointorigin}{.225cm}
+ \pgfpathmoveto{\pgfpointpolar{15}{.425cm}}
+ \pgfpatharc{15}{45}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{75}{.425cm}}
+ \pgfpatharc{75}{105}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{135}{.425cm}}
+ \pgfpatharc{135}{165}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{195}{.425cm}}
+ \pgfpatharc{195}{225}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{255}{.425cm}}
+ \pgfpatharc{255}{285}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{315}{.425cm}}
+ \pgfpatharc{315}{345}{.425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% slashing
+\pgfdeclareshape{slashing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.15cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{-.275cm}{.35cm}}
+ \pgfpatharc{0}{240}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.275cm}}
+ \pgfpathlineto{\pgfpoint{-.225cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.05cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{.35cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.025cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{-.025cm}{.2cm}}
+ \pgfpathmoveto{\pgfpoint{.325cm}{-.325cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.425cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.275cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.275cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% thunder
+\pgfdeclareshape{thunder}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{.225cm}{-.075cm}}
+ \pgfpatharc{-90}{120}{.2cm}
+ \pgfpatharc{30}{180}{.225cm}
+ \newdimen\rpgicons@qy
+ \pgfmathparse{.125cm+cos(30)*.2cm-sin(30)*.225cm}
+ \rpgicons@qy=\pgfmathresult pt
+ \pgfpathlineto{\pgfpoint{-.3cm}{\rpgicons@qy}}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.425cm}{.05cm}}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.1cm}{-.225cm}}
+ \pgfpatharc{240}{300}{.3cm}
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.35cm}}
+ \pgfpatharc{240}{300}{.5cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% healing
+\pgfdeclareshape{healing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.125cm}}
+ \pgfpatharc{0}{225}{.2cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.375cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.125cm}}
+ \pgfpatharc{180}{-45}{.2cm}
+ \pgfpathlineto{\pgfpoint{0cm}{-.375cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsdamage}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every damage, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \path[draw, scale=.333] (0cm,0cm) circle[radius=.5cm];
+ \node[#1, draw, scale=.225] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{damage}{\NewCommandCopy\damage\rpgiconsdamage}{}
+
+% ATTACKS
+
+% melee
+\pgfdeclareshape{melee}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{-.275cm}{-.35cm}}
+ \pgfpatharc{360}{90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.275cm}}
+ \pgfpathlineto{\pgfpoint{-.225cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.125cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{-.35cm}}
+ \pgfpathlineto{\pgfpoint{.05cm}{-.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.025cm}}
+ \pgfpathlineto{\pgfpoint{.225cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{.225cm}}
+ \pgfpathlineto{\pgfpoint{-.025cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{.325cm}{.325cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{0cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% ranged
+\pgfdeclareshape{ranged}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.225cm}}
+ \pgfpatharc{0}{-30}{.4cm}
+ \pgfpatharc{-45}{0}{.6cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{0}{30}{.4cm}
+ \pgfpatharc{45}{0}{.6cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.275cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{.275cm}{-.1cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.4cm}{-.225cm}}{\pgfpointpolar{-20}{.4cm}}}
+ \pgfpathlineto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.4cm}{.225cm}}{\pgfpointpolar{20}{.4cm}}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% magic
+\pgfdeclareshape{magic}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.225cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.425cm}{-.225cm}}
+ \pgflineto{\pgfpoint{-.3cm}{-.1cm}}
+ \pgflineto{\pgfpoint{-.3cm}{.125cm}}
+ \pgflineto{\pgfpoint{0cm}{.425cm}}
+ \pgfpatharc{405}{315}{.1cm}
+ \pgflineto{\pgfpoint{-.15cm}{.1cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.05cm}}
+ \pgfpatharc{180}{360}{.05cm}
+ \pgflineto{\pgfpoint{-.05cm}{0cm}}
+ \pgfpatharc{180}{90}{.1cm}
+ \pgflineto{\pgfpoint{.05cm}{-.1cm}}
+ \pgfpatharc{360}{315}{.125cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.225cm}{-.25cm}}
+ \pgflineto{\pgfpoint{-.325cm}{-.15cm}}
+ \pgfpathmoveto{\pgfpoint{.2cm}{.2cm}}
+ \pgfpatharc{180}{360}{.1cm}
+ \pgfpatharc{0}{45}{.1cm}
+ \pgfpatharc{225}{180}{.2cm}
+ \pgfpathcircle{\pgfpoint{.3cm}{-.075cm}}{.075cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% single-handed
+\pgfdeclareshape{singlehanded}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.025cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.325cm}{-.125cm}}
+ \pgfpatharc{45}{135}{.1cm}
+ \pgflineto{\pgfpoint{0cm}{-.275cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.275cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgflineto{\pgfpoint{-.1cm}{-.175cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgflineto{\pgfpoint{-.2cm}{-.075cm}}
+ \pgfpatharc{90}{135}{.125cm}
+ \pgflineto{\pgfpoint{-.425cm}{-.25cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% double-handed
+\pgfdeclareshape{doublehanded}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.025cm}{-.425cm}}
+ \pgflineto{\pgfpoint{.325cm}{-.125cm}}
+ \pgfpatharc{45}{135}{.1cm}
+ \pgflineto{\pgfpoint{0cm}{-.275cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.275cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgflineto{\pgfpoint{-.1cm}{-.175cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgflineto{\pgfpoint{-.2cm}{-.075cm}}
+ \pgfpatharc{90}{135}{.125cm}
+ \pgflineto{\pgfpoint{-.425cm}{-.25cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.425cm}}
+ \pgflineto{\pgfpoint{-.025cm}{.425cm}}
+ \pgflineto{\pgfpoint{-.325cm}{.125cm}}
+ \pgfpatharc{225}{315}{.1cm}
+ \pgflineto{\pgfpoint{0cm}{.275cm}}
+ \pgflineto{\pgfpoint{.15cm}{.275cm}}
+ \pgfpatharc{450}{270}{.05cm}
+ \pgflineto{\pgfpoint{.1cm}{.175cm}}
+ \pgfpatharc{90}{180}{.1cm}
+ \pgflineto{\pgfpoint{.2cm}{.075cm}}
+ \pgfpatharc{270}{315}{.125cm}
+ \pgflineto{\pgfpoint{.425cm}{.25cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconsattack}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every attack, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \node[#1, draw, scale=.333] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{attack}{\NewCommandCopy\attack\rpgiconsattack}{}
+
+% CONDITIONS
+
+% buff
+\pgfdeclareshape{buff}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.225cm}}
+ \pgflineto{\pgfpoint{-.225cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.1cm}{-.3cm}}
+ \pgflineto{\pgfpoint{.125cm}{-.3cm}}
+ \pgflineto{\pgfpoint{.425cm}{0cm}}
+ \pgfpatharc{45}{135}{.1cm}
+ \pgflineto{\pgfpoint{.1cm}{-.15cm}}
+ \pgflineto{\pgfpoint{-.05cm}{-.15cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgflineto{\pgfpoint{0cm}{-.05cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgflineto{\pgfpoint{-.1cm}{.05cm}}
+ \pgfpatharc{90}{135}{.125cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.25cm}{-.225cm}}
+ \pgflineto{\pgfpoint{-.15cm}{-.325cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{.425cm}}
+ \pgflineto{\pgfpoint{.25cm}{.425cm}}
+ \pgflineto{\pgfpoint{.25cm}{.275cm}}
+ \pgfpatharc{360}{180}{.125cm}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% blinded
+\pgfdeclareshape{blinded}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{90}{30}{.45cm}
+ \pgfpatharc{330}{210}{.45cm}
+ \pgfpatharc{150}{90}{.45cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.25cm}{-.25cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgflineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% charmed
+\pgfdeclareshape{charmed}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.1cm}}
+ \pgfpatharc{180}{360}{.175cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.175cm}{.15cm}}
+ \pgfpatharc{0}{225}{.0625cm}
+ \pgfpathlineto{\pgfpoint{-.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{.15cm}}
+ \pgfpatharc{180}{-45}{.0625cm}
+ \pgfpathlineto{\pgfpoint{-.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{.15cm}}
+ \pgfpatharc{0}{225}{.0625cm}
+ \pgfpathlineto{\pgfpoint{.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{.15cm}}
+ \pgfpatharc{180}{-45}{.0625cm}
+ \pgfpathlineto{\pgfpoint{.175cm}{0cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% deafened
+\pgfdeclareshape{deafened}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.275cm}}
+ \pgfpatharc{180}{360}{.15cm}
+ \pgflineto{\pgfpoint{.125cm}{-.225cm}}
+ \pgfpatharc{180}{135}{.25cm}
+ \pgfpatharc{315}{360}{.25cm}
+ \pgfpatharc{0}{180}{.275cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpatharc{-90}{90}{.075cm}
+ \pgflineto{\pgfpoint{-.15cm}{.125cm}}
+ \pgfpatharc{180}{45}{.15cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{-.425cm}}
+ \pgflineto{\pgfpoint{-.2cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{0cm}{0cm}}
+ \pgflineto{\pgfpoint{.425cm}{.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% exhausted
+\pgfdeclareshape{exhausted}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.175cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.275cm}{.15cm}}
+ \pgfpatharc{180}{0}{-.1cm}
+ \pgfpathmoveto{\pgfpoint{-.075cm}{.15cm}}
+ \pgfpatharc{180}{0}{-.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% frightened
+\pgfdeclareshape{frightened}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.175cm}
+ \pgfpathclose
+ \pgfpathcircle{\pgfpoint{-.175cm}{.125cm}}{.075cm}
+ \pgfpathcircle{\pgfpoint{.175cm}{.125cm}}{.075cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% grappled
+\pgfdeclareshape{grappled}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.3cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{.15cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{.15cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{0cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{0cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.15cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{-.2cm}{-.15cm}}
+ \pgfpatharc{90}{-90}{.075cm}
+ \pgfpathlineto{\pgfpoint{-.3cm}{-.3cm}}
+ \pgfpatharc{270}{90}{.075cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.425cm}{.05cm}}
+ \pgfpatharc{0}{90}{.25cm}
+ \pgfpathlineto{\pgfpoint{-.05cm}{.3cm}}
+ \pgfpatharc{180}{270}{.15cm}
+ \pgfpathlineto{\pgfpoint{.175cm}{.15cm}}
+ \pgfpathlineto{\pgfpoint{.175cm}{-.425cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{-.275cm}}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.275cm}}
+ \pgfpathmoveto{\pgfpoint{.175cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{.175cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.3cm}{.3cm}}
+ \pgfpathlineto{\pgfpoint{-.3cm}{.425cm}}
+ \pgfpathmoveto{\pgfpoint{-.3cm}{-.3cm}}
+ \pgfpathlineto{\pgfpoint{-.3cm}{-.425cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% incapacitated
+\pgfdeclareshape{incapacitated}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{30}{.425cm}}
+ \pgfpatharc{270}{210}{.425cm}
+ \pgfpathlineto{\pgfpointpolar{90}{-.425cm}}
+ \pgfpatharc{30}{90}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{90}{.425cm}}
+ \pgfpatharc{330}{270}{.425cm}
+ \pgfpathlineto{\pgfpointpolar{150}{-.425cm}}
+ \pgfpatharc{90}{150}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{150}{.425cm}}
+ \pgfpatharc{30}{-30}{.425cm}
+ \pgfpathlineto{\pgfpointpolar{210}{-.425cm}}
+ \pgfpatharc{150}{210}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{30}{.25cm}}
+ \pgfpatharc{270}{210}{.25cm}
+ \pgfpatharc{330}{270}{.25cm}
+ \pgfpatharc{30}{-30}{.25cm}
+ \pgfpatharc{90}{30}{.25cm}
+ \pgfpatharc{150}{90}{.25cm}
+ \pgfpatharc{210}{150}{.25cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% invisible
+\pgfdeclareshape{invisible}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{-15}{.425cm}}
+ \pgfpatharc{-15}{15}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{30}{.425cm}}
+ \pgfpatharc{30}{60}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{75}{.425cm}}
+ \pgfpatharc{75}{105}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{120}{.425cm}}
+ \pgfpatharc{120}{150}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{165}{.425cm}}
+ \pgfpatharc{165}{195}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{210}{.425cm}}
+ \pgfpatharc{210}{240}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{255}{.425cm}}
+ \pgfpatharc{255}{285}{.425cm}
+ \pgfpathmoveto{\pgfpointpolar{300}{.425cm}}
+ \pgfpatharc{300}{330}{.425cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% paralyzed
+\pgfdeclareshape{paralyzed}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.225cm}}
+ \pgfpatharc{180}{0}{.175cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.25cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.2cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.2cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.05cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.05cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.2cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% petrified
+\pgfdeclareshape{petrified}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpointpolar{45}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{100}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{135}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{190}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{230}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{250}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{300}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{350}{.425cm}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpointpolar{135}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{130}{.35cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{.075cm}}
+ \pgfpathlineto{\pgfpointpolar{220}{.2cm}}
+ \pgfpathlineto{\pgfpointpolar{240}{.325cm}}
+ \pgfpathmoveto{\pgfpointpolar{300}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{330}{.3cm}}
+ \pgfpathlineto{\pgfpointpolar{350}{.225cm}}
+ \pgfpathmoveto{\pgfpointpolar{45}{.425cm}}
+ \pgfpathlineto{\pgfpointpolar{60}{.3cm}}
+ \pgfpathlineto{\pgfpointpolar{130}{.35cm}}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.175cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.15cm}}
+ \pgfpathlineto{\pgfpoint{.125cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.1cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.075cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.1cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% poisoned
+\pgfdeclareshape{poisoned}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{0cm}{-.2cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{-.125cm}}
+ \pgfpathlineto{\pgfpoint{.15cm}{-.2cm}}
+ \pgfpathmoveto{\pgfpoint{.25cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{.1cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{.25cm}{.025cm}}
+ \pgfpathmoveto{\pgfpoint{-.25cm}{.175cm}}
+ \pgfpathlineto{\pgfpoint{-.1cm}{.1cm}}
+ \pgfpathlineto{\pgfpoint{-.25cm}{.025cm}}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% prone
+\pgfdeclareshape{prone}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{.2cm}{-.125cm}}{.125cm}
+ \pgfpathmoveto{\pgfpoint{-.425cm}{0cm}}
+ \pgfpathlineto{\pgfpoint{-.15cm}{0cm}}
+ \pgfpatharc{90}{-90}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.25cm}}
+
+ \pgfpathmoveto{\pgfpoint{.225cm}{.15cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgfpatharc{180}{270}{.1cm}
+ \pgfpatharc{90}{180}{.1cm}
+ \pgfpatharc{0}{90}{.1cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.25cm}}
+ \pgfpatharc{270}{360}{.1cm}
+ \pgfpatharc{180}{270}{.1cm}
+ \pgfpatharc{90}{180}{.1cm}
+ \pgfpatharc{0}{90}{.1cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% restrained
+\pgfdeclareshape{restrained}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.075cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{-.075cm}{.225cm}}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.2cm}{0cm}}
+ \pgfpatharc{270}{180}{.1cm}
+ \pgfpathlineto{\pgfpoint{-.3cm}{.3cm}}
+ \pgfpatharc{0}{90}{.125cm}
+ \pgfpathlineto{\pgfpoint{-.425cm}{-.075cm}}
+ \pgfpatharc{180}{235}{.1cm}
+ \pgfpathlineto{\pgfpoint{-.3cm}{-.225cm}}
+ \pgfpathmoveto{\pgfpoint{.075cm}{-.225cm}}
+ \pgfpathlineto{\pgfpoint{.075cm}{.225cm}}
+ \pgfpatharc{90}{0}{.125cm}
+ \pgfpathlineto{\pgfpoint{.2cm}{0cm}}
+ \pgfpatharc{-90}{0}{.1cm}
+ \pgfpathlineto{\pgfpoint{.3cm}{.3cm}}
+ \pgfpatharc{180}{90}{.125cm}
+ \pgfpathlineto{\pgfpoint{.425cm}{-.075cm}}
+ \pgfpatharc{360}{330}{.1cm}
+ \pgfpathlineto{\pgfpoint{.3cm}{-.225cm}}
+ \pgfpathmoveto{\pgfpoint{.35cm}{-.225cm}}
+ \pgfpatharc{90}{-90}{.05cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.325cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpoint{.35cm}{-.325cm}}
+ \pgfpatharc{90}{-90}{.05cm}
+ \pgfpathlineto{\pgfpoint{-.35cm}{-.425cm}}
+ \pgfpatharc{270}{90}{.05cm}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% stunned
+\pgfdeclareshape{stunned}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.425cm}
+ \pgfpathellipse{\pgfpoint{0cm}{-.175cm}}{\pgfpoint{0cm}{.1cm}}{\pgfpoint{.175cm}{0cm}}
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{90}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{126}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{162}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{198}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{234}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{270}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{306}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{342}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{18}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{-.175cm}{.125cm}}{\pgfpointpolar{54}{.05cm}}}
+ \pgfpathclose
+ \pgfpathmoveto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{90}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{126}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{162}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{198}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{234}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{270}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{306}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{342}{.05cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{18}{.125cm}}}
+ \pgfpathlineto{\pgfpointadd{\pgfpoint{.175cm}{.125cm}}{\pgfpointpolar{54}{.05cm}}}
+ \pgfpathclose
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% unconscious
+\pgfdeclareshape{unconscious}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.15cm}}
+ \pgfpatharc{90}{-30}{.425cm and .15cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{-.15cm}}
+ \pgfpatharc{270}{150}{.425cm and .15cm}
+ \pgfpathmoveto{\pgfpoint{-.35cm}{.15cm}}
+ \pgfpatharc{270}{360}{.125cm}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpatharc{0}{90}{.125cm}
+ \pgfpathmoveto{\pgfpoint{.1cm}{-.15cm}}
+ \pgfpatharc{270}{360}{.125cm}
+ \pgfpatharc{180}{270}{.125cm}
+ \pgfpatharc{90}{180}{.125cm}
+ \pgfpatharc{0}{90}{.125cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% hearing
+\pgfdeclareshape{hearing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{-.175cm}{-.275cm}}
+ \pgfpatharc{180}{360}{.15cm}
+ \pgflineto{\pgfpoint{.125cm}{-.225cm}}
+ \pgfpatharc{180}{135}{.25cm}
+ \pgfpatharc{315}{360}{.25cm}
+ \pgfpatharc{0}{180}{.275cm}
+ \pgfpathmoveto{\pgfpoint{-.15cm}{-.1cm}}
+ \pgfpatharc{-90}{90}{.075cm}
+ \pgflineto{\pgfpoint{-.15cm}{.125cm}}
+ \pgfpatharc{180}{45}{.15cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+% seeing
+\pgfdeclareshape{seeing}{
+ \anchor{center}{\pgfpointorigin} % within the node, (0,0) is the center
+ \anchor{text} % this is used to center the text in the node
+ {\pgfpoint{-.5\wd\pgfnodeparttextbox}{-.5\ht\pgfnodeparttextbox}}
+
+ \foregroundpath{
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpatharc{90}{30}{.45cm}
+ \pgfpatharc{330}{210}{.45cm}
+ \pgfpatharc{150}{90}{.45cm}
+ \pgfpathmoveto{\pgfpoint{0cm}{.225cm}}
+ \pgfpathcircle{\pgfpoint{0cm}{0cm}}{.15cm}
+ \pgfusepath{draw} % draw shape
+ }
+}
+
+\NewDocumentCommand{\rpgiconscondition}{ m O{} }{%
+ \hspace{\rpgicons@beforesep}%
+ \tikz[rpg icons, rpg icons/every condition, rpg icons/every #1,
+ baseline=\rpgicons@baseline, #2] {
+ \node[#1, draw, scale=.333] (0cm,0cm) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ }%
+ \hspace{\rpgicons@aftersep}%
+}
+\@ifundefined{condition}{\NewCommandCopy\condition\rpgiconscondition}{}
+
+% make tikz icons available as pics
+\ifrpgicons@pics
+
+\tikzset{
+ rpg icons/create pic from shape/.code={%
+ \tikzset{
+ rpg icons #1/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every #1]
+ \node[draw, scale=.333] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ },
+ }%
+ },
+ rpg icons/create pic from ability shape/.code={%
+ \tikzset{
+ rpg icons #1 ability/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every ability, rpg icons/every #1]
+ \path[scale=.333, pic actions] (0cm,0cm) circle[radius=.45cm];
+ \node[draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }%
+ },
+ rpg icons/create pic from saving shape/.code={%
+ \tikzset{
+ rpg icons #1 saving/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every saving, rpg icons/every #1]
+ \path[draw, scale=.333, pic actions] (-.45cm,.45cm) -- (.45cm,.45cm) -- (.45cm,-.05cm)
+ arc[start angle=360, end angle=180, radius=.45cm] -- cycle;
+ \node[#1, draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }%
+ },
+ rpg icons/create pic from spellschool shape/.code={%
+ \tikzset{
+ rpg icons #1 spellschool/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every spellschool, rpg icons/every #1]
+ \path[draw, scale=.333, pic actions] (-.475cm,.35cm)
+ -- (-.35cm,.475cm) -- (.35cm,.475cm) -- (.475cm,.35cm) -- (.425cm,-.375cm) -- (0cm,-.475cm) -- (-.425cm,-.375cm) -- cycle;
+ \node[#1, draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }%
+ },
+ rpg icons/create pic from damage shape/.code={
+ \tikzset{
+ rpg icons #1 damage/.pic={
+ \begin{scope}[every node/.append style={#1}, rpg icons/every damage, rpg icons/every #1]
+ \path[draw, scale=.333, pic actions] (0cm,0cm) circle[radius=.5cm];
+ \node[#1, draw, scale=.225] (0cm,0cm) (-node) {};
+ \path[draw=none, scale=.333] ([yshift=-1pt].425cm,.425cm) rectangle ([yshift=1pt]-.425cm,-.425cm);
+ \end{scope}
+ }
+ }
+ },
+ rpg icons/create pic from shape/.list/.expanded={%
+ \rpgicons@allshapes%
+ },
+ rpg icons/create pic from ability shape/.list={%
+ strength, dexterity, dexterity alt, constitution, intelligence, wisdom, charisma,
+ resilience, sanity, perception, luck, armor, proficiency%
+ },
+ rpg icons/create pic from saving shape/.list={%
+ strength, dexterity, dexterity alt, constitution, intelligence, wisdom, charisma,
+ resilience, sanity, perception, luck, armor, proficiency%
+ },
+ rpg icons/create pic from spellschool shape/.list={%
+ abjuration, conjuration, divination, enchantment, evocation, illusion, necromancy, transmutation%
+ },
+ rpg icons/create pic from damage shape/.list={%
+ acid, bludgeoning, cold, fire, force, lightning, necrotic, piercing, poison, psychic,
+ radiant, slashing, thunder, healing%
+ }
+}
+
+\fi
+
+% ROLL SYNTAX
+
+\ExplSyntaxOn
+
+\cs_if_exist:NF \rpgicons_roll_syntax_parse:n {
+
+ \bool_new:N \l__rpgicons_unicode_mode_bool
+ \sys_if_engine_luatex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+ }
+ \sys_if_engine_xetex:T {
+ \bool_set_true:N \l__rpgicons_unicode_mode_bool
+ }
+
+ \regex_new:N \l__rpgicons_roll_syntax_die_regex
+ \cs_generate_variant:Nn \regex_set:Nn { Ne }
+ \cs_new:Npn \rpgicons_roll_syntax_die_set:n #1 {
+ \regex_set:Ne \l__rpgicons_roll_syntax_die_regex { [ \clist_use:nn {#1} { } ] }
+ }
+
+ \cs_new:Npn \rpgicons_roll_syntax_convert:n #1 {
+ \str_case:nnF {#1} {
+ { 2 } { twoside }
+ { 4 } { fourside }
+ { 6 } { sixside }
+ { 8 } { eightside }
+ { 10 } { tenside }
+ { 12 } { twelveside }
+ { 20 } { twentyside }
+ { 100 } { hundredside }
+ { F } { fudge }
+ }
+ {#1}
+ }
+
+ \seq_new:N \l__rpgicons_roll_syntax_seq
+ \tl_new:N \l__rpgicons_roll_syntax_part_tl
+ \regex_new:N \l__rpgicons_roll_syntax_split_regex
+ \regex_new:N \l__rpgicons_roll_syntax_plusminus_regex
+ \regex_new:N \l__rpgicons_roll_syntax_times_regex
+ \bool_if:NTF \l__rpgicons_unicode_mode_bool {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-\x{2212}x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-\x{2212}])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+ } {
+ \regex_set:Nn \l__rpgicons_roll_syntax_split_regex { \s*([\+\-x\*\x{00D7}])\s* }
+ \regex_set:Nn \l__rpgicons_roll_syntax_plusminus_regex { \A([\+\-])\Z }
+ \regex_set:Nn \l__rpgicons_roll_syntax_times_regex { \A([x\*\x{00D7}])\Z }
+ }
+ \regex_new:N \l__rpgicons_roll_syntax_dice_regex
+ \cs_new:Npn \rpgicons_roll_syntax_parse:n #1 {
+ \regex_set:Nn \l__rpgicons_roll_syntax_dice_regex { \A(\d*)\ur{l__rpgicons_roll_syntax_die_regex}([F\d]+)\Z }
+ \regex_split:NnN \l__rpgicons_roll_syntax_split_regex {#1} \l__rpgicons_roll_syntax_seq
+ \seq_map_inline:Nn \l__rpgicons_roll_syntax_seq {
+ \tl_set:Ne \l__rpgicons_roll_syntax_part_tl {##1}
+ \regex_replace_case_once:nNTF {
+ { \l__rpgicons_roll_syntax_plusminus_regex } { \c{,} $\1$ \c{,} }
+ { \l__rpgicons_roll_syntax_times_regex } { \c{,} $\c{times}$ \c{,} }
+ { \l__rpgicons_roll_syntax_dice_regex }
+ { \c{ rpgiconsdie } { \c{ rpgicons_roll_syntax_convert:n } { \2 } } { \1 } }
+ } \l__rpgicons_roll_syntax_part_tl
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ { \tl_use:N \l__rpgicons_roll_syntax_part_tl }
+ }
+ }
+
+}
+
+\tikzset{
+ rpg ~ icons/roll ~ syntax/.code={
+ \rpgicons_roll_syntax_die_set:n {#1}
+ },
+ rpg ~ icons/roll ~ syntax={d,D}
+}
+
+\NewDocumentCommand{\rpgiconsroll}{ m }{
+ \rpgicons_roll_syntax_parse:n {#1}
+}
+
+\ExplSyntaxOff
+
+\@ifundefined{roll}{\NewCommandCopy\roll\rpgiconsroll}{}
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/rpgicons/rpgicons.sty b/macros/latex/contrib/rpgicons/rpgicons.sty
new file mode 100644
index 0000000000..f80d5955c1
--- /dev/null
+++ b/macros/latex/contrib/rpgicons/rpgicons.sty
@@ -0,0 +1,33 @@
+% File: rpgicons.sty
+% Copyright 2024 Jasper Habicht (mail(at)jasperhabicht.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/.
+%
+% This file is part of the `rpgicons' package (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+\ProvidesExplPackage {rpgicons} {2024-04-28} {1.8.2}
+ {rpg Icons Package}
+
+\bool_new:N \l__rpgicons_use_legacy_variant_bool
+\clist_new:N \l__rpgicons_forwarded_options_clist
+\keys_define:nn { rpgicons / select ~ variant } {
+ l3 .bool_set:N = \l__rpgicons_use_legacy_variant_bool ,
+ l3 .default:n = { false } ,
+ pgf .bool_set:N = \l__rpgicons_use_legacy_variant_bool ,
+ pgf .default:n = { true } ,
+ unknown .code:n = { \clist_put_right:Nn \l__rpgicons_forwarded_options_clist {#1} }
+}
+\ProcessKeyOptions [ rpgicons / select ~ variant ]
+
+\bool_if:NTF \l__rpgicons_use_legacy_variant_bool {
+ \RequirePackage [ \l__rpgicons_forwarded_options_clist ] { rpgicons-pgf }
+} {
+ \RequirePackage [ \l__rpgicons_forwarded_options_clist ] { rpgicons-l3 }
+}
+
+% EOF \ No newline at end of file
diff --git a/macros/latex/contrib/siunitx/CHANGELOG.md b/macros/latex/contrib/siunitx/CHANGELOG.md
index 97c77dc5bc..4dad256c37 100644
--- a/macros/latex/contrib/siunitx/CHANGELOG.md
+++ b/macros/latex/contrib/siunitx/CHANGELOG.md
@@ -7,6 +7,12 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
## [Unreleased]
+## [v3.3.17] - 2024-05-06
+
+### Fixed
+- Correct treatment of end-iof-line spaces when allowing breaks (see issue
+ [\#730](https://github.com/josephwright/siunitx/issues/730))
+
## [v3.3.16] - 2024-04-24
### Fixed
@@ -2104,7 +2110,8 @@ Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to
### Added
- First public testing release (as `si`)
-[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.16...HEAD
+[Unreleased]: https://github.com/josephwright/siunitx/compare/v3.3.17...HEAD
+[v3.3.17]: https://github.com/josephwright/siunitx/compare/v3.3.16...v3.3.17
[v3.3.16]: https://github.com/josephwright/siunitx/compare/v3.3.15...v3.3.16
[v3.3.15]: https://github.com/josephwright/siunitx/compare/v3.3.14...v3.3.15
[v3.3.14]: https://github.com/josephwright/siunitx/compare/v3.3.13...v3.3.14
diff --git a/macros/latex/contrib/siunitx/siunitx-code.pdf b/macros/latex/contrib/siunitx/siunitx-code.pdf
index 2dc8e65250..0e89bc3e22 100644
--- a/macros/latex/contrib/siunitx/siunitx-code.pdf
+++ b/macros/latex/contrib/siunitx/siunitx-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/siunitx/siunitx-quantity.dtx b/macros/latex/contrib/siunitx/siunitx-quantity.dtx
index 9e3c14ffaf..959d9e3a30 100644
--- a/macros/latex/contrib/siunitx/siunitx-quantity.dtx
+++ b/macros/latex/contrib/siunitx/siunitx-quantity.dtx
@@ -394,10 +394,10 @@
{ \tl_if_blank_p:n {#1} }
{ ! \tl_if_head_eq_charcode_p:nN {#2} { 1 } }
{
- \tl_use:N \l_@@_product_tl
\bool_if:NTF \l_@@_break_bool
{ \penalty \binoppenalty }
{ \nobreak }
+ \tl_use:N \l_@@_product_tl
\siunitx_print_unit:n {#2}
}
{ \siunitx_print_unit:o { \use_none:n #2 } }
diff --git a/macros/latex/contrib/siunitx/siunitx.dtx b/macros/latex/contrib/siunitx/siunitx.dtx
index 6f49440f7c..00af01ae8a 100644
--- a/macros/latex/contrib/siunitx/siunitx.dtx
+++ b/macros/latex/contrib/siunitx/siunitx.dtx
@@ -121,7 +121,7 @@
%
% Identify the package and give the over all version information.
% \begin{macrocode}
-\ProvidesExplPackage {siunitx} {2024-04-24} {3.3.16}
+\ProvidesExplPackage {siunitx} {2024-05-06} {3.3.17}
{A comprehensive (SI) units package}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/siunitx/siunitx.pdf b/macros/latex/contrib/siunitx/siunitx.pdf
index 3c058ce3fa..5dea63dd66 100644
--- a/macros/latex/contrib/siunitx/siunitx.pdf
+++ b/macros/latex/contrib/siunitx/siunitx.pdf
Binary files differ
diff --git a/macros/latex/contrib/spbmark/spbmark.pdf b/macros/latex/contrib/spbmark/spbmark.pdf
index c86957a167..b7bbe5392d 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 e4c45d13e8..67f5450dea 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,l3keys2e}
-\ProvidesExplPackage{spbmark}{2024/04/24}{1.46f}
+\ProvidesExplPackage{spbmark}{2024/05/02}{1.46g}
{Customize superscripts and subscripts}
\cs_generate_variant:Nn \box_set_ht:Nn { cv }
diff --git a/macros/latex/contrib/spbmark/spbmark.tex b/macros/latex/contrib/spbmark/spbmark.tex
index 9bd3057ad4..e1d318026c 100644
--- a/macros/latex/contrib/spbmark/spbmark.tex
+++ b/macros/latex/contrib/spbmark/spbmark.tex
@@ -7,8 +7,8 @@
{
package = spbmark,
title = the spbmark package,
- version = v1.46f,
- date = 2024/04/24,
+ version = v1.46g,
+ date = 2024/05/02,
authors = Qu Yi,
info = Customize superscript and subscript,
email = toquyi@163.com,
@@ -46,7 +46,7 @@
\begin{document}
\section{Macro package options}
-The following macro package options will redefine the script commands of the \LaTeX{} kernel. If you do not specify the values of boolean options, they default to \code{true}. These options can also be changed in the preamble area and main body using the global control command \cs{sbpset}.
+The following macro package options will redefine the script commands of the \LaTeX{} kernel. If you do not specify the values of boolean options, they default to \code{true}. These options can also be changed in the preamble area and main body using the global control command \cs{spbset}.
\begin{options}
\keychoice{text}{true,\fbox{false}}\newtag[Changed]%
\cs{textsuperscript} and \cs{textsubscript} are equivalent to the \cs{super} and \cs{sub} commands. At this point, you can use the \cs{defspbstyle} command to define the style \code{textsp} and \code{textsb} to change the format of the text superscript and subscript.
diff --git a/macros/latex/contrib/tkz/tkz-elements/README.md b/macros/latex/contrib/tkz/tkz-elements/README.md
index 1f2043e435..a4d8d90fad 100644
--- a/macros/latex/contrib/tkz/tkz-elements/README.md
+++ b/macros/latex/contrib/tkz/tkz-elements/README.md
@@ -1,12 +1,12 @@
# tkz-elements — for euclidean geometry
-Release 2.20c 2024/03/26
+Release 2.25c 2024/04/28
## Description
-`tkz-elements v.2.20c` 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.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`.
- 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.
+ 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.
## Licence
@@ -39,7 +39,9 @@ To use the package `tkz-elements`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-euclide,tkz-elements}
+% !TEX TS-program = lualatex
+\usepackage[mini]{tkz-euclide}
+\usepackage{tkz-elements}
\begin{document}
\begin{tkzelements}
your code
@@ -60,27 +62,32 @@ An important example `Golden Arbelos` using the package is on the site. All the
are on the site.
## History
+ - version 2.25c
+ - French documentation at my site: [http://altermundus.fr](http://altermundus.fr)
+ - Added `colinear_at` a new method for the classe `line`
+ - Added `cevian`, `pedal`, `conway_circle`, `conway_points` new methods to the class `triangle`.
+
- version 2.20c
- - Package:
- - Added class matrix; methods are mainly of order 2, sometimes of order 3.
- - Added function solve_quadratic. This function can be used to solve second-degree equations with real or complex numbers.
- - Added method print for the class point. Example z.A : print ()
- - Correction of the macro tkzDN. I deleted a spurious space
- - Modification of vector class attributes. Attributes h and t become head and tail.
- - The mtx attribute is introduced for point and vector.
- z.A.mtx represents the column matrix whose coefficients are the point's coordinates. Same for vectors.
- - Documentation:
- - Rewriting of all texts
- - Correction of example: pentagon
- - Documentation about matrices
+ - Package:
+ - Added class matrix; methods are mainly of order 2, sometimes of order 3.
+ - Added function solve_quadratic. This function can be used to solve second-degree equations with real or complex numbers.
+ - Added method print for the class point. Example z.A : print ()
+ - Correction of the macro tkzDN. I deleted a spurious space
+ - Modification of vector class attributes. Attributes h and t become head and tail.
+ - The mtx attribute is introduced for point and vector.
+ z.A.mtx represents the column matrix whose coefficients are the point's coordinates. Same for vectors.
+ - Documentation:
+ - Rewriting of all texts
+ - Correction of example: pentagon
+ - Documentation about matrices
- version 2.00c
- - class development “vectorâ€
- - added attribute “vecâ€
- - added “at†and “orthogonal†methods to the class “pointâ€
+ - class development `vector`
+ - added attribute `vec`
+ - added `at` and `orthogonal` methods to the class `point`
- rewriting the function angle\_normalize\_
- - modification of the slope attribute for the “lineâ€, now the result is normalized.
+ - modification of the slope attribute for the `line`, now the result is normalized.
- the angles of a triangle are also normalized
- added function format\_number(number,decimal) sets the number of digits in the decimal part.
- added \tkzDN a macro pour formater les nombres dans la partie TikZ
@@ -115,7 +122,7 @@ are on the site.
- method trilinear (to use trilinear coordinates)
- method barycentric (to use barycentric coordinates)
- Added some functions
- - bisector (a,b,c) altitude (a,b,c) bisector_ext(a,b,c) equilateral (a,b) midpoint (a,b) to avoid creating unnecessary objects.
+ - `bisector (a,b,c)` `altitude (a,b,c)` `bisector_ext(a,b,c)` `equilateral (a,b)` `midpoint (a,b)` to avoid creating unnecessary objects.
- Added new examples and a cheat sheet in the documentation
@@ -133,72 +140,55 @@ are on the site.
- version 1.60c
- added Internal and external tangents common to two circles:
- - function circle : `external_tangent`(C)
- - function circle : `internal_tangent(C)
+ - function circle : `external_tangent(C)`
+ - function circle : `internal_tangent(C)`
- radical_center and radical_circle are also valid for two circles
- - function `radical_center` (C1,C2,C3)
- - function `radical_circle` (C1,C2,C3)
- - function `circles_position` (C1,C2)
- - function `midcircle` (C1,C2) powerful tool for working with inversions
+ - function `radical_center (C1,C2,C3)`
+ - function `radical_circle (C1,C2,C3)`
+ - function `circles_position (C1,C2)`
+ - function `midcircle (C1,C2)` powerful tool for working with inversions
- Bug corrected in midarc now use get_angle instead of get_angle_
- Modification of a triangle attribute `ca` replaces `ac` to designate the line passing through the third and first points
- - The center of symmetry of a parallelogram is named "center" instead of "i".
+ - The center of symmetry of a parallelogram is named "center" instead of `i`.
- Correction documentation
- Correction of examples using the circle:point (k) method, where k is now a real number rather than an angle.
- version 1.50c Correction of the documentation
- - Added "swap" option to create triangles from the "line" object.
- - "iscyclic" is a new method to know if a quadrilateral is inscribable in a circle.
- - Added function "diameter" to create a circle.
- - Added function "swap" to swap two points.
- - Correction method "gold" of object rectangle.
- - Correction method "in_circle_" of object triangle.
- - Correction method "incentral_tr_" of object triangle.
- - Added method "soddy_center" of object triangle.
- - Added option "swap" for method "square" of object line.
- - Added method "report" for object line. Transfer a defined length from a point
- - Added option "swap" to the function "square : side"
+ - Added `swap` option to create triangles from the "line" object.
+ - `iscyclic` is a new method to know if a quadrilateral is inscribable in a circle.
+ - Added function `diameter` to create a circle.
+ - Added function `swap` to swap two points.
+ - Correction method `gold` of object rectangle.
+ - Correction method `in_circle_` of object triangle.
+ - Correction method `incentral_tr_` of object triangle.
+ - Added method `soddy_center` of object triangle.
+ - Added option `swap` for method `square` of object line.
+ - Added method `report` for object line. Transfer a defined length from a point
+ - Added option `swap` to the function "square : side"
- Version 1.40c Restructuring objects
- New version for all transformations. Now, they accept all objects as parameters.
-
- Symmetry_axial has changed its name to reflection.
-
- Added scale to north south etc.. (point object).
-
- Change the "point" method of the objects circle and ellipse. now the parameter is un real t (between 0 and 1) and not an angle
-
- Added the method `check_equilateral` to know if a triangle is equilateral.
-
-
- Added option "indirect" to the method equilateral for a line object.
-
- Correction of the documentation. (Added sections).
-
-
-
-
+ - New version for all transformations. Now, they accept all objects as parameters.
+ - Symmetry_axial has changed its name to reflection.
+ - Added scale to north south etc.. (point object).
+ - Change the "point" method of the objects circle and ellipse. now the parameter is un real t (between 0 and 1) and not an angle
+ - Added the method `check_equilateral` to know if a triangle is equilateral.
+ - Added option "indirect" to the method equilateral for a line object.
+ - Correction of the documentation. (Added sections).
+
- Version 1.20 Memory management: tables are emptied when the tkzelements environment is opened.
- `set_lua_to_tex` has been replaced by `tkzUseLua` to transfer data between the `tkzelements` and `tikzpicture` environments.
-
- New version of `inversion` with respect to a circle method. It selects the correct algorithm based on the object passed as a parameter.
-
- Added an `in_out_disk` method for the `circle` object, which indicates whether or not a point is in the disk. `in_out` is for the circle.
-
- Added two methods: `radical_center (C1,C2,C3)` radical center of three circles.
- `radical_circle (C1,C2,C3)` orthogonal circle of three circles.
-
- Added function `circle : radius` to define a circle with a centre and a radius.
-
- Added methods `normalize` and `normalize_inv` for `line`.
-
- Added methods `translation` and `set_translation` to the `line` object.
-
- Added an example to illustrate combinations of methods and attributes.
+ - `set_lua_to_tex` has been replaced by `tkzUseLua` to transfer data between the `tkzelements` and `tikzpicture` environments.
+ - New version of `inversion` with respect to a circle method. It selects the correct algorithm based on the object passed as a parameter.
+ - Added an `in_out_disk` method for the `circle` object, which indicates whether or not a point is in the disk. `in_out` is for the circle.
+ - Added two methods: `radical_center (C1,C2,C3)` radical center of three circles.
+ `radical_circle (C1,C2,C3)` orthogonal circle of three circles.
+ - Added function `circle : radius` to define a circle with a centre and a radius.
+ - Added methods `normalize` and `normalize_inv` for `line`.
+ - Added methods `translation` and `set_translation` to the `line` object.
+ - Added an example to illustrate combinations of methods and attributes.
- First version 1.00b
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 f84c58d941..7ae96c7ada 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
@@ -121,9 +121,9 @@ Three attributes are used (south, west, radius).
\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}{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}\\
\midrule
@@ -208,7 +208,7 @@ Three attributes are used (south, west, radius).
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- scale = 1.6
+ scale = 1.25
z.A = point: new (1,0)
z.B = point: new (5,2)
z.C = point: new (1.2,2)
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 5ea44a57b7..3146f73461 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
@@ -56,23 +56,6 @@ The first attributes are the three points that define the ellipse: : the \Iattr
z.Co = E.covertex
z.Ve = E.vertex
\end{tkzelements}
-\begin{tikzpicture}
- \pgfkeys{/pgf/number format/.cd,fixed,precision=2}
- \tkzGetNodes
- \tkzDrawCircles[teal](C,A)
- \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},
- \tkzUseLua{slope})
- \tkzDrawPoints(C,A,B,b,W,S,F1,F2)
- \tkzLabelPoints(C,A,B)
- \tkzDrawLine[add = .5 and .5](A,W)
- \tkzLabelSegment[pos=1.5,above,sloped](A,W){%
- slope = \pgfmathprintnumber{\tkzUseLua{slope}}}
- \tkzLabelPoint[below](S){South}
- \tkzLabelPoint[below left](F1){Focus 1}
- \tkzLabelPoint[below left](F2){Focus 2}
- \tkzLabelPoint[above right](Ve){Vertex ; East}
- \tkzLabelPoint[above right](Co){Covertex ; North}
-\end{tikzpicture}
\end{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
@@ -96,9 +79,8 @@ The first attributes are the three points that define the ellipse: : the \Iattr
z.Co = E.covertex
z.Ve = E.vertex
\end{tkzelements}
- \hspace*{\fill}
\begin{tikzpicture}
- \pgfkeys{/pgf/number format/.cd,fixed,precision=2}
+\pgfkeys{/pgf/number format/.cd,fixed,precision=2}
\tkzGetNodes
\tkzDrawCircles[teal](C,A)
\tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},\tkzUseLua{slope})
@@ -113,6 +95,28 @@ The first attributes are the three points that define the ellipse: : the \Iattr
\tkzLabelPoint[above right](Co){Covertex ; North}
\end{tikzpicture}
\end{minipage}
+
+\begin{Verbatim}
+\begin{tikzpicture}
+ \pgfkeys{/pgf/number format/.cd,fixed,precision=2}
+ \tkzGetNodes
+ \tkzDrawCircles[teal](C,A)
+ \tkzDrawEllipse[red](C,\tkzUseLua{a},\tkzUseLua{b},
+ \tkzUseLua{slope})
+ \tkzDrawPoints(C,A,B,b,W,S,F1,F2)
+ \tkzLabelPoints(C,A,B)
+ \tkzDrawLine[add = .5 and .5](A,W)
+ \tkzLabelSegment[pos=1.5,above,sloped](A,W){%
+ slope = \pgfmathprintnumber{\tkzUseLua{slope}}}
+ \tkzLabelPoint[below](S){South}
+ \tkzLabelPoint[below left](F1){Focus 1}
+ \tkzLabelPoint[below left](F2){Focus 2}
+ \tkzLabelPoint[above right](Ve){Vertex ; East}
+ \tkzLabelPoint[above right](Co){Covertex ; North}
+\end{tikzpicture}
+\end{Verbatim}
+
+
% \caption{Class Ellipse}
% subsection attributes_of_an_ellipse (end)
@@ -202,46 +206,7 @@ The function \Igfct{package}{tkzUseLua (variable)} is used to transfer values to
The first two points are the foci of the ellipse, and the third one is the vertex. We can deduce all the other characteristics from these points.
\emph{The function launches the |new| method, defining all the characteristics of the ellipse.}
-\begin{tkzelements}
- scale =1
- z.A = point: new (0 , 0)
- z.B = point: new (5 , 1)
- L.AB = line : new (z.A,z.B)
- z.C = point: new (.8 , 3)
- T.ABC = triangle: new (z.A,z.B,z.C)
- z.N = T.ABC.eulercenter
- z.H = T.ABC.orthocenter
- z.O = T.ABC.circumcenter
- _,_,z.Mc = get_points (T.ABC: medial ())
- L.euler = line: new (z.H,z.O)
- C.circum = circle: new (z.O,z.A)
- C.euler = circle: new (z.N,z.Mc)
- z.i,z.j = intersection (L.euler,C.circum)
- z.I,z.J = intersection (L.euler,C.euler)
- E = ellipse: foci (z.H,z.O,z.I)
- L.AH = line: new (z.A,z.H)
- z.X = intersection (L.AH,C.circum)
- L.XO = line: new (z.X,z.O)
- z.R,z.S = intersection (L.XO,E)
- 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{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
z.A = point: new (0 , 0)
@@ -267,6 +232,50 @@ The first two points are the foci of the ellipse, and the third one is the verte
ang = math.deg(E.slope)
\end{tkzelements}
\end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale =1
+ z.A = point: new (0 , 0)
+ z.B = point: new (5 , 1)
+ L.AB = line : new (z.A,z.B)
+ z.C = point: new (.8 , 3)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.N = T.ABC.eulercenter
+ z.H = T.ABC.orthocenter
+ z.O = T.ABC.circumcenter
+ _,_,z.Mc = get_points (T.ABC: medial ())
+ L.euler = line: new (z.H,z.O)
+ C.circum = circle: new (z.O,z.A)
+ C.euler = circle: new (z.N,z.Mc)
+ z.i,z.j = intersection (L.euler,C.circum)
+ z.I,z.J = intersection (L.euler,C.euler)
+ E = ellipse: foci (z.H,z.O,z.I)
+ L.AH = line: new (z.A,z.H)
+ z.X = intersection (L.AH,C.circum)
+ L.XO = line: new (z.X,z.O)
+ z.R,z.S = intersection (L.XO,E)
+ 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}
+\end{minipage}
+
\begin{Verbatim}
\begin{tikzpicture}
\tkzGetNodes
@@ -283,11 +292,7 @@ The first two points are the foci of the ellipse, and the third one is the verte
\tkzLabelPoints[left](A)
\tkzLabelPoints[right](B,I,S,H)
\end{tikzpicture}
-\end{Verbatim}
-
-
-
-
+ \end{Verbatim}
% subsubsection function_tkzname_ellipse__foci (end)
\subsubsection{Method \Imeth{ellipse}{point} and \Imeth{ellipse}{radii}} % (fold)
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 741938eb66..435ad9bcc6 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
@@ -181,6 +181,7 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\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})\\
\midrule
\textbf{Lines} &&\\
\midrule
@@ -229,7 +230,7 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\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)|& Ensemble des points tq. |MA/MB = 2| \\
+\Imeth{line}{apollonius (r)} & |C.apo = L.AB : apollonius (2)|& Set of points tq. |MA/MB = 2| \\
\midrule
\textbf{Transformations} &&\\
\midrule
@@ -248,7 +249,7 @@ Here's the list of methods for the \tkzNameObj{line} object. The results can be
\egroup
\end{minipage}
-\subsubsection{Method report} % (fold)
+\subsubsection{Method \Imeth{line}{report}} % (fold)
\label{ssub:method_report}
|report (d,pt)| If the point is absent, the transfer is made from the first point that defines the line.
@@ -289,7 +290,7 @@ z.O = L.AB : report (3)
\end{minipage}
% subsubsection method_report (end)
-\subsubsection{Triangle with two\_angles} % (fold)
+\subsubsection{Method \Imeth{line}{two\_angles} } % (fold)
\label{ssub:triangle_with_two__angles}
The angles are on either side of the given segment
@@ -332,7 +333,7 @@ The angles are on either side of the given segment
\end{minipage}
% subsubsection triangle_with_two__angles (end)
-\subsubsection{Triangle with three given sides} % (fold)
+\subsubsection{Method \Imeth{line}{sss}} % (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.
@@ -498,7 +499,7 @@ The side lengths are proportional to the lengths given in the table. They depend
\end{minipage}
% subsubsection about_triangles (end)
-\subsubsection{Method point }% (fold)
+\subsubsection{Method \Imeth{line}{point} }% (fold)
\label{ssub:method_point}
This method is very useful. It allows you to place a point on the line under consideration.
If |r = 0| then the point is |pa|, if |r = 1| it's |pb|.
@@ -544,9 +545,50 @@ This method exists for all objects except quadrilaterals.
\end{minipage}
% subsubsection method_point (end)
-\subsubsection{Normalize} % (fold)
-\label{ssub:normalize}
+\subsubsection{Method \Imeth{line}{colinear\_at}} % (fold)
+\label{ssub:method_imeth_line_colinear__at}
+If the coefficient is missing then it defaults to $1$ and in the following example we obtain: $CE=AB$ and $(AB)\parallel (CE)$. For point $D$: $CD = .5AB$ and $(AB)\parallel (CD)$.
+\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 , 3)
+ L.AB = line : new (z.A,z.B)
+ 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}
+\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 (1 , 3)
+ L.AB = line : new (z.A,z.B)
+ 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}
+\end{minipage}
+
+% subsubsection method_imeth_line_colinear__at (end)
+
+
+\subsubsection{Method \Imeth{line}{normalize}} % (fold)
+\label{ssub:normalize}
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
@@ -586,7 +628,7 @@ This method exists for all objects except quadrilaterals.
% subsubsection normalize (end)
-\subsubsection{Barycenter with a line} % (fold)
+\subsubsection{Method \Imeth{line}{barycenter}} % (fold)
\label{ssub:barycenter_with_a_line}
\begin{minipage}{.4\textwidth}
@@ -621,7 +663,7 @@ This method exists for all objects except quadrilaterals.
\end{minipage}
% subsubsection barycenter_with_a_line (end)
-\subsubsection{Example: new line from a defined line} % (fold)
+\subsubsection{method \Imeth{line}{ll\_from}} % (fold)
\label{ssub:new_line_from_a_defined_line}
\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
@@ -673,7 +715,7 @@ _,z.E = get_points ( L.CD: ll_from (z.B))
% subsubsection new_line_from_a_defined_line (end)
-\subsubsection{Example: projection of several points} % (fold)
+\subsubsection{Method \Imeth{line}{projection}} % (fold)
\label{ssub:example_projection_of_several_points}
\begin{minipage}{0.5\textwidth}
\begin{Verbatim}
@@ -788,7 +830,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% subsubsection example_combination_of_methods (end)
-\subsubsection{Example: translation} % (fold)
+\subsubsection{Method \Imeth{line}{translation}} % (fold)
\label{ssub:example_translation}
\begin{minipage}{0.6\textwidth}
@@ -830,7 +872,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% subsubsection example_translation (end)
-\subsubsection{Example: distance and projection} % (fold)
+\subsubsection{Method \Imeth{line}{distance}} % (fold)
\label{ssub:example_distance_and_projection}
\begin{minipage}{0.5\textwidth}
@@ -876,7 +918,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% \caption{Method distance with line object}
% subsubsection example_distance_and_projection (end)
-\subsubsection{Reflection of object} % (fold)
+\subsubsection{Method \Imeth{line}{reflection} of an object} % (fold)
\label{ssub:reflection_of_object}
\begin{minipage}{.5\textwidth}
@@ -924,7 +966,7 @@ z.a,z.b = L.ab.pa,L.ab.pb
% subsubsection reflection_of_object (end)
-\subsection{Apollonius circle MA/MB = k} % (fold)
+\subsection{Method \Imeth{line}{apollonius} Apollonius circle MA/MB = k} % (fold)
\label{sub:apollonius_circle_ma_mb_k}
\begin{Verbatim}
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 68c5a73e5a..e404dc763b 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
@@ -605,6 +605,7 @@ Rotate a triangle by an angle of $\pi/6$ around $O$.
\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
+ scale = .75
z.O = point : new ( -1 , -1 )
z.A = point : new ( 2 , 0 )
z.B = point : new ( 5 , 0 )
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 2413a97d91..3ec9e777a6 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
@@ -81,7 +81,7 @@ z.H = RP.five.proj
\bgroup
\catcode`_=12
\small
-\captionof{table}{Circle methods.}\label{regular:met}
+\captionof{table}{regular\_polygon methods.}\label{regular:met}
\begin{tabular}{ll}
\toprule
\textbf{Methods} & \textbf{Comments} \\
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 f54a53f39e..80b711e46f 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
@@ -202,7 +202,9 @@ Through the Lemoine point draw lines parallel to the triangle's sides. The point
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})\\
\bottomrule
\end{tabular}
\end{minipage}
@@ -234,7 +236,8 @@ Remark: If you don't need to use the triangle object several times, you can obta
\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|.\\
+\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 \\
\midrule
@@ -256,6 +259,171 @@ 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{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
+\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_cevian (end)
+
+
+\subsubsection{Méthodes \Imeth{triangle}{pedal} et \Imeth{triangle}{pedal\_circle}} % (fold)
+\label{ssub:method_imeth_triangle_pedal}
+
+\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)
+ 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)
+ C.pedal = T.ABC : pedal_circle (z.O)
+ 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}
+\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.5,3)
+ 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)
+ C.pedal = T.ABC : pedal_circle (z.O)
+ 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}
+\end{minipage}
+% subsubsection method_imeth_triangle_pedal (end)
+
+\subsubsection{Méthodes \Imeth{triangle}{conway\_points} et \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.
+
+\begin{minipage}{.5\textwidth}
+ \begin{Verbatim}
+ \begin{tkzelements}
+ z.A = point:new (0,0)
+ z.C = point:new (5,0)
+ z.B = point:new (1,3)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ C.conway = T.ABC : conway_circle ()
+ z.w,z.t = get_points(C.conway)
+ z.t1,z.t2,z.t3,z.t4,
+ z.t5,z.t6= T.ABC : conway_points ()
+ \end{tkzelements}
+ \hspace*{5cm}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles(w,t)
+ \tkzDrawPoints(t1,t2,t3,t4,t5,t6)
+ \tkzLabelPoints(t1,t2,t3,t4,t5,t6)
+ \tkzDrawSegments[dashed](t1,A t2,A t3,B)
+ \tkzDrawSegments[dashed](t4,B t5,C t6,C)
+ \tkzMarkSegments(B,C t1,A t2,A)
+ \tkzMarkSegments[mark=||](A,C t3,B t4,B)
+ \tkzMarkSegments[mark=|||](A,B t5,C t6,C)
+ \end{tikzpicture}
+ \end{Verbatim}
+\end{minipage}
+\begin{minipage}{.5\textwidth}
+ \begin{tkzelements}
+ scale = .5
+ z.A = point:new (0,0)
+ z.C = point:new (5,0)
+ z.B = point:new (1,3)
+ T.ABC = triangle : new (z.A,z.B,z.C)
+ C.conway = T.ABC : conway_circle ()
+ z.w,z.t = get_points(C.conway)
+ z.t1,z.t2,z.t3,
+ z.t4,z.t5,z.t6= T.ABC : conway_points ()
+ \end{tkzelements}
+ \begin{tikzpicture}
+ \tkzGetNodes
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawCircles(w,t)
+ \tkzDrawPoints(t1,t2,t3,t4,t5,t6)
+ \tkzLabelPoints(t1,t2,t3,t4,t5,t6)
+ \tkzDrawSegments[dashed](t1,A t2,A t3,B t4,B t5,C t6,C)
+ \tkzMarkSegments(B,C t1,A t2,A)
+ \tkzMarkSegments[mark=||](A,C t3,B t4,B)
+ \tkzMarkSegments[mark=|||](A,B t5,C t6,C)
+ \end{tikzpicture}
+\end{minipage}
+
+% subsubsection methode_imeth_triangle_conway (end)
+
+
\subsubsection{Euler line} % (fold)
\label{ssub:euler_line}
@@ -549,10 +717,61 @@ z.T2 = L.T2.pb
\tkzMarkSegments(B,E B,M B,F)
\end{tikzpicture}
\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 harmonic_division_and_bisector (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-examples.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-examples.tex
index 1b35c27263..4f46d4a127 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
@@ -720,6 +720,7 @@ Same result using the function |T.ABC.ab : apollonius (k) |
\subsection{Orthogonal circle through} % (fold)
\label{sub:orthogonal_circle_through}
+\begin{minipage}{.5\textwidth}
\begin{Verbatim}
\begin{tkzelements}
z.O = point: new (0,1)
@@ -738,8 +739,8 @@ Same result using the function |T.ABC.ab : apollonius (k) |
\tkzLabelPoints[right](O,A,z1,z2,c)
\end{tikzpicture}
\end{Verbatim}
-
-\begin{tkzelements}
+\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)
@@ -748,7 +749,6 @@ Same result using the function |T.ABC.ab : apollonius (k) |
C = C.OA: orthogonal_through (z.z1,z.z2)
z.c = C.center
\end{tkzelements}
-
\hspace*{\fill}
\begin{tikzpicture}
\tkzGetNodes
@@ -758,6 +758,7 @@ Same result using the function |T.ABC.ab : apollonius (k) |
\tkzLabelPoints[right](O,A,z1,z2,c)
\end{tikzpicture}
\hspace*{\fill}
+\end{minipage}
% subsection orthogonal_circle_through (end)
\subsection{Divine ratio} % (fold)
@@ -1516,70 +1517,50 @@ z.O_0 = L.AB.mid
\begin{minipage}[t]{.4\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- scale=.75
- z.A = point: new (0 , 0)
- z.B = point: new (4 , 0)
- z.D = point: new (12,0)
- L.AB = line : new (z.A,z.B)
- z.X = L.AB.north_pa
- L.XB = line : new (z.X,z.B)
- z.E = L.XB.mid
- L.DE = line : new (z.D,z.E)
- L.XA = line : new (z.X,z.A)
- z.F = intersection (L.DE,L.XA)
- L.AE = line : new (z.A,z.E)
- L.BF = line : new (z.B,z.F)
- z.G = intersection (L.AE,L.BF)
- L.XG = line : new (z.X,z.G)
-z.C = intersection (L.XG,L.AB)
+ scale=.75
+ z.A = point: new (0 , 0)
+ z.B = point: new (4 , 0)
+ z.G = point: new (2,2)
+ L.AG = line : new (z.A,z.G)
+ L.AB = line : new (z.A,z.B)
+ z.E = L.AG : colinear_at (z.B,.5)
+ L.GE = line : new (z.G,z.E)
+ z.D = intersection (L.GE,L.AB)
+ z.F = z.B : symmetry (z.E)
+ L.GF = line :new (z.G,z.F)
+ z.C = intersection (L.GF,L.AB)
\end{tkzelements}
\begin{tikzpicture}
- \tkzGetNodes
- \tkzDefPoints{0/0/A,4/0/B}
- \tkzDefPoints{2/2/G}
- \tkzDefLine[parallel=through B,K=.5](A,G) \tkzGetPoint{E}
- \tkzInterLL(G,E)(A,B) \tkzGetPoint{D}
- \tkzDefPointBy[symmetry= center B](E) \tkzGetPoint{F}
- \tkzInterLL(G,F)(A,B) \tkzGetPoint{C}
- \tkzDrawLines(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)
+ \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{Verbatim}
\end{minipage}
\begin{minipage}[t]{.6\textwidth}\vspace{0pt}%
\begin{tkzelements}
-scale=.75
-z.A = point: new (0 , 0)
-z.B = point: new (4 , 0)
-z.D = point: new (12,0)
-L.AB = line : new (z.A,z.B)
-z.X = L.AB.north_pa
-L.XB = line : new (z.X,z.B)
-z.E = L.XB.mid
-L.DE = line : new (z.D,z.E)
-L.XA = line : new (z.X,z.A)
-z.F = intersection (L.DE,L.XA)
-L.AE = line : new (z.A,z.E)
-L.BF = line : new (z.B,z.F)
-z.G = intersection (L.AE,L.BF)
-L.XG = line : new (z.X,z.G)
-z.C = intersection (L.XG,L.AB)
+ scale=.75
+ z.A = point: new (0 , 0)
+ z.B = point: new (4 , 0)
+ z.G = point: new (2,2)
+ L.AG = line : new (z.A,z.G)
+ L.AB = line : new (z.A,z.B)
+ z.E = L.AG : colinear_at (z.B,.5)
+ L.GE = line : new (z.G,z.E)
+ z.D = intersection (L.GE,L.AB)
+ z.F = z.B : symmetry (z.E)
+ L.GF = line :new (z.G,z.F)
+ z.C = intersection (L.GF,L.AB)
\end{tkzelements}
\hspace*{\fill}
\begin{tikzpicture}
-\tkzGetNodes
-\tkzDefPoints{0/0/A,4/0/B}
-\tkzDefPoints{2/2/G}
-\tkzDefLine[parallel=through B,K=.5](A,G) \tkzGetPoint{E}
-\tkzInterLL(G,E)(A,B) \tkzGetPoint{D}
-\tkzDefPointBy[symmetry= center B](E) \tkzGetPoint{F}
-\tkzInterLL(G,F)(A,B) \tkzGetPoint{C}
-\tkzDrawLines(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)
+ \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}
\end{minipage}
@@ -1590,22 +1571,22 @@ z.C = intersection (L.XG,L.AB)
\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.D = point: new (12 , 0)
- L.AB = line: new (z.A,z.B)
- z.X = L.AB.north_pa
- L.XB = line: new (z.X,z.B)
- z.E = L.XB.mid
- L.ED = line: new (z.E,z.D)
- L.AX = line: new (z.A,z.X)
- L.AE = line: new (z.A,z.E)
- z.F = intersection (L.ED,L.AX)
- L.BF = line: new (z.B,z.F)
- z.G = intersection (L.AE,L.BF)
- L.GX = line: new (z.G,z.X)
- z.C = intersection (L.GX,L.AB)
+scale = .5
+z.A = point: new (0 , 0)
+z.B = point: new (6 , 0)
+z.D = point: new (12 , 0)
+L.AB = line: new (z.A,z.B)
+z.X = L.AB.north_pa
+L.XB = line: new (z.X,z.B)
+z.E = L.XB.mid
+L.ED = line: new (z.E,z.D)
+L.AX = line: new (z.A,z.X)
+L.AE = line: new (z.A,z.E)
+z.F = intersection (L.ED,L.AX)
+L.BF = line: new (z.B,z.F)
+z.G = intersection (L.AE,L.BF)
+L.GX = line: new (z.G,z.X)
+z.C = intersection (L.GX,L.AB)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
@@ -2015,7 +1996,7 @@ z.H = L.OOp : projection (z.X)
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
\begin{tkzelements}
- scale = .25
+ scale = .5
z.A = point: new (0,0)
z.B = point: new (6,0)
z.C = point: new (0.8,4)
@@ -2039,7 +2020,8 @@ z.H = L.OOp : projection (z.X)
\end{tikzpicture}
\end{Verbatim}
\end{minipage}
-\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
+
+
\begin{tkzelements}
scale = .5
z.A = point: new (0,0)
@@ -2066,7 +2048,7 @@ z.H = L.OOp : projection (z.X)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\hspace*{\fill}
-\end{minipage}
+
% subsection radical_circle (end)
\subsection{Euler ellipse} % (fold)
@@ -2112,44 +2094,44 @@ _,z.W = intersection (L.ZO,E)
\begin{minipage}{.4\textwidth}
\begin{Verbatim}
\begin{tkzelements}
- scale = 1.3
- z.A = point: new (0 , 0)
- z.B = point: new (5 , 1)
- L.AB = line : new (z.A,z.B)
- z.C = point: new (.8 , 3)
- T.ABC = triangle: new (z.A,z.B,z.C)
- z.N = T.ABC.eulercenter
- z.G = T.ABC.centroid
- z.O = T.ABC.circumcenter
- z.H = T.ABC.orthocenter
+ scale = 1.3
+ z.A = point: new (0 , 0)
+ z.B = point: new (5 , 1)
+ L.AB = line : new (z.A,z.B)
+ z.C = point: new (.8 , 3)
+ T.ABC = triangle: new (z.A,z.B,z.C)
+ z.N = T.ABC.eulercenter
+ z.G = T.ABC.centroid
+ z.O = T.ABC.circumcenter
+ z.H = T.ABC.orthocenter
z.Ma,z.Mb,
- z.Mc = get_points (T.ABC : medial ())
+ z.Mc = get_points(T.ABC:medial ())
z.Ha,z.Hb,
- z.Hc = get_points (T.ABC : orthic ())
+ z.Hc = get_points(T.ABC:orthic ())
z.Ea,z.Eb,
- z.Ec = get_points (T.ABC: extouch())
- L.euler = T.ABC : euler_line ()
- C.circum = T.ABC : circum_circle ()
- C.euler = T.ABC : euler_circle ()
- z.I,z.J = intersection (L.euler,C.euler)
- E = ellipse: foci (z.H,z.O,z.I)
- a = E.Rx
- b = E.Ry
- ang = math.deg(E.slope)
- L.AH = line: new (z.A,z.H)
- L.BH = line: new (z.B,z.H)
- L.CH = line: new (z.C,z.H)
- z.X = intersection (L.AH,C.circum)
- _,z.Y = intersection (L.BH,C.circum)
- _,z.Z = intersection (L.CH,C.circum)
- L.BC = line: new (z.B,z.C)
- L.XO = line: new (z.X,z.O)
- L.YO = line: new (z.Y,z.O)
- L.ZO = line: new (z.Z,z.O)
- z.x = intersection (L.BC,L.XO)
- z.U = intersection (L.XO,E)
- _,z.V = intersection (L.YO,E)
- _,z.W = intersection (L.ZO,E)
+ z.Ec = get_points(T.ABC:extouch())
+ L.euler = T.ABC : euler_line ()
+ C.circum = T.ABC : circum_circle ()
+ C.euler = T.ABC : euler_circle ()
+ z.I,z.J = intersection (L.euler,C.euler)
+ E = ellipse: foci (z.H,z.O,z.I)
+ a = E.Rx
+ b = E.Ry
+ ang = math.deg(E.slope)
+ L.AH = line: new (z.A,z.H)
+ L.BH = line: new (z.B,z.H)
+ L.CH = line: new (z.C,z.H)
+ z.X = intersection (L.AH,C.circum)
+ _,z.Y = intersection (L.BH,C.circum)
+ _,z.Z = intersection (L.CH,C.circum)
+ L.BC = line: new (z.B,z.C)
+ L.XO = line: new (z.X,z.O)
+ L.YO = line: new (z.Y,z.O)
+ L.ZO = line: new (z.Z,z.O)
+ z.x = intersection (L.BC,L.XO)
+ z.U = intersection (L.XO,E)
+ _,z.V = intersection (L.YO,E)
+ _,z.W = intersection (L.ZO,E)
\end{tkzelements}
\end{Verbatim}
\end{minipage}
@@ -2169,7 +2151,6 @@ _,z.W = intersection (L.ZO,E)
\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}
-\hspace*{\fill}
\end{minipage}
\begin{Verbatim}
@@ -3539,24 +3520,24 @@ z.Cp,_ = intersection (L.GD,C.xD)
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
\begin{Verbatim}
- \begin{tikzpicture}
- \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}
+\begin{tikzpicture}
+ \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{Verbatim}
\end{minipage}
\begin{minipage}[t]{.5\textwidth}\vspace{0pt}%
@@ -3639,7 +3620,6 @@ 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
@@ -3652,6 +3632,7 @@ z.I = intersection (L.TA,L.TC)
\tkzLabelPoints[above right](E,F)
\tkzLabelPoints[below](C)
\end{tikzpicture}
+\hspace*{\fill}
\end{minipage}
% subsection three_tangents (end)
@@ -3802,7 +3783,7 @@ 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.o,z.w = get_points(T:first_lemoine_circle())
z.L = T : lemoine_point ()
\end{tkzelements}
\hspace*{\fill}
@@ -3813,7 +3794,6 @@ z.L = T : lemoine_point ()
\tkzLabelPoints(A,B,C,o,w,O,L)
\tkzDrawCircles(o,w O,A)
\end{tikzpicture}
-\hspace*{\fill}
\end{minipage}
% subsection first_lemoine_circle (end)
@@ -4233,61 +4213,10 @@ z.Xip,z.Yip,z.Zip = C.ins : inversion (z.xi,z.yi,z.zi)
\tkzLabelPoints(A,B,C,E,F,G)
\end{tikzpicture}
\end{Verbatim}
-
-
% subsection soddy_circle_with_function (end)
-\subsubsection{Pappus chain} % (fold)
-\label{ssub:pappus_chain}
- Soit le point $D$ appartenant à la droite $(AC)$ tel que
- \[ DB \cdot DA = AC^2\]
- alors $B$ est l'image de $D$ dans l'inversion de centre $A$ et puissance $AC^2$.
- Les demi-cercles de diamètre $[AB]$ et$[AC]$ passent par le pôle $A$. Ils ont pour images les demi-droites $\mathcal{L'}$ et $\mathcal{L}$.
-
-Les cercles de centre $J_i$ et de diamètre $S_iT_i$ ont pour images les cercles de diamètre $S'_iT'_i$.
-
- \pgfmathsetmacro{\xB}{6}%
- \pgfmathsetmacro{\xC}{9}%
- \pgfmathsetmacro{\xD}{(\xC*\xC)/\xB}%
- \pgfmathsetmacro{\xJ}{(\xC+\xD)/2}%
- \pgfmathsetmacro{\r}{\xD-\xJ}%
- \pgfmathsetmacro{\nc}{2}%
-
-\begin{tikzpicture}[scale=1,ultra thin]
- \tkzDefPoints{0/0/A,\xB/0/B,\xC/0/C,\xD/0/D}
- \tkzDefPointBy[rotation = center C angle -90](B) \tkzGetPoint{c}
- \tkzDefPointBy[rotation = center A angle 90](C) \tkzGetPoint{a}
- \tkzDefPointBy[rotation = center D angle -90](C) \tkzGetPoint{d}
- \tkzDrawLines[add=0 and 2.25](C,c)
- \tkzDrawLines[add=0 and 1.5](D,d)
- \tkzDefCircle[diameter](A,C) \tkzDrawSemiCircle(tkzPointResult,C)
- \tkzDefCircle[diameter](A,B) \tkzDrawSemiCircle(tkzPointResult,B)
- \tkzDefCircle[diameter](B,C) \tkzDrawSemiCircle(tkzPointResult,C)
- \tkzDefCircle[diameter](C,D) \tkzDrawSemiCircle(tkzPointResult,D)
- \tkzDrawArc[red](A,C)(a)
- \tkzDrawPoints(A,B,C,D)
- \tkzLabelPoints(A,B,C,D)
- \tkzLabelLine[left,pos=3](C,c){$\mathcal{L}$}
- \tkzLabelLine[right,pos=2.5](D,d){$\mathcal{L'}$}
- \foreach \i in {1,...,\nc}
-{\tkzDefPoint(\xJ,2*\r*\i){J}
- \tkzDefPoint(\xJ,2*\r*\i-\r){H}
- \tkzDefCircleBy[inversion = center A through C](J,H)\tkzGetPoints{J'}{H'}
- \tkzInterLC(A,J)(J,H) \tkzGetPoints{S}{T}
- \tkzDefPointsBy[inversion = center A through C](S,T){S',T'}
- \tkzDrawCircle(J,H)
- \tkzDefCircle[diameter](S',T') \tkzGetPoint{I'}
- \tkzDrawCircle(I',T')
- \tkzDrawLines[dashed,add = 0 and .15](A,T A,S A,H)
- \tkzDrawPoints(J,H,H',S,S',T,T')
- \tkzLabelPoint(J){$J_\i$}
- \tkzLabelPoint(S){$S_\i$}
- \tkzLabelPoint(T){$T_\i$}
- \tkzLabelPoint(H){$H_\i$}
- \tkzLabelPoint(S'){$S'_\i$}
- \tkzLabelPoint(T'){$T'_\i$}
- \tkzLabelPoint(H'){$H'_\i$}}
-\end{tikzpicture}
+\subsection{Pappus chain} % (fold)
+\label{sub:pappus_chain}
\begin{tkzelements}
scale =.75
@@ -4374,7 +4303,7 @@ Les cercles de centre $J_i$ et de diamètre $S_iT_i$ ont pour images les cercles
\end{tikzpicture}
\vfill
\end{minipage}
-% subsubsection pappus_chain (end)
+% subsection pappus_chain (end)
\subsection{Three Circles} % (fold)
\label{sub:three_circles}
@@ -4449,7 +4378,7 @@ z.O_2 = L.CB.mid
C.O0B = circle: new ( z.O_0, z.B)
C.O1C = circle: new ( z.O_1, z.C)
C.O2B = circle: new ( z.O_2, z.B)
-z.M_0 = C.O1C : external_similitude (C.O2B)
+z.M_0 = C.O1C:external_similitude(C.O2B)
L.O0C = line:new(z.O_0,z.C)
T.golden = L.O0C : golden ()
z.L = T.golden.pc
@@ -4488,7 +4417,7 @@ 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)
C.O0B = circle: new ( z.O_0, z.B)
C.O1C = circle: new ( z.O_1, z.C)
C.O2B = circle: new ( z.O_2, z.B)
- z.M_0 = C.O1C : external_similitude (C.O2B)
+ z.M_0 = C.O1C:external_similitude(C.O2B)
L.O0C = line:new(z.O_0,z.C)
T.golden = L.O0C : golden ()
z.L = T.golden.pc
@@ -4514,6 +4443,7 @@ 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{Verbatim}
\end{minipage}
\begin{minipage}{.5\textwidth}
+ \hfill
\begin{tikzpicture}[scale=.7]
\tkzGetNodes
\tkzDrawPolygon[red](O_2,O_0,I,D,H)
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 cd967f1af0..55608bb26b 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,7 +1,7 @@
% !TEX TS-program = lualatex
% encoding : utf8
-% Documentation of tkz-elements v2.20c
-% Copyright 2023 Alain Matthes
+% Documentation of tkz-elements v2.25c
+% 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
% of this license or (at your option) any later version.
@@ -21,10 +21,10 @@
headings = small
]{tkz-doc}
\gdef\tkznameofpack{tkz-elements}
-\gdef\tkzversionofpack{2.20c}
+\gdef\tkzversionofpack{2.25c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{tkz-elements.pdf}
-\gdef\tkzversionofdoc{2.20c}
+\gdef\tkzversionofdoc{2.25c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -33,11 +33,12 @@
\gdef\tkzengine{lualatex}
\gdef\tkzurlauthorcom{http://altermundus.fr}
\nameoffile{\tkznameofpack}
+
% -- Packages ---------------------------------------------------
\usepackage[dvipsnames,svgnames]{xcolor}
\usepackage{calc}
\usepackage{tkz-base}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\usepackage{pgfornament}
\usetikzlibrary{backgrounds}
@@ -144,6 +145,7 @@ sharp corners
\newcommand*{\IEmacro}[1]{\index{#1_1@\texttt{\textbackslash#1}}\texttt{#1}}
\newcommand*{\tkzimpbf}[1]{\texttt{\textbf{#1}}}
\newcommand*{\tkzEHand}{\textcolor{red}{\lefthand}}
+\newcommand*{\ItkzPopt}[2]{\texttt{#2}\index{#1_3@\texttt{#1: options}!\texttt{#2}}}
%<--------------------------------------------------------------------------->
% settings styles
@@ -181,8 +183,7 @@ sharp corners
This document compiles some notes about \tkzname{\tkznameofpack}, the initial version of a \code{Lua} library designed to perform all the necessary calculations for defining objects in Euclidean geometry figures. Your document must be compiled using Lua\LaTeX.\\
With \pkg{tkz-elements}, definitions and calculations are exclusively conducted using \pkg{Lua}. \\
The primary programming approach offered is oriented towards \code{object programming}, utilizing object classes such as point, line, triangle, circle, and ellipse. Currently, after the calculations are completed, \pkg{tkz-euclide} or \pkg{TikZ} is used for drawing purposes.\\
- I discovered Lua and object-oriented programming while developing this package, so it's highly likely that I've made a few mistakes. If you'd like to contribute to the development of this package or provide advice on how to proceed, please contact me via email. \\
-Please note: English is not my native language, so there may be some errors."
+ I discovered Lua and object-oriented programming while developing this package, so it's highly likely that I've made a few mistakes. If you'd like to contribute to the development of this package or provide advice on how to proceed, please contact me via email.
}
\presentation
@@ -197,8 +198,8 @@ Special thanks to \tkzimp{Wolfgang Büchel} for his invaluable contribution in c
\href{http://mathworld.wolfram.com/about/author.html}{MathWorld}.
\vspace*{12pt}
-\lefthand\ You can find some examples on my site:
-\href{http://altermundus.fr}{altermundus.fr}. \hspace{2cm} under construction!
+\lefthand\ You can find some examples on my site and a french documentation:
+\href{http://altermundus.fr}{altermundus.fr}.
\vfill
Please report typos or any other comments to this documentation to: \href{mailto:al.ma@mac.com}{\textcolor{blue}{Alain Matthes}}.
@@ -248,7 +249,6 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|r| denotes a real number, |cx| complex number, |d| a positive real number, |n| an integer, |an| an angle, |b| a boolean, |s| a character string, |pt| a point, |t| a table, |m| a matrix, |v| variable, |L| a straight line, |C| a circle, |T| a triangle, |E| an ellipse, |V| a vector,|Q| a quadrilateral, |P| a parallelogram, |R| a rectangle, |S| a square, |RP| a regular polygon, |M| a matrix, |O| an object (pt, L,C,T), . . a list of points or an object, < > optional argument.
\begin{multicols}{3}
-
\fbox{\textbf{point}}\\
\textbf{Attributes} table(\ref{point:att}) \\
|re -> r| \\
@@ -320,7 +320,9 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|_south_pa (d) -> pt| \\
|_south_pb (d) -> pt| \\
|_east (d) -> pt| \\
-|_west (d) -> pt| \\
+|_west (d) -> pt| \\
+|report (r,pt) -> pt| \\
+|colinear_at (pt,k) -> pt| \\
|translation (...) -> O| \\
|projection (...) -> O| \\
|reflection (...) -> O| \\
@@ -348,7 +350,6 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|sublime () -> T| \\
|egyptian () -> T| \\
|square (<swap>) -> T| \\
-|report (r,pt) -> T| \\
\\
\fbox{\textbf{triangle}} \\
\textbf{Attributes} table(\ref{triangle:att}) \\
@@ -387,6 +388,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|nine_points () -> pt| \\
|point (t) -> pt| \\
|soddy_center () -> pt| \\
+|conway_points () -> pts| \\
|euler_line () -> L| \\
|symmedian_line (n) -> L| \\
|altitude (n) -> L| \\
@@ -401,6 +403,9 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|second_lemoine_circle() -> C| \\
|spieker_circle() -> C| \\
|soddy_circle () -> C| \\
+|conway_circle () -> C| \\
+|pedal_circle () -> C| \\
+|cevian_circle () -> C| \\
|orthic() -> T| \\
|medial() -> T| \\
|incentral() -> T| \\
@@ -414,6 +419,7 @@ Project Public License Distributed from \href{http://www.ctan.org/}{CTAN}\ arch
|cevian (pt) -> T| \\
|symmedian () -> T| \\
|euler () -> T| \\
+|pedal (pt) -> T| \\
|projection (pt) -> pt,pt,pt| \\
|parallelogram () -> pt| \\
|area () -> d| \\
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex
index 13b17d6a5d..1778a7c8fb 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-organization.tex
@@ -5,6 +5,7 @@ Here's a sample organization.
The line |% !TEX TS-program = lualatex| ensures that you compile with Lua\LATEX{}. The \code{standalone} class is useful, as all you need to do here is create a figure.
+You can load \tkzname{tkz-euclide} in three different ways. The simplest is |\usepackage[mini]{tkz-euclide}| and you have full access to the package. You also have the option to use the \ItkzPopt{tkz-euclide}{lua} option. This will allow you, if you want to perform calculations outside of \tkzname{\tkznameofpack}, to obtain them using \code{lua}. Finally, the recommended method is to use the \ItkzPopt{tkz-euclide}{mini} option. This allows you to load only the modules necessary for drawing. You can still optionally draw using \TIKZ.
The package \pkg{ifthen} is useful if you need to use some Boolean.
@@ -25,7 +26,7 @@ A third advantage is that the code can be reused.
% Created by Alain Matthes on 2024-01-09.
\documentclass[margin = 12pt]{standalone}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements,ifthen}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
index 2687f9debe..f0689fcc74 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-presentation.tex
@@ -148,7 +148,8 @@ C.QA = circle: new ( z.Q, z.A)
z.P_0 = intersection (C.PC,C.AB) -- search for intersections of two circles.
z.P_1 = intersection (C.PC,C.AC) -- idem
_,z.P_2 = intersection (C.QA,C.CB) -- idem
-z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter -- circumcenter attribute of “triangleâ€
+z.O_3 = triangle: new ( z.P_0, z.P_1, z.P_2).circumcenter
+ -- circumcenter attribute of “triangleâ€
\end{tkzelements}
\end{Verbatim}
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
index 15b167a793..d1958d4763 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-structure.tex
@@ -1,6 +1,6 @@
\section{Structure} % (fold)
\label{sec:structure}
-\tkzNamePack{tkz-elements.sty} loads the \tkzNamePack{luacode} package to create the \tkzNameEnv{tkzelements} environment, which is based on the \tkzNameEnv{luacode} environment.
+\tkzNamePack{tkz-elements} loads the \tkzNamePack{luacode} package to create the \tkzNameEnv{tkzelements} environment, which is based on the \tkzNameEnv{luacode} environment.
Within the \tkzNameEnv{tkzelements} environment, the scale is initialized to 1, and then all values in various tables are cleared.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex
index a66f493604..264097e9b8 100644
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transfers.tex
@@ -2,7 +2,7 @@
\newpage
\section{Transfers} % (fold)
\label{sec:transfers}
-\subsection{Fom Lua to tkz-euclide or TikZ} % (fold)
+\subsection{From Lua to tkz-euclide or TikZ} % (fold)
\label{sub:fom_lua_to_tkz_euclide_or_tikz}
In this section, we'll explore how to transfer points, Booleans, and numerical values.
diff --git a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex b/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
deleted file mode 100644
index 39d5940e72..0000000000
--- a/macros/latex/contrib/tkz/tkz-elements/doc/latex/TKZdoc-elements-transferts.tex
+++ /dev/null
@@ -1,150 +0,0 @@
-
-\newpage
-\section{Transfers} % (fold)
-\label{sec:transfers}
-\subsection{Fom Lua to tkz-euclide or TikZ} % (fold)
-\label{sub:fom_lua_to_tkz_euclide_or_tikz}
-
-In this section, we'll look at how to transfer points, Booleans and numerical values.
-
-\subsubsection{Points transfer} % (fold)
-\label{ssub:points_transfer}
-We use an environment \tkzname{tkzelements} outside an environment \tkzname{tikzpicture} which allows us to carry out all the necessary calculations, then we launch the macro \Imacro{tkzGetNodes} which transforms the affixes of the table \tkzname{z} into \tkzname{Nodes}. It only remains to draw.
-
-Currently the drawing program is either \TIKZ\ or \pkg{tkz-euclide}. You have the possibility to use another package to trace but for that you have to create a macro similar to \tkzcname{tkzGetNodes}. Of course, this package must be able to store the points as does \TIKZ\ or \pkg{tkz-euclide}.
-
-\vspace*{1em}
-
-\begin{mybox}
-\begin{verbatim}
-\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}
-}
-\end{verbatim}
-\end{mybox}
-See the section In-depth Study \ref{sec:in_depth_study} for an explanation of the previous code.
-
-The environment \tkzNameEnv{tkzelements} allows to use the underscore |_| and the macro \tkzcname{tkzGetNodes} allows to obtain names of nodes containing \tkzname{prime} or \tkzname{double prime}. (see the next example)
-
-\begin{minipage}{0.5\textwidth}
-\begin{verbatim}
-\begin{tkzelements}
- scale = 1.2
- z.o = point: new (0,0)
- z.a_1 = point: new (2,1)
- z.a_2 = point: new (1,2)
- z.ap = z.a_1 + z.a_2
- z.app = z.a_1 - z.a_2
-\end{tkzelements}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
- \tkzDrawSegments[red](a_1,a' a_2,a')
- \tkzDrawSegments[blue](a_1,a'' a_2,a'')
- \tkzDrawPoints(a_1,a_2,a',o,a'')
- \tkzLabelPoints(o,a_1,a_2,a',a'')
-\end{tikzpicture}
-\end{verbatim}
-\end{minipage}
-\begin{minipage}{0.5\textwidth}
-\begin{tkzelements}
- scale = 1.2
- z.o = point: new (0,0)
- z.a_1 = point: new (2,1)
- z.a_2 = point: new (1,2)
- z.ap = z.a_1 + z.a_2
- z.app = z.a_1 - z.a_2
-\end{tkzelements}
-\hspace{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawSegments(o,a_1 o,a_2 o,a' o,a'')
- \tkzDrawSegments[red](a_1,a' a_2,a')
- \tkzDrawSegments[blue](a_1,a'' a_2,a'')
- \tkzDrawPoints(a_1,a_2,a',o,a'')
- \tkzLabelPoints(o,a_1,a_2,a',a'')
-\end{tikzpicture}
-\hspace{\fill}
-\end{minipage}%
-
-\newpage
-% subsection fom_lua_to_tkz_euclide_or_tikz (end)
-\subsubsection{Other transfers} % (fold)
-\label{ssub:other_transfers}
-
-Sometimes it's useful to transfer angle, length measurements or boolean. For this purpose, I have created the macro (see \ref{sub:transfer_from_lua_to_tex})
-\IEmacro{tkzUseLua(value)}
-
-\begin{verbatim}
-\begin{tkzelements}
- z.b = point: new (1,1)
- z.a = point: new (4,2)
- z.c = point: new (2,2)
- z.d = point: new (5,2)
- L.ab = line : new (z.a,z.b)
- L.cd = line : new (z.c,z.d)
- det = (z.b-z.a)^(z.d-z.c)
- if det == 0 then bool = true
- else bool = false
- end
- x = intersection (L.ab,L.cd)
-\end{tkzelements}
-
-The intersection of the two lines lies at
- a point whose affix is:\tkzUseLua{x}
-
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzDrawPoints(a,...,d)
- \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
- \tkzDrawSegments[red](a,b c,d)}{%
- \tkzDrawSegments[blue](a,b c,d)}
- \tkzLabelPoints(a,...,d)
-\end{tikzpicture}
-\end{verbatim}
-
- \begin{tkzelements}
- z.b = point: new (1,1)
- z.a = point: new (4,2)
- z.c = point: new (2,2)
- z.d = point: new (5,1)
- L.ab = line : new (z.a,z.b)
- L.cd = line : new (z.c,z.d)
- det = (z.b-z.a)^(z.d-z.c)
- if det == 0 then bool = true
- else bool = false
- end
- x = intersection (L.ab,L.cd)
- \end{tkzelements}
-
- The intersection of the two lines lies at
- a point whose affix is: \tkzUseLua{x}
-
-\vspace{1em}
-\hspace{\fill}
-\begin{tikzpicture}
- \tkzGetNodes
- \tkzInit[xmin =-1,ymin=-1,xmax=6,ymax=3]
- \tkzGrid\tkzAxeX\tkzAxeY
- \tkzDrawPoints(a,...,d)
- \ifthenelse{\equal{\tkzUseLua{bool}}{true}}{
- \tkzDrawSegments[red](a,b c,d)}{%
- \tkzDrawSegments[blue](a,b c,d)}
- \tkzLabelPoints(a,...,d)
- \end{tikzpicture}
- \hspace{\fill}
-% subsubsection other_transfers (end)
-% subsubsection points_transfer (end)
-% section transferts (end)
-
-\endinput \ No newline at end of file
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 152e50be1e..d42a3a109b 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/examples/tkz-elements-demo_1.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
index 373dc1b0bc..6b1998eb80 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
index faa0ef52bb..15046d83a3 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_1.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% Author Alain Matthes 2023
\documentclass{article}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
index 788e9d0f39..6ff5f444c8 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
index 61a1ea5583..2ee7b4c4d9 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_2.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% Author Alain Matthes 2023
\documentclass{article}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
index 1873fd5c85..5f1ded6e31 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
index 684475e28e..a95ae05b08 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_3.tex
@@ -1,7 +1,7 @@
% !TEX TS-program = lualatex
% Author Alain Matthes 2023
\documentclass{article}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
index 5d703157aa..1428fd1d4f 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
index 3242fea11a..5dcf23e1ba 100644
--- a/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
+++ b/macros/latex/contrib/tkz/tkz-elements/examples/tkz-elements-demo_4.tex
@@ -3,7 +3,7 @@
% Copyright (c) 2023 AlterMundus.
\documentclass{standalone}
-\usepackage{tkz-euclide}
+\usepackage[mini]{tkz-euclide}
\usepackage{tkz-elements}
\begin{document}
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 f7416d8e4f..0a11787d21 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.20c
+% tkz-elements.sty v2.25c
% 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/03/25 v2.20c Graphic Object Library]
+\ProvidesPackage{tkz-elements}[2024/04/27 v2.25c Graphic Object Library]
\RequirePackage{luacode}
\directlua{require "tkz_elements_main"}
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 708e7b7af3..1999b8a073 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 491d237ac2..b6a1bf7a5a 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 f20b87a44f..a98cf40a63 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 eacd8423a4..40f2a4ebbf 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 dc44e2ae88..69dcd6ace3 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 2dd8d6467a..401ad46dda 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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
@@ -150,4 +150,13 @@ function report_ (za,zb,d,pt)
else
return barycenter_({za,1-t},{zb,(t)}) +pt-za
end
-end \ No newline at end of file
+end
+
+function colinear_at_ (za,zb,pt,k)
+ if k == nil
+ then
+ return pt+zb-za
+else
+ return pt+k*(zb-za)
+end
+end
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 9b4e51d295..a71c0f7c27 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 7d3f475570..4371214047 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 ce04c2d091..f1c4dc5d41 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 bd8f7cab5b..5e92b4d598 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 2e917db2f1..d4523d1826 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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_line.lua b/macros/latex/contrib/tkz/tkz-elements/latex/tkz_elements_line.lua
index 68a5ad843b..9304768f31 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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
@@ -163,6 +163,15 @@ function line : report (d,pt)
return barycenter_({self.pa,1-t},{self.pb,(t)}) +pt-self.pa
end
end
+
+function line : colinear_at (pt,k)
+ if k == nil
+ then
+ return colinear_at_ (self.pa,self.pb,pt,1)
+ else
+ return colinear_at_ (self.pa,self.pb,pt,k)
+ end
+end
-------------- transformations -------------
function line: translation_pt ( pt )
return translation_ ( self.pb-self.pa,pt )
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 3dffb3de46..10ee219519 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 ed5fa5b1f3..981ac68094 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 6bf04756a6..94c9c555c0 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 99c4344543..fd0a3533a3 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 5e9d4fcd00..4eb4b549d1 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 f02c977e08..e77e0af561 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 7add1b244d..2c07f78399 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 cc7a24ff06..0641a858de 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 7373886efc..1852c0ded4 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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 d3a80bd777..c6dd2c3757 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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
@@ -140,6 +140,17 @@ end
function triangle : soddy_center ()
return soddy_center_ (self.pa,self.pb,self.pc)
end
+
+function triangle : conway_points ()
+ local a1,a2,b1,b2,c1,c2
+ a1 = report_ (self.pb,self.pa,length(self.pb,self.pc),self.pa)
+ a2 = report_ (self.pc,self.pa,length(self.pb,self.pc),self.pa)
+ b1 = report_ (self.pa,self.pb,length(self.pa,self.pc),self.pb)
+ b2 = report_ (self.pc,self.pb,length(self.pa,self.pc),self.pb)
+ c1 = report_ (self.pb,self.pc,length(self.pb,self.pa),self.pc)
+ c2 = report_ (self.pa,self.pc,length(self.pb,self.pa),self.pc)
+ return a1,a2,b1,b2,c1,c2
+ end
-------------------
-- Result -> line
-------------------
@@ -214,7 +225,7 @@ local a,b,c
end
end
-function triangle: antiparallel(pt,n) -- n =1 swap n=2 2 swap
+function triangle: antiparallel(pt,n) -- n = 1 swap ; n= 2 2 swap
local a,b,c,i,u,v,w
a = self.pa
b = self.pb
@@ -305,6 +316,29 @@ function triangle : soddy_circle ()
s,i = soddy_center_ (self.pa,self.pb,self.pc)
return circle : new ( s , i )
end
+
+function triangle : cevian_circle (p)
+ local pta,ptb,ptc
+ 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 : pedal_circle (pt)
+ local x,y,z,c
+ x = projection_ (self.pb,self.pc,pt)
+ y = projection_ (self.pa,self.pc,pt)
+ z = projection_ (self.pa,self.pb,pt)
+ c = circum_center_ (x,y,z)
+ return circle : new (c,x)
+end
+
-------------------
-- Result -> triangle
-------------------
@@ -361,6 +395,14 @@ end
function triangle: euler ()
return triangle : new (euler_points_ (self.pa,self.pb,self.pc) )
end
+
+function triangle: pedal (pt)
+ local x,y,z
+ x = projection_ (self.pb,self.pc,pt)
+ y = projection_ (self.pa,self.pc,pt)
+ z = projection_ (self.pa,self.pb,pt)
+ return triangle : new (x,y,z)
+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 f3f93a0f53..8b26fe4bd3 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/03/25
--- version 2.20c
+-- date 2024/04/27
+-- version 2.25c
-- 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-euclide/README.md b/macros/latex/contrib/tkz/tkz-euclide/README.md
index d0bc9ec3e8..a0b514e2b8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/README.md
+++ b/macros/latex/contrib/tkz/tkz-euclide/README.md
@@ -1,5 +1,5 @@
# tkz-euclide — for euclidean geometry
-Release 5.06c 2024/02/04
+Release 5.10c 2024/04/27
## Description
@@ -9,7 +9,8 @@ It uses a Cartesian coordinate system orthogonormal (unit 1cm)
as well as tools to define the unique coordinates of points and to
manipulate them. The idea is to allow you to follow step by step a construction
that would be done by hand as naturally as possible.
-Now tkz-euclide introduces a "lua" option which allows to do most of the calculations using "lua".
+Now tkz-euclide introduces a `lua` option which allows to do most of the calculations using `lua`.
+A new option mini has been introduced. When one wishes to use tkz-euclide and tkz-elements together, it is recommended to load the package with this option. Thus, tkz-euclide will focus solely on the drawings.
## Licence
@@ -41,18 +42,20 @@ To use the package `tkz-euclide`, place the following lines in the preamble of
your LaTeX document:
```
-\usepackage{tkz-euclide} or \usepackage[lua]{tkz-euclide}
+\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
your code
\end{tikzpicture}
```
+
+This code can be compiled using either `pdflatex` or `lualatex`. In the latter case, the `lua` option allows most calculations to be performed with `lua`. If you do the calculations with `tkz-elements` then you can load `tkz-euclide` with the `mini` option.
If you use the `xcolor` package, load that package before `tkz-euclide` to avoid
package conflicts.
## Documentation
-Documentation for `tkz-euclide` is available on `CTAN`.
+Documentation for `tkz-euclide` is available on `CTAN`. A french version of the documentation is now available on my website [http://altermundus.fr](http://altermundus.fr)
## Examples
@@ -63,6 +66,11 @@ Other examples, in French, are on my site.
## History
+
+- 5.10c
+ - tkz-tool-eu-angles.arc.tex has been extracted from the file tkz-tool-eu-angles.tex
+ - Added `mini` option
+ - Added french documentation on my site (altermundus.fr)
- 5.06c
- Correction of a bug with the macro \tkzLabelAngle and the option “angleâ€
- Added \tkzSetUpCircle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
index 97e137007e..d0844abe81 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-FAQ.tex
@@ -8,7 +8,9 @@
\item Don't forget that since version 4 the unit is obligatorily the "cm" it is thus necessary to withdraw the unit like here \tkzcname{tkzDrawCircle[R](O,3cm)} which becomes \tkzcname{tkzDrawCircle[R](O,3)}. The traditional options of \tkzname{TikZ} keep their units example\tkzname{ below right = 12pt} on the other hand one will write \tkzname{size=1.2} to position an arc in \tkzcname{tkzMarkAngle};
- \item The following error still happens to me from time to time. A point that is created has its name in brackets while a point that is used either as an option or as a parameter has its name in braces. Example \tkzcname{tkzGetPoint(A)} When defining an object, use braces and not brackets, so write: \tkzcname{tkzGetPoint\{A\}};
+ \item The following error still happens to me from time to time. A point that is created has its name in brackets while a point that is used either as an option or as a parameter has its name in braces.
+
+ Example \tkzcname{tkzGetPoint(A)} When defining an object, use braces and not brackets, so write: \tkzcname{tkzGetPoint\{A\}};
\item The changes in obtaining the points of intersection between lines and circles sometimes exchange the solutions, this leads either to a bad figure or to an error.
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
index 3ab43bd43e..6ced16c2df 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-angles.tex
@@ -228,7 +228,8 @@ Here is another version of the construction of a mediator
\tkzCalcLength(A,B) \tkzGetLength{dAB}
\tkzFindSlopeAngle(A,B) \tkzGetAngle{tkzangle}
\begin{scope}[rotate=\tkzangle]
- \tkzSetUpArc[color=gray,line width=0.2pt,/tkzcompass/delta=10]
+ \tkzSetUpArc[color=gray,line width=0.2pt,%
+ /tkzcompass/delta=10]
\tkzDrawArc[R,arc](B,3/4*\dAB)(120,240)
\tkzDrawArc[R,arc](A,3/4*\dAB)(-45,60)
\tkzDrawLine(I,J) \tkzDrawSegment(A,B)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
index 7af83e2aa1..fa38fb4cd1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circleby.tex
@@ -96,14 +96,14 @@ options & & examples \\
\subsubsection{\tkzname{Symmetry}}
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1]
- \tkzDefPoint(0,0){A} \tkzDefPoint(3,1){B}
+ \tkzDefPoint(3,1){B}
\tkzDefPoint(3,2){C} \tkzDefPoint(4,3){D}
\tkzDefCircleBy[symmetry=center B](C,D)
\tkzGetPoints{C'}{D'}
\tkzDrawPoints[teal](B,C,D,C',D')
\tkzDrawLines[orange](C,C' D,D')
\tkzDrawCircles(C,D C',D')
- \tkzLabelPoints[color=teal](A,C,C')
+ \tkzLabelPoints[color=teal](C,C')
\tkzLabelPoints[color=teal,above](D)
\tkzLabelPoints[color=teal,below](D')
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
index 2a336d91af..f36f2dd2a7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-circles.tex
@@ -129,7 +129,8 @@ We want to define an excircle of a triangle relatively to point $C$
\tkzDrawPolygon(A,B,C)
\tkzDrawLines[add=0 and 1.5](C,A C,B)
\tkzDrawSegments(J_c,X_c I,D I,F J_c,Y_c)
- \tkzMarkRightAngles(A,F,I B,D,I J_c,X_c,A J_c,Y_c,B)
+ \tkzMarkRightAngles(A,F,I B,D,I J_c,X_c,A%
+ J_c,Y_c,B)
\tkzDrawPoints(B,C,A,I,D,F,X_c,J_c,Y_c)
\tkzLabelPoints(B,A,J_c,I,D)
\tkzLabelPoints[above](Y_c)
@@ -205,21 +206,22 @@ We verify that this circle passes through the middle of each side.
The incircle of the medial triangle $M_aM_bM_c$ is the Spieker circle:
\begin{tkzexample}[latex=6cm, small]
-\begin{tikzpicture}[scale=1]
+\begin{tikzpicture}[scale=1.25]
\tkzDefPoints{ 0/0/A,4/0/B,0.8/4/C}
- \tkzDefSpcTriangle[medial](A,B,C){M_a,M_b,M_c}
- \tkzDefTriangleCenter[spieker](A,B,C)
- \tkzGetPoint{S_p}
- \tkzDrawPolygon(A,B,C)
- \tkzDrawPolygon[cyan](M_a,M_b,M_c)
- \tkzDrawPoints(B,C,A)
- \tkzDefCircle[spieker](A,B,C)
- \tkzDrawPoints[new](M_a,M_b,M_c,S_p)
- \tkzDrawCircle[new](tkzFirstPointResult,tkzSecondPointResult)
- \tkzLabelPoints[right](M_a)
- \tkzLabelPoints[left](M_b)
- \tkzLabelPoints[below](A,B,M_c,S_p)
- \tkzLabelPoints[above](C)
+ \tkzDefSpcTriangle[medial](A,B,C){M_a,M_b,M_c}
+ \tkzDefTriangleCenter[spieker](A,B,C)
+ \tkzGetPoint{S_p}
+ \tkzDrawPolygon(A,B,C)
+ \tkzDrawPolygon[cyan](M_a,M_b,M_c)
+ \tkzDrawPoints(B,C,A)
+ \tkzDefCircle[spieker](A,B,C)
+ \tkzDrawPoints[new](M_a,M_b,M_c,S_p)
+ \tkzDrawCircle[new](tkzFirstPointResult,%
+ tkzSecondPointResult)
+ \tkzLabelPoints[right](M_a)
+ \tkzLabelPoints[left](M_b)
+ \tkzLabelPoints[below](A,B,M_c,S_p)
+ \tkzLabelPoints[above](C)
\end{tikzpicture}
\end{tkzexample}
@@ -266,7 +268,8 @@ arguments & default & definition \\
Jc,Xc Jc,Yc Jc,Zc
I,Ia I,Ib I,Ic)
\tkzMarkRightAngles[size=.2,fill=gray!15](Ja,Za,B Ja,Xa,B Ja,Ya,C Jb,Yb,C)
-\tkzMarkRightAngles[size=.2,fill=gray!15](Jb,Zb,B Jb,Xb,C Jc,Yc,A Jc,Zc,B Jc,Xc,C I,Ia,B I,Ib,C I,Ic,A)
+\tkzMarkRightAngles[size=.2,fill=gray!15](Jb,Zb,B Jb,Xb,C Jc,Yc,A Jc,Zc,B)
+\tkzMarkRightAngles[size=.2,fill=gray!15](Jc,Xc,C I,Ia,B I,Ib,C I,Ic,A)
\tkzDrawSegments[blue](Jc,C Ja,A Jb,B)
\tkzDrawPoints(A,B,C,Xa,Xb,Xc,Ja,Jb,Jc,Ia,Ib,Ic,Ya,Yb,Yc,Za,Zb,Zc)
\tkzLabelPoints(A,Ya,Yb,Ja,I)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex
index 430c8605cc..a0db97f729 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-clipping.tex
@@ -1,5 +1,7 @@
\section{Controlling Bounding Box}
-From the \tkzimp{PgfManual} :"When you add the clip option, the current path is used for clipping subsequent drawings. Clipping never enlarges the clipping area. Thus, when you clip against a certain path and then clip again against another path, you clip against the intersection of both.
+From the \tkzimp{PgfManual} :
+
+"When you add the clip option, the current path is used for clipping subsequent drawings. Clipping never enlarges the clipping area. Thus, when you clip against a certain path and then clip again against another path, you clip against the intersection of both.
The only way to enlarge the clipping path is to end the {pgfscope} in which the clipping was done. At the end of a {pgfscope} the clipping path that was in force at the beginning of the scope is reinstalled."
@@ -10,7 +12,7 @@ The following command \tkzcname{pgfresetboundingbox} clears a bounding box and e
\subsection{Utility of \tkzcname{tkzInit}}
However, it is sometimes necessary to control the size of what will be displayed.
- To do this, you need to have prepared the bounding box you are going to work in, this is the role of the macro \tkzNameMacro{tkzInit}. For some drawings, it is interesting to fix the extreme values (xmin,xmax,ymin and ymax) and to "clip" the definition rectangle in order to control the size of the figure as well as possible.
+ To do this, you need to have prepared the bounding box you are going to work in, this is the role of the macro \tkzNameMacro{tkzInit}. For some drawings, it is interesting to fix the extreme values (xmin,xmax,ymin and ymax) and to \code{clip} the definition rectangle in order to control the size of the figure as well as possible.
The two macros that are useful for controlling the bounding box:
\begin{itemize}
@@ -39,7 +41,7 @@ options & default & definition \\
\medskip
The role of \tkzcname{tkzInit} is to define a \textcolor{red}{orthogonal} coordinates system and a rectangular part of the plane in which you will place your drawings using Cartesian coordinates.
-This macro allows you to define your working environment as with a calculator. With \tkzname{\tkznameofpack} 4 \tkzcname{xstep} and \tkzcname{ystep} are always 1. Logically it is no longer useful to use \tkzcname{tkzInit}, except for an action like "Clipping Out".
+This macro allows you to define your working environment as with a calculator. With \tkzname{\tkznameofpack} 4 \tkzcname{xstep} and \tkzcname{ystep} are always 1. Logically it is no longer useful to use \tkzcname{tkzInit}, except for an action like \code{Clipping Out}.
\end{NewMacroBox}
@@ -64,7 +66,7 @@ The role of the \tkzname{space} option is to enlarge the visible part of the dra
-The role of this macro is to "clip" the initial rectangle so that only the paths contained in this rectangle are drawn.
+The role of this macro is to \code{clip} the initial rectangle so that only the paths contained in this rectangle are drawn.
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
@@ -83,7 +85,7 @@ It is possible to add a bit of space
\end{tkzltxexample}
\subsection{\tkzcname{tkzClip} and the option \tkzname{space}}
-This option allows you to add some space around the "clipped" rectangle.
+This option allows you to add some space around the \code{clipped} rectangle.
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
\tkzInit[xmax=4, ymax=3]
@@ -94,7 +96,7 @@ This option allows you to add some space around the "clipped" rectangle.
\tkzDrawSegment(A,B)
\end{tikzpicture}
\end{tkzexample}
-The dimensions of the "clipped" rectangle are \tkzname{xmin-1}, \tkzname{ymin-1}, \tkzname{xmax+1} and \tkzname{ymax+1}.
+The dimensions of the \code{clipped} rectangle are \tkzname{xmin-1}, \tkzname{ymin-1}, \tkzname{xmax+1} and \tkzname{ymax+1}.
%<--------------------------------------------------------------------------->
% tkzShowBB
@@ -116,7 +118,8 @@ This macro displays the bounding box. A rectangular frame surrounds the bounding
\tkzClipBB
\tkzDefCircle[R](A,5) \tkzGetPoint{a}
\tkzDrawCircle(A,a)
- \tkzShowBB[line width = 4pt,fill=teal!10,opacity=.4]
+ \tkzShowBB[line width = 4pt,fill=teal!10,%
+ opacity=.4]
\end{scope}
\tkzDefCircle[R](A,4) \tkzGetPoint{b}
\tkzDrawCircle[red](A,b)
@@ -207,7 +210,7 @@ options & default & definition \\
\end{tikzpicture}
\end{tkzexample}
-\subsubsection{Example: use of "Clip" for Sangaku in a square}
+\subsubsection{Example: use of \code{Clip} for Sangaku in a square}
\begin{tkzexample}[latex=7cm, small]
\begin{tikzpicture}[scale=.75]
\tkzDefPoint(0,0){A} \tkzDefPoint(8,0){B}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex
index 088d39f8b0..3c04202262 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-compass.tex
@@ -64,7 +64,7 @@ options & default & definition \\
% subsubsection use_tkzcname_tkzcompasss (end)
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tikzpicture}[scale=.6]
\tkzDefPoint(2,2){A} \tkzDefPoint(5,-2){B}
\tkzDefPoint(3,4){C} \tkzDrawPoints(A,B)
\tkzDrawPoint[shape=cross out](C)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex
index a24b7e63b4..b3e889b817 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-documentation.tex
@@ -1,6 +1,6 @@
\section{About this documentation and the examples}
-It is obtained by compiling with "lualatex". I use a class \tkzname{doc.cls} based on \tkzname{scrartcl}.
+It is obtained by compiling with \code{lualatex}. I use a class \tkzname{doc.cls} based on \tkzname{scrartcl}.
Below the list of styles used in the documentation. To understand how to use the styles see the section \ref{custom}
@@ -25,5 +25,4 @@ Below the list of styles used in the documentation. To understand how to use the
Some examples use predefined styles like
-
|\tikzset{new/.style={color=orange,line width=.2pt}} | \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex
index 0017d4390e..d511637968 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-drawing.tex
@@ -85,7 +85,7 @@ options & default & definition \\
\end{tabular}
\medskip
-\tkzHandBomb\ Beware of the final "s", an oversight leads to cascading errors if you try to draw multiple points. The options are the same as for the previous macro.
+\tkzHandBomb\ Beware of the final \code{s}, an oversight leads to cascading errors if you try to draw multiple points. The options are the same as for the previous macro.
\end{NewMacroBox}
\subsubsection{Example}
@@ -283,18 +283,20 @@ I'll let you look at the examples to see what you can do with these styles.
\tkzCalcLength(B,C)\tkzGetLength{BCl}
\tkzCalcLength(A,C)\tkzGetLength{ACl}
\begin{scope}[dim style/.style={dashed,sloped,teal}]
- \tkzDrawSegment[dim={\pgfmathprintnumber\BCl,6pt,
- text=red}](C,B)
- \tkzDrawSegment[dim={\pgfmathprintnumber\ACl,6pt,}](A,C)
- \tkzDrawSegment[dim={\pgfmathprintnumber\ABl,-6pt,}](A,B)
+ \tkzDrawSegment[dim={\pgfmathprintnumber\BCl,6pt,%
+ text=red}](C,B)
+ \tkzDrawSegment[dim={\pgfmathprintnumber\ACl,%
+ 6pt,}](A,C)
+ \tkzDrawSegment[dim={\pgfmathprintnumber\ABl,%
+ -6pt,}](A,B)
\end{scope}
\tkzLabelPoints(A,B) \tkzLabelPoints[above](C)
\end{tikzpicture}
\end{tkzexample}
\subsubsection{Adding dimensions with option \tkzname{dim} part II}
-\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tkzexample}[latex=6cm,small]
+\begin{tikzpicture}[scale=.5]
\tkzDefPoints{0/0/O,-2/0/A,2/0/B,
-2/4/C,2/4/D,2/-4/E,-2/-4/F}
\tkzDrawPolygon(C,...,F)
@@ -699,7 +701,7 @@ arguments & example & explanation \\
\toprule
arguments & example & explanation \\
\midrule
-\TAline{\parg{C,a,b,An}}{\parg{C,4,2,45}} {C center 4 and 2 lengths of long axis and small axis} \\
+\TAline{\parg{C,a,b,An}}{\parg{C,4,2,45}} {C center; 4 and 2 lengths of half-axis} \\
& & 45 slope of main axis \\
\bottomrule
\end{tabular}
@@ -708,9 +710,9 @@ arguments & example & explanation \\
Of course, you have to add all the styles of \TIKZ\ for the tracings...
\end{NewMacroBox}
-\subsubsection{Option \tkzname{towards}}
-\begin{tkzexample}[latex=7cm,small]
- \begin{tikzpicture}
+\subsubsection{Example of drawing an ellipse }
+\begin{tkzexample}[latex=6cm,small]
+ \begin{tikzpicture}[scale=.75]
\tkzDefPoint(0,4){C}
\tkzDrawEllipse[blue](C,4,2,45)
\tkzLabelPoints(C)
@@ -879,7 +881,7 @@ This option allows a bit like \tkzcname{tkzCompass} to place an arc and overflow
\subsubsection{Option \tkzname{angles}: example 2}
-\begin{tkzexample}[latex=6cm,small]
+\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(0,0){O}
\tkzDefPoint(5,0){I}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex
index 4d01262ccb..ad4db72817 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-elements.tex
@@ -2,7 +2,7 @@
To work with my package, you need to have notions of \LATEX\ as well as \TIKZ.
-In this paragraph, we start looking at the "rules" and "symbols" used to create a figure with \tkzname{\tkznameofpack}.
+In this paragraph, we start looking at the \code{rules} and \code{symbols} used to create a figure with \tkzname{\tkznameofpack}.
\subsection{Objects and language}
@@ -15,7 +15,7 @@ The used points are passed as parameters between parentheses while the created p
The code of the figures is placed in an environment \tkzimp{tikzpicture}
-Contrary to \TIKZ, you should not end a macro with ";". We thus lose the important notion which is the \tkzimp{path}. However, it is possible to place some code between the macros \tkzname{\tkznameofpack}.
+Contrary to \TIKZ, you should not end a macro with “;â€. We thus lose the important notion which is the \tkzimp{path}. However, it is possible to place some code between the macros \tkzname{\tkznameofpack}.
Among the first category, |\tkzDefPoint| allows you to define fixed points. It will be studied in detail later. Here we will see in detail the macro |\tkzDefTriangle|.
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
index e436c406fe..ec8982331b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-examples.tex
@@ -955,19 +955,18 @@ From Wikipedia {\emph{In geometry, the Pappus chain is a ring of circles betwee
\end{tikzpicture}%
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}
- \tkzDefPoints{0/0/O_1,0/1/O_2,0/3/A}
- \tkzDefPoint(15:3){F}
- \tkzInterLC(F,O_1)(O_1,A) \tkzGetSecondPoint{E}
- \tkzDefLine[parallel=through O_2](E,F)
- \tkzGetPoint{x}
- \tkzInterLC(x,O_2)(O_2,A) \tkzGetPoints{D}{C}
- \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{tikzpicture}[scale=.75]
+ \tkzDefPoints{0/0/O_1,0/1/O_2,0/3/A}
+ \tkzDefPoint(15:3){F}
+ \tkzDefPointBy[symmetry=center O_1](F) \tkzGetPoint{E}
+ \tkzDefLine[parallel=through O_2](E,F) \tkzGetPoint{x}
+ \tkzInterLC(x,O_2)(O_2,A) \tkzGetPoints{D}{C}
+ \tkzDrawCircles(O_1,A O_2,A)
+ \tkzDrawSegments[orange](O_1,A E,F C,D)
+ \tkzDrawSegments[purple](A,E A,F)
+ \tkzDrawPoints(A,O_1,O_2,E,F,x,C,D)
+ \tkzLabelPoints(A,O_1,O_2,E,F,x,C,D)
+ \end{tikzpicture}
\end{tkzexample}
$(CD) \parallel (EF)$ $(AO_1)$ is secant to these two lines so
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex
index c8f1ea14f1..f7fc8883fe 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-filling.tex
@@ -41,7 +41,8 @@ You don't need to put \tkzname{radius} because that's the default option. Of cou
\tkzDefMidPoint(A,D) \tkzGetPoint{F}
\tkzDefMidPoint(B,C) \tkzGetPoint{E}
\tkzDefMidPoint(B,D) \tkzGetPoint{Q}
- \tkzDefLine[tangent from = B](F,A) \tkzGetPoints{H}{G}
+ \tkzDefLine[tangent from = B](F,A)
+ \tkzGetPoints{H}{G}
\tkzInterLL(F,G)(C,D) \tkzGetPoint{J}
\tkzInterLL(A,J)(F,E) \tkzGetPoint{K}
\tkzDefPointBy[projection=onto B--A](K)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex
index 1583f91e2b..64bfe6ecfa 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-intersection.tex
@@ -109,7 +109,7 @@ In the following example, the drawing of the circle uses two points and the inte
\subsubsection{Line passing through the center option \tkzname{common}}
This case is special. You cannot compare the angles. In this case, the option \tkzname{near} must be used. \tkzname{tkzFirstPoint} is assigned to the point closest to the first point given for the line. Here we want $A$ to be closest to $Lb$.
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
\tkzDefPoints{% x y name
0 /1 /D,
@@ -170,12 +170,14 @@ As you can see $\widehat{BCO} < \widehat{BEO} $. To tell the truth,$ \widehat{BE
\tkzDefPoint(0,1){J}
\tkzDefPoint(0,0){O}
\foreach \i in {0,-5,-10,...,-90}{
- \tkzDefPoint({2.5*cos(\i*pi/180)},{1+2.5*sin(\i*pi/180)}){P}
+ \tkzDefPoint({2.5*cos(\i*pi/180)},%
+ {1+2.5*sin(\i*pi/180)}){P}
\tkzInterLC[R](P,J)(O,1)\tkzGetPoints{N}{M}
\tkzDrawSegment[color=orange](J,N)
\tkzDrawPoints[red](N)}
\foreach \i in {-90,-95,...,-175,-180}{
- \tkzDefPoint({2.5*cos(\i*pi/180)},{1+2.5*sin(\i*pi/180)}){P}
+ \tkzDefPoint({2.5*cos(\i*pi/180)},%
+ {1+2.5*sin(\i*pi/180)}){P}
\tkzInterLC[R](P,J)(O,1)\tkzGetPoints{N}{M}
\tkzDrawSegment[color=orange](J,M)
\tkzDrawPoints[red](M)}
@@ -212,14 +214,14 @@ $D$ is the point closest to $b$.
\subsubsection{More complex example of a line-circle intersection}
Figure from \url{http://gogeometry.com/problem/p190_tangent_circle}
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=6.5cm,small]
\begin{tikzpicture}[scale=.75]
\tkzDefPoint(0,0){A}
\tkzDefPoint(8,0){B}
- \tkzDefMidPoint(A,B) \tkzGetPoint{O}
- \tkzDefMidPoint(O,B) \tkzGetPoint{O'}
- \tkzDefLine[tangent from=A](O',B) \tkzGetFirstPoint{E}
- \tkzInterLC(A,E)(O,B) \tkzGetFirstPoint{D}
+ \tkzDefMidPoint(A,B) \tkzGetPoint{O}
+ \tkzDefMidPoint(O,B) \tkzGetPoint{O'}
+ \tkzDefLine[tangent from=A](O',B)\tkzGetFirstPoint{E}
+ \tkzInterLC(A,E)(O,B) \tkzGetFirstPoint{D}
\tkzDefPointBy[projection=onto A--B](D)
\tkzGetPoint{F}
\tkzDrawCircles(O,B O',B)
@@ -284,7 +286,7 @@ With \tkzname{xfp} and \tkzcname{fpeval}:
\end{tkzexample}
-\subsubsection{Option "with nodes"}
+\subsubsection{Option \code{with nodes}}
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}[scale=.75]
\tkzDefPoints{0/0/A,4/0/B,1/1/D,2/0/E}
@@ -315,7 +317,7 @@ options & default & definition \\
\end{tabular}
\medskip
-This macro defines the intersection point(s) $I$ and $J$ of the two center circles $O$ and $O'$. If the two circles do not have a common point then the macro ends with an error that is not handled. If the centers are $O$ and $O'$ and the intersections are $A$ and $B$ then the angles $\widehat{O,A,O'}$ and $\widehat{O,B,O'}$ are in opposite directions. \tkzname{tkzFirstPoint} is assigned to the point that forms the "clockwise" angle.
+This macro defines the intersection point(s) $I$ and $J$ of the two center circles $O$ and $O'$. If the two circles do not have a common point then the macro ends with an error that is not handled. If the centers are $O$ and $O'$ and the intersections are $A$ and $B$ then the angles $\widehat{O,A,O'}$ and $\widehat{O,B,O'}$ are in opposite directions. \tkzname{tkzFirstPoint} is assigned to the point that forms the \code{clockwise} angle.
\end{NewMacroBox}
\begin{NewMacroBox}{tkzTestInterCC}{\parg{$O,A$}\parg{$O',B$}}%
@@ -346,14 +348,15 @@ So the arguments are two couples which define two circles with a center and a po
\subsubsection{circle-circle intersection with \tkzname{common} point.}
\begin{tkzexample}[latex=7cm,small]
- \begin{tikzpicture}[scale=.5]
- \tkzDefPoints{0/0/O,5/-1/A,2/2/B}
- \tkzDrawPoints(O,A,B)
- \tkzDrawCircles(O,B A,B)
- \tkzInterCC[common=B](O,B)(A,B)\tkzGetFirstPoint{C}
- \tkzDrawPoint(C)
- \tkzLabelPoints[above](O,A,B,C)
- \end{tikzpicture}
+\begin{tikzpicture}[scale=.5]
+ \tkzDefPoints{0/0/O,5/-1/A,2/2/B}
+ \tkzDrawPoints(O,A,B)
+ \tkzDrawCircles(O,B A,B)
+ \tkzInterCC[common=B](O,B)(A,B)
+ \tkzGetFirstPoint{C}
+ \tkzDrawPoint(C)
+ \tkzLabelPoints[above](O,A,B,C)
+\end{tikzpicture}
\end{tkzexample}
\subsubsection{circle-circle intersection order of points.}
@@ -361,9 +364,10 @@ The idea is to compare the angles formed with the first center, a resultant poin
As you can see $\widehat{ODB} < \widehat{OBE} $
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.5]
- \pgfkeys{/pgf/number format/.cd,fixed relative,precision=4}
+ \pgfkeys{/pgf/number format/.cd,fixed relative,
+ precision=4}
\tkzDefPoints{0/0/O,5/-1/A,2/2/B,2/-1/C}
\tkzDrawPoints(O,A,B)
\tkzDrawCircles(O,A B,C)
@@ -382,8 +386,6 @@ As you can see $\widehat{ODB} < \widehat{OBE} $
\end{tikzpicture}
\end{tkzexample}
-
-
\subsubsection{Construction of an equilateral triangle.}
$\widehat{A,C,B}$ is a clockwise angle
\begin{tkzexample}[latex=7cm,small]
@@ -410,13 +412,13 @@ $\widehat{A,C,B}$ is a clockwise angle
\begin{tikzpicture}[scale=.6]
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,2){B}
- \tkzInterCC(A,B)(B,A) \tkzGetSecondPoint{D}
- \tkzInterCC(D,B)(B,A) \tkzGetPoints{A}{C}
- \tkzInterCC(D,B)(A,B) \tkzGetPoints{E}{B}
- \tkzInterLC[common=D](C,D)(E,D) \tkzGetFirstPoint{F}
- \tkzInterLL(A,F)(B,C) \tkzGetPoint{O}
- \tkzInterLL(O,D)(A,B) \tkzGetPoint{H}
- \tkzInterLL(O,E)(A,B) \tkzGetPoint{G}
+ \tkzInterCC(A,B)(B,A) \tkzGetSecondPoint{D}
+ \tkzInterCC(D,B)(B,A) \tkzGetPoints{A}{C}
+ \tkzInterCC(D,B)(A,B) \tkzGetPoints{E}{B}
+ \tkzInterLC[common=D](C,D)(E,D)\tkzGetFirstPoint{F}
+ \tkzInterLL(A,F)(B,C) \tkzGetPoint{O}
+ \tkzInterLL(O,D)(A,B) \tkzGetPoint{H}
+ \tkzInterLL(O,E)(A,B) \tkzGetPoint{G}
\tkzDrawCircles(D,E A,B B,A E,A)
\tkzDrawSegments[](O,F O,B O,D O,E)
\tkzDrawPoints(A,...,H)
@@ -425,7 +427,7 @@ $\widehat{A,C,B}$ is a clockwise angle
\end{tikzpicture}
\end{tkzexample}
-\subsubsection{With the option "\tkzimp{with nodes}"}
+\subsubsection{With the option \code{with nodes}}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.5]
\tkzDefPoints{0/0/A,0/5/B,5/0/C}
@@ -449,17 +451,17 @@ $\widehat{A,C,B}$ is a clockwise angle
\subsubsection{Mix of intersections}
\begin{tkzexample}[latex=8cm,small]
-\begin{tikzpicture}[scale = .75]
+\begin{tikzpicture}[scale = .7]
\tkzDefPoint(2,2){A}
\tkzDefPoint(0,0){B}
\tkzDefPoint(-2,2){C}
\tkzDefPoint(0,4){D}
\tkzDefPoint(4,2){E}
\tkzCircumCenter(A,B,C)\tkzGetPoint{O}
- \tkzInterCC[R](O,2)(D,2) \tkzGetPoints{M1}{M2}
+ \tkzInterCC[R](O,2)(D,2)\tkzGetPoints{M1}{M2}
\tkzInterCC(O,A)(D,O) \tkzGetPoints{1}{2}
- \tkzInterLC(A,E)(B,M1) \tkzGetSecondPoint{M3}
- \tkzInterLC(O,C)(M3,D) \tkzGetSecondPoint{L}
+ \tkzInterLC(A,E)(B,M1)\tkzGetSecondPoint{M3}
+ \tkzInterLC(O,C)(M3,D)\tkzGetSecondPoint{L}
\tkzDrawSegments(C,L)
\tkzDrawPoints(A,B,C,D,E,M1,M2,M3,O,L)
\tkzDrawSegments(O,E)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
index f3c8a0b3da..6fe0133db1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-labelling.tex
@@ -330,7 +330,7 @@ options & default & definition \\
\end{tabular}
\medskip
-\emph{ We can use the styles from \TIKZ. The label is created and therefore "passed" between braces.}
+\emph{ We can use the styles from \TIKZ. The label is created and therefore \code{passed} between braces.}
\end{NewMacroBox}
\subsubsection{Example}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex
index cc4177dd9f..4d42e3d571 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lines.tex
@@ -25,9 +25,9 @@ arguments & example & explanation \\
\toprule
options & default & definition \\
\TOline{mediator}{}{perpendicular bisector of a line segment}
-\TOline{perpendicular=through\dots}{mediator}{perpendicular to a straight line passing through a point}
+\TOline{perpendicular=through\dots}{mediator}{perpendicular to a line passing through a point}
\TOline{orthogonal=through\dots}{mediator}{see above }
-\TOline{parallel=through\dots}{mediator}{parallel to a straight line passing through a point}
+\TOline{parallel=through\dots}{mediator}{parallel to a line passing through a point}
\TOline{bisector}{mediator}{bisector of an angle defined by three points}
\TOline{bisector out}{mediator}{exterior angle bisector}
\TOline{symmedian}{mediator}{symmedian from a vertex }
@@ -59,7 +59,7 @@ options & default & definition \\
Based on a figure from O. Reboux with pst-eucl by D Rodriguez.
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.6]
+\begin{tikzpicture}[scale=.75]
% necessary
\tkzInit[xmin=-6,ymin=-4,xmax=6,ymax=6]
\tkzClip
@@ -80,7 +80,7 @@ Based on a figure from O. Reboux with pst-eucl by D Rodriguez.
Based on a figure from O. Reboux with pst-eucl by D Rodriguez.
It is not necessary to name the two points that define the mediator.
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}[scale=.6]
\tkzInit[xmin=-6,ymin=-4,xmax=6,ymax=6]
\tkzClip
@@ -112,11 +112,13 @@ It is not necessary to name the two points that define the mediator.
Archimedes' Book of Lemmas proposition 1
\begin{tkzexample}[latex=7cm,small]
- \begin{tikzpicture}[scale=.75]
+ \begin{tikzpicture}
\tkzDefPoints{0/0/O_1,0/1/O_2,0/3/A}
\tkzDefPoint(15:3){F}
- \tkzInterLC(F,O_1)(O_1,A) \tkzGetSecondPoint{E}
- \tkzDefLine[parallel=through O_2](E,F) \tkzGetPoint{x}
+ \tkzDefPointBy[symmetry=center O_1](F)
+ \tkzGetPoint{E}
+ \tkzDefLine[parallel=through O_2](E,F)
+ \tkzGetPoint{x}
\tkzInterLC(x,O_2)(O_2,A) \tkzGetPoints{D}{C}
\tkzDrawCircles(O_1,A O_2,A)
\tkzDrawSegments[new](O_1,A E,F C,D)
@@ -169,10 +171,12 @@ Archimedes' Book of Lemmas proposition 1
\subsubsection{ With option \tkzname{euler}} % (fold)
\label{sub:eulerline}
\begin{tkzexample}[latex=7 cm,small]
-\begin{tikzpicture}
+\begin{tikzpicture}[scale=.75]
\tkzDefPoints{0/0/A,6/0/B,0.8/4/C}
-\tkzDefLine[euler](A,B,C) \tkzGetPoints{h}{e}
-\tkzDefTriangleCenter[circum](A,B,C) \tkzGetPoint{o}
+\tkzDefLine[euler](A,B,C)
+\tkzGetPoints{h}{e}
+\tkzDefTriangleCenter[circum](A,B,C)
+\tkzGetPoint{o}
\tkzDrawPolygon[teal](A,B,C)
\tkzDrawPoints[red](A,B,C,h,e,o)
\tkzDrawLine[add= 2 and 2](h,e)
@@ -205,18 +209,22 @@ The tangent is not drawn. With option \tkzname{at}, a point of the tangent is g
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1,rotate=-30]
\tkzDefPoints{0/0/Q,0/2/A,6/-1/O}
-\tkzDefLine[tangent from = O](Q,A) \tkzGetPoints{R}{S}
-\tkzInterLC[near](O,Q)(Q,A) \tkzGetPoints{M}{N}
+\tkzDefLine[tangent from = O](Q,A)
+\tkzGetPoints{R}{S}
+\tkzInterLC[near](O,Q)(Q,A)
+\tkzGetPoints{M}{N}
\tkzDrawCircle(Q,M)
\tkzDrawSegments[new,add = 0 and .2](O,R O,S)
\tkzDrawSegments[gray](N,O R,Q S,Q)
\tkzDrawPoints(O,Q,R,S,M,N)
\tkzMarkAngle[gray,-stealth,size=1](O,R,Q)
\tkzFindAngle(O,R,Q) \tkzGetAngle{an}
-\tkzLabelAngle(O,R,Q){$\pgfmathprintnumber{\an}^\circ$}
+\tkzLabelAngle(O,R,Q){%
+ $\pgfmathprintnumber{\an}^\circ$}
\tkzMarkAngle[gray,-stealth,size=1](O,S,Q)
\tkzFindAngle(O,S,Q) \tkzGetAngle{an}
-\tkzLabelAngle(O,S,Q){$\pgfmathprintnumber{\an}^\circ$}
+\tkzLabelAngle(O,S,Q){%
+ $\pgfmathprintnumber{\an}^\circ$}
\tkzLabelPoints(Q,O,M,N,R)
\tkzLabelPoints[above,text=red](S)
\end{tikzpicture}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
index 88a2c293ec..714ce64bc0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-lua.tex
@@ -1,7 +1,11 @@
\newpage
-\section{Working with lua : option \tkzname{lua}} \label{calc_with_lua}
+\section{Working with lua} \label{calc_with_lua}
-You can now use the "lua" option with \tkzname{\tkznameofpack} version 5.
+\subsubsection{Option \code{lua}} % (fold)
+\label{ssub:option_code_lua}
+
+% subsubsection option_code_lua (end)
+You can now use the \ItkzPopt{tkz-euclide}{lua} option with \tkzname{\tkznameofpack} version 5.
You just have to write in your preamble
|usepackage[lua]{tkz-euclide}|.
@@ -11,12 +15,18 @@ Without the option you can use \tkzname{\tkznameofpack} with the proposed code o
This version is not yet finalized although the documentation you are currently reading has been compiled with this option.
-Some information about the method used and the results obtained. Concerning the method, I considered two possibilities. The first one was simply to replace everywhere I could the calculations made by "xfp" or sometimes by "lua". This is how I went from "fp" to "xfp" and now to "lua". The second and more ambitious possibility would have been to associate to each point a complex number and to make the calculations on the complexes with "lua". Unfortunately for that I have to use libraries for which I don't know the license.
+Some information about the method used and the results obtained. Concerning the method, I considered two possibilities. The first one was simply to replace everywhere I could the calculations made by \code{xfp} or sometimes by \code{lua}. This is how I went from \code{fp} to \code{xfp} and now to \code{lua}. The second and more ambitious possibility would have been to associate to each point a complex number and to make the calculations on the complexes with \code{lua}. Unfortunately for that I have to use libraries for which I don't know the license.
-Otherwise the results are good. This documentation with "LualaTeX" and "xfp" compiles in 47s while with "lua" it takes only 30s for 236 pages.
+Otherwise the results are good. This documentation with \code{LualaTeX} and \code{xfp} compiles in 47s while with \code{lua} it takes only 30s for 236 pages.
-Another document of 61 pages is compiled 16s with "pdflaTeX" and "xfp" and 13s with "LualaTeX" and "xfp".
+Another document of 61 pages is compiled 16s with \code{pdflaTeX} and \code{xfp} and 13s with \code{LualaTeX} and \code{xfp}.
This documentation compiles with |\usepackage{tkz-base}| and |\usepackage[lua]{tkz-euclide}| but I didn't test all the interactions thoroughly.
+\subsubsection{Option \code{mini}} % (fold)
+\label{ssub:option_code_mini}
+
+When you use \tkzNamePack{tkz-elements} solely to determine the points in your figures, it is not necessary to load all the modules of \tkzname{\tkznameofpack}. In this case, by using the \ItkzPopt{tkz-euclide}{mini} option |\usepackage[mini]{tkz-euclide}| , you will only load the modules necessary for the drawings.
+
+% subsubsection option_code_mini (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
index 806d740884..42ce13693b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-main.tex
@@ -18,13 +18,13 @@
index = totoc,
twoside,
cadre,
- headings = small
+ headings = small,
]{tkz-doc}
\gdef\tkznameofpack{tkz-euclide}
-\gdef\tkzversionofpack{5.06c}
+\gdef\tkzversionofpack{5.10c}
\gdef\tkzdateofpack{\today}
\gdef\tkznameofdoc{doc-tkz-euclide}
-\gdef\tkzversionofdoc{5.06c}
+\gdef\tkzversionofdoc{5.10c}
\gdef\tkzdateofdoc{\today}
\gdef\tkzauthorofpack{Alain Matthes}
\gdef\tkzadressofauthor{}
@@ -110,6 +110,9 @@
\tikzset{new/.style={color=orange,line width=.2pt}}
\AtBeginDocument{\MakeShortVerb{\|}} % link to shortvrb
+\def\code{\texttt}
+\newcommand*{\ItkzPopt}[2]{\texttt{#2}\index{#1_3@\texttt{#1: options}!\texttt{#2}}}
+
\begin{document}
\parindent=0pt
@@ -117,9 +120,10 @@
\clearpage
\defoffile{\lefthand\
-\tkzname{\tkznameofpack} passes in version 5 with the possibility of carrying out part of the calculations using \tkzname{lua}. See the "news" and "lua" sections for more information.\\
-\tkzname{\tkznameofpack} is a set of convenient macros for drawing in a plane (fundamental two-dimensional object) with a Cartesian coordinate system. It handles the most classic situations in Euclidean Geometry. \tkzname{\tkznameofpack} is built on top of PGF and its associated front-end \TIKZ\ and is a (La)TeX-friendly drawing package. The aim is to provide a high-level user interface to build graphics relatively simply. The idea is to allow you to follow step by step a construction that would be done by hand as naturally as possible.\\
-English is not my native language so there might be some errors.
+
+\tkzname{\tkznameofpack} is a set of convenient macros for drawing in a plane (fundamental two-dimensional object) with a Cartesian coordinate system. It handles the most classic situations in Euclidean Geometry. \tkzname{\tkznameofpack} is built on top of PGF and its associated front-end \TIKZ\ and is a (La)TeX-friendly drawing package. The aim is to provide a high-level user interface to build graphics relatively effortlessly. The goal is to guide users through constructing diagrams step by step, mirroring the natural process of manual construction as closely as possible.\\
+Version 5 of \tkzname{\tkznameofpack} includes the option to utilize Lua for performing certain calculations, refer to the \code{news} and \code{lua} sections.\\
+Please note: English is not my native language, so there may be some errors.
}
\presentation
@@ -128,7 +132,13 @@ English is not my native language so there might be some errors.
\lefthand\ Firstly, I would like to thank \textbf{Till Tantau} for the beautiful \LaTeX{} package, namely \href{http://sourceforge.net/projects/pgf/}{\TIKZ}.
\vspace*{12pt}
-\lefthand\ Acknowledgements : I received much valuable advice, remarks, corrections and examples from \tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold}, \tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel}, \tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe} for his work on a protractor, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} for all his corrections, remarks and questions and \tkzimp{Muzimuzhi Z} for the code about the option "dim". A big thank you to \tkzimp{Chetan Shirore} and \tkzimp{Dr. Ajit Kumar} because their work on complex numbers in their package \tkzimp{luamaths} helped me a lot.
+\lefthand\ Acknowledgements : I received much valuable advices, remarks, corrections and examples from
+
+\tkzimp{Jean-Côme Charpentier}, \tkzimp{Josselin Noirel}, \tkzimp{Manuel Pégourié-Gonnard}, \tkzimp{Franck Pastor}, \tkzimp{David Arnold},
+
+\tkzimp{Ulrike Fischer}, \tkzimp{Stefan Kottwitz}, \tkzimp{Christian Tellechea}, \tkzimp{Nicolas Kisselhoff}, \tkzimp{David Arnold}, \tkzimp{Wolfgang Büchel},
+
+\tkzimp{John Kitzmiller}, \tkzimp{Dimitri Kapetas}, \tkzimp{Gaétan Marris}, \tkzimp{Mark Wibrow}, \tkzimp{Yves Combe}, \tkzimp{Paul Gaborit}, \tkzimp{Laurent Van Deik} and \tkzimp{Muzimuzhi Z}.
\vspace*{12pt}
\lefthand\ I would also like to thank Eric Weisstein, creator of MathWorld:
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
index 6667d5bcda..9a21f26637 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-news.tex
@@ -1,218 +1,227 @@
\section*{News and compatibility}
-\subsection{With 5.06 version}
- \begin{itemize}
- \item Correction of a bug with the macro |\tkzLabelAngle| and the option “angleâ€
- \item Added |\tkzSetUpCircle|
- \item Correction of some typos
- \item Remove some french texts
- \end{itemize}
-
-
-\subsection{With 5.05 version}
-
- Correction of the documentation in Complete but minimal example.
-
-\subsection{With 5.03 version}
+\subsection{With 5.10 version}
\begin{itemize}
+ \item Added french documentation
- \item Correction of a bug in the macro |\tkzDefBarycentricPointTwo| of the file tkz-obj-lua-points-spc.tex ;
-
- \item Add macro |\tkzDrawEllipse|;
-
- \item Deleting macros |\tkzDrawSectorAngles| and |\tkzDrawSectorRwithNodesAngles|.
-\end{itemize}
-
-
-\subsection{With 5.0 version} % (fold)
-
-\begin{itemize}
-
- \item Finally, I added the "lua" option for the package \tkzname{\tkznameofpack}. This allows to do the calculations for the main functions using lua; (see \ref{calc_with_lua}). The syntax is unchanged. Nothing changes for the user;
-
- \item The "xfp" option has become "veclen" see \ref{opt-veclen}.
-
-\end{itemize}
-
-\subsection{With 4.2 version} % (fold)
-\label{sub:with_4_2_version}
-
-Some changes have been made to make the syntax more homogeneous and especially to distinguish the definition and search for coordinates from the rest, i.e. drawing, marking and labelling.
-Now the definition macros are isolated, it will be easier to introduce a phase of coordinate calculations using \tkzimp{Lua}.
-
-Here are some of the changes.
-\vspace{1cm}
- \begin{itemize}\setlength{\itemsep}{10pt}
-
-
-\item I recently discovered a problem when using the "scale" option. When plotting certain figures with certain tools, extensive use of |pgfmathreciprocal| involves small computational errors but can add up and render the figures unfit. Here is how to proceed to avoid these problems:
-\begin{enumerate}
-
- \item On my side I introduced a patch proposed by Muzimuzhi that modifies
-|pgfmathreciprocal|;
-
-\item Another idea proposed by Muzimuzhi is to pass as an option for the |tikzpicture| environment this |/pgf/fpu/install only={reciprocal}| after loading of course the |fpu| library;
-
-\item I have in the methods chosen to define my macros tried to avoid as much as possible the use of |pgfmathreciprocal|;
-
-\item There is still a foolproof method which consists in avoiding the use of |scale = ...|. It's quite easy if, like me, you only work with fixed points fixed at the beginning of your code. The size of your figure depends only on these fixed points so you just have to adapt the coordinates of these.
-\end{enumerate}
-
-\item Now |\tkzDefCircle| gives two points as results: the center of the circle and a point of the circle. When a point of the circle is known, it is enough to use |\tkzGetPoint| or |\tkzGetFirstPoint|
-to get the center, otherwise |\tkzGetPoints| will give you the center and a point of the circle. You can always get the length of the radius with |\tkzGetLength|. I wanted to favor working with nodes and banish the appearance of numbers in the code.
-
-\item In order to isolate the definitions, I deleted or modified certain macros which are: |\tkzDrawLine|, |\tkzDrawTriangle|, |\tkzDrawCircle|, |\tkzDrawSemiCircle| and |\tkzDrawRectangle|;
-
-Thus |\tkzDrawSquare(A,B)| becomes |\tkzDefSquare(A,B)||\tkzGetPoints{C}{D}| then
-
- |\tkzDrawPolygon(A,B,C,D)|;
-
-If you want to draw a circle, you can't do so |\tkzDrawCircle[R](A,1)|. First you have to define the point through which the circle passes, so you have to do
-|\tkzDefCircle[R](A,1)| |\tkzGetPoint{a}| and finally |\tkzDrawCircle(A,a)|. Another possibilty is to define a point on the circle |\tkzDefShiftPoint[A](1,O){a}|;
-
-
-\item The following macros |tkzDefCircleBy[orthogonal through]| and |\tkzDefCircleBy[orthogonal from]| become |tkzDefCircle[orthogonal through]| and |\tkzDefCircle[orthogonal from]| ;
-
-
-\item |\tkzDefLine[euler](A,B,C)| is a macro that allows you to obtain the line of \tkzname{Euler} when possible. |\tkzDefLine[altitude](A,B,C)| is possible again, as well as |\tkzDefLine[tangent at=A](O)| and |\tkzDefLine[tangent from=P](O,A)| which did not works;
-
-
-\item | \tkzDefTangent| is replaced by |\tkzDefLine[tangent from = ...]| or |\tkzDefLine[tangent at = ...]|;
-
-
-\item I added the macro |\tkzPicAngle[tikz options](A,B,C)| for those who prefer to use \TIKZ ;
-
-
-\item The macro |\tkzMarkAngle| has been corrected;
-
-\item The macro linked to the \tkzname{apollonius} option of the |\tkzDefCircle| command has been rewritten;
-
-\item (4.23) The macro |\tkzDrawSemiCircle| has been corrected;
-
-\item
-The order of the arguments of the macro \tkzcname{tkzDefPointOnCircle} has changed: now it is center, angle and point or radius.
-I have added two options for working with radians which are \tkzname{through in rad} and \tkzname{R in rad}.
-
-
-\item I added the option \tkzname{reverse} to the arcs paths. This allows to reverse the path and to reverse if necessary the arrows that would be present.
-
-
-\item I have unified the styles for the labels. There is now only \tkzname{label style} left which is valid for points, segments, lines, circles and angles. I have deleted \tkzname{label seg style} \tkzname{label line style} and \tkzname{label angle style}
-
-\item I added the macro |tkzFillAngles| to use several angles.
-
-\item Correction option \tkzname{return} witk \tkzcname{tkzProtractor}
-
-As a reminder, the following changes have been made previously:
-
- \item |\tkzDrawMedian|, |\tkzDrawBisector|, |\tkzDrawAltitude|, |\tkzDrawMedians|, |\tkzDrawBisectors| and |\tkzDrawAltitudes| do not exist anymore. The creation and drawing separation is not respected so it is preferable to first create the coordinates of these points with |\tkzDefSpcTriangle[median]| and then to choose the ones you are going to draw with |\tkzDrawSegments| or |\tkzDrawLines|;
-
-\item |\tkzDrawTriangle| has been deleted. |\tkzDrawTriangle[equilateral]| was handy but it is better to get the third point with |\tkzDefTriangle[equilateral]| and then draw with |\tkzDrawPolygon|; idem for |\tkzDrawSquare| and |\tkzDrawGoldRectangle|;
-
-
-\item The circle inversion was badly defined so I rewrote the macro. The input arguments are always the center and a point of the circle, the output arguments are the center of the image circle and a point of the image circle or two points of the image line if the antecedent circle passes through the pole of the inversion. If the circle passes the inversion center, the image is a straight line, the validity of the procedure depends on the choice of the point on the antecedent circle;
-
-\item Correct allocation for gold sublime and euclide triangles;
-
-
-\item I added the option " next to" for the intersections LC and CC;
-
-
-\item Correction option isoceles right;
-
-\item (4.22 and 4.23) Correction of the macro |\tkzMarkAngle|;
-
-
-\item |\tkzDefMidArc(O,A,B)| gives the middle of the arc center $O$ from $A$ to $B$;
-
-\item Good news : Some useful tools have been added. They are present on an experimental basis and will undoubtedly need to be improved;
-
-
-\item The options "orthogonal from and through" depend now of \tkzcname{tkzDefCircleBy}
-
-\begin{enumerate}
-
- \item |\tkzDotProduct(A,B,C)| computes the scalar product in an orthogonal reference system of the vectors $\overrightarrow{A,B}$ and $\overrightarrow{A,C}$.
-
- |\tkzDotProduct(A,B,C)=aa'+bb' if vec{AB} =(a,b) and vec{AC} =(a',b')|
-
-
- \item |\tkzPowerCircle(A)(B,C)| power of point $A$ with respect to the circle of center $B$ passing through $C$;
-
-
- \item |\tkzDefRadicalAxis(A,B)(C,D)| Radical axis of two circles of center $A$ and $C$;
-
-
-\item (4.23) The macro |tkzDefRadicalAxis| has been completed
-
- \item Some tests : |\tkzIsOrtho(A,B,C)| and |\tkzIsLinear(A,B,C)| The first indicates whether the lines $(A,B)$ and $(A,C)$ are orthogonal. The second indicates whether the points $A$, $B$ and $C$ are aligned;
-
- |\tkzIsLinear(A,B,C)| if $A$,$B$,$C$ are aligned then |\tkzLineartrue|
- you can use |\iftkzLinear| (idem for |\tkzIsOrtho|);
-
-\item A style for vectors has been added that you can of course modify
-
-|tikzset{vector style/.style={>=Latex,->}}|;
-
-
-\item Now it's possible to add an arrow on a line or a circle with the option |tkz arrow|.
-\end{enumerate}
+ \item Added the \code{mini} option. You can use this option with the \tkzNamePack{tkz-elements} package. Only the modules required for tracing will be loaded. This option is currently only available if you are using \tkzNamePack{tkz-elements}.
\end{itemize}
-% subsection with_4_2_version (end)
-\subsection{Changes with previous versions} % (fold)
-\label{sub:changes_with_previous_versions}
-
-\vspace{1cm}
- \begin{itemize}\setlength{\itemsep}{10pt}
-
-\item I remind you that an important novelty is the recent replacement of the \tkzNamePack{fp} package by \tkzNamePack{xfp}. This is to improve the calculations a little bit more and to make it easier to use;
-
-\item First of all, you don’t have to deal with \TIKZ\ the size of the bounding box. Early versions of \tkzname{\tkznameofpack} did not control the size of the bounding box, The bounding box is now controlled in each macro (hopefully) to avoid the use of \tkzcname{tkzInit} followed by \tkzcname{tkzClip};
-
-\item With \tkzimp{tkz-euclide} loads all objects, so there's no need to place \tkzcname{usetkzobj\{all\}};
-
-\item Added macros for the bounding box: \tkzcname{tkzSaveBB} \tkzcname{tkzClipBB} and so on;
-
-\item Logically most macros accept \TIKZ\ options. So I removed the "duplicate" options when possible thus the "label options" option is removed;
-
-\item The unit is now the cm;
-
-\item |\tkzCalcLength| |\tkzGetLength| gives result in cm;
-
-\item |\tkzMarkArc| and |\tkzLabelArc| are new macros;
-
-\item Now |\tkzClipCircle| and |\tkzClipPolygon| have an option \tkzimp{out}. To use this option you must have a Bounding Box that contains the object on which the Clip action will be performed. This can be done by using an object that encompasses the figure or by using the macro \tkzcname{tkzInit};
-
-
-\item The options \tkzname{end} and \tkzname{start} which allowed to give a label to a straight line are removed. You now have to use the macro \tkzcname{tkzLabelLine};
-
-\item Introduction of the libraries \NameLib{quotes} and \NameLib{angles}; it allows to give a label to a point, even if I am not in favour of this practice;
-
-\item The notion of vector disappears, to draw a vector just pass "->" as an option to \tkzcname{tkzDrawSegment};
-
-
-\item |\tkzDefIntSimilitudeCenter| and |\tkzDefExtSimilitudeCenter| do not exist anymore, now you need to use |\tkzDefSimilitudeCenter[int]| or |\tkzDefSimilitudeCenter[ext]|;
-
-\item |\tkzDefRandPointOn| is replaced by |\tkzGetRandPointOn|;
-
-
-\item An option of the macro \tkzcname{tkzDefTriangle} has changed, in the previous version the option was "euclide" with an "e". Now it's "euclid";
-
-\item Random points are now in \tkzname{\tkznameofpack} and the macro \tkzcname{tkzGetRandPointOn} is replaced by
-
- \tkzcname{tkzDefRandPointOn}. For homogeneity reasons, the points must be retrieved with \tkzcname{tkzGetPoint};
-
-\item New macros have been added : \tkzcname{tkzDrawSemiCircles}, \tkzcname{tkzDrawPolygons}, \tkzcname{tkzDrawTriangles};
-
-
-\item Option "isosceles right" is a new option of the macro \tkzcname{tkzDefTriangle};
-
-\item Appearance of the macro \tkzcname{usetkztool} which allows to load new "tools";
-
-\item The styles can be modified with the help of the following macros : \tkzcname{tkzSetUpPoint}, \tkzcname{tkzSetUpLine}, \tkzcname{tkzSetUpArc}, \tkzcname{tkzSetUpCompass}, \tkzcname{tkzSetUpLabel} and \tkzcname{tkzSetUpStyle}. The last one allows you to create a new style.
-\end{itemize}
-% subsection changes_with_previous_versions (end)
+% \subsection{With 5.06 version}
+% \begin{itemize}
+% \item Correction of a bug with the macro |\tkzLabelAngle| and the option \code{angle}.
+% \item Added |\tkzSetUpCircle|.
+% \item Correction of some typos.
+% \item Remove some french texts.
+% \end{itemize}
+%
+%
+% \subsection{With 5.05 version}
+%
+% Correction of the documentation in Complete but minimal example.
+%
+% \subsection{With 5.03 version}
+%
+% \begin{itemize}
+%
+% \item Correction of a bug in the macro |\tkzDefBarycentricPointTwo| of the file tkz-obj-lua-points-spc.tex.
+%
+% \item Add macro |\tkzDrawEllipse|.
+%
+% \item Deleting macros |\tkzDrawSectorAngles| and |\tkzDrawSectorRwithNodesAngles|.
+% \end{itemize}
+%
+%
+% \subsection{With 5.0 version} % (fold)
+%
+% \begin{itemize}
+%
+% \item Finally, I added the \code{lua} option for the package \tkzname{\tkznameofpack}. This allows to do the calculations for the main functions using lua; (see \ref{calc_with_lua}). The syntax is unchanged. Nothing changes for the user.
+%
+% \item The \code{xfp} option has become \code{veclen} see \ref{opt-veclen}.
+%
+% \end{itemize}
+%
+% \subsection{With 4.2 version} % (fold)
+% \label{sub:with_4_2_version}
+%
+% Some changes have been made to make the syntax more homogeneous and especially to distinguish the definition and search for coordinates from the rest, i.e. drawing, marking and labelling.
+% Now the definition macros are isolated, it will be easier to introduce a phase of coordinate calculations using \tkzimp{Lua}.
+%
+% Here are some of the changes.
+% \vspace{1cm}
+% \begin{itemize}\setlength{\itemsep}{10pt}
+%
+%
+% \item I recently discovered a problem when using the \code{scale} option. When plotting certain figures with certain tools, extensive use of |pgfmathreciprocal| involves small computational errors but can add up and render the figures unfit. Here is how to proceed to avoid these problems:
+% \begin{enumerate}
+%
+% \item On my side I introduced a patch proposed by Muzimuzhi that modifies
+% |pgfmathreciprocal|;
+%
+% \item Another idea proposed by Muzimuzhi is to pass as an option for the |tikzpicture| environment this |/pgf/fpu/install only={reciprocal}| after loading of course the |fpu| library;
+%
+% \item I have in the methods chosen to define my macros tried to avoid as much as possible the use of |pgfmathreciprocal|;
+%
+% \item There is still a foolproof method which consists in avoiding the use of |scale = ...|. It's quite easy if, like me, you only work with fixed points fixed at the beginning of your code. The size of your figure depends only on these fixed points so you just have to adapt the coordinates of these.
+% \end{enumerate}
+%
+% \item Now |\tkzDefCircle| gives two points as results: the center of the circle and a point of the circle. When a point of the circle is known, it is enough to use |\tkzGetPoint| or |\tkzGetFirstPoint|
+% to get the center, otherwise |\tkzGetPoints| will give you the center and a point of the circle. You can always get the length of the radius with |\tkzGetLength|. I wanted to favor working with nodes and banish the appearance of numbers in the code.
+%
+% \item In order to isolate the definitions, I deleted or modified certain macros which are: |\tkzDrawLine|, |\tkzDrawTriangle|, |\tkzDrawCircle|, |\tkzDrawSemiCircle| and |\tkzDrawRectangle|;
+%
+% Thus |\tkzDrawSquare(A,B)| becomes |\tkzDefSquare(A,B)||\tkzGetPoints{C}{D}| then
+%
+% |\tkzDrawPolygon(A,B,C,D)|;
+%
+% If you want to draw a circle, you can't do so |\tkzDrawCircle[R](A,1)|. First you have to define the point through which the circle passes, so you have to do
+% |\tkzDefCircle[R](A,1)| |\tkzGetPoint{a}| and finally |\tkzDrawCircle(A,a)|. Another possibilty is to define a point on the circle |\tkzDefShiftPoint[A](1,O){a}|;
+%
+%
+% \item The following macros |tkzDefCircleBy[orthogonal through]| and |\tkzDefCircleBy[orthogonal from]| become |tkzDefCircle[orthogonal through]| and |\tkzDefCircle[orthogonal from]| ;
+%
+%
+% \item |\tkzDefLine[euler](A,B,C)| is a macro that allows you to obtain the line of \tkzname{Euler} when possible. |\tkzDefLine[altitude](A,B,C)| is possible again, as well as |\tkzDefLine[tangent at=A](O)| and |\tkzDefLine[tangent from=P](O,A)| which did not works;
+%
+%
+% \item | \tkzDefTangent| is replaced by |\tkzDefLine[tangent from = ...]| or |\tkzDefLine[tangent at = ...]|;
+%
+%
+% \item I added the macro |\tkzPicAngle[tikz options](A,B,C)| for those who prefer to use \TIKZ ;
+%
+%
+% \item The macro |\tkzMarkAngle| has been corrected;
+%
+% \item The macro linked to the \tkzname{apollonius} option of the |\tkzDefCircle| command has been rewritten;
+%
+% \item (4.23) The macro |\tkzDrawSemiCircle| has been corrected;
+%
+% \item
+% The order of the arguments of the macro \tkzcname{tkzDefPointOnCircle} has changed: now it is center, angle and point or radius.
+% I have added two options for working with radians which are \tkzname{through in rad} and \tkzname{R in rad}.
+%
+%
+% \item I added the option \tkzname{reverse} to the arcs paths. This allows to reverse the path and to reverse if necessary the arrows that would be present.
+%
+%
+% \item I have unified the styles for the labels. There is now only \tkzname{label style} left which is valid for points, segments, lines, circles and angles. I have deleted \tkzname{label seg style} \tkzname{label line style} and \tkzname{label angle style}
+%
+% \item I added the macro |tkzFillAngles| to use several angles.
+%
+% \item Correction option \tkzname{return} witk \tkzcname{tkzProtractor}
+%
+% As a reminder, the following changes have been made previously:
+%
+% \item |\tkzDrawMedian|, |\tkzDrawBisector|, |\tkzDrawAltitude|, |\tkzDrawMedians|, |\tkzDrawBisectors| and |\tkzDrawAltitudes| do not exist anymore. The creation and drawing separation is not respected so it is preferable to first create the coordinates of these points with |\tkzDefSpcTriangle[median]| and then to choose the ones you are going to draw with |\tkzDrawSegments| or |\tkzDrawLines|;
+%
+% \item |\tkzDrawTriangle| has been deleted. |\tkzDrawTriangle[equilateral]| was handy but it is better to get the third point with |\tkzDefTriangle[equilateral]| and then draw with |\tkzDrawPolygon|; idem for |\tkzDrawSquare| and |\tkzDrawGoldRectangle|;
+%
+%
+% \item The circle inversion was badly defined so I rewrote the macro. The input arguments are always the center and a point of the circle, the output arguments are the center of the image circle and a point of the image circle or two points of the image line if the antecedent circle passes through the pole of the inversion. If the circle passes the inversion center, the image is a straight line, the validity of the procedure depends on the choice of the point on the antecedent circle;
+%
+% \item Correct allocation for gold sublime and euclide triangles;
+%
+%
+% \item I added the option \code{next to} for the intersections LC and CC;
+%
+%
+% \item Correction option isoceles right;
+%
+% \item (4.22 and 4.23) Correction of the macro |\tkzMarkAngle|;
+%
+%
+% \item |\tkzDefMidArc(O,A,B)| gives the middle of the arc center $O$ from $A$ to $B$;
+%
+% \item Good news : Some useful tools have been added. They are present on an experimental basis and will undoubtedly need to be improved;
+%
+%
+% \item The options \code{orthogonal from} and \code{through} depend now of \tkzcname{tkzDefCircleBy}
+%
+% \begin{enumerate}
+%
+% \item |\tkzDotProduct(A,B,C)| computes the scalar product in an orthogonal reference system of the vectors $\overrightarrow{A,B}$ and $\overrightarrow{A,C}$.
+%
+% |\tkzDotProduct(A,B,C)=aa'+bb' if vec{AB} =(a,b) and vec{AC} =(a',b')|
+%
+%
+% \item |\tkzPowerCircle(A)(B,C)| power of point $A$ with respect to the circle of center $B$ passing through $C$;
+%
+%
+% \item |\tkzDefRadicalAxis(A,B)(C,D)| Radical axis of two circles of center $A$ and $C$;
+%
+%
+% \item (4.23) The macro |tkzDefRadicalAxis| has been completed
+%
+% \item Some tests : |\tkzIsOrtho(A,B,C)| and |\tkzIsLinear(A,B,C)| The first indicates whether the lines $(A,B)$ and $(A,C)$ are orthogonal. The second indicates whether the points $A$, $B$ and $C$ are aligned;
+%
+% |\tkzIsLinear(A,B,C)| if $A$,$B$,$C$ are aligned then |\tkzLineartrue|
+% you can use |\iftkzLinear| (idem for |\tkzIsOrtho|);
+%
+% \item A style for vectors has been added that you can of course modify
+%
+% |tikzset{vector style/.style={>=Latex,->}}|;
+%
+%
+% \item Now it's possible to add an arrow on a line or a circle with the option |tkz arrow|.
+% \end{enumerate}
+% \end{itemize}
+%
+% % subsection with_4_2_version (end)
+% \subsection{Changes with previous versions} % (fold)
+% \label{sub:changes_with_previous_versions}
+%
+% \vspace{1cm}
+% \begin{itemize}\setlength{\itemsep}{10pt}
+%
+% \item I remind you that an important novelty is the recent replacement of the \tkzNamePack{fp} package by \tkzNamePack{xfp}. This is to improve the calculations a little bit more and to make it easier to use;
+%
+%
+% \item First of all, you don’t have to deal with \TIKZ\ the size of the bounding box. Early versions of \tkzname{\tkznameofpack} did not control the size of the bounding box, The bounding box is now controlled in each macro (hopefully) to avoid the use of \tkzcname{tkzInit} followed by \tkzcname{tkzClip};
+%
+% \item With \tkzimp{tkz-euclide} loads all objects, so there's no need to place \tkzcname{usetkzobj\{all\}};
+%
+% \item Added macros for the bounding box: \tkzcname{tkzSaveBB} \tkzcname{tkzClipBB} and so on;
+%
+% \item Logically most macros accept \TIKZ\ options. So I removed the \code{duplicate} options when possible thus the \code{label options} option is removed;
+%
+% \item The unit is now the cm;
+%
+% \item |\tkzCalcLength| |\tkzGetLength| gives result in cm;
+%
+% \item |\tkzMarkArc| and |\tkzLabelArc| are new macros;
+%
+% \item Now |\tkzClipCircle| and |\tkzClipPolygon| have an option \tkzimp{out}. To use this option you must have a Bounding Box that contains the object on which the Clip action will be performed. This can be done by using an object that encompasses the figure or by using the macro \tkzcname{tkzInit};
+%
+%
+% \item The options \tkzname{end} and \tkzname{start} which allowed to give a label to a straight line are removed. You now have to use the macro \tkzcname{tkzLabelLine};
+%
+% \item Introduction of the libraries \NameLib{quotes} and \NameLib{angles}; it allows to give a label to a point, even if I am not in favour of this practice;
+%
+% \item The notion of vector disappears, to draw a vector just pass "->" as an option to \tkzcname{tkzDrawSegment};
+%
+%
+% \item |\tkzDefIntSimilitudeCenter| and |\tkzDefExtSimilitudeCenter| do not exist anymore, now you need to use |\tkzDefSimilitudeCenter[int]| or |\tkzDefSimilitudeCenter[ext]|;
+%
+% \item |\tkzDefRandPointOn| is replaced by |\tkzGetRandPointOn|;
+%
+%
+% \item An option of the macro \tkzcname{tkzDefTriangle} has changed, in the previous version the option was \code{euclide} with an \code{e}. Now it's \code{euclid};
+%
+% \item Random points are now in \tkzname{\tkznameofpack} and the macro \tkzcname{tkzGetRandPointOn} is replaced by
+%
+% \tkzcname{tkzDefRandPointOn}. For homogeneity reasons, the points must be retrieved with \tkzcname{tkzGetPoint};
+%
+% \item New macros have been added : \tkzcname{tkzDrawSemiCircles}, \tkzcname{tkzDrawPolygons}, \tkzcname{tkzDrawTriangles};
+%
+%
+% \item Option \code{isosceles right} is a new option of the macro \tkzcname{tkzDefTriangle};
+%
+% \item Appearance of the macro \tkzcname{usetkztool} which allows to load new \code{tools};
+%
+% \item The styles can be modified with the help of the following macros : \tkzcname{tkzSetUpPoint}, \tkzcname{tkzSetUpLine}, \tkzcname{tkzSetUpArc}, \tkzcname{tkzSetUpCompass}, \tkzcname{tkzSetUpLabel} and \tkzcname{tkzSetUpStyle}. The last one allows you to create a new style.
+% \end{itemize}
+% % subsection changes_with_previous_versions (end)
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex
index 67e357c625..407d7a3b67 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointby.tex
@@ -104,7 +104,7 @@ options & & examples \\
\subsubsection{\tkzname{projection}}
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=1.5]
+\begin{tikzpicture}[scale=1.25]
\tkzDefPoints{0/0/A,0/4/B}
\tkzDefTriangle[pythagore](B,A) \tkzGetPoint{C}
\tkzDefLine[bisector](B,C,A) \tkzGetPoint{c}
@@ -116,7 +116,7 @@ options & & examples \\
\tkzDrawSegment(C,D)
\tkzDrawCircle(D,A)
\tkzDrawSegment[new](D,G)
- \tkzMarkRightAngle[fill=orange!10,opacity=.4](D,G,B)
+ \tkzMarkRightAngle[fill=orange!10](D,G,B)
\tkzDrawPoints(A,C,F) \tkzLabelPoints(A,C,F)
\tkzDrawPoints(B,D,E,G)
\tkzLabelPoints[above right](B,D,E)
@@ -143,7 +143,7 @@ options & & examples \\
\subsubsection{\tkzname{rotation} }
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=0.5]
+\begin{tikzpicture}[scale=0.75]
\tkzDefPoints{0/0/A,5/0/B}
\tkzDrawSegment(A,B)
\tkzDefPointBy[rotation=center A angle 60](B)
@@ -199,6 +199,7 @@ options & & examples \\
Inversion is the process of transforming points to a corresponding set of points known as their inverse points. Two points $P$ and $P'$ are said to be inverses with respect to an inversion circle having inversion center $O$ and inversion radius $k$ if $P'$ is the perpendicular foot of the altitude of $OQP$, where $Q$ is a point on the circle such that $OQ$ is perpendicular to $PQ$.\\
The quantity $k^2$ is known as the circle power (Coxeter 1969, p. 81).
+
(\url{https://mathworld.wolfram.com/Inversion.html})
Some propositions :
@@ -273,7 +274,7 @@ Directly
\subsubsection{\tkzname{inversion of lines} ex 2}
\begin{tkzexample}[latex=6cm,small]
-\begin{tikzpicture}[scale=.5]
+\begin{tikzpicture}[scale=.8]
\tkzDefPoints{0/0/O,3/0/I,3/2/P,3/-2/Q}
\tkzDrawCircle(O,I)
\tkzDefPointBy[projection= onto P--Q](O) \tkzGetPoint{A}
@@ -292,7 +293,7 @@ Directly
\subsubsection{\tkzname{inversion of lines} ex 3}
\begin{tkzexample}[latex=6cm,small]
-\begin{tikzpicture}[scale=.5]
+\begin{tikzpicture}[scale=.8]
\tkzDefPoints{0/0/O,3/0/I,2/1/P,2/-2/Q}
\tkzDrawCircle(O,I)
\tkzDefPointBy[projection= onto P--Q](O) \tkzGetPoint{A}
@@ -311,7 +312,7 @@ Directly
\subsubsection{\tkzname{inversion} of circle and \tkzname{homothety} }
\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tikzpicture}[scale=.7]
\tkzDefPoints{0/0/O,3/2/A,2/1/P}
\tkzDefLine[tangent from = O](A,P) \tkzGetPoints{T}{X}
\tkzDefPointsBy[homothety = center O%
@@ -319,7 +320,7 @@ Directly
\tkzInterCC(A,P)(A',P') \tkzGetPoints{C}{D}
\tkzCalcLength(A,P)
\tkzGetLength{rAP}
-\tkzDefPointOnCircle[R= center A angle 190 radius \rAP]
+\tkzDefPointOnCircle[R=center A angle 190 radius \rAP]
\tkzGetPoint{M}
\tkzDefPointBy[inversion = center O through C](M)
\tkzGetPoint{M'}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex
index 2741872f8c..c8a45d5ea4 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-points.tex
@@ -6,7 +6,7 @@ The general idea is to avoid manipulating coordinates and to prefer to use the r
\tkzname{\tkznameofpack} uses macros and vocabulary specific to geometric construction. It is of course possible to use the tools of \TIKZ\ but it seems more logical to me not to mix the different syntaxes.
-A point in \tkzname{\tkznameofpack} is a particular "node" for \TIKZ. In the next section we will see how to define points using coordinates. The style of the points (color and shape) will not be discussed. You will find some indications in some examples; for more information you can read the following section \ref{custom}.
+A point in \tkzname{\tkznameofpack} is a particular \code{node} for \TIKZ. In the next section we will see how to define points using coordinates. The style of the points (color and shape) will not be discussed. You will find some indications in some examples; for more information you can read the following section \ref{custom}.
\section{Definition of a point : \tkzcname{tkzDefPoint} or \tkzcname{tkzDefPoints}}
@@ -36,7 +36,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\tkzNameMacro{coordinate}, a macro of \TIKZ. It can use \TIKZ-specific options such as \tkzname{shift}. If calculations are required then the \tkzNamePack{xfp} package is chosen. We can use Cartesian or polar coordinates.
-\begin{minipage}[t]{0.45\textwidth}
+\begin{minipage}[t]{0.48\textwidth}
Cartesian coordinates
\begin{tkzexample}[code only,small]
\begin{tikzpicture}[scale=1]
@@ -48,7 +48,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\tkzDefPoints{0/0/O,1/0/I,0/1/J}
\tkzDefPoint(3,4){A}
\tkzDrawPoints(O,A)
- \tkzLabelPoint[above](A){$A_1 (x_1,y_1)$}
+ \tkzLabelPoint[above](A){$A_1(x_1,y_1)$}
\tkzShowPointCoord[xlabel=$x_1$,
ylabel=$y_1$](A)
\tkzLabelPoints(O,I)
@@ -60,7 +60,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\begin{minipage}[t]{0.45\textwidth}
Polar coordinates
\begin{tkzexample}[code only,small]
-\begin{tikzpicture}[,scale=1]
+\begin{tikzpicture}[scale=1]
\tkzInit[xmax=5,ymax=5]
\tkzDrawX[>=latex]
\tkzDrawY[>=latex]
@@ -73,7 +73,7 @@ A point is defined if it has a name linked to a unique pair of decimal numbers.
\tkzFillAngle[opacity=.5](I,O,P)
\tkzLabelAngle[pos=1.25](I,O,P){%
$\alpha$}
- \tkzLabelPoint[right](P){$P (\alpha : d )$}
+ \tkzLabelPoint[right](P){$P(\alpha:d)$}
\tkzDrawPoints[shape=cross](I,J)
\tkzLabelPoints(O,I)
\tkzLabelPoints[left](J)
@@ -143,7 +143,7 @@ options & default & definition \\
\subsubsection{Cartesian coordinates }
-\begin{tkzexample}[latex=5cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzInit[xmax=5,ymax=5] % limits the size of the axes
\tkzDrawX[>=latex]
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex
index 15529b33eb..7d0b23f4c9 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-pointsSpc.tex
@@ -1,6 +1,6 @@
Now that the fixed points are defined, we can with their references using macros from the package or macros that you will create get new points. The calculations may not be apparent but they are usually done by the package.
You may need to use some mathematical constants, here is the list of constants defined by the package.
-You may need to use some mathematical constants, here is the list of constants defined by the package.
+
\section{Auxiliary tools}
\subsection{Constants}
@@ -34,10 +34,10 @@ arguments & default & example \\
\end{tabular}
\end{NewMacroBox}
-Sometimes you need to get two points. It's possible with
+Sometimes you need to get two points. It's possible with
\begin{NewMacroBox}{tkzGetPoints}{\marg{ref1}\marg{ref2}}%
-The result is in \tkzname{tkzPointFirstResult} and \tkzname{tkzPointSecondResult}.
+The result is in \tkzname{tkzPointFirstResult} and \tkzname{tkzPointSecondResult}.
\medskip
\begin{tabular}{lll}%
@@ -51,7 +51,7 @@ arguments & default & example \\
If you need only the first or the second point you can also use :
\begin{NewMacroBox}{tkzGetFirstPoint}{\marg{ref1}}%
-
+
\medskip
\begin{tabular}{lll}%
\toprule
@@ -75,7 +75,7 @@ arguments & default & example \\
Sometimes the results consist of a point and a dimension. You get the point with \tkzcname{tkzGetPoint} and the dimension with \tkzcname{tkzGetLength}.
\begin{NewMacroBox}{tkzGetLength}{\marg{name of a macro}}%
-
+
\medskip
\begin{tabular}{lll}%
\toprule
@@ -112,7 +112,7 @@ Review the use of \tkzcname{tkzDefPoint}.
\begin{tikzpicture}[scale=1]
\tkzDefPoint(2,3){A}
\tkzDefPoint(6,2){B}
- \tkzDefMidPoint(A,B)
+ \tkzDefMidPoint(A,B)
\tkzGetPoint{M}
\tkzDrawSegment(A,B)
\tkzDrawPoints(A,B,M)
@@ -146,7 +146,7 @@ $AB=a$, $BC=b$ and $\dfrac{AC}{AB} = \dfrac{AB}{BC} =\phi$
\begin{tikzpicture}
\tkzDefPoints{0/0/A,6/0/C}
\tkzDefMidPoint(A,C) \tkzGetPoint{I}
- %\tkzDefPointWith[linear,K=\tkzInvPhi](A,C)
+ %\tkzDefPointWith[linear,K=\tkzInvPhi](A,C)
\tkzDefGoldenRatio(A,C) \tkzGetPoint{B}
\tkzDrawSegments(A,C)
\tkzDrawPoints(A,B,C)
@@ -242,30 +242,35 @@ The centers of the two homotheties in which two circles correspond are called ex
arguments & example & explanation \\
\midrule
\TAline{\parg{pt1,pt2}\parg{pt3,pt4}}{$(O,A)(O',B)$} {$r=OA,r'=O'B$}
-\end{tabular}
-
+\end{tabular}
+
\medskip
\begin{tabular}{lll}%
\toprule
-options & default & definition \\
+options & default & definition \\
\midrule
\TOline{ext}{ext}{external center}
\TOline{int}{ext}{internal center}
\end{tabular}
-\end{NewMacroBox}
+\end{NewMacroBox}
\subsubsection{Internal and external with \tkzname{node}}
-\begin{tkzexample}[latex=7cm,small]
-\begin{tikzpicture}[scale=.75]
+\begin{tkzexample}[latex=7.5cm,small]
+\begin{tikzpicture}[scale=.7]
\tkzDefPoints{0/0/O,4/-5/A,3/0/B,5/-5/C}
-\tkzDefSimilitudeCenter[int](O,B)(A,C) \tkzGetPoint{I}
- \tkzDefSimilitudeCenter[ext](O,B)(A,C) \tkzGetPoint{J}
- \tkzDefLine[tangent from = I](O,B) \tkzGetPoints{D}{E}
- \tkzDefLine[tangent from = I](A,C) \tkzGetPoints{D'}{E'}
- \tkzDefLine[tangent from = J](O,B) \tkzGetPoints{F}{G}
- \tkzDefLine[tangent from = J](A,C)
+ \tkzDefSimilitudeCenter[int](O,B)(A,C)
+ \tkzGetPoint{I}
+ \tkzDefSimilitudeCenter[ext](O,B)(A,C)
+ \tkzGetPoint{J}
+ \tkzDefLine[tangent from = I](O,B)
+ \tkzGetPoints{D}{E}
+ \tkzDefLine[tangent from = I](A,C)
+ \tkzGetPoints{D'}{E'}
+ \tkzDefLine[tangent from = J](O,B)
+ \tkzGetPoints{F}{G}
+ \tkzDefLine[tangent from = J](A,C)
\tkzGetPoints{F'}{G'}
- \tkzDrawCircles(O,B A,C)
+ \tkzDrawCircles(O,B A,C)
\tkzDrawSegments[add = .5 and .5,new](D,D' E,E')
\tkzDrawSegments[add= 0 and 0.25,new](J,F J,G)
\tkzDrawPoints(O,A,I,J,D,E,F,G,D',E',F',G')
@@ -304,10 +309,10 @@ You can use \tkzcname{tkzDefBarycentricPoint} to find a homothetic center
\begin{tikzpicture}[rotate=60,scale=.5]
\tkzDefPoints{0/0/A,5/0/C}
\tkzDefGoldenRatio(A,C) \tkzGetPoint{B}
- \tkzDefSimilitudeCenter(A,B)(C,B) \tkzGetPoint{J}
- \tkzDefTangent[from = J](A,B) \tkzGetPoints{F}{G}
- \tkzDefTangent[from = J](C,B) \tkzGetPoints{F'}{G'}
- \tkzDrawCircles(A,B C,B)
+ \tkzDefSimilitudeCenter(A,B)(C,B)\tkzGetPoint{J}
+ \tkzDefTangent[from = J](A,B) \tkzGetPoints{F}{G}
+ \tkzDefTangent[from = J](C,B) \tkzGetPoints{F'}{G'}
+ \tkzDrawCircles(A,B C,B)
\tkzDrawSegments[add= 0 and 0.25,cyan](J,F J,G)
\tkzDrawPoints(A,J,F,G,F',G')
\end{tikzpicture}
@@ -318,15 +323,15 @@ You can use \tkzcname{tkzDefBarycentricPoint} to find a homothetic center
%<---------------------------------------------------------------------->
\begin{NewMacroBox}{tkzDefHarmonic}{\oarg{options}\parg{pt1,pt2,pt3} or \parg{pt1,pt2,k}}%
-
+
\begin{tabular}{lll}%
-options & default & definition \\
+options & default & definition \\
\midrule
\TOline{both}{both}{\parg{A,B,2} we look for C and D such that $(A,B;C,D) = -1$ and CA=2CB }
\TOline{ext}{both}{\parg{A,B,C} we look for D such that $(A,B;C,D) = -1$}
\TOline{int}{both}{\parg{A,B,D} we look for C such that $(A,B;C,D) = -1$}
\end{tabular}
-\end{NewMacroBox}
+\end{NewMacroBox}
\subsubsection{options \tkzname{ext} and \tkzname{int}}
\begin{tkzexample}[vbox,small]
@@ -448,7 +453,7 @@ arguments & default & definition \\
\tkzInterLL(B,Q)(A,P) \tkzGetPoint{S}
\tkzDefMidPoint(P_2',P_1') \tkzGetPoint{o}
\tkzDefPointBy[inversion = center A through D](S) \tkzGetPoint{S'}
- \tkzDrawArc[cyan,delta=0](Q,A)(P_1)
+ \tkzDrawArc[cyan,delta=0](Q,A)(P_1)
\tkzDrawArc[cyan,delta=0](P,P_1)(B)
\tkzDrawSemiCircles[teal](O_1,B O_2,C O_3,B)
\tkzDrawCircles[new](o,P O_4,P_1)
@@ -531,7 +536,7 @@ options & default & examples definition \\
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}[scale=.4]
\tkzDefPoints{0/0/P,5/0/Q,3/2/I}
-\tkzDefCircle[orthogonal from=P](Q,I)
+\tkzDefCircle[orthogonal from=P](Q,I)
\tkzGetFirstPoint{E}
\tkzDrawCircles(P,E Q,E)
\tkzInterCC[common=E](P,E)(Q,E) \tkzGetFirstPoint{F}
@@ -546,18 +551,18 @@ options & default & examples definition \\
\tkzLabelPoints(P,Q,F,C,D)
\tkzLabelPoints[above](E,A)
\end{tikzpicture}
-\end{tkzexample}
-
+\end{tkzexample}
+
\subsubsection{Use of \tkzcname{tkzDefPointOnCircle}}
-\begin{tkzexample}[latex=7cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
-\tkzDefPoints{0/0/A,4/0/B,0.8/3/C}
+\tkzDefPoints{0/0/A,4/0/B,0.8/3/C}
\tkzDefPointOnCircle[R = center B angle 90 radius 1]
\tkzGetPoint{I}
\tkzDefCircle[circum](A,B,C)
\tkzGetPoints{G}{g}
-\tkzDefPointOnCircle[through = center G angle 30 point g]
+\tkzDefPointOnCircle[through = center G angle 30 point g]
\tkzGetPoint{J}
\tkzDefCircle[R](B,1) \tkzGetPoint{b}
\tkzDrawCircle[teal](B,b)
@@ -620,7 +625,7 @@ options & default & definition \\
\tkzGetPoint{H}
\tkzDefSpcTriangle[orthic,name=H](A,B,C){a,b,c}
\tkzDrawPolygon(A,B,C)
- \tkzDrawSegments[new](A,Ha B,Hb C,Hc)
+ \tkzDrawSegments[new](A,Ha B,Hb C,Hc)
\tkzDrawPoints(A,B,C,H)
\tkzLabelPoint(H){$H$}
\tkzLabelPoints[below](A,B)
@@ -659,16 +664,16 @@ options & default & definition \\
In geometry, the incircle or inscribed circle of a triangle is the largest circle contained in the triangle; it touches (is tangent to) the three sides. The center of the incircle is a triangle center called the triangle's incenter.
The center of the incircle, called the incenter, can be found as the intersection of the three internal angle bisectors. The center of an excircle is the intersection of the internal bisector of one angle (at vertex $A$, for example) and the external bisectors of the other two. The center of this excircle is called the excenter relative to the vertex $A$, or the excenter of $A$. Because the internal bisector of an angle is perpendicular to its external bisector, it follows that the center of the incircle together with the three excircle centers form an orthocentric system.\\
(Article on \href{https://en.wikipedia.org/wiki/Incircle_and_excircles_of_a_triangle}{Wikipedia})
-
+
\medskip
We get the center of the inscribed circle of the triangle. The result is of course in \tkzname{tkzPointResult}. We can retrieve it with \tkzcname{tkzGetPoint}.
-\begin{tkzexample}[latex=8cm,small]
+\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,6/0/B,0.8/4/C}
-\tkzDefTriangleCenter[in](A,B,C)
+\tkzDefTriangleCenter[in](A,B,C)
\tkzGetPoint{I}
-\tkzDrawLines(A,B B,C C,A)
+\tkzDrawLines(A,B B,C C,A)
\tkzDefCircle[in](A,B,C) \tkzGetPoints{I}{i}
\tkzDrawCircle(I,i)
\tkzDrawPoint[red](I)
@@ -702,11 +707,11 @@ An excircle or escribed circle of the triangle is a circle lying outside the tri
\subsubsection{Option \tkzname{euler}}
This macro allows to obtain the center of the circle of the nine points or euler's circle or Feuerbach's 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 $ABC$ 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 $ABC$. 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.\\ (\url{https://mathworld.wolfram.com/Nine-PointCircle.html})
-\begin{tkzexample}[latex=5cm,small]
-\begin{tikzpicture}[scale=1,rotate=90]
+\begin{tkzexample}[latex=6cm,small]
+\begin{tikzpicture}[scale=1.2,rotate=90]
\tkzDefPoints{0/0/A,6/0/B,0.8/4/C}
\tkzDefSpcTriangle[medial,name=M](A,B,C){_A,_B,_C}
- \tkzDefTriangleCenter[euler](A,B,C)\tkzGetPoint{N}
+ \tkzDefTriangleCenter[euler](A,B,C)\tkzGetPoint{N}
% I= N nine points
\tkzDefTriangleCenter[ortho](A,B,C)\tkzGetPoint{H}
\tkzDefMidPoint(A,H) \tkzGetPoint{E_A}
@@ -721,7 +726,8 @@ This macro allows to obtain the center of the circle of the nine points or euler
\tkzDrawPoints( H_A,H_B,H_C)
\tkzDrawPoints[green](E_A,E_B,E_C)
\tkzAutoLabelPoints[center=N,
- font=\scriptsize](A,B,C,M_A,M_B,M_C,H_A,H_B,H_C,E_A,E_B,E_C)
+ font=\scriptsize](A,B,C,M_A,M_B,M_C,H_A,H_B,H_C,%
+ E_A,E_B,E_C)
\tkzLabelPoints[font=\scriptsize](H,N)
\tkzMarkSegments[mark=s|,size=3pt,
color=blue,line width=1pt](B,E_B E_B,H)
@@ -732,15 +738,17 @@ This macro allows to obtain the center of the circle of the nine points or euler
\subsubsection{Option \tkzname{symmedian}}
The point of concurrence $K$ of the symmedians, sometimes also called the Lemoine point (in England and France) or the Grebe point (in Germany).\\
-\href{https://mathworld.wolfram.com/SymmedianPoint.html}{Weisstein, Eric W. "Symmedian Point." From MathWorld--A Wolfram Web Resource.}
+\href{https://mathworld.wolfram.com/SymmedianPoint.html}{Weisstein, Eric W. "Symmedian Point." From MathWorld--A Wolfram Web Resource.}
-\begin{tkzexample}[latex=6cm,small]
+\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(5,0){B}
\tkzDefPoint(1,4){C}
- \tkzDefTriangleCenter[symmedian](A,B,C)\tkzGetPoint{K}
- \tkzDefTriangleCenter[median](A,B,C)\tkzGetPoint{G}
+ \tkzDefTriangleCenter[symmedian](A,B,C)
+ \tkzGetPoint{K}
+ \tkzDefTriangleCenter[median](A,B,C)
+ \tkzGetPoint{G}
\tkzDefTriangleCenter[in](A,B,C)\tkzGetPoint{I}
\tkzDefSpcTriangle[centroid,name=M](A,B,C){a,b,c}
\tkzDefSpcTriangle[incentral,name=I](A,B,C){a,b,c}
@@ -762,9 +770,9 @@ The Spieker center is the center $Sp$ of the Spieker circle, i.e., the incenter
\begin{tikzpicture}
\tkzDefPoints{0/0/A,6/0/B,5/5/C}
\tkzDefSpcTriangle[medial](A,B,C){Ma,Mb,Mc}
- \tkzDefTriangleCenter[centroid](A,B,C)
+ \tkzDefTriangleCenter[centroid](A,B,C)
\tkzGetPoint{G}
- \tkzDefTriangleCenter[spieker](A,B,C)
+ \tkzDefTriangleCenter[spieker](A,B,C)
\tkzGetPoint{Sp}
\tkzDrawPolygon[](A,B,C)
\tkzDrawPolygon[new](Ma,Mb,Mc)
@@ -780,13 +788,13 @@ The Spieker center is the center $Sp$ of the Spieker circle, i.e., the incenter
\subsubsection{Option \tkzname{gergonne}}
-The Gergonne Point is the point of concurrency which results from connecting the vertices of a triangle to the opposite points of tangency of the triangle's incircle.
+The Gergonne Point is the point of concurrency which results from connecting the vertices of a triangle to the opposite points of tangency of the triangle's incircle.
(Joseph Gergonne French mathematician )
\begin{tkzexample}[latex=8cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/B,3.6/0/C,2.8/4/A}
-\tkzDefTriangleCenter[gergonne](A,B,C)
+\tkzDefTriangleCenter[gergonne](A,B,C)
\tkzGetPoint{Ge}
\tkzDefSpcTriangle[intouch](A,B,C){C_1,C_2,C_3}
\tkzDefCircle[in](A,B,C) \tkzGetPoints{I}{i}
@@ -809,7 +817,7 @@ Let $Ta$ be the point at which the excircle with center $Ja$ meets the side $BC$
\tkzDefPoints{0/0/A,6/0/B,4/6/C}
\tkzDefSpcTriangle[ex](A,B,C){Ja,Jb,Jc}
\tkzDefSpcTriangle[extouch](A,B,C){Ta,Tb,Tc}
- \tkzDefTriangleCenter[nagel](A,B,C)
+ \tkzDefTriangleCenter[nagel](A,B,C)
\tkzGetPoint{Na}
\tkzDrawPolygon[blue](A,B,C)
\tkzDrawLines[add=0 and 1](A,Ta B,Tb C,Tc)
@@ -829,7 +837,7 @@ Let $Ta$ be the point at which the excircle with center $Ja$ meets the side $BC$
\end{tkzexample}
-\subsubsection{Option \tkzname{mittenpunkt}}
+\subsubsection{Option \tkzname{mittenpunkt}}
The mittenpunkt (also called the middlespoint) of a triangle $ABC$ is the symmedian point of the excentral triangle, i.e., the point of concurrence M 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.}
@@ -841,12 +849,12 @@ The mittenpunkt (also called the middlespoint) of a triangle $ABC$ is the symmed
\tkzDefSpcTriangle[centroid](A,B,C){Ma,Mb,Mc}
\tkzDefSpcTriangle[ex](A,B,C){Ja,Jb,Jc}
\tkzDefSpcTriangle[extouch](A,B,C){Ta,Tb,Tc}
- \tkzDefTriangleCenter[mittenpunkt](A,B,C)
+ \tkzDefTriangleCenter[mittenpunkt](A,B,C)
\tkzGetPoint{Mi}
\tkzDrawPoints[new](Ma,Mb,Mc,Ja,Jb,Jc)
\tkzClipBB
\tkzDrawPolygon[blue](A,B,C)
- \tkzDrawLines[add=0 and 1](Ja,Ma
+ \tkzDrawLines[add=0 and 1](Ja,Ma
Jb,Mb Jc,Mc)
\tkzDrawLines[add=1 and 1](A,B A,C B,C)
\tkzDrawCircles[new](Ja,Ta Jb,Tb Jc,Tc)
@@ -867,9 +875,9 @@ The Gergonne point $Ge$, triangle centroid $G$, and mittenpunkt $M$ are collinea
\begin{tikzpicture}
\tkzDefPoints{0/0/A,2/2/B,8/0/C}
\tkzDefTriangleCenter[gergonne](A,B,C) \tkzGetPoint{Ge}
-\tkzDefTriangleCenter[centroid](A,B,C)
+\tkzDefTriangleCenter[centroid](A,B,C)
\tkzGetPoint{G}
-\tkzDefTriangleCenter[mittenpunkt](A,B,C)
+\tkzDefTriangleCenter[mittenpunkt](A,B,C)
\tkzGetPoint{M}
\tkzDrawLines[add=.25 and .25,teal](A,B A,C B,C)
\tkzDrawLines[add=.25 and .25,new](Ge,M)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex
index 95df8ef060..b5bbbcc91f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-polygons.tex
@@ -191,8 +191,8 @@ From the number of sides, depending on the options, this macro determines a regu
\toprule
arguments & example & explanation \\
\midrule
-\TAline{\parg{pt1,pt2}}{\parg{O,A}}{with option "center", $O$ is the center of the polygon.}
-\TAline{\parg{pt1,pt2}}{\parg{A,B}}{with option "side", $[AB]$ is a side.}
+\TAline{\parg{pt1,pt2}}{\parg{O,A}}{with option \code{center}, $O$ is the center of the polygon.}
+\TAline{\parg{pt1,pt2}}{\parg{A,B}}{with option \code{side}, $[AB]$ is a side.}
\end{tabular}
\medskip
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
index 0073d78803..027cb7ea0d 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-presentation.tex
@@ -51,27 +51,27 @@ Here are some comparisons between \tkzname{\TIKZ } and \tkzname{\tkznameofpack}
Explanation :
-The fourth tutorial of the \emph{PgfManual} is about geometric constructions. \emph{T. Tantau} proposes to get the drawing with its beautiful tool Ti\emph{k}Z. Here I propose the same construction with \emph{tkz-elements}. The color of the Ti\emph{k}Z code is orange and that of \emph{tkz-elements} is red.
+The fourth tutorial of the \emph{PgfManual} is about geometric constructions. \emph{T. Tantau} proposes to get the drawing with its beautiful tool Ti\emph{k}Z. Here I propose the same construction with \emph{tkz-elements}. The color of the Ti\emph{k}Z code is green!50!black and that of \emph{tkz-elements} is red.
\medskip
-\hspace*{1cm}\vbox{\color{orange} |\usepackage{tikz}|\\
+\vbox{\color{green!50!black} |\usepackage{tikz}|\\
|\usetikzlibrary{calc,intersections,through,backgrounds}|}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\usepackage{tkz-euclide}|}
+\vbox{\color{red} |\usepackage{tkz-euclide}|}
\medskip
How to get the line AB ? To get this line, we use two fixed points.\\
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\coordinate [label=left:$A$] (A) at (0,0);|\\
|\coordinate [label=right:$B$] (B) at (1.25,0.25);|\\
|\draw (A) -- (B);|}
\medskip
-\hspace*{1cm}\vbox{\color{red}
+\vbox{\color{red}
|\tkzDefPoint(0,0){A}|\\
|\tkzDefPoint(1.25,0.25){B}|\\
|\tkzDrawSegment(A,B)|\\
@@ -81,14 +81,14 @@ How to get the line AB ? To get this line, we use two fixed points.\\
We want to draw a circle around the points $A$ and $B$ whose radius is given by the length of the line AB.
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\draw let \p1 = ($ (B) - (A) $),|\\
|\n2 = {veclen(\x1,\y1)} in|\\
| (A) circle (\n2)|\\
| (B) circle (\n2);|}
\medskip
-\hspace*{1cm}\vbox{\color{red}
+\vbox{\color{red}
|\tkzDrawCircles(A,B B,A)|
}
@@ -96,27 +96,27 @@ The intersection of the circles $\mathcal{D}$ and $\mathcal{E}$
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|draw [name path=A--B] (A) -- (B);|\\
|node (D) [name path=D,draw,circle through=(B),label=left:$D$] at (A) {}; |\\
|node (E) [name path=E,draw,circle through=(A),label=right:$E$] at (B) {};|\\
-|path [name intersections={of=D and E, by={[label=above:$C$]C, [label=below:$C'$]C'}}]; |\\
+|path [name intersections={of=D and E, by={[label=above:$C$]C,[label=below:$C'$]C'}}]; |\\
|draw [name path=C--C',red] (C) -- (C');|\\
|path [name intersections={of=A--B and C--C',by=F}];|\\
|node [fill=red,inner sep=1pt,label=-45:$F$] at (F) {};|\\}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzInterCC(A,B)(B,A) \tkzGetPoints{C}{X}|\\}
+\vbox{\color{red} |\tkzInterCC(A,B)(B,A) \tkzGetPoints{C}{X}|\\}
How to draw points :
\medskip
-\hspace*{1cm}\vbox{\color{orange} |\foreach \point in {A,B,C}|\\
+\vbox{\color{green!50!black} |\foreach \point in {A,B,C}|\\
|\fill [black,opacity=.5] (\point) circle (2pt);|\\}
\medskip
-\hspace*{1cm}\vbox{\color{red}| \tkzDrawPoints[fill=gray,opacity=.5](A,B,C)|\\}
+\vbox{\color{red}| \tkzDrawPoints[fill=gray,opacity=.5](A,B,C)|\\}
\subsubsection{Complete code with \pkg{tkz-euclide}}
@@ -124,12 +124,12 @@ We need to define colors
|\colorlet{input}{red!80!black} |\\
|\colorlet{output}{red!70!black}|\\
-|\colorlet{triangle}{orange!40} |
+|\colorlet{triangle}{green!50!black!40} |
\begin{tkzexample}[vbox,small]
\colorlet{input}{red!80!black}
\colorlet{output}{red!70!black}
- \colorlet{triangle}{orange!40}
+ \colorlet{triangle}{green!50!black!40}
\begin{tikzpicture}[scale=1.25,thick,help lines/.style={thin,draw=black!50}]
\tkzDefPoint(0,0){A}
\tkzDefPoint(1.25+rand(),0.25+rand()){B}
@@ -164,7 +164,7 @@ Explanation
In the first part, we need to find the midpoint of the straight line $AB$. With \TIKZ\ we can use the calc library
\medskip
-\hspace*{1cm}\vbox{\color{orange} |\coordinate [label=left:$A$] (A) at (0,0);|\\
+\vbox{\color{green!50!black} |\coordinate [label=left:$A$] (A) at (0,0);|\\
|\coordinate [label=right:$B$] (B) at (1.25,0.25);|\\
|\draw (A) -- (B);|\\
|\node [fill=red,inner sep=1pt,label=below:$X$] (X) at ($ (A)!.5!(B) $) {};|\\}
@@ -173,40 +173,40 @@ With \pkg{tkz-euclide} we have a macro \tkzcname{tkzDefMidPoint}, we get the poi
\medskip
-\hspace*{1cm}\vbox{\red |\tkzDefPoints{0/0/A,0.75/0.25/B,1/1.5/C}|\\
-|\tkzDefMidPoint(A,B) \tkzGetPoint{X}|}\\
+\vbox{\red |\tkzDefPoints{0/0/A,0.75/0.25/B,1/1.5/C}|\\
+|\tkzDefMidPoint(A,B) \tkzGetPoint{X}|}
\medskip
Then we need to construct a triangle equilateral. It's easy with \pkg{tkz-euclide} . With TikZ you need some effort because you need to use the midpoint $X$ to get the point $D$ with trigonometry calculation.
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\node [fill=red,inner sep=1pt,label=below:$X$] (X) at ($ (A)!.5!(B) $) {}; | \\
|\node [fill=red,inner sep=1pt,label=above:$D$] (D) at | \\
|($ (X) ! {sin(60)*2} ! 90:(B) $) {}; | \\
|\draw (A) -- (D) -- (B); | \\
-} \\
+}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}|}\\
+\vbox{\color{red} |\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}|}
We can draw the triangle at the end of the picture with
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzDrawPolygon{A,B,C}|}
+\vbox{\color{red} |\tkzDrawPolygon{A,B,C}|}
\medskip
We know how to draw the circle $\mathcal{H}$ around $B$ through $C$ and how to place the points $E$ and $F$
\medskip
-\hspace*{1cm}\vbox{\color{orange}
+\vbox{\color{green!50!black}
|\node (H) [label=135:$H$,draw,circle through=(C)] at (B) {};| \\
|\draw (D) -- ($ (D) ! 3.5 ! (B) $) coordinate [label=below:$F$] (F);| \\
-|\draw (D) -- ($ (D) ! 2.5 ! (A) $) coordinate [label=below:$E$] (E);|} \\
+|\draw (D) -- ($ (D) ! 2.5 ! (A) $) coordinate [label=below:$E$] (E);|}
\medskip
-\hspace*{1cm}\vbox{\color{red} |\tkzDrawCircle(B,C)|\\
+\vbox{\color{red} |\tkzDrawCircle(B,C)|\\
|\tkzDrawLines[add=0 and 2](D,A D,B)|}
\medskip
@@ -216,32 +216,32 @@ Intersecting a Line and a Circle : here we search the intersection of the circle
The infinite straight line $DB$ intercepts the circle but with \TIKZ\ we need to extend the lines $DB$ and that can be done using partway calculations. We get the point $F$ and $BF$ or $DF$ intercepts the circle
\medskip
-\hspace*{1cm}\vbox{\color{orange}| \node (H) [label=135:$H$,draw,circle through=(C)] at (B) {}; | \\
+\vbox{\color{green!50!black}| \node (H) [label=135:$H$,draw,circle through=(C)] at (B) {}; | \\
|\path let \p1 = ($ (B) - (C) $) in| \\
| coordinate [label=left:$G$] (G) at ($ (B) ! veclen(\x1,\y1) ! (F) $); | \\
-|\fill[red,opacity=.5] (G) circle (2pt);|} \\
+|\fill[red,opacity=.5] (G) circle (2pt);|}
\medskip
Like the intersection of two circles, it's easy to find the intersection of a line and a circle with \pkg{tkz-euclide}. We don't need $F$
\medskip
-\hspace*{1cm}\vbox{\color{red} | \tkzInterLC(B,D)(B,C)\tkzGetFirstPoint{G}|}
+\vbox{\color{red} | \tkzInterLC(B,D)(B,C)\tkzGetFirstPoint{G}|}
\medskip
There are no more difficulties. Here the final code with some simplications.
We draw the circle $\mathcal{K}$ with center $D$ and passing through $G$. It intersects the line $AD$ at point $L$. $AL = BC$.
-\hspace*{1cm}\vbox{\color{red} | \tkzDrawCircle(D,G)|}
-\hspace*{1cm}\vbox{\color{red} | \tkzInterLC(D,A)(D,G)\tkzGetSecondPoint{L}|}
+\vbox{\color{red} | \tkzDrawCircle(D,G)|}
+\vbox{\color{red} | \tkzInterLC(D,A)(D,G)\tkzGetSecondPoint{L}|}
\begin{tkzexample}[latex=7cm,small]
\begin{tikzpicture}[scale=1.5]
\tkzDefPoint(0,0){A}
\tkzDefPoint(0.75,0.25){B}
\tkzDefPoint(1,1.5){C}
-\tkzDefTriangle[equilateral](A,B) \tkzGetPoint{D}
-\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
-\tkzInterLC[near](A,D)(D,G) \tkzGetFirstPoint{L}
+\tkzDefTriangle[equilateral](A,B)\tkzGetPoint{D}
+\tkzInterLC[near](D,B)(B,C) \tkzGetSecondPoint{G}
+\tkzInterLC[near](A,D)(D,G) \tkzGetFirstPoint{L}
\tkzDrawCircles(B,C D,G)
\tkzDrawLines[add=0 and 2](D,A D,B)
\tkzDrawSegment(A,B)
@@ -399,7 +399,7 @@ Let's analyze the figure
\[\widehat{BCA}=90^\circ -\alpha/2 \]
\item Finally \[\widehat{CBD}=\alpha=36^\circ \]
- the triangle $CBD$ is a "golden" triangle.
+ the triangle $CBD$ is a \code{golden} triangle.
\end{enumerate}
\vspace*{24pt}
@@ -448,7 +448,7 @@ After building the golden triangle $BCD$, we build the point $A$ by noticing tha
\subsubsection{Part II: two others methods with golden and euclid triangle}
-\tkzname{\tkznameofpack} knows how to define a "golden" or "euclide" triangle. We can define $BCD$ and $BCA$ like gold triangles.
+\tkzname{\tkznameofpack} knows how to define a \code{golden} or \code{euclide} triangle. We can define $BCD$ and $BCA$ like gold triangles.
\begin{center}
@@ -529,7 +529,7 @@ $IB=a$, $AI=1$
\tkzDefMidPoint(A,B) \tkzGetPoint{M}
\tkzDefPointWith[orthogonal](I,M) \tkzGetPoint{H}
\tkzInterLC(I,H)(M,B) \tkzGetFirstPoint{C}
- \tkzDrawSegment[style=orange](I,C)
+ \tkzDrawSegment[style=purple](I,C)
\tkzDrawArc(M,B)(A)
\tkzDrawSegment[dim={$1$,-16pt,}](A,I)
\tkzDrawSegment[dim={$(a-1)/2$,-10pt,}](I,M)
@@ -587,7 +587,7 @@ The following code consists of several parts:
\item The third one includes the different drawings;
\begin{tkzltxexample}[]
- \tkzDrawSegment[style=orange](I,H)
+ \tkzDrawSegment[style=purple](I,H)
\tkzDrawPoints(O,I,A,B,M)
\tkzDrawArc(M,A)(O)
\tkzDrawSegment[dim={$1$,-16pt,}](A,I)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex
index e1f84630c8..13f6e06ebf 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-show.tex
@@ -39,12 +39,14 @@ You have to add, of course, all the styles of \TIKZ\ for tracings\dots
\end{tkzexample}
\subsubsection{Example of \tkzcname{tkzShowLine} and \tkzname{perpendicular}}
-\begin{tkzexample}[latex=5cm,small]
+\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A, 3/2/B, 2/2/C}
-\tkzDefLine[perpendicular=through C,K=-.5](A,B) \tkzGetPoint{c}
+\tkzDefLine[perpendicular=through C,K=-.5](A,B)
+\tkzGetPoint{c}
\tkzShowLine[perpendicular=through C,K=-.5,gap=3](A,B)
-\tkzDefPointBy[projection=onto A--B](c)\tkzGetPoint{h}
+\tkzDefPointBy[projection=onto A--B](c)
+\tkzGetPoint{h}
\tkzMarkRightAngle[fill=lightgray](A,h,C)
\tkzDrawLines[add=.5 and .5](A,B C,c)
\tkzDrawPoints(A,B,C,h,c)
@@ -109,7 +111,7 @@ options & default & definition \\
\subsubsection{Example of the use of \tkzcname{tkzShowTransformation}}
\begin{tkzexample}[latex=6cm,small]
-\begin{tikzpicture}[scale=.6]
+\begin{tikzpicture}[scale=.5]
\tkzDefPoint(0,0){O} \tkzDefPoint(2,-2){A}
\tkzDefPoint(70:4){B} \tkzDrawPoints(A,O,B)
\tkzLabelPoints(A,O,B)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex
index b81098e5ab..5d1930584e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-styles.tex
@@ -381,21 +381,21 @@ This library is used to produce different styles of arrow heads. The next examp
\tkzname{Stealth}, \tkzname{Triangle}, \tkzname{To}, \tkzname{Latex} and \dots which can be combined with \tkzname{reversed}. That's easy to place an arrow at one or two endpoints.
\begin{enumerate}
-\item \tkzname{Triangle} and \tkzname{Ray}
+\item \tkzname{-Triangle} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[-Triangle](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Stealth} and \tkzname{Segment}
+\item \tkzname{Stealth-Stealth} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[Stealth-Stealth](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Line}
+\item \tkzname{Latex-Latex} and \tkzname{Line}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
@@ -403,28 +403,28 @@ This library is used to produce different styles of arrow heads. The next examp
\tkzDrawPoints(A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{To} and \tkzname{Segment}
+\item \tkzname{To-To} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[To-To](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Segment}
+\item \tkzname{Latex-Late} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[Latex-Latex](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Ray}
+\item \tkzname{Latex-} and \tkzname{Segment}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B}
\tkzDrawSegment[Latex-](A,B)
\end{tikzpicture}
\end{tkzexample}
-\item \tkzname{Latex} and \tkzname{Several rays}
+\item \tkzname{-Latex} and \tkzname{Segments}
\begin{tkzexample}[latex=6cm,small]
\begin{tikzpicture}
\tkzDefPoints{0/0/A,4/0/B,5/-2/C}
@@ -455,7 +455,7 @@ You can redefine this style.
\subsection{Arrows on middle point of a line segment}
-Arrows on lines are used to indicate that those lines are parallel. It depends on the country, in France we prefer to indicate outside the figure that $(A,B) \parallel (D,C)$. The code is an adaptation of an answer by \tkzname{muzimuzhi Z} on the site \href{https://tex.stackexchange.com/questions/632596/how-to-manage-argument-pattern-keys-and-subways}{tex.stackexchange.com}.
+Arrows on lines are used to indicate that those lines are parallel. It depends on the country, in France we prefer to indicate outside the figure that $(A,B) \parallel (D,C)$. The code is an adaptation of an answer by \tkzname{Muzimuzhi Z} on the site \href{https://tex.stackexchange.com/questions/632596/how-to-manage-argument-pattern-keys-and-subways}{tex.stackexchange.com}.
\medskip
Syntax: \\
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
index 1123d86a2f..d51cfbb021 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/latex/TKZdoc-euclide-tools.tex
@@ -329,8 +329,8 @@ arguments & example & explanation \\
\node at (1,-3) {%
$\overrightarrow{PA}\cdot \overrightarrow{PB} =
\overrightarrow{PC}\cdot \overrightarrow{PD}$};
- \node at (1,-4)%
- {$\overrightarrow{PA}\cdot \overrightarrow{PB} =\pab$};
+ \node at (1,-4)%
+ {$\overrightarrow{PA}\cdot \overrightarrow{PB}=\pab$};
\node at (1,-5){%
$\overrightarrow{PC}\cdot \overrightarrow{PD} =\pcd$};
\end{tikzpicture}
@@ -361,9 +361,12 @@ In this example, the radical axis $(EF)$ has been drawn. A point $H$ has been ch
\tkzDrawCircles(A,B C,D)
\tkzDefRadicalAxis(A,B)(C,D) \tkzGetPoints{E}{F}
\tkzDrawLine[add=1 and 2](E,F)
- \tkzDefPointOnLine[pos=1.5](E,F) \tkzGetPoint{H}
- \tkzDefLine[tangent from = H](A,B)\tkzGetPoints{T}{T'}
- \tkzDefLine[tangent from = H](C,D)\tkzGetPoints{S}{S'}
+ \tkzDefPointOnLine[pos=1.5](E,F)
+ \tkzGetPoint{H}
+ \tkzDefLine[tangent from = H](A,B)
+ \tkzGetPoints{T}{T'}
+ \tkzDefLine[tangent from = H](C,D)
+ \tkzGetPoints{S}{S'}
\tkzDrawSegments(H,T H,T' H,S H,S')
\tkzDrawPoints(A,B,C,D,E,F,H,T,T',S,S')
\tkzPowerCircle(H)(A,B) \tkzGetResult{pw}
@@ -415,7 +418,7 @@ arguments & example & explanation \\
\tkzGetPoints{E}{F}
\tkzDrawPoints(A,B,C,D,E,F)
\tkzLabelPoints(A,B,C,D,E,F)
- \tkzDrawLine[add=.5 and 1](E,F)
+ \tkzDrawLine[add=.25 and .5](E,F)
\tkzDrawLine[add=.25 and .25](A,B)
\end{tikzpicture}
\end{tkzexample}
@@ -460,7 +463,7 @@ arguments & example & explanation \\
-\begin{tkzexample}[small,latex=8cm]
+\begin{tkzexample}[small,latex=7cm]
\begin{tikzpicture}[scale=.4]
\tkzDefPoints{0/0/A,5/0/a,7/-1/B,3/-1/b,5/-4/C,2/-4/c}
\tkzDrawCircles(A,a B,b C,c)
diff --git a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
index cbafb94f7a..aeb4428c81 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
+++ b/macros/latex/contrib/tkz/tkz-euclide/doc/tkz-euclide.pdf
Binary files differ
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
index b471338fc8..f4c6c913e2 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-angles.tex
@@ -10,240 +10,10 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tool-eu-angles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tool-eu-angles.tex}
\makeatletter
-%<--------------------------------------------------------------------------–>
-% tkzSetUpArc
-%<--------------------------------------------------------------------------–>
-\pgfkeys{/tkzsetuparc/.cd,
- color/.store in = \tkz@arc@color,
- line width/.store in = \tkz@arc@lw,
- style/.store in = \tkz@arc@style,
- line width = \tkz@euc@linewidth,
- color = \tkz@euc@linecolor,
- style = \tkz@euc@linestyle,
- /tkzsetuparc/.search also = {/tikz,/tkzcompass},
- }
-\def\tkzSetUpArc{\pgfutil@ifnextchar[{\tkz@SetUpArc}{\tkz@SetUpArc[]}}
-\def\tkz@SetUpArc[#1]{%
-\pgfqkeys{/tkzsetuparc}{#1}
-\tikzset{arc style/.style={color = \tkz@arc@color,
- line width = \tkz@arc@lw,
- style = \tkz@arc@style
- }}
-}% end setup
-%<------------------------------ Arcs -------------------------------------–
-% options : delta
-% \def\tkz@delta{0}
-% \tikzset{arc style/.style={#1}}
-% \pgfkeys{/tikz/.cd,delta/.code={\def\tkz@delta{#1}}}
-\newif\iftkz@reverse
-\gdef\tkz@numa{0}
-\pgfkeys{/tkzdrawarc/.cd,
- type/.is choice,
- type/towards/.code = \def\tkz@numa{0},
- type/rotate/.code = \def\tkz@numa{1},
- type/angles/.code = \def\tkz@numa{2},
- type/R/.code = \def\tkz@numa{3},
- type/R with nodes/.code = \def\tkz@numa{4},
- towards/.style = {type=towards},
- rotate/.style = {type=rotate},
- R/.style = {type=R},
- angles/.style = {type=angles},
- R with nodes/.style = {type=R with nodes},
- diameter/.code = {},
- arc/.code = {},
- size/.code = {},
- mark/.code = {},
- mkpos/.code = {},
- mksize/.code = {},
- mkcolor/.code = {},
- type/.default = towards,
- delta/.store in = \tkz@delta,
- delta = 0,
- reverse/.is if = tkz@reverse,
- reverse/.default = true,
- reverse = false,
- /tkzdrawarc/.search also = {/tikz}
-}
-\def\tkzDrawArc{\pgfutil@ifnextchar[{\tkz@DrawArc}{\tkz@DrawArc[]}}
-\def\tkz@DrawArc[#1](#2,#3)(#4){%
-\begingroup
-\pgfqkeys{/tkzdrawarc}{#1}
-\ifcase\tkz@numa%
- \tkzDrawArcTowards[#1](#2,#3)(#4)
-\or% 1
- \tkzDrawArcRotate[#1](#2,#3)(#4)
-\or% 2
- \tkzDrawArcAngles[#1](#2,#3)(#4)
-\or% 3
- \tkzDrawArcRAngles[#1](#2,#3)(#4)
-\or% 4
- \tkzDrawArcR[#1](#2,#3)(#4)
-\fi
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% ARC nodes #2 center #3 first point last point #4
-% delta un peu plus à chaque extrémité
-% example : \tkzDrawArc(A,B)(C)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
-\def\tkz@DrawArcN[#1](#2,#3)(#4){%
-\begingroup
- \tkz@@CalcLengthcm(#2,#3){tkz@radius}
- \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
- \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% nodes #2 center #3 first point rotate #4 with Angle
-% delta un peu plus à chaque extrémité
-% tkzDrawArcRotate(O,A)(60)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcRotate{\pgfutil@ifnextchar[{\tkz@DrawArcRotate}{%
- \tkz@DrawArcRotate[]}}
-\def\tkz@DrawArcRotate[#1](#2,#3)(#4){%
-\begingroup
- \tkz@@CalcLength(#2,#3){tkz@radius}
- \tkzFindSlopeAngle(#2,#3) \tkzGetAngle{tkz@FirstA}
- \pgfmathadd{\tkz@FirstA}{#4}
- \edef\tkz@SecondA{\pgfmathresult}
- \pgfmathgreaterthan{#4}{0}
- \ifdim\pgfmathresult pt=1 pt\relax%
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstA,\tkz@SecondA)
- \else
- \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@SecondA,\tkz@FirstA)
- \fi
- \endgroup
-}
-%<--------------------------------------------------------------------------–>
-% deux angles
-% \tkzDrawArcAngles(O,A)(0,60)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcAngles{\pgfutil@ifnextchar[{\tkz@DrawArcAngles}{%
- \tkz@DrawArcAngles[]}}
-\def\tkz@DrawArcAngles[#1](#2,#3)(#4,#5){%
-\begingroup
- \tkz@@CalcLength(#2,#3){tkzLengthResult}
- \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult pt)(#4,#5)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% Degree #2 center #4 - #3 radius from #5 (degree) to #6(degree)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcRwithNodes{\pgfutil@ifnextchar[{\tkz@DrawArcRwithNodes}{%
- \tkz@DrawArcRwithNodes[]}}
-\def\tkz@DrawArcRwithNodes[#1](#2,#3,#4)(#5,#6){%
-\begingroup
- \tkz@@CalcLength(#3,#4){tkzLengthResult}
- \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@FirstAngle}
- \tkzFindSlopeAngle(#2,#6)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult)(\tkz@FirstAngle,\tkz@SecondAngle)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-% Nodes R #2 center #3 radius en cm from #4(node) to #5(node)
-% \tkzDrawArcR(O,2)(A,B)
-%<--------------------------------------------------------------------------–>
-\def\tkzDrawArcR{\pgfutil@ifnextchar[{\tkz@DrawArcR}{\tkz@DrawArcR[]}}
-\def\tkz@DrawArcR[#1](#2,#3)(#4,#5){%
-\begingroup
- \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@FirstAngle}
- \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@SecondAngle}
- \tkz@DrawArcRAngles[#1](#2,#3)(\tkz@FirstAngle,\tkz@SecondAngle)
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-%<--------------------------------------------------------------------------–>
-% #1 center #2 radius #4 first angle (degree) #5 second angle (degree)
-% angles 0 .. 180 or -180 .. 0
-%<--------------------------------------------------------------------------–>
-% example : \tkzDrawArc(A,2)(30,90)
-\def\tkzDrawArcRAngles{\pgfutil@ifnextchar[{\tkz@DrawArcRAngles}{%
- \tkz@DrawArcRAngles[]}}
-\def\tkz@DrawArcRAngles[#1](#2,#3)(#4,#5){%
- \begingroup
- \tkzNormalizeAngle(#4,#5)
- \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
- \edef\tkz@FirstAngle{\pgfmathresult}%
- \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
- \edef\tkz@SecondAngle{\pgfmathresult}
- \iftkz@reverse
- \let\tkztemp\tkz@FirstAngle
- \let\tkz@FirstAngle\tkz@SecondAngle
- \let\tkz@SecondAngle\tkztemp
- \fi
- \draw[shift = {(#2)},arc style,/tkzdrawarc/.cd,#1]%
- (\tkz@FirstAngle:#3) arc (\tkz@FirstAngle:\tkz@SecondAngle:#3);
-\endgroup
-}
-%<--------------------------------------------------------------------------–>
-\pgfkeys{
- /@tkzmarkarc/.cd,
- pos/.store in = \tkz@mkarcpos,
- color/.store in = \tkz@mkcolor,
- mark/.store in = \tkz@markarcseg,
- size/.store in = \tkz@mkarcsize,
- color = teal!20,
- size = 4pt,
- pos = .5,
- mark = none,
- /@tkzmarkarc/.search also={/tikz},
-}
-\def\tkzMarkArc{\pgfutil@ifnextchar[{\tkz@MarkArc}{\tkz@MarkArc[]}}
-\def\tkz@MarkArc[#1](#2,#3,#4){%
-\begingroup
- \pgfqkeys{/@tkzmarkarc}{#1} \def\tkz@mymarkarc{\pgfsetplotmarksize{\tkz@mkarcsize}\pgfuseplotmark{\tkz@markarcseg}}
-\tkz@@CalcLength(#2,#3){tkz@radius}
-\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
-\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
-\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
- \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
- \edef\tkz@FirstAngle{\pgfmathresult}%
- \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
- \edef\tkz@SecondAngle{\pgfmathresult}
-\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with {\tkz@mymarkarc}}]
-\path[shift = {(#2)},\tkz@mkcolor,/@tkzmarkarc/.cd,#1,postaction={decorate}]%
-(\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt);
-\end{scope}
-\endgroup
-}
-
-\def\tkzLabelArc{\pgfutil@ifnextchar[{\tkz@LabelArc}{\tkz@LabelArc[]}}
-\def\tkz@LabelArc[#1](#2,#3,#4)#5{%
-\begingroup
-\pgfqkeys{/@tkzmarkarc}{#1}
-\tkz@@CalcLength(#2,#3){tkz@radius}
-\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
-\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
-\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
-\pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
-\edef\tkz@FirstAngle{\pgfmathresult}%
-\pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
-\edef\tkz@SecondAngle{\pgfmathresult}
-\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with \node{#5};}]
- \path[shift = {(#2)},/@tkzmarkarc/.cd,#1,postaction={decorate}]%
- (\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt); \end{scope}
-\endgroup
-}
-%<--------------------------------------------------------------------------->
-% tkzDrawArcRAN >
-%<--------------------------------------------------------------------------->
-\def\tkzDrawArcRAN[#1](#2,#3)(#4,#5){%
-\begingroup
- \draw[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
-\endgroup
-}
-%<--------------- tkzPathArcRAN ----------------------------------
-\def\tkzPathArcRAN[#1](#2,#3)(#4,#5){%
-\begingroup
- \path[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
-\endgroup
-}
%<--------------------------------------------------------------------------->
% Mark an angle modi 3.03 suppression de \tkz@mksize,
%<--------------------------------------------------------------------------->
@@ -276,12 +46,12 @@
%\tikzset{lbstyle/.style = {color=\tkz@mainlinecolor}}
\pgfkeys{/tkzmkangle/.cd,
- arc/.estore in = \tkz@arc,
- size/.store in = \tkz@size,
- mark/.store in = \tkz@markang,
- mkpos/.estore in = \tkz@mkpos,
- mksize/.store in = \tkz@mksize,
- mkcolor/.store in = \tkz@mkcolor,
+ arc/.code = \def\tkz@arc{#1},
+ size/.code = \def\tkz@size{#1},
+ mark/.code = \def\tkz@markang{#1},
+ mkpos/.code = \def\tkz@mkpos{#1},
+ mksize/.code = \def\tkz@mksize{#1},
+ mkcolor/.code = \def\tkz@mkcolor{#1},
arc = l,
size = 1,
mark = none,
@@ -289,7 +59,11 @@
mkcolor = black,
mkpos = 0.5,
/tkzmkangle/.search also={/tikz}
-}
+}
+% utils
+
+%-----------------------------------------------------------------------
+
\def\tkzMarkAngle{\pgfutil@ifnextchar[{\tkz@MarkAngle}{\tkz@MarkAngle[]}}
\def\tkz@MarkAngle[#1](#2,#3,#4){%
\begingroup
@@ -301,8 +75,7 @@
\def\tkz@mymark{\pgfsetplotmarksize{\tkz@mksize}\pgfuseplotmark{\tkz@markang}}
% draw the arcs
\begin{scope}[veclen]
- \begin{scope}[decoration= {markings,
- mark=at position \tkz@mkpos with {\tkz@mymark}}]
+ \begin{scope}[decoration = {markings, mark=at position \tkz@mkpos with {\tkz@mymark}}]
\ifx\tkz@arc\tkz@arcsimple
\tkzDrawArcRAN[#1,fill=none]%
(#3,\tkz@size)(\tkz@FirstAngle,\tkz@SecondAngle)%
@@ -522,17 +295,6 @@
\endgroup
}
%<--------------------------------------------------------------------------->
-% tkzdefMidArc center and two points
-\def\tkzDefMidArc(#1,#2,#3){%
-\begingroup
-\tkz@@CalcLength(#1,#2){tkz@radius}
-\tkzFindSlopeAngle(#1,#2)\tkzGetAngle{tkz@FirstAngle}
-\tkzFindSlopeAngle(#1,#3)\tkzGetAngle{tkz@SecondAngle}
-\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
- \path[shift = {(#1)}](\tkz@FirstAngle:\tkz@radius pt) arc
- (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt) coordinate[midway] (tkzPointResult);
-\endgroup
-}
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex
new file mode 100644
index 0000000000..e93a8a2c49
--- /dev/null
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-arcs.tex
@@ -0,0 +1,262 @@
+% tkz-tool-eu-arcs.tex
+% 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
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% This work has the LPPL maintenance status “maintainedâ€.
+% The Current Maintainer of this work is Alain Matthes.
+
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tool-eu-arcs.tex}
+\makeatletter
+%<--------------------------------------------------------------------------–>
+% tkzSetUpArc
+%<--------------------------------------------------------------------------–>
+\pgfkeys{/tkzsetuparc/.cd,
+ color/.store in = \tkz@arc@color,
+ line width/.store in = \tkz@arc@lw,
+ style/.store in = \tkz@arc@style,
+ line width = \tkz@euc@linewidth,
+ color = \tkz@euc@linecolor,
+ style = \tkz@euc@linestyle,
+ /tkzsetuparc/.search also = {/tikz,/tkzcompass},
+ }
+\def\tkzSetUpArc{\pgfutil@ifnextchar[{\tkz@SetUpArc}{\tkz@SetUpArc[]}}
+\def\tkz@SetUpArc[#1]{%
+\pgfqkeys{/tkzsetuparc}{#1}
+\tikzset{arc style/.style={color = \tkz@arc@color,
+ line width = \tkz@arc@lw,
+ style = \tkz@arc@style
+ }}
+}% end setup
+%<------------------------------ Arcs -------------------------------------–
+% options : delta
+% \def\tkz@delta{0}
+% \tikzset{arc style/.style={#1}}
+% \pgfkeys{/tikz/.cd,delta/.code={\def\tkz@delta{#1}}}
+\newif\iftkz@reverse
+\gdef\tkz@numa{0}
+\pgfkeys{/tkzdrawarc/.cd,
+ type/.is choice,
+ type/towards/.code = \def\tkz@numa{0},
+ type/rotate/.code = \def\tkz@numa{1},
+ type/angles/.code = \def\tkz@numa{2},
+ type/R/.code = \def\tkz@numa{3},
+ type/R with nodes/.code = \def\tkz@numa{4},
+ towards/.style = {type=towards},
+ rotate/.style = {type=rotate},
+ R/.style = {type=R},
+ angles/.style = {type=angles},
+ R with nodes/.style = {type=R with nodes},
+ diameter/.code = {},
+ arc/.code = {},
+ size/.code = {},
+ mark/.code = {},
+ mkpos/.code = {},
+ mksize/.code = {},
+ mkcolor/.code = {},
+ type/.default = towards,
+ delta/.store in = \tkz@delta,
+ delta = 0,
+ reverse/.is if = tkz@reverse,
+ reverse/.default = true,
+ reverse = false,
+ /tkzdrawarc/.search also = {/tikz}
+}
+\def\tkzDrawArc{\pgfutil@ifnextchar[{\tkz@DrawArc}{\tkz@DrawArc[]}}
+\def\tkz@DrawArc[#1](#2,#3)(#4){%
+\begingroup
+\pgfqkeys{/tkzdrawarc}{#1}
+\ifcase\tkz@numa%
+ \tkzDrawArcTowards[#1](#2,#3)(#4)
+\or% 1
+ \tkzDrawArcRotate[#1](#2,#3)(#4)
+\or% 2
+ \tkzDrawArcAngles[#1](#2,#3)(#4)
+\or% 3
+ \tkzDrawArcRAngles[#1](#2,#3)(#4)
+\or% 4
+ \tkzDrawArcR[#1](#2,#3)(#4)
+\fi
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% ARC nodes #2 center #3 first point last point #4
+% delta un peu plus à chaque extrémité
+% example : \tkzDrawArc(A,B)(C)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcTowards{\pgfutil@ifnextchar[{\tkz@DrawArcN}{\tkz@DrawArcN[]}}
+\def\tkz@DrawArcN[#1](#2,#3)(#4){%
+\begingroup
+ \tkz@@CalcLengthcm(#2,#3){tkz@radius}
+ \tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% nodes #2 center #3 first point rotate #4 with Angle
+% delta un peu plus à chaque extrémité
+% tkzDrawArcRotate(O,A)(60)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcRotate{\pgfutil@ifnextchar[{\tkz@DrawArcRotate}{%
+ \tkz@DrawArcRotate[]}}
+\def\tkz@DrawArcRotate[#1](#2,#3)(#4){%
+\begingroup
+ \tkz@@CalcLength(#2,#3){tkz@radius}
+ \tkzFindSlopeAngle(#2,#3) \tkzGetAngle{tkz@FirstA}
+ \pgfmathadd{\tkz@FirstA}{#4}
+ \edef\tkz@SecondA{\pgfmathresult}
+ \pgfmathgreaterthan{#4}{0}
+ \ifdim\pgfmathresult pt=1 pt\relax%
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@FirstA,\tkz@SecondA)
+ \else
+ \tkz@DrawArcRAngles[#1](#2,\tkz@radius pt)(\tkz@SecondA,\tkz@FirstA)
+ \fi
+ \endgroup
+}
+%<--------------------------------------------------------------------------–>
+% deux angles
+% \tkzDrawArcAngles(O,A)(0,60)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcAngles{\pgfutil@ifnextchar[{\tkz@DrawArcAngles}{%
+ \tkz@DrawArcAngles[]}}
+\def\tkz@DrawArcAngles[#1](#2,#3)(#4,#5){%
+\begingroup
+ \tkz@@CalcLength(#2,#3){tkzLengthResult}
+ \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult pt)(#4,#5)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Degree #2 center #4 - #3 radius from #5 (degree) to #6(degree)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcRwithNodes{\pgfutil@ifnextchar[{\tkz@DrawArcRwithNodes}{%
+ \tkz@DrawArcRwithNodes[]}}
+\def\tkz@DrawArcRwithNodes[#1](#2,#3,#4)(#5,#6){%
+\begingroup
+ \tkz@@CalcLength(#3,#4){tkzLengthResult}
+ \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#6)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,\tkzLengthResult)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+% Nodes R #2 center #3 radius en cm from #4(node) to #5(node)
+% \tkzDrawArcR(O,2)(A,B)
+%<--------------------------------------------------------------------------–>
+\def\tkzDrawArcR{\pgfutil@ifnextchar[{\tkz@DrawArcR}{\tkz@DrawArcR[]}}
+\def\tkz@DrawArcR[#1](#2,#3)(#4,#5){%
+\begingroup
+ \tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@FirstAngle}
+ \tkzFindSlopeAngle(#2,#5)\tkzGetAngle{tkz@SecondAngle}
+ \tkz@DrawArcRAngles[#1](#2,#3)(\tkz@FirstAngle,\tkz@SecondAngle)
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+%<--------------------------------------------------------------------------–>
+% #1 center #2 radius #4 first angle (degree) #5 second angle (degree)
+% angles 0 .. 180 or -180 .. 0
+%<--------------------------------------------------------------------------–>
+% example : \tkzDrawArc(A,2)(30,90)
+\def\tkzDrawArcRAngles{\pgfutil@ifnextchar[{\tkz@DrawArcRAngles}{%
+ \tkz@DrawArcRAngles[]}}
+\def\tkz@DrawArcRAngles[#1](#2,#3)(#4,#5){%
+ \begingroup
+ \tkzNormalizeAngle(#4,#5)
+ \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+ \edef\tkz@FirstAngle{\pgfmathresult}%
+ \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+ \edef\tkz@SecondAngle{\pgfmathresult}
+ \iftkz@reverse
+ \let\tkztemp\tkz@FirstAngle
+ \let\tkz@FirstAngle\tkz@SecondAngle
+ \let\tkz@SecondAngle\tkztemp
+ \fi
+ \draw[shift = {(#2)},arc style,/tkzdrawarc/.cd,#1]%
+ (\tkz@FirstAngle:#3) arc (\tkz@FirstAngle:\tkz@SecondAngle:#3);
+\endgroup
+}
+
+%<--------------------------------------------------------------------------->
+% tkzDrawArcRAN >
+%<--------------------------------------------------------------------------->
+\def\tkzDrawArcRAN[#1](#2,#3)(#4,#5){%
+\begingroup
+ \draw[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
+\endgroup
+}
+%<--------------- tkzPathArcRAN ----------------------------------
+\def\tkzPathArcRAN[#1](#2,#3)(#4,#5){%
+\begingroup
+ \path[shift = {(#2)},/tkzdrawarc/.cd,#1] (#4:#3) arc (#4:#5:#3);
+\endgroup
+}
+%<--------------------------------------------------------------------------->
+%% tkzdefMidArc center and two points
+\def\tkzDefMidArc(#1,#2,#3){%
+\begingroup
+\tkz@@CalcLength(#1,#2){tkz@radius}
+\tkzFindSlopeAngle(#1,#2)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#1,#3)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \path[shift = {(#1)}](\tkz@FirstAngle:\tkz@radius pt) arc
+ (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt) coordinate[midway] (tkzPointResult);
+\endgroup
+}
+%<--------------------------------------------------------------------------–>
+\pgfkeys{
+ /@tkzmarkarc/.cd,
+ pos/.store in = \tkz@mkarcpos,
+ color/.store in = \tkz@mkcolor,
+ mark/.store in = \tkz@markarcseg,
+ size/.store in = \tkz@mkarcsize,
+ color = teal!20,
+ size = 4pt,
+ pos = .5,
+ mark = none,
+ /@tkzmarkarc/.search also={/tikz},
+}
+\def\tkzMarkArc{\pgfutil@ifnextchar[{\tkz@MarkArc}{\tkz@MarkArc[]}}
+\def\tkz@MarkArc[#1](#2,#3,#4){%
+\begingroup
+ \pgfqkeys{/@tkzmarkarc}{#1} \def\tkz@mymarkarc{\pgfsetplotmarksize{\tkz@mkarcsize}\pgfuseplotmark{\tkz@markarcseg}}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+ \pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+ \edef\tkz@FirstAngle{\pgfmathresult}%
+ \pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+ \edef\tkz@SecondAngle{\pgfmathresult}
+\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with {\tkz@mymarkarc}}]
+\path[shift = {(#2)},\tkz@mkcolor,/@tkzmarkarc/.cd,#1,postaction={decorate}]%
+(\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt);
+\end{scope}
+\endgroup
+}
+
+\def\tkzLabelArc{\pgfutil@ifnextchar[{\tkz@LabelArc}{\tkz@LabelArc[]}}
+\def\tkz@LabelArc[#1](#2,#3,#4)#5{%
+\begingroup
+\pgfqkeys{/@tkzmarkarc}{#1}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkz@@CalcLength(#2,#3){tkz@radius}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#4)\tkzGetAngle{tkz@SecondAngle}
+\pgfmathsubtract{\tkz@FirstAngle}{\tkz@delta}
+\edef\tkz@FirstAngle{\pgfmathresult}%
+\pgfmathadd{\tkz@SecondAngle}{\tkz@delta}
+\edef\tkz@SecondAngle{\pgfmathresult}
+\begin{scope}[decoration={markings,mark=at position \tkz@mkarcpos with \node{#5};}]
+ \path[shift = {(#2)},/@tkzmarkarc/.cd,#1,postaction={decorate}]%
+ (\tkz@FirstAngle:\tkz@radius pt) arc (\tkz@FirstAngle:\tkz@SecondAngle:\tkz@radius pt); \end{scope}
+\endgroup
+}
+\makeatother
+
+\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
index 50d553453f..c88219c490 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-circles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-draw-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-draw-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzSetUpCircle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
index aeb9341da2..dab6568e0a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-compass.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-compass.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-compass.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Author Alain Matthes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex
index cdce79b692..0707a99e1f 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-ellipses.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-draw-ellipses.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-draw-ellipses.tex}
\makeatletter
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
index 8859ca18e9..3b7fe5a547 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-lines.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-draw-lines.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-draw-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
@@ -51,13 +51,10 @@
% Drawing a line
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
-% \pgfkeys{/tkzdrawl/.cd,
-% /tkzdrawl/.search also={/tikz}
-% }
+
\def\tkzDrawLine{\pgfutil@ifnextchar[{\tkz@DrawLine}{\tkz@DrawLine[]}}
\def\tkz@DrawLine[#1](#2,#3){%
\begingroup
- % \pgfqkeys{/tkzdrawl}{#1}
\draw[line style,#1] (#2) to (#3);
\endgroup
}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
index 6ba7524f73..18b1c06c4b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-points.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-draw-eu-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-draw-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% tkzSetUpPoint définit la forme d'un point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
index 4dbe368630..09f43b9e62 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-polygons.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-polygons.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Polygon
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
index 8d7b6895ec..cfa6a8e144 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-protractor.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-protractor.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-protractor.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% !!! idea from Y. Combe !!!
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
index b925701206..8131adc32b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-sectors.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-sectors.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-sectors.tex}
\makeatletter
%<----------------------- Sectors ------------------------------–>
\gdef\tkz@nums{0}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
index 12656ca974..0959a1f985 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/drawings/tkz-draw-eu-show.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-show.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-show.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% finding specific points in a triangle
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
index 1d272eca37..51cb39590e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-marks.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-lib-eu-marks.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-lib-eu-marks.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Création des symboles
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
index 141355abf9..5453dffef5 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/libs/tkz-lib-eu-shape.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-lib-eu-shape.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-lib-eu-shape.tex}
%<--------------------------------------------------------------------------–>
% Création des symboles
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex
index 497b02eda4..5c403e4454 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles-by.tex
@@ -11,8 +11,8 @@
% The Current Maintainer of this work is Alain Matthes.
\def\fileversion{6.00}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 6.00 tkz-obj-eu-circles.tex}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 6.00 tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex
index 7a4b553e29..b356df9a86 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-circles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-lua-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-lua-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex
index 57c03deab3..f25621248e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-by.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-points-by.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-points-by.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Transformations Géométriques
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex
index 36d3eeef02..f56b5a6dc1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-spc.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
+\def\fileversion{5.10c}
\def\filedate{2024/01/23}
-\typeout{2024/01/23 5.06c tkz-obj-lua-points-spc.tex}
+\typeout{2024/01/23 5.10c tkz-obj-lua-points-spc.tex}
\makeatletter
%add ExCenter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex
index 87090a2922..f8e31c9afa 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points-with.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-lua-points-with.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-lua-points-with.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Vectors
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex
index 1b646b4b8e..24a25502fb 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj-lua/tkz-obj-eu-lua-points.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-lua-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-lua-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% init def point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
index ef3f5bc487..408b3d6770 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-axesmin.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-axesmin}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-axesmin}
\makeatletter
\def\removedot#1.{#1}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
index 59b5da4c15..6e1f648880 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles-by.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
index cdfadca09b..bba6b717e6 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-circles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-circles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-circles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzCircle center and one point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
index 2eca974389..aac48de7d8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-grids.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-grids.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-grids.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Setup Grid
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
index fdbb6adeb8..12ce8d8753 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-lines.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-lines.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-lines.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% les lignes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
index 23662ff719..73b07df71b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-by.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-points-by.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-points-by.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Transformations Géométriques
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
index 868e5d83ee..539ff1ff92 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-rnd.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-points-rnd.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-points-rnd.tex}
%<--------------------------------------------------------------------------–>
\makeatletter
%<-------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex
index 3b228a271e..d1baa02a9c 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-spc.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-el-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-el-points.tex}
\makeatletter
%add ExCenter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
index 9c83ffbcf4..22eead6497 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points-with.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-points-with.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-points-with.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Vectors
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
index b2bb4a4dda..bf03469a50 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-points.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-points.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-points.tex}
\makeatletter
%<--------------------------------------------------------------------------->
% init def point
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
index b6c85efce8..609414132d 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-polygons.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-polygons.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-polygons.tex}
% bug in regular polygon side 2020/03/09
\makeatletter
%<--------------------------------------------------------------------------–>
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
index 794a7a2576..17069c39e3 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/obj/tkz-obj-eu-triangles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-triangles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-triangles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% Triangle Equilateral
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
index a63d72561a..422a86050a 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.cfg
@@ -16,9 +16,9 @@
% and save the file in a directory part of your TEXINPUTS environment
% variable.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-euclide.cfg}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-euclide.cfg}
%<------ colors ---------------------------------------–>
\def\tkz@backgroundcolor{white}
\def\tkz@textcolor{black}
@@ -134,6 +134,24 @@ arc style/.style={%
\def\tkz@mk@size{3pt}
\def\tkz@mk@fill{\tkz@otherlinecolor}
%<--------------------------------------------------------------------------–>
+%<------------------------- mark angle -----------------------------------–>
+\def\tkz@euc@mkcolor{\tkz@otherlinecolor}
+\def\tkz@euc@mkarctype{l}
+\def\tkz@euc@mksize{4pt}
+\def\tkz@euc@mkarcsize{1}
+\def\tkz@euc@markang{none}
+\def\tkz@euc@mkstyle{solid}
+\def\tkz@euc@mkpos{.5}
+\tikzset{%
+mark style/.style = {%
+ arc = \tkz@euc@mkarctype,
+ color = \tkz@euc@mkcolor,
+ size = \tkz@euc@mkarcsize,
+ style = \tkz@euc@mkstyle,
+ mark = \tkz@euc@markang,
+ pos = \tkz@euc@mkpos}
+}
+%<--------------------------------------------------------------------------–>
%<------------------------------ styles ---------------------------------–>
\def\tkzSetUpStyle[#1]#2{\tikzset{#2/.style={#1}}}% add 2024
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
index 21ecad81ea..b88599a7a1 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tkz-euclide.sty
@@ -10,14 +10,17 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
%-------------------------------------------------------------------------------
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-euclide.sty}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-euclide.sty}
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-euclide}[ 2024/02/04 5.06c for pure Euclidean Geometry ]
+\ProvidesPackage{tkz-euclide}[ 2024/04/19 5.10c for pure Euclidean Geometry ]
\newif\if@tkzlua
\@tkzluafalse
\DeclareOption{lua}{\@tkzluatrue}
+\newif\if@tkzmini
+\@tkzminifalse
+\DeclareOption{mini}{\@tkzminitrue}
\ProcessOptions\relax
\@ifpackageloaded{tkz-base}{
@@ -162,7 +165,39 @@
\if@tkzlua
\RequirePackage{luacode}
\fi
-
+\if@tkzmini
+\@tkzluatrue
+\RequirePackage{luacode}
+\@ifpackageloaded{tkz-base}{}{%
+% from base
+\input{tkz-tools-eu-base.tex}
+\input{tkz-tools-eu-utilities.tex}
+\input{tkz-tools-eu-BB.tex}
+\input{tkz-obj-eu-grids.tex}
+\input{tkz-lib-eu-marks.tex}
+\input{tkz-tools-eu-text.tex}
+\input{tkz-lib-eu-shape.tex}
+\input{tkz-obj-eu-axesmin.tex}
+\input{tkz-tools-eu-colors.tex}
+\input{tkz-obj-eu-points.tex}
+\input{tkz-draw-eu-points.tex}
+}
+% next from euclide
+\input{tkz-obj-eu-lua-points-by.tex}
+\input{tkz-tools-eu-lua-math.tex}
+\input{tkz-tools-eu-lua-angles.tex}
+% drawings
+\input{tkz-draw-eu-lines.tex}
+\input{tkz-draw-eu-circles.tex}
+\input{tkz-draw-eu-ellipses.tex}
+\input{tkz-draw-eu-polygons.tex}
+\input{tkz-draw-eu-arcs.tex}
+\input{tkz-draw-eu-angles.tex}
+\input{tkz-draw-eu-sectors.tex}
+\input{tkz-draw-eu-compass.tex}
+\input{tkz-draw-eu-show.tex}
+\input{tkz-draw-eu-protractor.tex}
+\else
\@ifpackageloaded{tkz-base}{}{%
% from base
\input{tkz-tools-eu-base.tex}
@@ -211,9 +246,11 @@
\input{tkz-draw-eu-circles.tex}
\input{tkz-draw-eu-ellipses.tex}
\input{tkz-draw-eu-polygons.tex}
+\input{tkz-draw-eu-arcs.tex}
\input{tkz-draw-eu-angles.tex}
\input{tkz-draw-eu-sectors.tex}
\input{tkz-draw-eu-compass.tex}
\input{tkz-draw-eu-show.tex}
\input{tkz-draw-eu-protractor.tex}
+\fi
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex
index 8005ed1933..6f54bb5ca3 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-angles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-angles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-angles.tex}
\makeatletter
\def\tkzmathrotatepointaround#1#2#3{%
\pgf@process{%
@@ -75,8 +75,20 @@ token.set_macro("tkz@SecondAngle", angleB)
%<--------------------------------------------------------------------------–>
\def\tkzFindSlopeAngle(#1,#2){%
\begingroup
- \tkzmathanglebetweenpoints{#1}{#2}
- \global\let\tkzAngleResult\pgfmathresult
+\pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}}%
+\edef\tkzax{\strip@pt\pgf@x}%
+\edef\tkzay{\strip@pt\pgf@y}%
+\pgfextractx{\pgf@x}{\pgfpointanchor{#2}{center}}%
+\pgfextracty{\pgf@y}{\pgfpointanchor{#2}{center}}%
+\edef\tkzbx{\strip@pt\pgf@x}%
+\edef\tkzby{\strip@pt\pgf@y}%
+ % \tkzmathanglebetweenpoints{#1}{#2}
+ % \global\let\tkzAngleResult\pgfmathresult
+\directlua{ local an = math.angle(\tkzax,\tkzay,\tkzbx,\tkzby)
+ token.set_macro("tkzAngleResult", an )
+ }
+ \global\let\tkzAngleResult\tkzAngleResult
\endgroup
}
%<--------------------------------------------------------------------------–>
@@ -98,5 +110,6 @@ token.set_macro("tkz@SecondAngle", angleB)
\def\tkzGetAngle#1{%
\global\expandafter\edef\csname #1\endcsname{\tkzAngleResult}
}
+
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex
index 0e68171946..7af53a74b0 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-base.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-base.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-base.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex
index 0e700492dc..97f4563f9b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-intersections.tex
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
% utf8 encoding
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-intersections.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-intersections.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% intersection de deux lignes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex
index 18ee85bf6e..7066ee9481 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools-lua/tkz-tools-eu-lua-math.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-lua-math.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-lua-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
%<-------------------------------------------------------------------------->
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
index edefa3295e..883715320e 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-BB.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-obj-eu-BB.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-obj-eu-BB.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\def\tkzShowBB{\pgfutil@ifnextchar[{\tkz@ShowBB}{\tkz@ShowBB[]}}
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
index 7fd0f81bd5..b47a54f5b8 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-angles.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-angles.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-angles.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
%<--------------------------------------------------------------------------–>
@@ -70,5 +70,10 @@
\def\tkzGetAngle#1{%
\global\expandafter\edef\csname #1\endcsname{\tkzAngleResult}
}
+\def\tkzDet(#1,#2,#3){%
+\tkzFindSlopeAngle(#2,#1)\tkzGetAngle{tkz@FirstAngle}
+\tkzFindSlopeAngle(#2,#3)\tkzGetAngle{tkz@SecondAngle}
+\tkzNormalizeAngle(\tkz@FirstAngle,\tkz@SecondAngle)
+}
\makeatother
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
index 28776e3fd4..fd77dc1f4b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-base.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-base.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-base.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
\global\let\tkz@tmp@xa\tkz@init@xmin% modif 2016
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
index 87a897bfcb..d3f0e0c951 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-colors.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-colors}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-colors}
\makeatletter
%<------ Initialisation of the colors with tkzSetUpColors ----------------->
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
index 4122099f44..489af8baf7 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-intersections.tex
@@ -13,9 +13,9 @@
% The Current Maintainer of this work is Alain Matthes.
% utf8 encoding
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-intersections.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-intersections.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% intersection de deux lignes
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
index 73ea0a041a..35821c3282 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-math.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-math.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-math.tex}
\makeatletter
%<-------------------------------------------------------------------------->
% \tkzpointnormalised#
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
index ed90c18514..4955910f97 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-modules.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-utilities.tex}
\makeatletter
%<------------- % chargement des modules ---------------------------------->
\def\tkz@obj@all{angles,arcs,compass,defcircles,deflines,defpoints,defpointsby,defpointsrnd,defpointswith,polygons,protractor,sectors,show,triangles}%
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
index 53b81f7d09..47880e5b45 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-text.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-text.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-text.tex}
\makeatletter
%<--------------------------------------------------------------------------–>
% tkzText
diff --git a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
index 7b41fad768..2b7cf5254b 100644
--- a/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
+++ b/macros/latex/contrib/tkz/tkz-euclide/latex/tools/tkz-tools-eu-utilities.tex
@@ -10,9 +10,9 @@
% This work has the LPPL maintenance status “maintainedâ€.
% The Current Maintainer of this work is Alain Matthes.
-\def\fileversion{5.06c}
-\def\filedate{2024/02/04}
-\typeout{2024/02/04 5.06c tkz-tools-eu-utilities.tex}
+\def\fileversion{5.10c}
+\def\filedate{2024/04/19}
+\typeout{2024/04/19 5.10c tkz-tools-eu-utilities.tex}
\makeatletter
\pgfkeys{/tkzClip/.cd,
space/.store in = {\tkz@CLI@space},
diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/required/l3backend/CHANGELOG.md
index 66a69a3bb3..ecd8593881 100644
--- a/macros/latex/contrib/l3backend/CHANGELOG.md
+++ b/macros/latex/required/l3backend/CHANGELOG.md
@@ -6,6 +6,14 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-04-11]
+
+### Added
+- Support for 'raw' PDF object IDs
+
+### Changed
+- Update PDF object management code
+
## [2024-03-14]
### Removed
@@ -339,7 +347,8 @@ this project uses date-based 'snapshot' version identifiers.
- Include `l3backend` in file names
- Moved backend code to internal for each 'parent' module
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-03-14...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-04-11...HEAD
+[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11
[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
[2024-02-20]: https://github.com/latex3/latex3/compare/2024-01-04...2024-02-20
[2024-01-04]: https://github.com/latex3/latex3/compare/2023-11-09...2024-01-04
diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/required/l3backend/README.md
index 7be33df8b8..058fa63cc2 100644
--- a/macros/latex/contrib/l3backend/README.md
+++ b/macros/latex/required/l3backend/README.md
@@ -1,7 +1,7 @@
LaTeX3 Backend Drivers
======================
-Release 2024-03-14
+Release 2024-04-11
This package forms parts of `expl3`, and contains the code used to interface
with backends (drivers) across the `expl3` codebase. The functions here are
diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/required/l3backend/l3backend-basics.dtx
index 4d3b68225a..fbac503317 100644
--- a/macros/latex/contrib/l3backend/l3backend-basics.dtx
+++ b/macros/latex/required/l3backend/l3backend-basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -70,27 +70,27 @@
% \begin{macrocode}
\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2024-03-14}{}
+ {l3backend-dvipdfmx.def}{2024-04-11}{}
{L3 backend support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-dvips.def}{2024-03-14}{}
+ {l3backend-dvips.def}{2024-04-11}{}
{L3 backend support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-dvisvgm.def}{2024-03-14}{}
+ {l3backend-dvisvgm.def}{2024-04-11}{}
{L3 backend support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-luatex.def}{2024-03-14}{}
+ {l3backend-luatex.def}{2024-04-11}{}
{L3 backend support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-pdftex.def}{2024-03-14}{}
+ {l3backend-pdftex.def}{2024-04-11}{}
{L3 backend support: PDF output (pdfTeX)}
%</pdftex>
%<*xetex>
- {l3backend-xetex.def}{2024-03-14}{}
+ {l3backend-xetex.def}{2024-04-11}{}
{L3 backend support: XeTeX}
%</xetex>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/required/l3backend/l3backend-box.dtx
index 3fc3243c42..93d83293ef 100644
--- a/macros/latex/contrib/l3backend/l3backend-box.dtx
+++ b/macros/latex/required/l3backend/l3backend-box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/required/l3backend/l3backend-code.pdf
index 9affc7d856..d298479c42 100644
--- a/macros/latex/contrib/l3backend/l3backend-code.pdf
+++ b/macros/latex/required/l3backend/l3backend-code.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3backend/l3backend-code.tex b/macros/latex/required/l3backend/l3backend-code.tex
index df0dd0ea8c..df0dd0ea8c 100644
--- a/macros/latex/contrib/l3backend/l3backend-code.tex
+++ b/macros/latex/required/l3backend/l3backend-code.tex
diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/required/l3backend/l3backend-color.dtx
index eaa89add8c..307432d554 100644
--- a/macros/latex/contrib/l3backend/l3backend-color.dtx
+++ b/macros/latex/required/l3backend/l3backend-color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/required/l3backend/l3backend-draw.dtx
index eef86886f5..c651ab92fe 100644
--- a/macros/latex/contrib/l3backend/l3backend-draw.dtx
+++ b/macros/latex/required/l3backend/l3backend-draw.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/required/l3backend/l3backend-graphics.dtx
index 9360bffd2e..e20457368d 100644
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ b/macros/latex/required/l3backend/l3backend-graphics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/required/l3backend/l3backend-header.dtx
index 84f8ab53b7..486f564822 100644
--- a/macros/latex/contrib/l3backend/l3backend-header.dtx
+++ b/macros/latex/required/l3backend/l3backend-header.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/required/l3backend/l3backend-opacity.dtx
index a5828bfd90..0c29574c37 100644
--- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx
+++ b/macros/latex/required/l3backend/l3backend-opacity.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/required/l3backend/l3backend-pdf.dtx
index 0a16a79f9e..cf09c0eec2 100644
--- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx
+++ b/macros/latex/required/l3backend/l3backend-pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -113,25 +113,13 @@
%
% \subsubsection{Objects}
%
-% \begin{variable}{\g_@@_backend_object_int}
-% For tracking objects.
+% \begin{macro}{\@@_backend_object_new:}
+% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n}
% \begin{macrocode}
-\int_new:N \g_@@_backend_object_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:n #1
- {
- \int_gincr:N \g_@@_backend_object_int
- \int_const:cn
- { c_@@_object_ \tl_to_str:n {#1} _int }
- { \g_@@_backend_object_int }
- }
-\cs_new:Npn \@@_backend_object_ref:n #1
- { { pdf.obj \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } } }
+\cs_new_protected:Npn \@@_backend_object_new:
+ { \int_gincr:N \g_@@_backend_object_int }
+\cs_new:Npn \@@_backend_object_ref:n #1 { { pdf.obj #1 } }
+\cs_new_eq:NN \@@_backend_object_id:n \@@_backend_object_ref:n
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -958,12 +946,12 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
+% \begin{macro}{\@@_backend_object_new:}
+% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n}
% Declaring objects means reserving at the PDF level plus starting
% tracking.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:n #1
+\cs_new_protected:Npn \@@_backend_object_new:
{
%<*luatex>
\tex_pdfextension:D obj ~
@@ -972,17 +960,16 @@
\tex_pdfobj:D
%</pdftex>
reserveobjnum ~
- \int_const:cn
- { c_@@_object_ \tl_to_str:n {#1} _int }
+ \int_gset:Nn \g_@@_backend_object_int
%<*luatex>
- { \tex_pdffeedback:D lastobj }
+ { \tex_pdffeedback:D lastobj }
%</luatex>
%<*pdftex>
- { \tex_pdflastobj:D }
+ { \tex_pdflastobj:D }
%</pdftex>
}
-\cs_new:Npn \@@_backend_object_ref:n #1
- { \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
+\cs_new:Npn \@@_backend_object_ref:n #1 { #1 ~ 0 ~ R }
+\cs_new:Npn \@@_backend_object_id:n #1 {#1}
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1001,28 +988,26 @@
%<*pdftex>
\tex_immediate:D \tex_pdfobj:D
%</pdftex>
- useobjnum ~
- \int_use:c
- { c_@@_object_ \tl_to_str:n {#1} _int }
- \@@_backend_object_write:nn {#2} {#3}
+ useobjnum ~ #1
+ \@@_backend_object_write:nn {#2} {#3}
}
\cs_new:Npn \@@_backend_object_write:nn #1#2
{
- \str_case:nn {#1}
- {
- { array } { { [ ~ \exp_not:n {#2} ~ ] } }
- { dict } { { << ~ \exp_not:n {#2} ~ >> } }
- { fstream }
- {
- stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
- file ~ { \@@_exp_not_ii:nn #2 }
- }
- { stream }
- {
- stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
- { \@@_exp_not_ii:nn #2 }
- }
- }
+ \str_case:nn {#1}
+ {
+ { array } { { [ ~ \exp_not:n {#2} ~ ] } }
+ { dict } { { << ~ \exp_not:n {#2} ~ >> } }
+ { fstream }
+ {
+ stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
+ file ~ { \@@_exp_not_ii:nn #2 }
+ }
+ { stream }
+ {
+ stream ~ attr ~ { \@@_exp_not_i:nn #2 } ~
+ { \@@_exp_not_ii:nn #2 }
+ }
+ }
}
\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne }
\cs_new:Npn \@@_exp_not_i:nn #1#2 { \exp_not:n {#1} }
@@ -1235,28 +1220,22 @@
%
% \subsubsection{Objects}
%
-% \begin{variable}{\g_@@_backend_object_int, \g_@@_backend_object_prop}
+% \begin{variable}{\g_@@_backend_object_prop}
% For tracking objects to allow finalisation.
% \begin{macrocode}
-\int_new:N \g_@@_backend_object_int
\prop_new:N \g_@@_backend_object_prop
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
+% \begin{macro}{\@@_backend_object_new:}
+% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n}
% Objects are tracked at the macro level, but we don't have to do anything
% at this stage.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:n #1
- {
- \int_gincr:N \g_@@_backend_object_int
- \int_const:cn
- { c_@@_object_ \tl_to_str:n {#1} _int }
- { \g_@@_backend_object_int }
- }
-\cs_new:Npn \@@_backend_object_ref:n #1
- { @pdf.obj \int_use:c { c_@@_object_ \tl_to_str:n {#1} _int } }
+\cs_new_protected:Npn \@@_backend_object_new:
+ { \int_gincr:N \g_@@_backend_object_int }
+\cs_new:Npn \@@_backend_object_ref:n #1 { @pdf.obj #1 }
+\cs_new_eq:NN \@@_backend_object_id:n \@@_backend_object_ref:n
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1627,16 +1606,17 @@
%
% \subsubsection{Objects}
%
-% \begin{macro}{\@@_backend_object_new:n}
-% \begin{macro}[EXP]{\@@_backend_object_ref:n}
+% \begin{macro}{\@@_backend_object_new:}
+% \begin{macro}[EXP]{\@@_backend_object_ref:n, \@@_backend_object_id:n}
% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:ne}
% \begin{macro}{\@@_backend_object_now:nn, , \@@_backend_object_now:ne}
% \begin{macro}{\@@_backend_object_last:}
% \begin{macro}[EXP]{\@@_backend_pageobject_ref:n}
% All no-ops here.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_object_new:nn #1 { }
+\cs_new_protected:Npn \@@_backend_object_new: { }
\cs_new:Npn \@@_backend_object_ref:n #1 { }
+\cs_new:Npn \@@_backend_object_id:n #1 { }
\cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3 { }
\cs_new_protected:Npn \@@_backend_object_write:nne #1#2#3 { }
\cs_new_protected:Npn \@@_backend_object_now:nn #1#2 { }
diff --git a/macros/latex/contrib/l3backend/l3backend.ins b/macros/latex/required/l3backend/l3backend.ins
index e24c41d236..e24c41d236 100644
--- a/macros/latex/contrib/l3backend/l3backend.ins
+++ b/macros/latex/required/l3backend/l3backend.ins
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/required/l3kernel/CHANGELOG.md
index 9c8c4d506c..e770f3fe36 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/required/l3kernel/CHANGELOG.md
@@ -7,6 +7,30 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2024-04-11]
+
+### Added
+- `\prop_(g)put_if_not_in:Nnn` (renamed from `\prop_(g)put_if_new:Nnn`)
+- `\intarray_if_exist:N(TF)`
+- `\fparray_if_exist:N(TF)`
+- Support for 'indexed' PDF objects
+
+### Changed
+- Expand object names in `\pdf_object_...` functions (issue \#1521)
+- Adapt `l3doc` for `ltcmd` change to handling of newlines
+ (see latex3/latex2e\#1304)
+- Return active spaces from `\sys_get_query:n(nn)N` (issue \#1529)
+
+### Fixed
+- False `debug` error raised by `\cctab_const:Nn` (issue \#1508)
+- Undefined `\__kernel_iwo_open:Nn` used in `\iow_shell_open:Nn`
+ (issue \#1515)
+- Naming of register functions in LuaMetaTeX 2.11+ (issue \#1518)
+- Catcode applied to letters by `\sys_get_query:n(nn)N`
+
+### Deprecated
+- `\prop_(g)put_if_new:Nnn` (renamed to `\prop_(g)put_if_not_in:Nnn`)
+
## [2024-03-14]
### Added
@@ -20,6 +44,7 @@ this project uses date-based 'snapshot' version identifiers.
### Fixed
- Typeset `TF` of internal conditionals in current color (issue \#730)
- Some functions and variables were defined locally
+
## [2024-02-20]
### Changed
@@ -1700,7 +1725,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-03-14...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-04-11...HEAD
+[2024-04-11]: https://github.com/latex3/latex3/compare/2024-03-14...2024-04-11
[2024-03-14]: https://github.com/latex3/latex3/compare/2024-02-20...2024-03-14
[2024-02-20]: https://github.com/latex3/latex3/compare/2024-02-18...2024-02-20
[2024-02-18]: https://github.com/latex3/latex3/compare/2024-02-13...2024-02-18
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/required/l3kernel/README.md
index 8ef94a41ac..70d106b496 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/required/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-03-14
+Release 2024-04-11
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/required/l3kernel/expl3.dtx
index 76ef8ec919..56a62010fa 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/required/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-03-14}%
+\def\ExplFileDate{2024-04-11}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/required/l3kernel/expl3.pdf
index b36343153a..56a734d6bf 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/required/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/required/l3kernel/interface3.pdf
index 1df60adf1a..bf177baf39 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/required/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/required/l3kernel/interface3.tex
index ff8114028e..1bf31032ee 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/required/l3kernel/interface3.tex
@@ -58,7 +58,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3.ins b/macros/latex/required/l3kernel/l3.ins
index 2940230505..bf7a75381d 100644
--- a/macros/latex/contrib/l3kernel/l3.ins
+++ b/macros/latex/required/l3kernel/l3.ins
@@ -105,7 +105,7 @@ and all files in that bundle must be distributed together.
\from{l3regex.dtx} {package}
\from{l3box.dtx} {package}
\from{l3color.dtx} {package}
- \from{l3pdf.dtx} {package}
+ \from{l3pdf.dtx} {package,tex}
\from{l3coffins.dtx} {package}
\from{l3luatex.dtx} {package,tex}
\from{l3unicode.dtx} {package}
@@ -176,6 +176,7 @@ and all files in that bundle must be distributed together.
\from{l3sys.dtx}{package,lua}
\from{l3token.dtx}{package,lua}
\from{l3intarray.dtx}{package,lua}
+ \from{l3pdf.dtx}{package,lua}
}}
\endbatchfile
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/required/l3kernel/l3basics.dtx
index 66e999fe62..eabf678caa 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/required/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -1340,8 +1340,9 @@
% only locally/globally assigned;
% \item \texttt{check-expressions} that checks integer, dimension,
% skip, and muskip expressions are not terminated prematurely;
-% \item \texttt{deprecation} that makes soon-to-be-deprecated commands produce errors;
-% \item \texttt{log-functions} that logs function definitions;
+% \item \texttt{deprecation} that makes deprecated commands produce errors;
+% \item \texttt{log-functions} that logs function definitions and
+% variable declarations;
% \item \texttt{all} that does all of the above.
% \end{itemize}
% Providing these as switches rather than options allows testing code
@@ -1355,10 +1356,10 @@
% \cs{debug_suspend:} \ldots{} \cs{debug_resume:}
% \end{syntax}
% Suppress (locally) errors and logging from \texttt{debug} commands,
-% except for the \texttt{deprecation} errors or warnings. These pairs
+% except for the \texttt{deprecation} errors. These pairs
% of commands can be nested. This can be used around pieces of code
% that are known to fail checks, if such failures should be ignored.
-% See for instance \pkg{l3coffins}.
+% See for instance \pkg{l3cctab} and \pkg{l3coffins}.
% \end{function}
%
% \end{documentation}
@@ -1871,9 +1872,8 @@
%
% \begin{macro}{\__kernel_deprecation_code:nn}
% \begin{variable}{\g_@@_deprecation_on_tl, \g_@@_deprecation_off_tl}
-% Some commands were more recently deprecated and not yet removed;
-% only make these into errors if the user requests it. This relies on
-% two token lists, filled up in \pkg{l3deprecation}.
+% Make deprecated commands throw errors if the user requests it.
+% This relies on two token lists, filled up in \pkg{l3deprecation}.
% \begin{macrocode}
\cs_gset_nopar:Npn \g_@@_deprecation_on_tl { }
\cs_gset_nopar:Npn \g_@@_deprecation_off_tl { }
diff --git a/macros/latex/contrib/l3kernel/l3bitset.dtx b/macros/latex/required/l3kernel/l3bitset.dtx
index 3100c28463..b0bd996d26 100644
--- a/macros/latex/contrib/l3kernel/l3bitset.dtx
+++ b/macros/latex/required/l3kernel/l3bitset.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/required/l3kernel/l3bootstrap.dtx
index 5ff0c2e68d..2c51bf3bb0 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/required/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/required/l3kernel/l3box.dtx
index 08463db56d..2d4902950f 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/required/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/required/l3kernel/l3cctab.dtx
index 5cdaa3dc92..dd35fb00a3 100644
--- a/macros/latex/contrib/l3kernel/l3cctab.dtx
+++ b/macros/latex/required/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -286,15 +286,23 @@
% \end{macrocode}
% Now the case for other engines. Here, each table is an integer
% array. Following the \LuaTeX{} pattern, a new table starts with
-% \IniTeX{} codes. The index base is out-by-one, so we have an
+% \IniTeX{} codes. The \cs{debug_suspend:} and \cs{debug_resume:}
+% functions prevent errors and logging from \texttt{debug} commands
+% which are either duplicate or false when \cs{@@_new:N} is used
+% by \cs{cctab_new:N} or \cs{cctab_const:Nn}.
+% The index base is out-by-one, so we have an
% internal function to handle that. The \IniTeX{} \tn{endlinechar} is
% $13$.
% \begin{macrocode}
{
\cs_new_protected:Npn \@@_new:N #1
- { \intarray_new:Nn #1 { 257 } }
+ {
+ \debug_suspend:
+ \intarray_new:Nn #1 { 257 }
+ \debug_resume:
+ }
\cs_new_protected:Npn \@@_gstore:Nnn #1#2#3
- { \intarray_gset:Nnn #1 { \int_eval:n { #2 + 1 } } {#3} }
+ { \intarray_gset:Nnn #1 { #2 + 1 } {#3} }
\cs_new_protected:Npn \cctab_new:N #1
{
\__kernel_chk_if_free_cs:N #1
@@ -796,13 +804,22 @@
% \subsection{Constant category code tables}
%
% \begin{macro}{\cctab_const:Nn,\cctab_const:cn}
-% Creates a new \meta{cctab~var} then sets it with the current and
-% user-supplied codes.
+% Creates a new \meta{cctab~var} then sets it with the \IniTeX{} and
+% user-supplied codes. To avoid false \texttt{debug} errors, we write
+% out implementation of \cs{cctab_new:N} and \cs{cctab_gset:Nn}
+% instead of directly using them here. The initialization part in
+% \cs{cctab_new:N} in non-\LuaTeX{} is omitted as it's covered by
+% the \IniTeX{} settings.
% \begin{macrocode}
\cs_new_protected:Npn \cctab_const:Nn #1#2
{
- \cctab_new:N #1
- \cctab_gset:Nn #1 {#2}
+ \__kernel_chk_if_free_cs:N #1
+ \@@_new:N #1
+ \group_begin:
+ \cctab_select:N \c_initex_cctab
+ #2 \scan_stop:
+ \@@_gset:n {#1}
+ \group_end:
}
\cs_generate_variant:Nn \cctab_const:Nn { c }
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/required/l3kernel/l3clist.dtx
index ad65a4b174..c67f70db2c 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/required/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/required/l3kernel/l3coffins.dtx
index ad41224aa0..164d10019d 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/required/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/required/l3kernel/l3color.dtx
index 514ff326a4..0edc225c52 100644
--- a/macros/latex/contrib/l3kernel/l3color.dtx
+++ b/macros/latex/required/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/required/l3kernel/l3debug.dtx
index 6654b6d4cd..6dbe13f96e 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/required/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-03-14}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-04-11}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
@@ -389,10 +389,9 @@
% \end{macro}
%
% \begin{macro}{\@@_deprecation_on:, \@@_deprecation_off:}
-% Some commands were more recently deprecated and not yet removed;
-% only make these into errors if the user requests it. This relies on
-% two token lists, filled up in \pkg{l3deprecation} by calls to
-% \cs{__kernel_deprecation_code:nn}.
+% Make deprecated commands throw errors if the user requests it.
+% This relies on two token lists, filled up in \pkg{l3deprecation} by
+% calls to \cs{__kernel_deprecation_code:nn}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_deprecation_on:
{ \g_@@_deprecation_on_tl }
@@ -781,7 +780,7 @@
\prop_pop:NnNF
\prop_pop:NnNTF
\prop_put:Nnn
- \prop_put_if_new:Nnn
+ \prop_put_if_not_in:Nnn
\prop_put_from_keyval:Nn
\prop_remove:Nn
\prop_set_eq:NN
@@ -862,7 +861,7 @@
\prop_gpop:NnNF
\prop_gpop:NnNTF
\prop_gput:Nnn
- \prop_gput_if_new:Nnn
+ \prop_gput_if_not_in:Nnn
\prop_gput_from_keyval:Nn
\prop_gremove:Nn
\prop_gset_eq:NN
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/required/l3kernel/l3deprecation.dtx
index 3906c6786e..7af8700df7 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/required/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -51,8 +51,10 @@
%
% \section{\pkg{l3deprecation} documentation}
%
-% A few commands have had to be deprecated over the years. This module
-% defines deprecated and deleted commands to produce an error.
+% A few commands have had to be deprecated over the years.
+% All commands deprecated before release 2022-01-12 were already
+% removed; commands deprecated since then will no longer be removed.
+% Instead, this module defines them to produce errors.
%
% \end{documentation}
%
@@ -74,31 +76,12 @@
% \cs{__kernel_patch_deprecation:nnNNpn} \Arg{date} \Arg{replacement}
% \meta{definition} \meta{function} \meta{parameters} \Arg{code}
% \end{quote}
-% defines the \meta{function} to produce a warning and run its
-% \meta{code}, or to produce an error and not run any \meta{code},
-% depending on the \pkg{expl3} date.
-% \begin{itemize}
-% \item If the \pkg{expl3} date is less than the \meta{date} (plus
-% $6$~months in case \texttt{undo-recent-deprecations} is used) then
-% we define the \meta{function} to produce a warning and run its code.
-% The warning is actually suppressed in two cases:
-% \begin{itemize}
-% \item if neither \texttt{undo-recent-deprecations} nor
-% \texttt{enable-debug} are in effect we may be in an end-user's
-% document so it is suppressed;
-% \item if the command is expandable then we cannot produce a warning.
-% \end{itemize}
-% \item Otherwise, we define the \meta{function} to produce an error.
-% \end{itemize}
-% In both cases we additionally make \cs{debug_on:n} |{deprecation}|
-% turn the \meta{function} into an \tn{outer} error, and
-% \cs{debug_off:n} |{deprecation}| restore whatever the behaviour was
-% without \cs{debug_on:n} |{deprecation}|.
-%
-% In later sections we use the \pkg{l3doc} key \texttt{deprecated} with
-% a date equal to that \meta{date} plus $6$~months, so that \pkg{l3doc}
-% will complain if we forget to remove the stale \meta{parameters} and
-% \Arg{code}.
+% defines the \meta{function} to produce an error and run its
+% \meta{code}.
+%
+% We make \cs{debug_on:n} |{deprecation}| turn the \meta{function} into
+% an \tn{outer} error, and \cs{debug_off:n} |{deprecation}| restore
+% whatever the behaviour was without \cs{debug_on:n} |{deprecation}|.
%
% In the explanations below, \meta{definition} \meta{function}
% \meta{parameters} \Arg{code} or assignments that only differ in the
@@ -183,8 +166,7 @@
%
% \begin{macro}{\__kernel_deprecation_error:Nnn}
% The \tn{outer} definition here ensures the command cannot appear
-% in an argument. Use this auxiliary on all commands that have been
-% removed since 2015.
+% in an argument.
% \begin{macrocode}
\cs_new_protected:Npn \__kernel_deprecation_error:Nnn #1#2#3
{
@@ -679,6 +661,27 @@
% \end{macrocode}
% \end{macro}
%
+% \subsection{Deprecated \pkg{l3prop} functions}
+%
+% \begin{macro}[deprecated]
+% {
+% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
+% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
+% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
+% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+% }
+% \begin{macrocode}
+%\__kernel_patch_deprecation:nnNNpn { 2024-03-30 } { \prop_put_if_not_in:Nnn }
+\cs_new_protected:Npn \prop_put_if_new:Nnn { \prop_put_if_not_in:Nnn }
+%\__kernel_patch_deprecation:nnNNpn { 2024-03-30 } { \prop_gput_if_not_in:Nnn }
+\cs_new_protected:Npn \prop_gput_if_new:Nnn { \prop_gput_if_not_in:Nnn }
+\cs_generate_variant:Nn \prop_put_if_new:Nnn
+ { NnV , NV , c , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn
+ { NnV , NV , c , cnV , cV }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/required/l3kernel/l3doc.dtx
index a48a24df23..9156bd385e 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/required/l3kernel/l3doc.dtx
@@ -71,7 +71,7 @@ and all files in that bundle must be distributed together.
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2024-03-14}{}
+\ProvidesExplClass{l3doc}{2024-04-11}{}
{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-03-14}
+% \date{Released 2024-04-11}
% \maketitle
% \tableofcontents
%
@@ -2181,6 +2181,8 @@ and all files in that bundle must be distributed together.
{
\tl_remove_all:Ne \l_@@_tmpa_tl
{ \iow_char:N \^^M \c_percent_str }
+ \tl_remove_all:Ne \l_@@_tmpa_tl
+ { \token_to_str:N \obeyedline \c_space_tl \c_percent_str }
\tl_remove_all:Ne \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } }
\tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^I }
\tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M }
diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/required/l3kernel/l3doc.pdf
index 2f85329fdc..6ef4101a78 100644
--- a/macros/latex/contrib/l3kernel/l3doc.pdf
+++ b/macros/latex/required/l3kernel/l3doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/required/l3kernel/l3docstrip.dtx
index c973d593c5..c2733e810e 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/required/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/required/l3kernel/l3docstrip.pdf
index f2e611b2c9..6ce1fc34e2 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/required/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/required/l3kernel/l3expan.dtx
index 7e507b7598..e79b5f32b9 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/required/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/required/l3kernel/l3file.dtx
index 3a4d1c06dc..6111d270ca 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/required/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -107,7 +107,7 @@
% control sequence for file access. If the \meta{stream} was already
% open it is closed before the new operation begins. The
% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{file name} until a \cs{ior_close:N} instruction
+% allocated to \meta{file name} until an \cs{ior_close:N} instruction
% is given or the \TeX{} run ends.
% If the file is not found, an error is raised.
% \end{function}
@@ -167,7 +167,7 @@
% control sequence for access. If the \meta{stream} was already
% open it is closed before the new operation begins. The
% \meta{stream} is available for access immediately and will remain
-% allocated to \meta{shell command} until a \cs{iow_close:N} instruction
+% allocated to \meta{shell command} until an \cs{iow_close:N} instruction
% is given or the \TeX{} run ends.
% If piped system calls are disabled an error is raised.
%
@@ -1679,6 +1679,7 @@
% \end{variable}
%
% \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
+% \begin{macro}{\__kernel_iow_open:Nn, \__kernel_iow_open:No}
% \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV}
% The same idea as for reading, but without the path and without the need
% to allow for a conditional version.
@@ -1687,16 +1688,21 @@
{
\__kernel_tl_set:Nx \l_@@_file_name_tl
{ \__kernel_file_name_sanitize:n {#2} }
+ \__kernel_iow_open:No #1 \l_@@_file_name_tl
+ }
+\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
+\cs_new_protected:Npn \__kernel_iow_open:Nn #1#2
+ {
\iow_close:N #1
\seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
- { \@@_open_stream:NV #1 \l_@@_file_name_tl }
+ { \@@_open_stream:Nn #1 {#2} }
{
\@@_new:N #1
\__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
- \@@_open_stream:NV #1 \l_@@_file_name_tl
+ \@@_open_stream:Nn #1 {#2}
}
}
-\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
+\cs_generate_variant:Nn \__kernel_iow_open:Nn { No }
\cs_new_protected:Npn \@@_open_stream:Nn #1#2
{
\tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop:
@@ -1708,6 +1714,7 @@
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\iow_shell_open:Nn}
% \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN}
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/required/l3kernel/l3flag.dtx
index 40614c7348..c3bd4a5085 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/required/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/required/l3kernel/l3fp-assign.dtx
index 6d00047e4d..d54f092085 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/required/l3kernel/l3fp-assign.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/required/l3kernel/l3fp-aux.dtx
index 1f4ea5d34d..c9d0c228f5 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/required/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/required/l3kernel/l3fp-basics.dtx
index a7401407cd..d3dcb68dde 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/required/l3kernel/l3fp-basics.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/required/l3kernel/l3fp-convert.dtx
index 0459331326..a0536c1299 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/required/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/required/l3kernel/l3fp-expo.dtx
index 5b5f947c38..6fbc9de52c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/required/l3kernel/l3fp-expo.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/required/l3kernel/l3fp-extended.dtx
index bcd16a4b68..356c32b232 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/required/l3kernel/l3fp-extended.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-functions.dtx b/macros/latex/required/l3kernel/l3fp-functions.dtx
index b26d8e7f26..f6c9ec346f 100644
--- a/macros/latex/contrib/l3kernel/l3fp-functions.dtx
+++ b/macros/latex/required/l3kernel/l3fp-functions.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/required/l3kernel/l3fp-logic.dtx
index c95704085c..9df6a4730a 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/required/l3kernel/l3fp-logic.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/required/l3kernel/l3fp-parse.dtx
index 53b85a7cc8..ee2eedbc22 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/required/l3kernel/l3fp-parse.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/required/l3kernel/l3fp-random.dtx
index cdbdf38ee1..ce5a0c48f7 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/required/l3kernel/l3fp-random.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/required/l3kernel/l3fp-round.dtx
index bddb146be7..48ae82730c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/required/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx b/macros/latex/required/l3kernel/l3fp-symbolic.dtx
index 26a084733d..901ce7a27c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-symbolic.dtx
+++ b/macros/latex/required/l3kernel/l3fp-symbolic.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/required/l3kernel/l3fp-traps.dtx
index e1a3dd89a0..5a4a3b41f9 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/required/l3kernel/l3fp-traps.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/required/l3kernel/l3fp-trig.dtx
index 21cefc166c..d8585ebe66 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/required/l3kernel/l3fp-trig.dtx
@@ -42,7 +42,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-types.dtx b/macros/latex/required/l3kernel/l3fp-types.dtx
index 0d589c9549..2c23c61393 100644
--- a/macros/latex/contrib/l3kernel/l3fp-types.dtx
+++ b/macros/latex/required/l3kernel/l3fp-types.dtx
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/required/l3kernel/l3fp.dtx
index 11dbcdceef..7cef573970 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/required/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/required/l3kernel/l3fparray.dtx
index 1517840431..24f4ac85f8 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/required/l3kernel/l3fparray.dtx
@@ -44,20 +44,20 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
% \begin{documentation}
%
-% \section{\pkg{l3fparray} documentation}
-%
% For applications requiring heavy use of floating points, this module
% provides arrays which can be accessed in constant time (contrast
% \pkg{l3seq}, where access time is linear). The interface is very
% close to that of \pkg{l3intarray}. The size of the array is fixed and
% must be given at point of initialisation
%
+% \section{Creating and initialising floating point array variables}
+%
% \begin{function}[added = 2018-05-05]{\fparray_new:Nn, \fparray_new:cn}
% \begin{syntax}
% \cs{fparray_new:Nn} \meta{fparray~var} \Arg{size}
@@ -68,14 +68,16 @@
% assignments are always global.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c}
+% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c}
% \begin{syntax}
-% \cs{fparray_count:N} \meta{fparray~var}
+% \cs{fparray_gzero:N} \meta{fparray~var}
% \end{syntax}
-% Expands to the number of entries in the \meta{floating point array
-% variable}. This is performed in constant time.
+% Sets all entries of the \meta{floating point array variable} to
+% $+0$. Assignments are always global.
% \end{function}
%
+% \section{Adding data to floating point arrays}
+%
% \begin{function}[added = 2018-05-05]{\fparray_gset:Nnn, \fparray_gset:cnn}
% \begin{syntax}
% \cs{fparray_gset:Nnn} \meta{fparray~var} \Arg{position} \Arg{value}
@@ -87,17 +89,21 @@
% Assignments are always global.
% \end{function}
%
-% \begin{function}[added = 2018-05-05]{\fparray_gzero:N, \fparray_gzero:c}
+% \section{Couting entries in floating point arrays}
+%
+% \begin{function}[EXP, added = 2018-05-05]{\fparray_count:N, \fparray_count:c}
% \begin{syntax}
-% \cs{fparray_gzero:N} \meta{fparray~var}
+% \cs{fparray_count:N} \meta{fparray~var}
% \end{syntax}
-% Sets all entries of the \meta{floating point array variable} to
-% $+0$. Assignments are always global.
+% Expands to the number of entries in the \meta{floating point array
+% variable}. This is performed in constant time.
% \end{function}
%
+% \section{Using a single entry}
+%
% \begin{function}[EXP, added = 2018-05-05]
% {
-% \fparray_item:Nn, \fparray_item:cn
+% \fparray_item:Nn, \fparray_item:cn,
% \fparray_item_to_tl:Nn, \fparray_item_to_tl:cn
% }
% \begin{syntax}
@@ -106,8 +112,21 @@
% Applies \cs{fp_use:N} or \cs{fp_to_tl:N} (respectively) to the
% floating point entry stored at the (integer expression)
% \meta{position} in the \meta{floating point array variable}. If the
-% \meta{position} is not between $1$ and the \cs{fparray_count:N}, an
-% error occurs.
+% \meta{position} is not between $1$ and the
+% \cs{fparray_count:N} \meta{fparray~var}, an error occurs.
+% \end{function}
+%
+% \section{Floating point array conditional}
+%
+% \begin{function}[pTF, added = 2024-03-31]
+% {\fparray_if_exist:N, \fparray_if_exist:c}
+% \begin{syntax}
+% \cs{fparray_if_exist_p:N} \meta{fparray~var}
+% \cs{fparray_if_exist:NTF} \meta{fparray~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests whether the \meta{fparray~var} is currently defined. This
+% does not check that the \meta{fparray~var} really is a floating
+% point array variable.
% \end{function}
%
% \end{documentation}
@@ -389,6 +408,16 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[pTF]{\fparray_if_exist:N, \fparray_if_exist:c}
+% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn \fparray_if_exist:N \cs_if_exist:N
+ { TF , T , F , p }
+\prg_new_eq_conditional:NNn \fparray_if_exist:c \cs_if_exist:c
+ { TF , T , F , p }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</package>
% \end{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/required/l3kernel/l3int.dtx
index 9fa2a547ff..a1c9458436 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/required/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/required/l3kernel/l3intarray.dtx
index 5704a2ab75..bbc41c0cdb 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/required/l3kernel/l3intarray.dtx
@@ -44,14 +44,12 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
% \begin{documentation}
%
-% \section{\pkg{l3intarray} documentation}
-%
% For applications requiring heavy use of integers, this module provides
% arrays which can be accessed in constant time (contrast \pkg{l3seq},
% where access time is linear). These arrays have several important
@@ -66,6 +64,8 @@
% The use of \texttt{intarray} data is therefore recommended for cases where
% the need for fast access is of paramount importance.
%
+% \section{Creating and initialising integer array variables}
+%
% \begin{function}[added = 2018-03-29]{\intarray_new:Nn, \intarray_new:cn}
% \begin{syntax}
% \cs{intarray_new:Nn} \meta{intarray~var} \Arg{size}
@@ -76,14 +76,27 @@
% always global.
% \end{function}
%
-% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
+% \begin{function}[added = 2018-05-04]
+% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
% \begin{syntax}
-% \cs{intarray_count:N} \meta{intarray~var}
+% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist}
% \end{syntax}
-% Expands to the number of entries in the \meta{integer array variable}.
-% Contrarily to \cs{seq_count:N} this is performed in constant time.
+% Creates a new constant \meta{integer array variable} or raises an
+% error if the name is already taken. The \meta{integer array
+% variable} is set (globally) to contain as its items the results of
+% evaluating each \meta{integer expression} in the \meta{comma list}.
% \end{function}
%
+% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
+% \begin{syntax}
+% \cs{intarray_gzero:N} \meta{intarray~var}
+% \end{syntax}
+% Sets all entries of the \meta{integer array variable} to zero.
+% Assignments are always global.
+% \end{function}
+%
+% \section{Adding data to integer arrays}
+%
% \begin{function}[added = 2018-03-29]{\intarray_gset:Nnn, \intarray_gset:cnn}
% \begin{syntax}
% \cs{intarray_gset:Nnn} \meta{intarray~var} \Arg{position} \Arg{value}
@@ -96,25 +109,18 @@
% global.
% \end{function}
%
-% \begin{function}[added = 2018-05-04]
-% {\intarray_const_from_clist:Nn, \intarray_const_from_clist:cn}
-% \begin{syntax}
-% \cs{intarray_const_from_clist:Nn} \meta{intarray~var} \meta{int expr clist}
-% \end{syntax}
-% Creates a new constant \meta{integer array variable} or raises an
-% error if the name is already taken. The \meta{integer array
-% variable} is set (globally) to contain as its items the results of
-% evaluating each \meta{integer expression} in the \meta{comma list}.
-% \end{function}
+% \section{Couting entries in integer arrays}
%
-% \begin{function}[added = 2018-05-04]{\intarray_gzero:N, \intarray_gzero:c}
+% \begin{function}[EXP, added = 2018-03-29]{\intarray_count:N, \intarray_count:c}
% \begin{syntax}
-% \cs{intarray_gzero:N} \meta{intarray~var}
+% \cs{intarray_count:N} \meta{intarray~var}
% \end{syntax}
-% Sets all entries of the \meta{integer array variable} to zero.
-% Assignments are always global.
+% Expands to the number of entries in the \meta{integer array variable}.
+% Contrarily to \cs{seq_count:N} this is performed in constant time.
% \end{function}
%
+% \section{Using a single entry}
+%
% \begin{function}[EXP, added = 2018-03-29]{\intarray_item:Nn, \intarray_item:cn}
% \begin{syntax}
% \cs{intarray_item:Nn} \meta{intarray~var} \Arg{position}
@@ -134,6 +140,21 @@
% \meta{integer array} is empty, produce an error.
% \end{function}
%
+% \section{Integer array conditional}
+%
+% \begin{function}[pTF, added = 2024-03-31]
+% {\intarray_if_exist:N, \intarray_if_exist:c}
+% \begin{syntax}
+% \cs{intarray_if_exist_p:N} \meta{intarray~var}
+% \cs{intarray_if_exist:NTF} \meta{intarray~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests whether the \meta{intarray~var} is currently defined. This
+% does not check that the \meta{intarray~var} really is an integer
+% array variable.
+% \end{function}
+%
+% \section{Viewing integer arrays}
+%
% \begin{function}[added = 2018-05-04]
% {\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
% \begin{syntax}
@@ -144,7 +165,7 @@
% terminal or writes them in the log file.
% \end{function}
%
-% \subsection{Implementation notes}
+% \section{Implementation notes}
%
% It is a wrapper around the \tn{fontdimen} primitive, used to store
% arrays of integers (with a restricted range: absolute value at most
@@ -912,6 +933,16 @@ luacmd('@@_gset_range:w', function()
%
% \subsection{Common parts}
%
+% \begin{macro}[pTF]{\intarray_if_exist:N, \intarray_if_exist:c}
+% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
+% \begin{macrocode}
+\prg_new_eq_conditional:NNn \intarray_if_exist:N \cs_if_exist:N
+ { TF , T , F , p }
+\prg_new_eq_conditional:NNn \intarray_if_exist:c \cs_if_exist:c
+ { TF , T , F , p }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c}
% Convert the list to a comma list (with spaces after each comma)
% \begin{macrocode}
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/required/l3kernel/l3kernel-functions.dtx
index 480425d730..1706bb594a 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/required/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -333,7 +333,21 @@
% higher-level
% functions which have already fully expanded the \meta{file name} and which
% need to perform multiple open or close operations. See for example the
-% implementation of \cs{file_get_full_name:nN},
+% implementation of \cs{ior_shell_open:Nn}.
+% \end{function}
+%
+% \begin{function}{\__kernel_iow_open:Nn, \__kernel_iow_open:No}
+% \begin{syntax}
+% \cs{__kernel_iow_open:Nn} \meta{stream} \Arg{file name}
+% \end{syntax}
+% This function has identical syntax to the public version. However,
+% is does not take precautions against active characters in the
+% \meta{file name}, and it does not attempt to add a \meta{path} to
+% the \meta{file name}: it is therefore intended to be used by
+% higher-level
+% functions which have already fully expanded the \meta{file name} and which
+% need to perform multiple open or close operations. See for example the
+% implementation of \cs{iow_shell_open:Nn}.
% \end{function}
%
% \begin{function}{\__kernel_iow_with:Nnn}
@@ -367,6 +381,17 @@
% |1+2| then this logs |> 1+2=3.|
% \end{function}
%
+% \begin{function}[EXP]{\__kernel_pdf_object_id:n, \__kernel_pdf_object_id_indexed:nn}
+% \begin{syntax}
+% \cs{__kernel_pdf_object_id:n} \Arg{object}
+% \cs{__kernel_pdf_object_id_indexed:nn} \Arg{class} \Arg{number}
+% \end{syntax}
+% Expands to the ID of \meta{object} (or object of \meta{number} within
+% the \meta{class}), in for example page resource allocation. Depending on
+% the backend, the result may be the same as
+% \cs{pdf_object_id:n}/\cs{pdf_object_id_indexed:nn}.
+% \end{function}
+%
% \begin{variable}{\g__kernel_prg_map_int}
% This integer is used by non-expandable mapping functions to track
% the level of nesting in force. The functions
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/required/l3kernel/l3keys.dtx
index 5ea436176f..a1d2c01169 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/required/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/required/l3kernel/l3legacy.dtx
index bd56f1ed3a..ed7dadf222 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/required/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/required/l3kernel/l3luatex.dtx
index 3d177f6345..f0107d465b 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/required/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/required/l3kernel/l3msg.dtx
index 3acae8d111..ab4d882dcb 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/required/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/required/l3kernel/l3names.dtx
index 3e78d86acf..468481c28c 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/required/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/required/l3kernel/l3news.pdf
index 87f01af5a7..aa26629126 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/required/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news.tex b/macros/latex/required/l3kernel/l3news.tex
index b8f0de5c72..b8f0de5c72 100644
--- a/macros/latex/contrib/l3kernel/l3news.tex
+++ b/macros/latex/required/l3kernel/l3news.tex
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/required/l3kernel/l3news01.pdf
index 5a6d4af9e2..2eb7750066 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/required/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.tex b/macros/latex/required/l3kernel/l3news01.tex
index b4841ac24b..b4841ac24b 100644
--- a/macros/latex/contrib/l3kernel/l3news01.tex
+++ b/macros/latex/required/l3kernel/l3news01.tex
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/required/l3kernel/l3news02.pdf
index 8cda69f971..832e6f583d 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/required/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.tex b/macros/latex/required/l3kernel/l3news02.tex
index a3d5467c8e..a3d5467c8e 100644
--- a/macros/latex/contrib/l3kernel/l3news02.tex
+++ b/macros/latex/required/l3kernel/l3news02.tex
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/required/l3kernel/l3news03.pdf
index f16bb58750..dd6b7e7e9a 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/required/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.tex b/macros/latex/required/l3kernel/l3news03.tex
index e3e245f051..e3e245f051 100644
--- a/macros/latex/contrib/l3kernel/l3news03.tex
+++ b/macros/latex/required/l3kernel/l3news03.tex
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/required/l3kernel/l3news04.pdf
index 52c33e516a..1d20917d2b 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/required/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.tex b/macros/latex/required/l3kernel/l3news04.tex
index a0fc82f3de..a0fc82f3de 100644
--- a/macros/latex/contrib/l3kernel/l3news04.tex
+++ b/macros/latex/required/l3kernel/l3news04.tex
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/required/l3kernel/l3news05.pdf
index 1f6bda9687..36c813db4d 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/required/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.tex b/macros/latex/required/l3kernel/l3news05.tex
index 43ec2a8d19..43ec2a8d19 100644
--- a/macros/latex/contrib/l3kernel/l3news05.tex
+++ b/macros/latex/required/l3kernel/l3news05.tex
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/required/l3kernel/l3news06.pdf
index cd65bce3a6..f0e99f4727 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/required/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.tex b/macros/latex/required/l3kernel/l3news06.tex
index 63ee6c7c75..63ee6c7c75 100644
--- a/macros/latex/contrib/l3kernel/l3news06.tex
+++ b/macros/latex/required/l3kernel/l3news06.tex
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/required/l3kernel/l3news07.pdf
index 721252a9b0..b9cbba576a 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/required/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.tex b/macros/latex/required/l3kernel/l3news07.tex
index 2b433da4c4..2b433da4c4 100644
--- a/macros/latex/contrib/l3kernel/l3news07.tex
+++ b/macros/latex/required/l3kernel/l3news07.tex
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/required/l3kernel/l3news08.pdf
index 855db5bdc5..c812ae5e67 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/required/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.tex b/macros/latex/required/l3kernel/l3news08.tex
index 17107f8360..17107f8360 100644
--- a/macros/latex/contrib/l3kernel/l3news08.tex
+++ b/macros/latex/required/l3kernel/l3news08.tex
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/required/l3kernel/l3news09.pdf
index 5dc3a3b9ad..eff6e741fe 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/required/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.tex b/macros/latex/required/l3kernel/l3news09.tex
index 55ed700a2c..55ed700a2c 100644
--- a/macros/latex/contrib/l3kernel/l3news09.tex
+++ b/macros/latex/required/l3kernel/l3news09.tex
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/required/l3kernel/l3news10.pdf
index e921d2c81b..4ac02d4684 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/required/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.tex b/macros/latex/required/l3kernel/l3news10.tex
index 88291e848f..88291e848f 100644
--- a/macros/latex/contrib/l3kernel/l3news10.tex
+++ b/macros/latex/required/l3kernel/l3news10.tex
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/required/l3kernel/l3news11.pdf
index a4866d55e7..27011b2c4b 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/required/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.tex b/macros/latex/required/l3kernel/l3news11.tex
index a1fd8a129c..a1fd8a129c 100644
--- a/macros/latex/contrib/l3kernel/l3news11.tex
+++ b/macros/latex/required/l3kernel/l3news11.tex
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/required/l3kernel/l3news12.pdf
index 4b6072bca1..86b5ffa063 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/required/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.tex b/macros/latex/required/l3kernel/l3news12.tex
index f41e4b3690..f41e4b3690 100644
--- a/macros/latex/contrib/l3kernel/l3news12.tex
+++ b/macros/latex/required/l3kernel/l3news12.tex
diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/required/l3kernel/l3pdf.dtx
index 7ffd0c1c05..b0b17f2690 100644
--- a/macros/latex/contrib/l3kernel/l3pdf.dtx
+++ b/macros/latex/required/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -51,6 +51,11 @@
%
% \section{Objects}
%
+% \subsection{Named objects}
+%
+% An \meta{object} name should fully expand to tokens suitable for use in a
+% label-like context.
+%
% \begin{function}[added = 2022-08-23]{\pdf_object_new:n}
% \begin{syntax}
% \cs{pdf_object_new:n} \Arg{object}
@@ -62,7 +67,7 @@
% \begin{function}[added = 2022-08-23]
% {\pdf_object_write:nnn, \pdf_object_write:nne}
% \begin{syntax}
-% \cs{pdf_object_write:nn} \Arg{object} \Arg{type} \Arg{content}
+% \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
@@ -83,9 +88,71 @@
% \cs{pdf_object_ref:n} \Arg{object}
% \end{syntax}
% Inserts the appropriate information to reference the \meta{object}
-% in for example page resource allocation
+% in for example page resource allocation. If the \meta{object} does
+% not exist then the function expands to a reference to object zero;
+% no PDF indirect object ever has this number, so this is a marker for
+% error.
+% \end{function}
+%
+% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n}
+% \begin{syntax}
+% \cs{pdf_object_if_exist_p:n} \Arg{object}
+% \cs{pdf_object_if_exist:nTF} \Arg{object} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Tests whether an object with name \Arg{object} has been defined.
+% \end{function}
+%
+% \subsection{Indexed objects}
+%
+% Objects can also be created using a pair of \meta{class} and \emph{index};
+% the \meta{class} argument should expand to character tokens, whilst the
+% \meta{index} is an \meta{int expr} and starts at $1$. For large
+% families of objects, this approach is more efficient than using
+% individual names.
+%
+% \begin{function}[added = 2024-04-01]{\pdf_object_new_indexed:nn}
+% \begin{syntax}
+% \cs{pdf_object_new_indexed:nn} \Arg{class} \Arg{index}
+% \end{syntax}
+% Declares a PDF object of \meta{class} and \meta{index}. The object may be
+% referenced from this point on, and written later using
+% \cs{pdf_object_write_indexed:nnnn}.
% \end{function}
%
+% \begin{function}[added = 2024-04-01]
+% {\pdf_object_write_indexed:nnnn, \pdf_object_write_indexed:nnne}
+% \begin{syntax}
+% \cs{pdf_object_write_indexed:nnnn} \Arg{class} \Arg{index} \Arg{type} \Arg{content}
+% \end{syntax}
+% Writes the \meta{content} as content of the object of \meta{class} and
+% \meta{index}. Depending on the
+% \meta{type} declared for the object, the format required for the
+% \meta{content} will vary
+% \begin{itemize}
+% \item[\texttt{array}] A space-separated list of values
+% \item[\texttt{dict}] Key--value pairs in the form
+% \texttt{/\meta{key} \meta{value}}
+% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
+% \meta{file content}
+% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
+% and \meta{stream contents}
+% \end{itemize}
+% \end{function}
+%
+% \begin{function}[EXP, added = 2024-04-01]{\pdf_object_ref_indexed:nn}
+% \begin{syntax}
+% \cs{pdf_object_ref_indexed:nn} \Arg{class} \Arg{index}
+% \end{syntax}
+% Inserts the appropriate information to reference the object of \meta{class}
+% and \meta{index} in for example page resource allocation. If the
+% \meta{class}/\meta{index} combination does
+% not exist then the function expands to a reference to object zero;
+% no PDF indirect object ever has this number, so this is a marker for
+% error.
+% \end{function}
+%
+% \subsection{General functions}
+%
% \begin{function}[added = 2021-02-10]
% {\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne}
% \begin{syntax}
@@ -119,14 +186,6 @@
% Inserts the appropriate information to reference the \meta{pageobject}.
% \end{function}
%
-% \begin{function}[EXP, pTF, added = 2020-05-15]{\pdf_object_if_exist:n}
-% \begin{syntax}
-% \cs{pdf_object_if_exist_p:n} \Arg{object}
-% \cs{pdf_object_if_exist:nTF} \Arg{object}
-% \end{syntax}
-% Tests whether an object with name \Arg{object} has been defined.
-% \end{function}
-%
% \section{Version}
%
% \begin{function}[pTF, EXP, added = 2021-02-10]{\pdf_version_compare:Nn}
@@ -267,6 +326,10 @@
%<@@=pdf>
% \end{macrocode}
%
+% \begin{macrocode}
+%<*tex>
+% \end{macrocode}
+%
% \begin{variable}{\s_@@_stop}
% Internal scan marks.
% \begin{macrocode}
@@ -311,53 +374,286 @@
%
% \subsection{Objects}
%
+% \begin{variable}{\g_@@_backend_object_int}
+% For returning object numbers.
+% \begin{macrocode}
+\int_new:N \g_@@_backend_object_int
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macro}{\pdf_object_new:n}
% \begin{macro}
% {\pdf_object_write:nnn, \pdf_object_write:nne, \pdf_object_write:nnx}
% \begin{macro}{\pdf_object_ref:n}
-% \begin{macro}
-% {
-% \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne,
-% \pdf_object_unnamed_write:nx
-% }
-% \begin{macro}{\pdf_object_ref_last:}
-% \begin{macro}[pTF]{\pdf_object_if_exist:n}
+% \begin{macro}{\__kernel_pdf_object_id:n}
% Simple to do: all objects create a constant |int| so it is not a
% backend-specific name.
% \begin{macrocode}
\cs_new_protected:Npn \pdf_object_new:n #1
{
- \@@_backend_object_new:n {#1}
- \cs_new_eq:cc
- { c_@@_backend_object_ \tl_to_str:n {#1} _int }
- { c_@@_object_ \tl_to_str:n {#1} _int }
+ \@@_backend_object_new:
+ \@@_object_record:nN {#1} \g_@@_backend_object_int
}
\cs_new_protected:Npn \pdf_object_write:nnn #1#2#3
{
- \@@_backend_object_write:nnn {#1} {#2} {#3}
+ \exp_args:Ne \@@_backend_object_write:nnn
+ { \@@_object_retrieve:n {#1} } {#2} {#3}
\bool_gset_true:N \g_@@_init_bool
}
\cs_generate_variant:Nn \pdf_object_write:nnn { nne , nnx }
-\cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} }
-\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2
+\cs_new:Npn \pdf_object_ref:n #1
{
- \@@_backend_object_now:nn {#1} {#2}
- \bool_gset_true:N \g_@@_init_bool
+ \exp_args:Ne \@@_backend_object_ref:n
+ { \@@_object_retrieve:n {#1} }
}
-\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx }
-\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: }
+\cs_new:Npn \__kernel_pdf_object_id:n #1
+ {
+ \exp_args:Ne \@@_backend_object_id:n
+ { \@@_object_retrieve:n {#1} }
+ }
+%</tex>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}{\@@_object_record:nN}
+% \begin{macro}[EXP]{\@@_object_retrieve:n}
+% \begin{macro}{ltx.pdf.object_id}
+% Object mappings are tracked in Lua for \LuaTeX{} as this makes retrieving
+% them much easier; as a result, there is a split in approaches. In Lua we
+% store values in a table indexed by name. The Lua function here is set up
+% to deal with both named and indexed objects: fits the Lua idiom well.
+% \begin{macrocode}
+%<*lua>
+
+local scan_int = token.scan_int
+local scan_string = token.scan_string
+local cprint = tex.cprint
+
+local @@_objects_named = {}
+local @@_objects_indexed = {}
+
+luacmd('@@_object_record:nN', function()
+ local name = scan_string()
+ local n = scan_int()
+ @@_objects_named[name] = n
+end,'protected','global')
+
+local function object_id(name,index)
+ if index then
+ return @@_objects_indexed[name][index] or 0
+ else
+ return @@_objects_named[name] or 0
+ end
+end
+
+luacmd('@@_object_retrieve:n', function()
+ local name = scan_string()
+ return cprint(12,tostring(object_id(name)))
+end,'global')
+
+ltx.pdf = ltx.pdf or {}
+ltx.pdf.object_id = object_id
+
+%</lua>
+% \end{macrocode}
+% Whereas in \TeX{} we use integer constants.
+% \begin{macrocode}
+%<*tex>
+\sys_if_engine_luatex:F
+ {
+ \cs_new_protected:Npn \@@_object_record:nN #1#2
+ {
+ \int_const:cn
+ { c_@@_object_ #1 _int } {#2}
+ }
+ \cs_new:Npn \@@_object_retrieve:n #1
+ {
+ \int_if_exist:cTF { c_@@_object_ #1 _int }
+ {
+ \int_use:c
+ { c_@@_object_ #1 _int }
+ }
+ { 0 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{macro}[pTF,EXP]{\pdf_object_if_exist:n}
+% \begin{macrocode}
\prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF }
{
- \int_if_exist:cTF { c_@@_object_ \tl_to_str:n {#1} _int }
- \prg_return_true:
+ \int_compare:nNnTF { \@@_object_retrieve:n {#1} } = 0
\prg_return_false:
+ \prg_return_true:
}
% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}{\pdf_object_new_indexed:nn}
+% \begin{macro}{\pdf_object_write_indexed:nnnn, \pdf_object_write_indexed:nnne}
+% \begin{macro}[EXP]{\pdf_object_ref_indexed:nn}
+% \begin{macro}[EXP]{\__kernel_pdf_object_id_indexed:nn}
+% Again we split between the common code and the macro- or Lua-based
+% implementation. To make life easier for the Lua route, all of the
+% potential expressions are expanded to braced numbers.
+% \begin{macrocode}
+\cs_new_protected:Npn \pdf_object_new_indexed:nn #1#2
+ {
+ \@@_backend_object_new:
+ \@@_object_record:neN {#1}
+ { \int_eval:n {#2} } \g_@@_backend_object_int
+ }
+\cs_new_protected:Npn \pdf_object_write_indexed:nnnn #1#2#3#4
+ {
+ \exp_args:Ne \@@_backend_object_write:nnn
+ { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } } {#3} {#4}
+ \bool_gset_true:N \g_@@_init_bool
+ }
+\cs_generate_variant:Nn \pdf_object_write_indexed:nnnn { nnne }
+\cs_new:Npn \pdf_object_ref_indexed:nn #1#2
+ {
+ \exp_args:Ne \@@_backend_object_ref:n
+ { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } }
+ }
+\cs_new:Npn \__kernel_pdf_object_id_indexed:nn #1#2
+ {
+ \exp_args:Ne \@@_backend_object_id:n
+ { \@@_object_retrieve:ne {#1} { \int_eval:n {#2} } }
+ }
+%</tex>
+% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
+% \begin{macro}{\@@_object_record:nnN, \@@_object_record:neN}
+% \begin{macro}[EXP]{\@@_object_retrieve:nn}
+% \begin{macro}{\@@_object_record:NnN}
+% \begin{macro}[EXP]{\@@_object_retrieve:Nn}
+% Again we split for Lua: the same idea as above but with nested tables.
+% As we've arranged above that the \TeX{} code passes a braced number,
+% we can use |tonumber(scan_string())| rather than |scan_int()|
+% for the index.
+% \begin{macrocode}
+%<*lua>
+
+luacmd('@@_object_record:nnN', function()
+ local name = scan_string()
+ local index = tonumber(scan_string())
+ local n = scan_int()
+ @@_objects_indexed[name] = @@_objects_indexed[name] or {}
+ @@_objects_indexed[name][index] = n
+end,'protected','global')
+
+luacmd('@@_object_retrieve:nn', function()
+ local name = scan_string()
+ local index = tonumber(scan_string())
+ return cprint(12,tostring(object_id(name,index)))
+end,'global')
+
+%</lua>
+% \end{macrocode}
+% The non-Lua approach is to divide the range into blocks, and store in integer
+% arrays that can simulate dynamic assignment.
+% \begin{macrocode}
+%<*tex>
+\sys_if_engine_luatex:F
+ {
+ \cs_new_protected:Npn \@@_object_record:nnN #1#2#3
+ {
+ \use:e
+ {
+ \@@_object_record:NnN
+ \@@_object_index_split:nn {#1} {#2}
+ \exp_not:N #3
+ }
+ }
+ \cs_new_protected:Npn \@@_object_record:NnN #1#2#3
+ {
+ \intarray_if_exist:NF #1
+ { \intarray_new:Nn #1 \c_@@_object_block_size_int }
+ \intarray_gset:Nnn #1 {#2} #3
+ }
+ \cs_new:Npn \@@_object_retrieve:nn #1#2
+ {
+ \use:e
+ {
+ \exp_not:N \@@_object_retrieve:Nn
+ \@@_object_index_split:nn {#1} {#2}
+ }
+ }
+ \cs_new:Npn \@@_object_retrieve:Nn #1#2
+ { \intarray_item:Nn #1 {#2} }
+% \end{macrocode}
+% As we want blocks to start from one, and within the block for the top value
+% to be \enquote{in} the block, we do a little bit of manipulation. By shifting
+% down by one, we keep the values \enquote{in} the block, then we adjust the
+% block/index number to get back on track.
+% \begin{macrocode}
+ \cs_new:Npn \@@_object_index_split:nn #1#2
+ {
+ \exp_not:c
+ {
+ g_@@_object_ #1 _
+ \int_eval:n
+ {
+ \int_div_truncate:nn { #2 - 1 }
+ \c_@@_object_block_size_int + 1
+ }
+ _intarray
+ }
+ {
+ \int_eval:n
+ { \int_mod:nn { #2 - 1 } \c_@@_object_block_size_int + 1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \begin{variable}{\c_@@_object_block_size_int}
+% Sets the block size used for managing indexed objects.
+% \begin{macrocode}
+ \int_const:Nn \c_@@_object_block_size_int { 10000 }
+ }
+% \end{macrocode}
+% \end{variable}
+% \begin{macro}{\@@_object_record:neN}
+% \begin{macro}[EXP]{\@@_object_retrieve:ne}
+% Common variants.
+% \begin{macrocode}
+\cs_generate_variant:Nn \@@_object_record:nnN { ne }
+\cs_generate_variant:Nn \@@_object_retrieve:nn { ne }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+% {
+% \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne,
+% \pdf_object_unnamed_write:nx
+% }
+% No tracking needed here.
+% \begin{macrocode}
+\cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2
+ {
+ \exp_args:Ne \@@_backend_object_now:nn {#1} {#2}
+ \bool_gset_true:N \g_@@_init_bool
+ }
+\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\pdf_object_ref_last:}
+% A one-step wrapper for consistency.
+% \begin{macrocode}
+\cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: }
+% \end{macrocode}
% \end{macro}
%
% \begin{macro}{\pdf_pageobject_ref:n}
@@ -523,6 +819,10 @@
% \end{macrocode}
%
% \begin{macrocode}
+%</tex>
+% \end{macrocode}
+%
+% \begin{macrocode}
%</package>
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/required/l3kernel/l3prefixes.csv
index 54fb41bdeb..54fb41bdeb 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.csv
+++ b/macros/latex/required/l3kernel/l3prefixes.csv
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/required/l3kernel/l3prefixes.pdf
index 9b2e9b407e..0506709020 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/required/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.tex b/macros/latex/required/l3kernel/l3prefixes.tex
index 6c7cf24244..6c7cf24244 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.tex
+++ b/macros/latex/required/l3kernel/l3prefixes.tex
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/required/l3kernel/l3prg.dtx
index 8bbdd6a587..ea76955d82 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/required/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/required/l3kernel/l3prop.dtx
index 878b9eb758..6d8054e956 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/required/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -299,15 +299,15 @@
% codes are ignored.
% \end{function}
%
-% \begin{function}
+% \begin{function}[added = 2024-03-30]
% {
-% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
-% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
-% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
-% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+% \prop_put_if_not_in:Nnn, \prop_put_if_not_in:NVn, \prop_put_if_not_in:NnV,
+% \prop_put_if_not_in:cnn, \prop_put_if_not_in:cVn, \prop_put_if_not_in:cnV,
+% \prop_gput_if_not_in:Nnn, \prop_gput_if_not_in:NVn, \prop_gput_if_not_in:NnV,
+% \prop_gput_if_not_in:cnn, \prop_gput_if_not_in:cVn, \prop_gput_if_not_in:cnV
% }
% \begin{syntax}
-% \cs{prop_put_if_new:Nnn} \meta{property list} \Arg{key} \Arg{value}
+% \cs{prop_put_if_not_in:Nnn} \meta{property list} \Arg{key} \Arg{value}
% \end{syntax}
% If the \meta{key} is present in the \meta{property list} then no
% action is taken. Otherwise, a new entry is added as described for
@@ -1358,7 +1358,7 @@
% in the linked case. If |#5| is |#3| itself we have to be careful
% not to lose the data, and we even take the opportunity to skip the
% copying step completely. To keep the correct version of the
-% duplicate keys we use the code underlying \cs{prop_put_if_new:Nnn},
+% duplicate keys we use the code underlying \cs{prop_put_if_not_in:Nnn},
% which involves passing \cs{use_none:nnn} to the auxiliary instead of
% nothing.
% There is no need to check for the case where |#3| is equal to~|#4|
@@ -1940,10 +1940,10 @@
% }
% \begin{macro}[tested = m3prop002]
% {
-% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
-% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
-% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
-% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+% \prop_put_if_not_in:Nnn, \prop_put_if_not_in:NVn, \prop_put_if_not_in:NnV,
+% \prop_put_if_not_in:cnn, \prop_put_if_not_in:cVn, \prop_put_if_not_in:cnV,
+% \prop_gput_if_not_in:Nnn, \prop_gput_if_not_in:NVn, \prop_gput_if_not_in:NnV,
+% \prop_gput_if_not_in:cnn, \prop_gput_if_not_in:cVn, \prop_gput_if_not_in:cnV
% }
% \begin{macro}[tested = m3prop002]
% {
@@ -1965,17 +1965,17 @@
% auxiliary to skip this checking step and avoid getting multiple
% error messages for the same error.
% The \meta{code} (empty for |put| and \cs{use_none:nnn} for
-% |put_if_new|) is placed before the assignment in cases where the key
+% |put_if_not_in|) is placed before the assignment in cases where the key
% is already present, in order to suppress the assignment in the
-% |put_if_new| case.
+% |put_if_not_in| case.
% \begin{macrocode}
\cs_new_protected:Npn \prop_put:Nnn
{ \@@_put:nNNnn { } \cs_set_nopar:Npe }
\cs_new_protected:Npn \prop_gput:Nnn
{ \@@_put:nNNnn { } \cs_gset_nopar:Npe }
-\cs_new_protected:Npn \prop_put_if_new:Nnn
+\cs_new_protected:Npn \prop_put_if_not_in:Nnn
{ \@@_put:nNNnn \use_none:nnn \cs_set_nopar:Npe }
-\cs_new_protected:Npn \prop_gput_if_new:Nnn
+\cs_new_protected:Npn \prop_gput_if_not_in:Nnn
{ \@@_put:nNNnn \use_none:nnn \cs_gset_nopar:Npe }
\cs_generate_variant:Nn \prop_put:Nnn
{
@@ -2005,10 +2005,10 @@
}
\cs_generate_variant:Nn \prop_gput:Nnn
{ cno , co , coo , cnx , cVx , cxV , cxx }
-\cs_generate_variant:Nn \prop_put_if_new:Nnn
- { NnV , NV , cnV , cV }
-\cs_generate_variant:Nn \prop_gput_if_new:Nnn
- { NnV , NV , cnV , cV }
+\cs_generate_variant:Nn \prop_put_if_not_in:Nnn
+ { NnV , NV , c , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_not_in:Nnn
+ { NnV , NV , c , cnV , cV }
% \end{macrocode}
% Since the true branch of \cs{@@_split:NnTFn} is used as the
% replacement text of an internal macro, and since the \meta{key} and
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/required/l3kernel/l3quark.dtx
index 000063bc00..6dba950462 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/required/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/required/l3kernel/l3regex.dtx
index 395be76907..ce85b56262 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/required/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/required/l3kernel/l3seq.dtx
index 5334e8fd88..6be32f7a83 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/required/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/required/l3kernel/l3skip.dtx
index 1839c8a2e5..a3d9256223 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/required/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/required/l3kernel/l3sort.dtx
index 818f605e07..81a025b474 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/required/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/required/l3kernel/l3str-convert.dtx
index be850b3109..75dbdd095b 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/required/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/required/l3kernel/l3str.dtx
index 88ad33c74b..efc24fe8ea 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/required/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/required/l3kernel/l3styleguide.pdf
index 322b032a67..8b2f592339 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/required/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/required/l3kernel/l3styleguide.tex
index a2ffe8d770..da169cd8b1 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/required/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/required/l3kernel/l3syntax-changes.pdf
index 2a701d8ec5..1f2f4ca513 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/required/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/required/l3kernel/l3syntax-changes.tex
index 7e124576c7..85f83bf0e3 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/required/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/required/l3kernel/l3sys.dtx
index feec1232fd..085b5f2c97 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/required/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -333,7 +333,7 @@
% not directly available within the \TeX{} run. Note that if restricted
% shell escape is disabled, no results can be obtained.
%
-% \begin{function}[added = 2024-03-08]
+% \begin{function}[added = 2024-03-08, updated = 2024-04-08]
% {\sys_get_query:nN, \sys_get_query:nnN, \sys_get_query:nnnN}
% \begin{syntax}
% \cs{sys_get_query:nN} \Arg{cmd} \Arg{tl var}
@@ -357,6 +357,14 @@
% The \meta{spec} and \meta{options}, if given, are expanded fully
% before passing to the underlying script.
%
+% Spaces in the output are stored as active tokens, allowing them to be
+% replaced by for example a visible space easily. Other non-letter
+% characters in the ASCII range are set to category code~12. The category
+% codes for characters out of the ASCII range are left unchanged: typically
+% this will mean that with an 8-bit engine, accented values can be typeset
+% directly whilst in Unicode engines, standard category code setup will
+% apply.
+%
% If more than one line of text is returned by the \meta{cmd}, these will be
% separated by character~13 (|^^M|) tokens of category code~12. In most
% cases, \cs{sys_split_query:nnnN} should be preferred when multi-line
@@ -1161,7 +1169,7 @@ end
{ \sys_get_query:nnnN {#1} { } {#2} #3 }
\cs_new_protected:Npn \sys_get_query:nnnN #1#2#3#4
{
- \str_clear:N #4
+ \tl_clear:N #4
\@@_get_query_auxi:neeN {#1} {#2} {#3} #4
}
\cs_new:Npn \@@_get_query_auxi:nnnN #1#2#3#4
@@ -1187,10 +1195,13 @@ end
\sys_get_shell:nnN
{ l3sys-query~#1 #2 #3 }
{
- \int_step_inline:nnn { 0 } { `a - 1 }
+ \int_step_inline:nnn { 0 } { `A - 1 }
+ { \char_set_catcode_other:n {##1} }
+ \int_step_inline:nnn { `Z + 1 } { `a - 1 }
{ \char_set_catcode_other:n {##1} }
- \int_step_inline:nnn { `Z + 1 } { 127 }
+ \int_step_inline:nnn { `z + 1 } { 127 }
{ \char_set_catcode_other:n {##1} }
+ \char_set_catcode_active:n { `\ }
\tex_endlinechar:D 13 \scan_stop:
}
\l_@@_tmp_tl
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/required/l3kernel/l3term-glossary.pdf
index 93def3980b..721513e885 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/required/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/required/l3kernel/l3term-glossary.tex
index 5db9e83a45..d1b4b0082c 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/required/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/required/l3kernel/l3text-case.dtx
index 0547db28b1..5010114fb4 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/required/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/required/l3kernel/l3text-map.dtx
index d364c32199..213d8281a9 100644
--- a/macros/latex/contrib/l3kernel/l3text-map.dtx
+++ b/macros/latex/required/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/required/l3kernel/l3text-purify.dtx
index 8f92c1eae9..a713cd6e40 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/required/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/required/l3kernel/l3text.dtx
index 5feff565b9..56c9a5533c 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/required/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/required/l3kernel/l3tl-analysis.dtx
index d965050c76..a4141dcfe4 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/required/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-build.dtx b/macros/latex/required/l3kernel/l3tl-build.dtx
index 175b7bc24f..859dd5025c 100644
--- a/macros/latex/contrib/l3kernel/l3tl-build.dtx
+++ b/macros/latex/required/l3kernel/l3tl-build.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -73,7 +73,8 @@
% \end{syntax}
% Clears the \meta{tl~var} and sets it up to support other
% \cs[no-index]{tl_build_\ldots{}} functions. Until \cs{tl_build_end:N}
-% \meta{tl~var} is called, applying any function from \pkg{l3tl} other
+% \meta{tl~var} or \cs{tl_build_gend:N} \meta{tl~var} is called,
+% applying any function from \pkg{l3tl} other
% than \cs[no-index]{tl_build_\ldots{}} will lead to incorrect
% results. The |begin| and |gbegin| functions must be used for local
% and global \meta{tl~var} respectively.
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/required/l3kernel/l3tl.dtx
index 0938e7cd5e..30e16636e5 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/required/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/required/l3kernel/l3token.dtx
index cd538ee6d0..a38860b548 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/required/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -2298,7 +2298,7 @@
% is not a primitive.
%
% For \LuaTeX{} we use a different implementation which just looks at the
-% command code for the token and compaes it to a list of non-primitives.
+% command code for the token and compares it to a list of non-primitives.
% Again, \tn{nullfont} is a special case because it is the only primitive
% with the normally non-primitive |set_font| command code.
%
@@ -2345,11 +2345,11 @@ do
[cmd'outer_call' or cmd'tolerant_call'] = true,
[cmd'long_outer_call' or cmd'tolerant_protected_call'] = true,
[cmd'assign_glue' or cmd'register_glue'] = index_not_nil,
- [cmd'assign_mu_glue' or cmd'register_mu_glue'] = index_not_nil,
+ [cmd'assign_mu_glue' or cmd'register_mu_glue' or cmd'register_muglue'] = index_not_nil,
[cmd'assign_toks' or cmd'register_toks'] = index_not_nil,
- [cmd'assign_int' or cmd'register_int'] = index_not_nil,
+ [cmd'assign_int' or cmd'register_int' or cmd'register_integer'] = index_not_nil,
[cmd'assign_attr' or cmd'register_attribute'] = true,
- [cmd'assign_dimen' or cmd'register_dimen'] = index_not_nil,
+ [cmd'assign_dimen' or cmd'register_dimen' or cmd'register_dimension'] = index_not_nil,
}
luacmd("@@_if_primitive_lua:N", function()
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/required/l3kernel/l3unicode.dtx
index cd552800b0..0ee6858f5b 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/required/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-03-14}
+% \date{Released 2024-04-11}
%
% \maketitle
%
@@ -82,7 +82,7 @@
% range, the generated character tokens will be active (category code
% $13$); for codepoints in the ASCII range, the given \meta{catcode}
% will be used. To allow the result of this function to be used
-% inside a expansion context, the result is protected by \cs{exp_not:n}.
+% inside an expansion context, the result is protected by \cs{exp_not:n}.
%
% \begin{texnote}
% Users of (u)p\TeX{} note that these engines are treated as $8$-bit in
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/required/l3kernel/source3.pdf
index c6a6396503..9dda7182f4 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/required/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/required/l3kernel/source3.tex
index c09d75767b..f0aaeb20c8 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/required/l3kernel/source3.tex
@@ -57,7 +57,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2024-03-14}
+\date{Released 2024-04-11}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/required/l3kernel/source3body.tex
index 8471296227..8471296227 100644
--- a/macros/latex/contrib/l3kernel/source3body.tex
+++ b/macros/latex/required/l3kernel/source3body.tex