diff options
Diffstat (limited to 'macros/latex/contrib')
148 files changed, 10074 insertions, 1828 deletions
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 Binary files differindex 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 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 2a60d8894f..14f666ba70 100644 --- a/macros/latex/contrib/easybook/easybook.dtx +++ b/macros/latex/contrib/easybook/easybook.dtx @@ -15,7 +15,7 @@ %<*class> \NeedsTeXFormat{LaTeX2e}[2021/11/15] \RequirePackage{l3keys2e} -\ProvidesExplClass{easybook}{2024/04/26}{2024bb} +\ProvidesExplClass{easybook}{2024/04/28}{2024bc} {Easily typesetting Chinese theses or books} \bool_new:N \l__eb_compile_draft_bool @@ -297,7 +297,7 @@ %<*package> \NeedsTeXFormat{LaTeX2e}[2021/11/15] \RequirePackage{l3keys2e,etoolbox} -\ProvidesExplPackage{easybase}{2024/04/26}{2024bb} +\ProvidesExplPackage{easybase}{2024/04/28}{2024bc} {Easily typesetting Chinese theses or books} \cs_generate_variant:Nn \dim_set:Nn { NV } @@ -1309,25 +1309,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 +1437,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, @@ -1716,12 +1734,17 @@ \cs_set:Npn \@starttoc #1 { \group_begin: + \makeatletter \file_if_exist_input:n { \jobname.#1 } \UseHookWithArguments{starttoc/after}{1}{#1} \boolfalse{@nobreak} \group_end: } -\AtEndDocument{\iow_now:Nn \@mainaux { \RemoveFromHook{starttoc/after}[aux] }} +\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 @@ -2504,7 +2527,7 @@ } %</package> %<*tcolorbox> -\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/26}{2024bb} +\ProvidesExplFile{eb-tcolorbox.cfg}{2024/04/28}{2024bc} {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 Binary files differindex b2ead2bd49..e2270fd55d 100644 --- a/macros/latex/contrib/easybook/easybook.pdf +++ b/macros/latex/contrib/easybook/easybook.pdf diff --git a/macros/latex/contrib/easybook/easybook.tex b/macros/latex/contrib/easybook/easybook.tex index 5bb0355843..20a5a1233a 100644 --- a/macros/latex/contrib/easybook/easybook.tex +++ b/macros/latex/contrib/easybook/easybook.tex @@ -23,8 +23,8 @@ name = easybook, color-scheme = blue, title = EASYBOOK使用手册, - version = v2024bb, - date = 2024/04/26, + version = v2024bc, + date = 2024/04/28, authors = 瞿毅, info = 简便地排版中文学位论文或书籍, email = toquyi@163.com, @@ -1090,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} 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 Binary files differindex c21ffd29a9..8739ca48ae 100644 --- a/macros/latex/contrib/fontscale/fontscale-manual.pdf +++ b/macros/latex/contrib/fontscale/fontscale-manual.pdf 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/jsonparse/README.md b/macros/latex/contrib/jsonparse/README.md index b8750b8a8f..69258570db 100644 --- a/macros/latex/contrib/jsonparse/README.md +++ b/macros/latex/contrib/jsonparse/README.md @@ -1,4 +1,6 @@ -![Version 0.8.2](https://img.shields.io/badge/version-0.8.2-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
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgBAAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FXYq7FXYq7
FXYq7FXYq7FXlf5z+Y7yZ7XyZpU7W9xqCG51a5jNHis1NFUEftSvt8h75hazNwig5elxWbKaflX5
8n1m2k0DW3C+ZdLUCZjsLqAbJcp416P4H50yzTZ+MUebDUYeE2OT0DMlx3Yq7FXYq7FXYq7FXYq7
FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FVsssUUbSSuscairOxAAHuThAJ
2CCQBZfO1jqDa3q+s+ZnJb9K3bi1J7WlufSgX/gV3zQ558UiXc4ocMQF+oWNy9xbajptwbLWrBvU
sb1eqk7Mjj9pHGzA5CEzE2GcoiQoplb/AJzebrudrC7EOmapEPjgSMFXH88RkMnJT+Gdp2R+V1Ma
P953X93L9jxva8tVpzYI8M9QOXv5/tbl88ebJa8tTlFf5OKf8RAzfx7PwD+EOgl2jnP8ZUv8XeZ/
+rpc/wDIxv65P8lh/mR+TD89n/ny+ba+b/NCkEapcVHjISPuOA6HD/MCjX5/58vmioPzC83wkUvy
48JEjb8StfxyuXZmA/w/e2x7U1A/i+5NrT82tejIFzb29wvcgNG33gkf8LmLPsXEeRIcqHbmUcwC
n9h+bejSkLe2s1qT1ZSJUHz+y3/C5hZexMg+kg/Y5+LtzGfqBj9rKdM8xaHqYH1G9imcivpg8ZP+
Aajfhmty6XJj+qJDs8OrxZPpkD+O5Mcx3IdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdi
rsVQmp6tp2mW5uL+4S3i7FjuT4Ko3Y/LLcWGeQ1EWWrNnhjFzNBgGufm0x5RaNb0HT6zcCp+axg/
rP0ZvNP2L1yH4D9bodT250xj4n9TzrzX5i1e8029ub67knaOGRkDNRQ3E04qPhXfwGZ+oxwwYJmA
AqJ+51+nyZM+eAmTK5D70LoWr6DZ6LY2z6jaxyRQRh0aaMEMVBaoLeOeWkPp6dW93a3K8reZJl/m
jYMPvBOBWLfmT6cWk2t2D6dzFdIIZ1HxqCrFqH/Y9Mtw5JQkJRNEMMkIziYyFgrtE1Z7tWtroBb+
BVMgX7MiMKpNH4q439s9G7I7UGqhR/vI8/1/jk+ddr9lnSzsf3cuX6vxzTXNw6d2KuxV2KuxVsEg
gg0I3BGKWR6N+YPmTTOKev8AW7cf7puKvt7P9sffTNfn7Mw5OnCfJ2Gn7UzY+vEPN6DoP5kaFqZS
G4JsLptuEpHpk/5Mmw/4KmaLU9lZce49UfL9Tv8ATdrYsmx9MvPl82WAgio6ZrHaOxV2KuxV2Kux
V2KuxV2KuxV2KuxV2KuxV2KuJCgsxoBuSegGKsC80fmfa2he00YLc3AqGujvEp/yR+38+nzzd6Ps
iUvVk2Hd1/Y6PWdsxj6ce57+n7Xmmoajfahctc3s7zzN1dzWg8AOgHsM6HFijjFRFB5vLllkNyNl
j2v+YU01RFDGbi9cVSIAkKDtzfjU0/Xmt7T7TGnFRHHkPT9Jdl2Z2YdQbkeDGOv6AgtNHla+kB1v
Uzd3p39Cf1LaBD4IjBAfmTvnlna/aPaGWXrEgO79nT8bvp3Zeg0OKPoonv8A2srXy75fCgLptrxA
2/cxn8aZzJ1WX+dL5l34wY/5o+SDu/JehysZrWNtOux9i4tGMRU/6o+Gn0Zfi7Ryw68Q82nJoscu
le5Jbi31281jTtC1eMXMFvL9bN8ook0MakAOvQNybifn9J2uTXRlgM47S5V5uBDSSGURO45pfqFt
PotylqTS4sS0uj3DdJ7UkmS1c/zLX4fw6jNn2R2mYyjlj9UeY/HQuv7U7OjOJxy+mXI/juZXaXMN
1bRXMJ5RSqHQ+xGet4csckBOPKQt8mzYpY5mEucTSrlrU7FXYq7FXYq7FXYqyPy3561nRCsQf61Y
jrayk0A/yG3Kfq9swNX2djzb8pd/63Y6TtLJh25x7v1dz1fy/wCaNI12DnZy0mUVltn2kT5juPcZ
zGp0eTCakNu/o9Rpdbjzi4nfu6pvmK5bsVdirsVdirsVdirsVdirsVdirsVQ+oajZ6faSXd5KsNv
GKs7fgAO5PYZZixSyS4Yiy15csccTKRoB5D5u8+32tu1tbcrbTK0EVfjk95CP+I9PnnU6Hs2OHc7
z+73PJ67tOWb0x2h9/vYpmzdW7FXYql/mC1iuNGvEdFcrDI0fIA0YKSCK9N8we0sUZ6eYIv0mvfT
ndm5ZQ1ECDXqF+60Dot3c+X7bT3nlafQNQiiKyyGrWs0ig8Sf99k/d+vxrX6IZAZRHrH2/tfYNHq
jA8Mvp+5muc47p2KoTVdJsNVs2tL2P1Ijup6MrDoynsRluHNLHLiid2vJijMUUgtvKetafD9W0/V
V+qqSYop4AzKCa05qwr18M6zRe2WowQEABQeZ1nspp88zMk8RXSQecLUcmgtdQjHVYGaGSnykqv4
5u9L7e2ayQ/R+v7nTan2HFfu5H7/ANTen61aXkrW5V7a9T+8tJ14SD3APUe4ztuzu18GrF4zv3PG
9odkZ9IfWNu/omGbR1jsVQF/rVnZyrb/ABXF4/8Ad2kC85T9A6D55rtd2ph031n1dw5/s+LstD2X
m1P0D0955ft+CyO08231GpBpMJ6c/wDSJ6eNBxQfKuctqfajLLbGBEfM/q+x6jTezGGP94TI/Ifr
+1XHlKeTe61m9du/oskC/cqnNTk7Z1Uuc5fDb7qdrj7I0seWOPx3+9d/g237anqQPj9Zb+Iyr+U9
T/qk/wDTH9bb/J2n/wBTh/pR+pKrN9asvMwi0PWLsR2BBu7uUxyFXP8AupDxFTT7Wb3sier1UiDM
+GPquj8N+v3Ok7WjpNLEEQHiH6asfHbp973vyZ+YVvqvCx1IrBqJ2jk+zHMfb+V/bv28Mz9f2Ycf
qhvD7v2OF2f2qMvpntP7/wBrNM1DuHYq7FXYq7FXYq7FXYq7FXYqhNV1Wx0uxkvb2QRwRj6WPZVH
cnLcOGWSQjEbtWbNHFEykdninmnzVfa/emSUmO0jP+j2wPwqPE+LHuc6/R6OOCND6upeN1utlnlZ
+noEkzMcJ2KqdzcwW0DzzuI4YxV3bYDK8uWOOJlI1ENmLFLJIRiLkUtgl13WRy06MWFg3S/uF5SO
PGKLw92zge1/baOMmGAb9/45fb7g912V7GmQEs5+H45/Z70YnkjSpBXUZbjUZDuTPK4Wv+SiFQB7
Zwmq7f1WY3KR/Hve103Y2mwioxCjffl5oM1q8VmJLGRx9uOR2U+AdHZgRX5ZRi7VyxPq9Qciegxk
bbJr5bhv4NEtYL//AHqgDROetRG5VDXvVADmLqpROQmP0lvwCQgBLmEyzHbnYq7FXYqlut6DaarA
A9YrqPe2u02kjbsQfDxGZej1uTTzEoFxtVpYZoGMxaU6LfXE8c1teALqFk/o3QHRiPsyD2cb57l2
H2oNZgE/4hz/AF/jrb4z232YdHnMf4Ty/V+OlKd9eX13ffojSSBc0DXd0RVbeM9D7uewzE7b7a8D
93j/ALzqe79rl9idjeP+8yf3fQfzv2J3o+hafpURW3QtM+89zJ8Usjdyzfw6ZwU5mRsmy93GIiKA
oJjkUuxVCatfLYaZdXjdIImcA92A+EfSdsIVIvL9m1rpMCybzyj1rhj1MknxMT770z1HsrTDDp4x
61Z95fMO1dSc2olLpdD3BMQSDUbEdDmxde9Q8hef/rJj0rV5P9I+za3bn7fgjn+bwPf59ec7S7N4
fXjG3UPSdmdp8X7vId+h/W9BzRO/dirsVdirsVdirsVdiqld3VvaW0tzcOI4IVLyOegAyUIGRAHM
sZzEYmR2AeI+b/NVzr+oF947GEkWsHgO7N/lN+HTOw0OjGCFfxHmXjNfrTnnf8I5BIcznAdirsVS
q2tV1rX5FnHPTdKK/uj9mS5YV+Idwg7eOeYe2vbEuPwIHYc/x9nzfSvY/sqIx+NIby+78b/Jlmec
PfOxV2KuxV2KuxV2KuxV2KsM803L6Rr6XkKF5NStjDHCN+dxG6iM/dIBnbeyXap08cnu29/T9LyP
tP2WNSYf1t/d1/QyDy9o40vT1jc+peTEy3k/d5W3Y18B0GOTIZyMpGyWzHjEIiMRQCZ5Bk7FXYqx
vzfJ9ZksNGXf65KJbkf8UQfGwP8ArNQDNj2VpfH1EY9L39w5uB2pqvA08p9a2955I3PUny52KuxV
61+XvnU6lGNK1CSuoRL+5lY7zIOx/wAtR9438c5jtPs/wzxw+k/Z+x6rsrtDxBwT+scvP9rN80zu
nYq7FXYq7FXYq7FXk/5lebTf3Z0izf8A0O2b/SGHSSUdv9VP1/RnT9k6Lgj4kvqPLyH7Xlu19dxy
8OP0jn5n9jBs3LpHYq7FXYqhPJskEPlw6hO6xpdTT3U0jkACshFST/kqM+f+2cpzauRG5J+/f9L7
t2XiGLTRHKh92yHufNl9dI8mkQRxWMYJfUr3ksZA6mNBRm+Zzb9m+yeXNDxMh4Mfefx93zdX2h7T
YsM/DgOPJ3D8fjuS/TR551pjNHqZttNY/u7gwJGzjxjT7XHwLMMwdZHR4JGMB4hHw/T+O4OdpZar
NESn6L+P6GV6TplxYpIJ76e+kkIJaYii0FPhAG1e+abNlE+URH3OzxYzHmSUflLa7FXYq7FXYq4k
KCSaAbknpTFWNaaP09rf6YcV02w5RaZXpJIdpJvltRf650+h03hQ3+qXP9TodXn8SW3IMlzMcV2K
uxVpmVVLMQFAqSdgAMVYFaazJe6ze6rFYXd4slLeyaKL92IEO55sVHxtvTN32T2vpdFxSyH1nbps
Pn1dN2t2VqdZwxx0IDfe9z8uiaC/19h+70KY9/jlhTb6Tmyl7c6Ucgfx8HWR9itQech+Pi02ranF
vPol4B/xUEl/BWy7H7a6OXOx8v0005PY3VDkYn5/tWf4p0lGC3Rls3O3G4ikj3+ZFPxza4PaLR5O
U/x8NnWZvZ7WY+cL+P4KZ6drNs08dxp94jTRMHjeJ1LKy7g7HNlDPhzCoyjIHzdbPBmwm5RlEjye
8+UPMsWvaStxst3FRLuIdnp9of5LdR93bOU12kOGdfwnk9doNWM+O/4hzTzMNzXYq7FXYq7FWMef
/Mv6F0cpA1L+8rHBTqo/bk+gdPfNj2bpPFyWfpjz/U63tPWeDjofVLl+t4rnXvGuxV2KuxV2KsP8
tRXGr6ba21yCuk6fVTAf93z8i1X/AMlOXTxzzz2e7Bhlyyz5BYvb8ff8u99C9oO3JYsccOM1Ijn3
D8cvn3JzLbLrGtx6Uf8AjnWKrPfIOjsf7qI07bciMl7a9rnFEYIGu/8AHl+kNfsf2WMhOeYvu/Hn
+gsuVVVQqgBQKADYADPKn0p2KuxV2KuxV2KrJpoYImlmdY4kFXkchVA8SThjEk0OaCQBZY3Pc3Hm
d2tLIvDoYNLu++y09OscNf2f5m/zO+0PZ/B65/V0Hc6nV6zi9MeTI4IIbeFIIUEcUahY0XYBRsAM
2jrlTFXYq7FWL+YdQm1W6PlvS3/eSf8AHTuh0hhr8S7dWbpT6PlVnzjFDiPwbcOE5JUGR2lrBaWs
VrbrwhhUJGvgFFM5OczImR5l6GMREUFXIsnYq5lVgVYAqeoO4xBVher6bpl/5lhtLe0hjjsAJ76a
NFVmkbeOIkAf6xzvfY7s+eoyccyTjj+B9v3F4v2s7Qjp8fBChOW36/x5s48oeYpNC1mO5JJtZP3d
2g7xnvTxXqM9N12lGbGR/F0fONBqzhyCX8PV7pHIkkayRsGRwGRhuCCKgjOMIINF7YEEWF2BLsVd
irTMqqWYgKBUk7AAYgKS8J83682t65PdAk2yH0rVfCNTsf8AZfa+nO00Om8HGI9evveI1+p8bKZd
OnuSXMxwnYq7FXYq7FUlndtMt4NJ0xBLqFyX+rp0C8mLNK/+Stc0Gv1kNBgEI/Wbr4nm7/Q6Oevz
mc/oFX8ByRPkKx+r22pSO5mmkvZUec9XEXw8vpbkfpzx/trNKebc2av4l9X7LxRhioCh+gMivL6z
soGuLuZIIV6u5oPl7nNXjxymaiLLsJzERZNJH/iDWNRFdFsONuRUahfExREeKxj42Hvm2w9k9Zn4
B12XtH+aPmluka9NHZQ6prF5Lc3V2W+oaXbLQlQSoPppQtWn7Rp9ODLpeKZx4o7DnI/j7mWPUVHj
yHnyCai585XnxQ2trp0R6C5ZppafKOij6Tl+PsmA+ok+7Zpn2jI8gAu+qec16ahZvXqGgYU+VGyw
9mYfP5tf5/J5NGw84y7PqtvbjxhtuZ/5KNko9m4R0J+KDrsp7nR+UbSWRZtVuZ9UlU1VbhqQg/5M
S0X765l48UIfSAHHnllP6jaeqqooVQFVRRVGwAHhk2tvFXYq4kAVOwHU4qxDVfNUl/fxaLokyxNc
MY31R/sDiKssPZ33/p4iGbJ4cDIi6bMWPjkI8mQaLoljpFp9XtVJLHlNM27yP3ZjnLajUSyyuTv8
OGOMUEflDa7FXYqoaheRWVjPeS/3cEbSMPHiK0+nJ4sZnIRHVjOYjEk9GN+XbaWPTxcXG93fMbq5
J68pNwP9itBTPe+wtCNNpYxrc7n8e58R7d1p1GplLoNh+Pemmbh071r8rdfN7pb6ZM1Z7GnpE9Wh
bp/wB2+VM5ftjTcE+Mcpfe9V2NquOHAecfu/YzfNO7p2KuxVi35j60dN8uyRRtS4vj6CU6hSKyH/
AIHb6c2XZWn8TKCeUd/1Os7W1Hh4SBzlt+t4vnXPHOxV2KuxV2KqF9ewWVnLdTmkUSlm8T4Ae5O2
U6jPHDjM5cot+nwSzZBCPOTvK+lTxpJqt+tNSv6Myn/dUXVIh/HPLdbq5ajIZy6/in1DR6WODGIR
5D7fNC6JqVtpmkavPcmiWd/cqwHVmLgqFHi3IUzmNfhlPOIjqA9Bo8ojhJPQq+maJNfSpq2uqJbt
vitrJt4rZT0AU7F/EnNtgwRxRqPz73W5s0shssgdQ6Mh6MCD9OXNSQ+VPLEWj2avPSXUXULLMdyq
jpGh7KPbrhPkqf4FdirsVdirsVdirTEhSQCxAqFHU+2+KscOm61rrctWJsNM7abE37yQf8XyDt/k
rkrpUyv9A0670waeIxBFHQ2zRDiYnH2XSnQg5FVHy5qdzcRTWF/Qapp7CK58HBFUlHs4zmtfpfCn
t9J5fqd7pM/iR3+oJxmC5bsVdiqQediX0iK1/Zvbq3t3/wBVnBP/ABHNx2BgGXVwie/79v0ur7Zz
HHpZyHQH7BaIz358MdihN/KmsnR9etbwmkIb07geMT7N93X6Mxdbg8XEY9envcvRajwsol06+570
CCKjpnEvcuxV2KvH/wA0dV+t+YhaKaxWMYSnb1H+Nz93EfRnVdj4eHFxdZPJds5uLNw9Ihh2bZ1D
sVdirsVdiqU3MP6T8wWmmkVtbRfrl4OzEHjEh/2W9M472o1n04R7z+j8e57H2X0e0sx/qj9LLc41
69hc2lzyeePqbiumysuqFOxkiX0t/wDZkEjBwC+LrVMuM1w9ObNMLF2KuxV2KuxV2KuxV2KuxV2K
uxV2Kse18fo3VrDXE+GLkLPUO1YpT8Dn/UfMbWYfExEdRuHI0uXgmD0ZDnKvQOxV2KpZ5j0uXUtM
aG3YJdROk9qzdBLGeS1+fTM3s/VnT5o5B0Li63TDPilA9QlOna3bXTG3mH1XUI/hms5fhcN/k1+0
PAjPc+ze2MGrgDEji7v1d74v2l2Pm0syJAmPf+vuTLNs6l2KvcfIeqnUvLFpIxrNADbyn3j2H3px
Ocb2jh8PMR0O/wA3tezc3iYYnqNvkyDMFz1ssiRRvI5oiKWY+AAqcIFmggmhZfPGoXkl7f3F5J9u
4keVvYuxNPxzu8UBCIiOgeAy5DORkeptD5Y1uxV2KuxVD6hf2thavdXL8I0+8nsqjuTlGp1MMMDO
ZoByNNpp5piEBZK7yrp1zFDcajep6d9qLiR4j1jjUUjjPuB1zy7W6o58ssh6vp+j0scGKOMdE9zE
clYYYjMs5UGZFZFfuFcgsPpKjFV+KuxV2KoG71J47yDTrK1l1HVrr/eewtxVyP52J2RB3Y5OEDI0
ESkALKdRfl7+bE0Pr/V9Ita7/VZridpR7Fo42jr9OZY0MnGOrik09xq2lalHpXmPTn0q+m/3lcsJ
baen++pl2Lf5J3GY2TDKHNvhkjLkjcqZuxV2KuxV2KuxVCatp8eo6bc2Un2Z42QE9iR8LfQd8IVC
+V9QkvtFgeaouoa290p6iWI8Wr7mlc5XW4fDykdOYeg0uTjxgprmK5DsVdiqC1PRdL1OMJfWyTgb
KxFGX/VYUYfQcuxaieM3E015MMZ/ULSo+TvS/wB4NUvLYdo2cTRj5K4/jm+03tVrMWwlf4+IdLqP
ZvSZdzAfj3btf4f8yJ9jWkk9pLVR+KsP1Zs4e3WqHMA/L9TrZ+xmkPKx8/1vSvyYfV7S41DTdQu4
7pJUW5gEcfp8ChCSd2ry5r92Z2j7fnr5kTFGIcfP2JDRRHATUi9TzYuGknna8Np5V1KUGhaIxA/8
ZSI/+NszOz4cWeI87+W7hdo5OHBI+VfPZ4TnaPEOxV2KuxVAanq8FkUiVGuL2ba3tI93c/wX3Oa7
tDtPFpY3LeXQdf7HY9n9mZdVKo7R6np/aqaV5cuJLlNS1tlmu03t7Rd4YK+H8z/5Wee6/tHJqZXM
7dB0D6DoOz8emjwwG/U9SyLNe5zsVdirsVdirsVZL+TVtp1l5Z1rzle0Nzdz3Lzz05NFaWRKrEPY
cCxp128M2+jgBC3XaqRMqeff9Dd336br+gIv0HzoU9Vvrfp1pz5f3fKm/Hj7cu+S/Mb8l/Lbc93t
HnjTNL82/l5dv1ins/r+nXDCjRyLF6sMg7qfGnaoy3LESgWnHIxk8m0S7kvNHsrqT+8mhjd/9YqK
/jmiLt0bgV2KuxV2KuxV2KsfsP8Acf5rvbLpBqUYvYB29VfglA9zs2antbFcRPu2dl2dkomLIM0T
tnYq7FXYq7FXYqt8kao8v5r2MMbkWtjDJFcEdDNcoeKnxoFBzt/Zfs+Rx5M3cP0/2vJe0WujHJjx
dSf0f2PfM37qGG/mtcen5YWMH+/uY0I9grP/AMa5tuxo3mvuiXUdtyrDXfIPIM6p5J2KuxVK9Q1S
c3I0zS4xcam4qQf7uFD/ALslP8O+aPtbtmOmHDHfJ93v/U7zsnsaWpPFLbH9/u/Wm2ieX7fTQ8zu
bnUZt7i8cfE3so/ZX2Gee5s88sjKZsl9Aw4YY4iMBUQmuVNjsVdirsVdirsVdiqp5P8ANll5RuNR
0fX4y/lPWZHmjugpkS3lnHGaKcCp9KTsR0++mfpdQIjhlycTUYTLcc0vg/5xv/LC7vzqlt5q9TQS
/qC1jkgYBCa8PrPI7dqla+9d8yhiid72aDmkNq3ZR5+/MLSbvR5PJnkuRLl5ohZ3V9b/ABWlpace
Dqsg+F3KfCoX79sr1GpiI8IZYMBJssetbeK2toraEUihRY4x4KooP1ZqnYKuKuxV2KuxV2KuxVIP
Noa3istYQHlpk6vJTr6En7uUfcRlebF4kDHvDZiycExLuT9WVlDKaqRUEdCDnIEPSOxV2KuxV2Kp
JrXmWK0kNjYr9b1ZxRLdN1j/AMuVv2VGbbsvsjNq5iMRt+Pxbre0e08WlgZTP4/HRV8lWp0nUrCR
39W5N3HcXc3d5GkBc/LtntOk7NjptIcUf5pv30+QartKWp1Yyn+cK91vpDOWetYD+b7kaXYJXZp2
NPklP45vOwx65e50Xbp9ER5vLM6R5h2KpTeX95dXZ0vRwHu/+Pq6O8dup7t4v4LnOds9tjAPDx75
P9z+16PsbsQ5/wB5k2x/7r9ie6NotnpNsYYKvI55z3D7ySOerMc4GczI2dy95GIiKGwTDIpdirsV
dirsVdirsVdirTKrKVYAqRQg7gg4qlcnlXy3JJ6jabb8vZAB9woMNlUxgt7e3iEVvEkMS/ZjjUKo
+QFBgVUxV2KuxV2KuxV2KuxVRvLWK7tJrWXeOdGjf5MKHFUr8oXUs2ix285/0qwZrO4H+VCeI+9a
HOZ7QxcGU9x3d9o8nFjHlsnWYTlOxVSu5Zord5IYWuJVFVhUqpY+FWIAyUIgmiaDGRIGwtg175g1
W8umttWmfy/ak0WJUYPIP+YgjiPozsuw+ytDkleXJ+PuHxeW7Z7S1mONYsf4+8/BOtKsdMtbYDT1
T0n3MqHmXPiX35Z6totNhxQrEBw943v4vl2t1ObLO8pPF3Havgj0co6uOqkEV9t8yyLDiA0X0fnA
Pobzz84VP1XTGpsJJQT7kL/TN92H9Uvg6Dt4emHxeY50TzSUXN5d6jePpOktxkTa9vuqQKeoXxkP
Yf5jmO2u3BivHiPr6nu/b93ven7G7DOWsuUejoO/9n3+5kOk6RZaVZra2ikKDyd23d2PVnPcnOEJ
JNl7kCuSNwK7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FXYq7FWP2/8AoHnC4g6QatCJ
4/D1oPhcD5oQxzV9q4rgJd36XY9n5KkY97IM0Dt3Yq7FVssUUqGOVFkRtmRgCD8wcIJBsIIB5pHc
eTNJMhmsWl02c7l7Vyin5xmqU+jNro+3NTpzcZH8fjq67Vdk6fOKnEIR7HzbY7qYdWhH/RvP/GM5
2Og9u5DbNG/x5fqeT1vsTA74jw/jz/W+o8z2l5Z+fWtJY6XpdtBxl1S6ncWtsT1UJ8cjU34ptXMj
D2l+VEiBciNnG1HZv5oxBNRB3eOfou+mHO71S6Mp+0IH9GMfJVGajL2tqZmzOXwNfc7TF2TpoChC
PxF/eifLEsmjanHoxb1LK9DyWzlQJFlQcmV2UDlVe5zXS33dgNmZ5BLsVdirsVdirsVdirsVdirs
VdirsVdirsVdirsVdirsVdirsVdiqQ+b0aGzt9WiBM2lzrOadTEx4Sr9Kn8Mhlx8cDHvDZjnwSEu
5PUdHRXQhkYBlYdCDuDnIEVs9IDbeBXYq7FXYqlmq64lpcQWFtGbrVbtgtvaKd/iNObn9lRmy7N7
MyaqfDEbODr9fj00OKRfRueiPEvmjzbrTeYvPWr6sW52tnIdN00VqoitzSR1/wCMklWrmn1OTimX
a6eHDFBZjt6Bv3EN/pNzWgjvI0Y+CygoT+OKs4yCpfqGv6Lp1ReXkcTj/ddeT/8AALVvwwgKlT+d
Y5NrDTbq6HaRlEMZ+TOa/hh4VUv8U+YftfoeML/Ibkcvv4Ux4VTDR/NFtf3H1KeF7K/pyFvKQQ4H
UxuNmpgIVOsCuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVSubeK5tpbeUVimRo3HirChxVKf
J9xK2kCznNbrTZGs5v8AnkaIfkUpnNdo4uDKe6W7vdFk4sY8tk7zBct2KuxVLfMGsjS7H1ET1buZ
hFZwd3kbp9A6nMzQaKepyjHHq4us1UcGMzkdgs8haCV8xWL3DfWNRu7mJ724PcBgzKvgqgbDPa9H
2Xj0OlkIj1cO5/HT73yDVdp5Ndqok/RxbD9Pve7+ctaGh+VNW1atHs7WWWL3kCn0x9L0Gc3klwxJ
eohG5APmfSLY2+mW0R+2EDOT15t8Tfic0RdyjMVUbu0gu7d7edeUbihHQ7bgj3BxVDNp17KgiutV
u5oVFBHzCAgdnKgFsVVLTStOtN7e3RG/npVv+CNTjarrrUbC0oLmdIidwrMAT9HXFV9td2t0nO3l
SVRsShBofemKqOqWH1u3+AmO6hPqWsw2ZJF3BB/XirJtA1JtT0a0vmHGSZP3gHQOpKvT/ZKciQqY
YFdirsVdirsVdirsVdirsVSW4uZ5PNtpaRyOsMFpLcTxgkKxkYRpyA2NKEiuHoqdYFdirsVdirsV
dirH4/8AQPOMidINYgEi+Hr2+zAfOM1zWdq4uLGJfzT97sOz8lTMe9kGc+7h2KuxVicb/pXzFc3z
b22nE2lkOxk/3dJ9/wAOeq+xHZYjA55Dfp+Pd95fNfbPtMmQwRO3X8e/7g9B/LGyNx5qilpVbWKS
U/SPTH4vnW9r5OHAR/OIH6Xlux8fFnB/mgn9H6U2/P3WY4vK9r5fRgbnXLqNHj/a+rW7CaV/kCqD
6c4jWTqFd73Glhcr7nlWap2bsVdirsVSLzN5h/R0Yt7cg3kgrXqEXxPv4YQEMFJuLmepLTTyH3Zm
J/HJIZ55W0aXTrR2n2nuCpdP5QtaD5775ElKd4Eqvki6SOyl0eT4bqwkclT+3HK5dZF9vipgkoZL
kVdirsVdirsVdirsVdirsVY/5ZP1291PWjvHdSiC0PYw2/w8h7M1ThKsgwK7FXYq7FXYq7FUi84R
OmnRalCKz6XMl0oHUoppIvyKHfI5MYnExPUM8c+GQPcncUscsSSxnlHIoZGHQhhUHOPIINF6QGxa
7AlxBIIBofHFWLQ+U9X0+L09M1UGIFmEFzCrAljU1kWjZ1+g9sNRp4iAA4B0/G/2vL672W0+okZm
+M9fxt9j1j8lNP1aO01K81SGFJWkSCGSByysqDkxAYBl+2OudTDts6/EJcPDRPxeeHY0dDkIEuKw
Pg8r1rXp/NPme/8AMUzcrcu1rpMf7MdpE5UEe8jAs2aPPk45O8w4+GNKWUtrsVdirsVSabypplxc
vcXDSzSSHk3JwB8vhA2HTDaKR1jpOnWI/wBFgWNj1fcsf9kanBaUXiqgl7bPdPapIGnjXk6jegrT
c9K+2KoXUZTp95aazGeJtnEdzT9qCQhWB+VajFWd5BXYq7FXYq7FXYq7FXYqx/zBqE93KNB0x/8A
TLgUu5l3FvAftMxHRmGyjJDvVOrO0gs7SK1gXjDCgRB7AU3yKq2KuxV2KuxV2KuxVZNDHNDJDKvK
ORSjqehVhQjFUl8nTSDTH06Y1uNLme0cnqVQ1jb5FCKZznaeLhyk9Jbu80OTix13bJ7mvcx2KuxA
V7P5Z0w6bodpasKShOc21Dzf4mB+VafRnpeh0/g4Yw7hv7+v2vB6vN4uWU+8/Z0fMWn2cumPd6Lc
KUutKuJbaZD1orko3yZdwe+a3JGiQ7KErFozIMnYqhrvUbK04ieUK7UCRirOxOwoq1Y4gKmen+W/
PWqIJNN8s3jxNusl0Y7NSPEeuykj6Mvjp5no0yzwHVHv+Xn5nojO+gwIiglna/gCgDqT7DJflJsf
zUGPWen+ctV1VtM0KyttTnibhcXFrK01rEf8u4okP/AuciMBJobszmAFnZDeadF1O0vxoqa3Hean
GaamthGVtbU/yG4Y85H/AMkKKdz1AGTGIbXZXHMy3qgrabplrp9uIYF3O8kh+07eLHKW1Q8yEDRL
uu9VAA9ywA/HCFZzCpWJFb7SqAfmBlar8VdirsVdiqBu9c0e0r9ZvYImXYq0i8q/6ta4aVLj5xs5
9tMtLrUmOwaGJljr7yScQMeFbWtD5u1McZXi0a2bqsR9e5I7jnsi/MYdlTTStHsdLtzDaIQXPKWV
zykkb+Z2O5OAlUbgV2KuxV2KuxV2KuxV2Ksfb/cf5xVukGswcD/zEW+4r84zTNd2pi4sfF/N+4ud
oMlTrvZBnOu6diqe+TNI/SWuwq4rBb/v5vAhD8I38WoPlm47E0ni5wT9MN/1fa6ztbU+HhIHOW36
3rud88cwXz7+U+l+aLoapa3L6TrqqEN7EodJVX7KzxEjnQbA1BHvQZj5tOJ79W/FnMNujwHUpfMG
l32q2c0dtdDSZ5beaeNmjDNCKswVq5qpw4TTsoS4hadeSfLmo+bL/wDR+oatB5dnKpKti8b/AF6a
GRQ6SQiUJGVdTsVJI8MuxafiO5pqy5+EbC3t/l7yH5E8j2rXsccUMyitxrN/IrTHxLTSUCV8FoM2
MMUIBwJ5JTQNx+aialM9n5I0ufzJdqeL3aD6vp8Td/UuZAASOtEBr2OA5r2iL+5Iw19RpSl/L/VN
cQ3v5h619ZtY/wB62iWLNa6ZGq7/AL1iRLNx68nYUweEZbzPw6J8QD6B+thPm/8AM5by3by15BRd
N0OCsVxq9ugiDDo0dmoAoPGT7vE42bUgemDkYtOT6pMNs7O2s4Fgt0CRr95Pck9zmA5qtiqBuIv0
hq9hpafEPUF1d+AhiNaH/XagxVnGQVK9R8z6Jp7+lPchrjoLeIGSSvhxWtPpyUYGRoCyiUhEWTQS
9/Mus3H/ABz9IdEPSa8cRf8AJMcmzb4OwdVk/h4R57ft+x1Oft3S4/4uI+W/7PtUmHm25/vtRhsx
3S1h5f8ADykn8M2+H2UP8cx8Bf6vudTm9qo/wQPxNfr+9Sfy5FP/AL3Xt3eg9UlmYJ9CpxzZ4vZv
TR58Uvef1U6zL7SamXLhj7h+u1Py9pel2HmO7sTaxFZolubJ3QMyhTwkQMwJ60NM5bt3RDT56jtC
QsPUdia06jBcjc4mizIAAUHTNK7h2KuxV2KuxV2KuxV2KuxV2KuxVJPN1tK+kG7gFbrTnW8g+cRq
w+lK4JQEgYnkWUZGJBHRNrS5iurWG5iNYp0WRD7MKjOPnAxkQeYekjISAI6quRZPWPI+hnTNHEkq
8bq8pLKDsVWnwIfkDX5nPQeyNF4GEX9Utz+r4PF9parxspr6RsP1/FkWbV17sVfL3mW2L+avN9o+
zS6lc1/1ZlUqfuOaXUfWXb4foD0r8v38l+fvKNloXmCyhuNa0GBLW4t5arOqxKEWaKVSsnGRQCSr
dfozPwmOSIB5hwsoljkSORZHa/k7+X8NwlxNp738kX90t9cT3SL8o5XZPvGWjBDuajnkj/M/nfyj
5MsUS+nSFwtLTTLZQ07+AjhWlB7mi++SnkjAbohjlM7PEfN3nTzJ51kKX4Om6ArVi0eJvilp0a6k
FOX+oNh881mbUme3R2GLTiHvSxESNAiKFRRRVAoAB4DMZyF2Koe/vYbK1e4l6L9lR1Zj0Ue5xVdp
lza6BbtPqPKbXtSIkayiHOUL+xEB+yqjqTkoY5ZJCMRZYZMkYRMpGgF8kfmDVzyv5zp1meljat+8
Yf8AFkv8FzqtB7ME+rMa/oj9JeV13tMB6cIv+keXwCMsNK0+wThaQJEO7AVY/Nj8R+k51en0eLCK
xxEfx383ldRrMuY3kkZfju5IrMlxnYq7FUp1pvql5pmqDYWtwI5j29Gf925Py2zmvafT8WAT6xP2
H9tPS+zGo4cxh0mPtH7LZbnAvduxV2KuxV2KuxV2KuxV2KuxV2KtMqspVhVSKEHoQcVSHymzWq3u
iyH4tNmIhr1NvL8cR/EjNB2rh4cnF/O+93PZ+S4cPc9E8keXjqmpCeda2VoQ0lRs79VTf7z7fPMn
sLQeLk8SX0Q+0/jdx+19Z4cOAfVL7nqudy8k7FXYq8D/ADj0KXQ/OR17j/uJ15Y45pv2YryFeADe
AkjUEHxBzWazFR4u92OkyWK7mHy2aPcRXcUstrewbwXls7RTJ/quu+YYkRycogHmmUnmPz3ND9Xl
806h6AFP3bJFJ/yNRQ/45cdRPvavAh3JZb6dawSvOFMlzJvJcysZJWPiXYk5SSS2gUicCXYqtkkS
NGeRgqKKsxNAAPHFWPQfpbXdTW4swILC2Y/V7mRagMNjIqH7T/y/y/PNv2d2Pl1O49MP536u91Pa
Pa+LTCj6p/zf19zKNN0ezsAzRgyXEm811KeUrnuWY53ei7OxaaNQG/f1Lwmu7Ry6mVzO3QdAjszn
AdirsVdirsVQGv2v1rRb2DqWiYqP8pRyX8RmF2jh8TTzj/RP2bhzezs3h6iEv6Q+3Yp1o939c0mz
uiamaGN2/wBYqK/jnlRfU0ZgV2KuxV2KuxV2KuxV2KuxV2KuxVL4NA1O8856ZLpsRkN4r2l9T7KR
gGRJX8ApBqfoG+2VZ9GdRHgHO/7W3FqhhPEeT37SNKttL0+Kztx8KD4npu7H7TH3OdDptPHDAQjy
Do8+aWWZlLmUZl7U7FXYqhdV0rTtW0+fTtSt0urK5XhNBIKqw/WCDuCNwcEogiikEg2HifmT8l/M
+iu83leQaxpYqV024cR3UQ/ljlb4JFH+VQ9t812XRnnFz8erH8TBrrURYT/VtWt7jSrrp6N7E8J2
8CRxI965hygRzDlRkDyVY72zlFYp43Hirqf1HIsm3urZBV5kUeLMAPxxVAvrsEjmHTo31C4/lhHw
D/WkPwgZkafSZcxqETIuPqNVjwi5yEQrweX7m8dZtakEig8o7CKoiX/XPVz+Gdd2d7Nxh6s3qP8A
N6fHv+73vI9o+0kp+nD6R/O6/Du+/wByfIiIioihUUUVQKAAdAAM6mMQBQ5PLykSbO5bwsXYq7FX
Yq7FXYq0QCCDuDsRgItINKXkdifLNojGrRGWJv8AYSso/DPIcseGRHc+u45cUQe9PcrZOxV2KuxV
2KuxV2KuxV2KuxVUtrae5nSCBDJNIeKIu5JOShAyNDmiUhEWXrPlTyzDotnV6PfTAG4l8P8AIX2H
4/dTd4MIxxrq6nLlMzae5c1OxV2KuxV2KuxVSubW1uoTDdQpPC32o5VDqfmGBGAi0g0x28/LD8vL
ti03l2w5E1JjgSIk+/pha9cgcMD0DMZZDqpwflR+W8EnqJ5dsiw7SRCRf+BfkMAww7lOafew3zn+
Xf6HDXujw/7i+skCDeD6B1T37d86vszXxkBjlUZdOgP7Xk+1OzpRJyRuUevUj9jC83To3Yq7FXYq
7FXYq7FXYq7FUN5LNNOu4v8AfN9cp7bPXb788n18eHPMd0pfe+raGXFgge+MfuZBmI5TsVdirsVd
irsVdirsVdiqraWlzd3EdtbRmWeU8URepOThAyNBjOYiLL1Tyn5Tg0aD1ZaSahIP3knUID+wn8T3
zc4MAxjzdXmzGZ8mQ5e0uxV2KuxV2KuxV2KuxV2KuxVxAIodweoxV535w/LRZS99oSBJDVpbHop9
4uw/1enh4ZvtD2tXpy/P9bz+v7Iv1Yvl+r9TzWWGWGVopUaOVDxdGBDAjsQc6GMgRY5POyiQaPNZ
hYuxV2KuxV2KuxV2KoXyeaDV4+66jK1PAMiH8c8t7WjWqyf1i+o9lG9Nj/qhkOa5z3Yq7FXYq7FX
Yq7FXYqmOi6DqOsXHpWkdVX+9mbZEB8T/Ab5fhwSyHbk1Zc0Ye96l5f8s6fosFIR6ly4pNcsPibv
Qfyr7frzb4sMYCg6zJlMzZTfLWt2KuxV2KuxV2KuxV2KuxV2KuxV2KuxVI/Mfk/R9djrcJ6V0BRL
uOgceAb+YexzM0uuyYTtvHucLV6DHnG+0u95X5h8ja5opaR4/rNmNxdQglQP8teq/Tt750ul7Rx5
trqXcXmNV2blw71ce8MezPde7FXYq7FXYq7FUJ5V+G+1uPwulev+vEpzzHtsVq5+99M7FN6WHu/S
yLNU7R2KuxV2KuxV2Kr4YZp5VihRpZXNEjQFmJ9gMlGJkaCJSAFlmmgflzNLxn1hjFHsRaoRzP8A
rsNl+Q3+WbDDoes/k4OXV9Is+tLS2tLdLe2iWGFBRUUUH+375sAANg4RNquFXYq7FXYq7FXYq7FX
Yq7FXYq7FXYq7FXYq7FXYqxjXPy88vaoWlWM2V02/rQUAJ/yk+yfooffNjp+1MuPa+Ief63W6nsr
Dl3rhl5fqYHq/wCWPmKyLPahb+EdDF8L090b+BObrB2vin9XpPn+t0efsfND6fUPL9TFri1ubaQx
XMTwyjrHIpRh9Boc2cZiQsGw6ycJRNEUVLJMHYq7FUH5a+HWteQfZElu30tCCc817fFaufw/3IfS
ewTekh8f90WR5pnbuxV2KuxVG6fomraiQLK1kmBNOYFEB93NFH35dDBOXINU80I8yyzSvyymaj6p
cCNevowbt07uwoKewOZuPQD+IuLPWH+EM00zRdL0yMpY26xV+0/V2+bGrHM6EBEUBTiSkZGyjckx
dirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdirsVdiqldWdpdx+ldQRzxH9iVQ6/cwOThkl
E3E0WE8cZCpAEMevfy58p3RJFqbdz+1A7L/wp5L+GZ2PtXPHrfvcDJ2Tgl0r3JJc/k/YMT9W1GWI
dvURZP8AiJjzMh25LrEH7P1uHPsGH8MiPhf6kvl/KDUh/dahC/8Aroy/q5ZeO3IdYlx5dhT6SCX6
X+TnmWy1bU7pruzeC99AxAPKGBjQo3IenTwpvnLdqYzqM5yR2Brn7gHqOzJfl8EcctyL5eZtNh+W
Wu97i19/ik/5ozAGgl1LnHWDoETB+V10w/0i/jjP/FcZf9ZTJjs/+l9jD86e5MbX8stIQD6xczzM
Dvx4xqfoox/HLY6LGO8tZ1cz5J3Z+U/Ltmaw2MZb+aWsp27j1C1PozIhhhHkGmWSUuZTYCmw6ZYw
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
+HM
u@[ƬаGfVwI=/n4"3GovtK[m㧿㖎\ǖw}H}lKVk;-=xC}fW>J;tKNGj+兠Iҁkq{IYC*דt?\nӭcx-VYenϿ?J.6֗N\}J]W^Kɩ]ԳQOg|芯e>k?_8+ݒ?e}Nɶ}TߛSͳΜBtL#kά籖PQGZ9Zq̬z-Hh?Dt3wr11zlGC'0hLd}A[iju길~‖i,_G=vԆGC[(t'fth G<rAN^Iw3G%]3 +aҶSP,Se{Fb8UpmD~uk"ph2 RSXf3иr"TBH.X`ߪp x%!Dt8.0j[sdsqbw%Ku7[j.d +S@w%K;]dϯ )ms0;#r}>L
I-iT3+o'5LSKIrx^6H.7!. +51w/c[l@֯P4,x<2 +l%ђ*ĺue-^>^gN7foJOY5GQx :~kp
v0[{lmmeUbz<b߷4ѭ
p,YMS2N
F)2<O5*tNH)R[>Lɏl{'kN)I+֫~9([ +%VO1|͗4=+|u?H-ph@ޗIiFI=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
+Hj^Gxi$hEqllN*WWpTnyG4ˋ'߱oPR7jiؖߤWS(#Xꖭ9d_](2ʖK=bS(ގ<^d#V0
eD3?6BCNպ=.Ob."kr+6RCrUaL#=%بk(+cviZ̺KB7Q0%#IG +6e$Hӷ1Hu\:KG6zfRM:մzsyaCJJCzK<*y?ljia?w)YCOyDVRtK:'s(nOPraL~ŐD26G*.W'P!Semfs?/+`sFл创' {R#o3{JZ cz +AW[Gu韑kgQ+:MyBHjw\]1m/M|ǚ=gAx]y>EkɋNO +싁ɓZC>9>r./7NjG_í?Zh<RH'iҖإz$4[ڑi5fZp8
Oˡ8X\05l6"V>ٟOk%@a&ԘU"pN7Aus0c5ȯfqAĤ +%)`ր1ژS_AVI}ʳ &
)iH7\7@N+צEjL.8\mIvhhI k~ȹfg̜ +endstream
endobj
20 0 obj
<</Filter[/FlateDecode]/Length 17764>>stream
+HW]oܸ}7><+DERYqb,ma(֮,
4d_+JCa[[I%y%\^u:e+;>z,r3^{My͉+R|Wۺkۊi<K^x|y[Moۮ]%LdoP!U)ۏv[L?LP7۵뺽g^|4C/#4 +?oaUT
VA:MPiu7.nӮ홗~.[ŗG4'O7ohΣn*L $? ֻYݿX]՟07OXK8BoUrm+i1MoMoOWpYH0UƴbbKB1aIolu{յuꇫH}OovM;9[W
ZMMI!owns/e2כ}۽2zA`3!B'A2wִcL%}u{&L +R{&οx1aiuqezu"`*tncB/e_ѫlvvCw||-0ƯX)7'iU~Ʒ?%im9|ֻ_ct+۵soeSeчwU_6#pÓz + +p 0E\Ą0`JsTy7 +X,(!N/0r9[%w)A!(bi@.$y93~#?q9j̢5#3(c +%HE&rQHX -LrX +2e@3$\E*VJ*JU +_ +9I*BbYHR9")5#qG!ENTȍB&Ȓ%C +DgiU)0Fdٖ#Ⱦ>3q)rBnI,![3d +Wpʼnv%C`
j%(G0_-Itod#]3Y",.xqǜ&%8,4EIvyd7n*ljU
q&;.W>AxyKPweҬ%ZsGf.+nl7[l4<|L:KN^?}Xj*3YWY)Uό얶N/5mfMb@S̓w=I6u@7q32#mf02;nڙ5獵\(,w/Sm?;3$_2_-xq]HfVG܇;Ix-Bx5=>pSΣ%ٚZ(0g?IjF P2@5 Rj4DdBIgBI
)NPaZ!)')-R^)1RfL? +4qrxK/-sI)Rr$%IL,YN|9 +'yFS zù!#)7ȑ3%Bx2t +)Bc("S"Jf)@F\K[B-{G<
Ӕ3Á%P02P +w(EZzQ~ҭ
=>Ga`$rAmL8qocƶ´c]Vmlk.lscNJ+6\8pz[3^la5mk]Sy}5ٸxEe{>
~?4(::!#?>><}G+:$}r1;our.egz`jq8ԋ!5*u^U*XG9q^D_LC{մGc{łyLyLLVP1sATW*!>lM; +'.^զ__EuS:=ח?v7z~ЎP̳
*q%`3Sn<G֙T)p%`m2D|zTEI2I4I.=~! +4SM+xG$Hqjgpk;th$jVNcMWvWX8;ۀ\9P$x2)xhx7H4{?Azۋ(.@ +rȎ!<EAΐaz_p\$KW @YvNyv]y:rt\<7-c[cF>-4/->edx}r:w29?Q@?ytEwѦΜ)Gt^Lƴr<kǺ{tEkl~LDlL4 +1I3`QC*^6rϯ߲|S/Љl۷v.l/WBv|ޮfQE4fնhlɾ"'/6>ne3yj-=zkoj7Zf?b'6XWc?We?G,?M
?Y~c{ӿYfO`15?9&f{z>ngߢ.}<}GSX:_mxY>'Ϸc_>IS̴lx?-PxcbXk>5< +Ibb q8&D8֞ A[f*LkB;"͍4ail8,M"I$$t-Rًe/U0ىYqb+VV$b!K%C,&Wc& /^HM'^:̣(%d9uֈ P=ǣģ^h +<Sх"Jis>4mpoaFp"U4O`*NP\mzUU;TMN0wo.FgK'ͥ-t&z\_X{\XCkU7:gƓ{ +<7PV}ڸA o@T({ 6+lT4 +קa{4#wH+D,O`cvp.頎 +YGɁRu +{iK#s-;%8k|Dj?Yf\>~~}y^~}}k;|ϿLJeҗpÂ9ւ{H誋 i?ޜ9t?ܛ&$,Rԙ936v{[=w,*Y1]&|Y[N||){GT qߗ/_erǞ8=sdaee$.1ja*`٤#$% H_S*/d&iI"3IO)Svuz $*
E舞O4E%kg`dXZ:7Kht%>)RdM{CcH_Z0dSƜQwۡЭŌеhT~A )[ΰ^v} P_fHh0cH|eɚ#+y#wќXe +v +/ZR`xU \o0唲ɓGg$c+`Ykgj֒FE+ƀ
-*F&{u=iIL_-}7B"~08Rr@O.va{haͺN{OK/CL}qv] +dEAAh*
`2##0h@B2du;ID ԐIsfKg@fL#Z +l$N)Zl;((ָkcxqsӾ7s \8 I`!I#//XE2B(\h9~Yb*Q*J*'?cѥĕPַ/-YkYZUZaH}:&>VU)#VZ<43/G]}i4SoH% +/K18CUSA Њe}FinjPM;.Rvt>`:xKzFU=Wo |3h*1nMF/Hwdo o=yGabM.;Qǁlk0e#VH331œaakݣQݬrVVsՊ6{A:0gUZL=wt_tY g!'@O*{N<NJ|:ќbOW)> f7Ч¹B EDfRx1P9pÛφA{:FF_t +RHqĖ/FH/.r/b/B[;5ؘPǸAl9C9MWo`s<B1]/ChAr]vQ0bDZ-'4kTƜFrـcy-"NQ,y)sj +]2$z0K +U/E
S$%s{=SDӴjI2zIƬu{Sc+iP=Uń]@B^F8A,o@:0\C0Mí7_#x(=deEM#Ӗ$HEL}l5UՔHwsYUUӕ*}PeedCW}YLc2)J#@Qg=9|[fv.>ѨSIg3+hr}vxo18ޘ8 +x?Ҍ;Em8Cc -AB>8ҼYwj:S-JHZ܊lXFSUu՚rnlO^+U +Dz(j萇퓗(*ܨ!jE/LOV~ +bUda.A<@y'Ф$hT'g1N0 x,h^oR߂ۮ[ܭ7_#͘e۶50q[uY'~-۲YyûPI=A@:rPSx'7`2N`ED8f`ԂBѓzy#Wt =} ++:h5C[;d]#/ 9K$r㏃gv:E^VVI]yd*h-@sRp +NzN@O +`*ig +RϩK &FE+<Iy%]ǫHy3o}y +&pCKZLZ(38/aihmi)ZimW7{Ьm&FHjsY[v|Yi"3hBO + +r1qK9`6i]=2<L-}Ej/R1OE5cJY$(5<\̀n}o-zNSp 'QQ9fvgnpm? m?lXK[o+4|$8̩G=m)zzLVVXѲ--+/n +u&2mBnsx>'("Snb^傧BLoh|ofM0J^LmҮNډho00/!32ݲt::H6'uӵͮچC(/T+&K]kVI^ige:r]I8q~(YcEywzc1:GU[@F}&ʬs%?ApBr:SiUԺRcodۙnT҂ beաOѝjB'*1E?.7/$a1
bevfF"ۙY*lgf,2k؝h꾸 +p#tEA?2Fޗ㾌Eﳸߤ?0~B2J!A뿎}
aƝ5t?m?7܈aW41!6(CхET
%(:PT
<?*|N +ph@U"F, +cɤ4Ą,IjiSҦu,ٜ&߿|Fh|`2/0*dh]MU! +CQ 7ՂI՟E鉶rf+}ƫk4qtt6Ƌuެf:ٌ I-'uw尸'y~Qk<2>gsA
)2`2ǁ73-ŴK,!#'Np([QTjw]z`@l$$<@Du;K +%<Ks0q0-q\nޙR^Rk(ыNU-S9'ES+A40َ\;yiXd+(r6M`y9QWhuA;ֆ_)I͋.1-R14iCۼn>X{}G$]k*Ը9O$F%yh lW1%2հEŢ8YФJ,Zި{V͟U]{Uv/TbZ3힡Fؿz2uŰ5R`JAĀZye5j7"*MA_AL}ux0y+KpfA=x7+NO'j=٨ JFc\d8-;ۏ2X31a4*Nب +/T?Z,*}
D I|_!i&eU2b_X$FFM{I8yᔰ?b/7jaJ,k@KjN͖pT&l5JVLoE"/+&`8tlz$Nw'wۨ_K.bzW[<jZrtO +=?0p"mT+QJUJ*\ڨ$ +.pj}cQ)2lfS6ʘ%)]P+*]BVaOl%eR&&-qSeHzN11ѿ1,)аU%MP"KJ40Ŗ]14ۇ yiQbBfF֔2:Ť:& +;stL1Kk8OFUCr.R"'WbP9)z<4k+Y3G#ܮ#Ynio@aO`P| YдU)[ADRz~drΉ8C +5b7s438@tq;1h!d"T +R) -1GtŁIP&W{0G&>2C&yvjYZWuL[`$fpӲ +3pcbU X-0摭t7Ko, t'+-{GEBNc6*Ni}+.Fג<.ʯ{m~䪶X?RgPQi~`p{Tk$n-ɇ}VF%Wi8JV9W,GW:}h=sk)O< +nE<ټ )([NauDܬV50wjFkռsθEyբT +L!:Tg-AKx]^`jqi"V),;?QE#a~ +Oy@}H<8UlF44 &aeSyC6شgX_ (CO}XSt2yM[SӾd#5Ύ[p8ɊMeDb}]fT<!igmJ ö +r*i0+杗]^?qG7]đp*QE݅* +Ş~?)8rl@cvy*oFNtke"#>"
{ﴚp]J+6̜U$к5/p]/]UQGY'0f?,VRUj ̱s Gdd;Bt谌vkzrv#Ya +Z~fAհR굚3Oǩ2KIz8[.rpSQ"̕[]IBN3|D4,Jj൬Ԟhyoguk^rGaj7ֲy}#$ZD(h՟6ꐳ4:rGO!<l#Exc)}&-u,iH0D-u̦>cJ9L +ъL`&eCڵd\(B +4qI=i$ݪN%$[=ZaBlQ6{"F + +y26Ǜh<wQPBi06.S9ʃ,+vHBHf<R{*1{?(Bbg'iQl@EIy]E>!]N`vMa3f:ؠ-*eAH`Q+>ҡ nV4O:Zq)8]LNdH(s*1՜]2ϦD`bhehPAJ3" 4 +|GYY&exTߕD +gEp`Eڡ+04 +fY t7E}g Bjʗt`P_qHc#H?&0V0.bf
)JODiߊn62@viIkj"6} -62W9*"Bdɲ-6RzZH7=N\}aF*>-7^\>[uuG t\k/EzNЋ0hb_!i9xZ'O2;XHX4Ǒ06Λe+Ow(TYKwMQ- mP@K,kr)J6{0樢3tXw6-c$lZd'L 4
@Y:Zv*[8*7ՒP¶DwXP,<R}(3rNk(1&Z%* Xf71
zƈm(`$2E\+how5mEuzdC%b $ + %'*%3a 1&9WjvA>G\sp)Z}ԑMSk!FZ8bfu{#{>j5=yZxAdT>vs%BJ崱Q/4N m\ǫUU4j`IOF]3ޛ7:Oc}ghÏ2Nэ'iRem<eǍ'ˍgv$f{AdC-,e<ȗß"he4i/i +endstream
endobj
21 0 obj
<</Filter[/FlateDecode]/Length 25827>>stream
+H
s~N6qCK_388Wt/w%b1^G_˿|LOMا;ʓB|[f&6ΦpO)y`+Z21k!7hѕF֩cze'vS2O]f]O8ܬ=jT=I_NI%*V
C<pXkOg5H|\ V?r/ģml#ԹuiUAƢ{zN:u!sr,Wz`#~${bY"Ash)zS`}G}D6N\SyXlU%s鯀y2?'Bj<~X3so'r,ͥ +MۥCH3ӂOOhaLdF}|iD[)Cx3nWݓ*U^pR-ѵ.ȄGaHMIΉuq?h!Aʓ=WBxrqB`WmJ,~\#rUTTx+k*hV8>ex-`5GBEp[3s7x$7bxNۦT~;FO
zPȄ?̙vOsSG!oN^߶ޯNjwz=)Tt1TtEI{r2DWo#yW};8E@[g3 ?.@;ZZ%F}BF3'О[;] 6#h5u;>X@bGOF D"Loj8dfS9nE1
*ޖC[/Ue"nMm%W;l*db\ϧ <x>FD&` g{UdԵ6rFN1CJ\X((xAJ֝Ÿ8f"U)Xr<dLOQzZJP + ]RKh(b]$-2WYHK˷y6Lk3E{&27n6~/ۻeu7l=%*^iQZO%d$!ͧI9\)ސ<uopާ.dn] +]8<=='$@KnX}jSSՃ:6$r
SC
K1YlcTJYgOXUR5OPbwoE#$G'IA 8٨a!ہQtbueBs놃nc}Dӽp_a(%A.F{u`~CBEPr%br.^H@el#ԭ)&\cj:tcvn-;Z>.Z P] H3Et%z +feY-N*ZHyZ:s3[ZT.KJ#2Um/ocrQl#"z=+U)GDBJފ(G? +He˽ +IRg5Ґ +Gb{kFAe#&l+iK31ސRUkڣ^[U(5lab pxO]0rRgT*&g(_P|SSQfJf8/DccKkh),
KK)+S_Ίb(%\ZL^ZͻMi!ӂ-{P՝+$btO3ީԉewDSRm + +,,m<1vyJ weS'29`+,cw)}ѩYB-La4(Ҥ(gvY![Y̹0KLC7l\oA[oM㮅Y[?3y3<7[؍SThsk\Wle!S{BΐEWU?*9jẓ,#ڧ*h$Fߩ AKuݵǵj;`(5SA87R1e@h:Β\sOJ>D% +`2VMŻD9^@2 +d=9a"ZQ `!D2|NI::bI:|KRR4xsC4 &*YÔ+Ϩp!Li<l;G
v`AA'EĮd- SZ^9@OA g+]-v#_-7g3'Ƹ^uuF@>&AasIONN40@Q|֒Ys8j6 3sUUxN鞗<PqIrj&Ca^7|:<yٚ:P=16~\6سmYIw +gB"3A #URQ!+S,s{chPaYWbeƥ6z`B7C'Y)oHDP5a<=NrZ!1;SD( L&_b\Q`{ƘR-Yэu3a$MDDUZ*5TD9j(bDKX<GGxQIΘ!4FY:]9Q-0}3DV[?0Us>o*[-<[h)}
2BK.m C@bWI7D u#tqe&^Bp>1 ׁ\8RnP)6Y2cĬ/V&G\3D414T7>[ƢMNjf.QR rS(/]`rIZbMMkm:["Mcs
BwW6mC4h}As[aSgj1AdNOCU&N-;Il%`~7 +nU'Pab
L2|k=BeRE~ߚHcyE`L+P_m(DMfv +ZKo +giw6s|W(̭^W2#a|ImY*ĐO
͟²e#ah߇>_!0 *+qAOLB&߶> +*NښZd ֥"F<46[h}x4P
2 s
YWS%/ +KGB3(ax9[Fn-
dԝNBWn|DBKˌ4 +N֍.͏NCq]C<.w0Fap'mlODsCԒq3DViHF&BKsУ%"G.Zф +ae:oj*C6[;0nimh<u_Bj +dCIf]dLwHQ:U
zXY3vٽxoCcՉ"5tLy~3[DgDI:x(Aʭ8*hw &pIH0wIjN +ΰIv3˘mT5wѦ϶2VBe~]Χ*˶ndE0ƷlӘ8V3'ʹ#J4 y%iʉZXq20PΓ
@Vqw,rA
h3sߣIHce2SY` +˃MBC +eich +qY׀giGڼ{˓zo ivk~o8H</rx[?9xǶgn.W
ٓ7FP*}.vDT>tk_Lxs}?>xf8կI()zˉp|v{o!<gf<<?^)7ǟ};J%J6WSȏob/vo/o`uv?쓾Aq9h']߁-[FſW؟.NY*_}2DH&Wh\˵E=4M̝xǙ ?Da@ + ;zE0n +!Al_@lS=͕env';(Nw~xWG>5m#=}q]w:
-N}?Q&_-Wi
ߦUs\R+{WiEqR{j>QABY˯RFBe +Ph
M;FCK +]K5OMUXJlqUS:} +OrËRd"ktzǂ %ZnH$P. bNI#="tB[i49cQ +((*o@c8f +^?wHoEDcF3:|1Gai}$M<e{(QmvS'P}-(1'^U_?{(fNE_q3-Jcv?P4VkgԗDB1QB& ܦעNL;EmV;]#ud{=K2pu?{I'EhpG:nLm0y`:u┷5w{HЊiF'%ZM5]pOsOj?wǝ4UU㌣&NJ=ZH߳NGp=O9BiA}4Y|o
:A@yeEa<6~ ++u(VP(vd3&:T +PI)waFTx*&#ё1NZdȨH~"w<q*^FtTص4+ܯ +蘼wݡfXAhpwiʽ[kf62\
Oe0e9ȝSrwMfAH9XS? +(]%o$ڽ|+DP#1hTMw2)9*q;PuW_t1RۻQuVm[^/1Gm._@Ab+Sܼ3"IOe}S'SjfL*s#eTZu3y^.2_8|ﺶ2
~Z:)xa}/H4²8U=w(/IxK,.5{VXhB9aw\q߅C) w + Z
(<h0Q:EMciuY+.(}g״DH]H{z<NJ}ٺs虬Mi9C]?;XAyY{Bj$XH}k Ҧ(skgC0( +xYjnM,4gɊ-߁_LmMeKO5I*x' ^ BS1tHyg/uanDI67êB5RfB-yN_$!XmG=h<@ ++U+? +5T" Q[`I|缍tԻ+*0w\ќ>T= ^[K7iįޥeMj"%wF5@~hF2SaB"K3$mZ>|ZRVѻRvBjg-n +n85E=!ϱ5d+VZ<W}#Ҁ]ެ\*պS
iACG߸$:82\Ib!FHZl'%^-LXz.4 ,v9Q3ɿ+. ǫ_ڳG~sZ慸5ҙ#|!a>cz.Ev.w5 +˕-`V
z(ث5A!A5iBUr2 +N!]iDRnpW/)BZlsSHg:ͱnoGEM}&\lա!$r49Q:=غgh,jlwh.A/1{ +Y<;2a?#jkd(\vY}Dj"-Wf&Gm[I
c_~2 +
{I3"(}jst.lEP&^eڰ +@ʱ=ҽ吽0Ȅ'pbٮEozʱQ2c#>GnR`ɩ1`3zZ[?LkYգz<Ziə%6P ?8@j#U5h}J;Z4gyb&zy2T^-x*Q헩" +Z{Jg&.98 +nPQFkW.#8sty +#Ϣ㢨r@B +^WFuhnS7!G=xY.xbNcNlkY*ґws\YG +a3J +wJ،bkSq<LhP:*jEK +SGDLVY4vlNS8{*S'~ +LT7HSLaJax6ʖoF~ + +x"eMLX +*je~N}娄L06 .ޯh7WX"ӲR${nm'tEو +71p)34wlLˍjbPJC8GyJt)WGw ( !Ce6g#-\^f\Z:(W 1<@f!`-HoU}."
CݗZ9KVQXj~w~bȆ\RgTcǹ.p i
W,a@k>:9]7 p^BT&6:x(9 #=[x9Rb'@ C]]CꌇяrHI|"Иǎ[[S@V>eŪ +GQEơ}K#A]˔*VʯgQ߳@%Kh\+)8'fQY=Iv/t`?j|s*(;WSZwz0aΧD)i٠h5
+~0KdЊzXەʔ*U +5hKRRP*Im]qR 4*%=p'mXfYlӋF~Iͺ~2jRE
CM6@-5ԿBSY}xǥQhlX#ОhUchsoh;g@
u +S'hĘ7G/*!UNYnO79{sm(l +IqN_ZaI6̢]F`t%`7#K=[[ 2+gT+
.)P-JuW&U] F`WZBߢdPD<sSUf}%JϔZh%u>}h,D"²LfapD.7:v26Oh|.erJZdЊj-}|x\kRg^9e݅QΎkXb;Fd*al +C8ƵLs{9zo:ZuZUA,鄵?Q2.qyq ˆ{Zxn#QDq$<#,{%|ŁtfL?b[N4^2+2y{neSgtT):H2LE%IdWXQ~Vwe(܀UT]f[CnL*i^dUG&a6I%%X4e|p r<# S~YdDQWU/N*ԬyΫWη`VCДf1%̊SϚ#G+e]1nIk# +2a_]^1*Ҏ`jRZ>zvzcAنs&E1y,o0Z|-?ry*)끄"r,e*H)$1>){f>ڊwQw迎5]=gbjH&
WE
0qL&V/;_.|(hvPoD9}3Z7c߷mJC 3߇"]KH6+nx5ߋIjv4J("UWG$y}_N%bZIN@+]1j LvH~Dk-5@ܰLA#, 羝h>\~!,^;%ܸ +y(B + +׀d/2TT
Wu:f=eG.L^O%Y:<g4c ^\4 vK>Z@?ib]%R֧,;hZרfU4e(dy84oI%9P;OIwRXJ$>ȃܯQʰ*2ַ"d=@qgC
?x0Ac-Dv^CaJ$ig;zafAz3N+D&;Πü7Iy+yǰtb<!ᇑd(
Bt#T1|JR㶽^ɠ%矋ΈE夺OLZ2)Ɏ[}nRpѲs{L]3 +4>%,fƢƢ{))8;QysTwzrMʤO"OXڴn@ZjaGt
-ĸLeEFv
G%)3⯕K&;{\s9doC +D.k)IJhfCk.$ _kdRD1~DH0&j"DZBtDڍ?6asLZlhi,UwyrMCJLi!ЌrN.zK}Yp_w
^g
``CNNk ݟh~kouTE7qj-)I0m4ֹ"}VԮ-yӷ+l6:.g[Þ? +}6Bw1fF Zk{:}3*eʄk6В(P)Uuh;_[au:VJ >
/6?엥XߪE$LD]ât^ +,[<;:Q=iIxH1_[hhvVȺ)ڏǪT?VtMS +u3yMڅʦ{Ӝ,|]9 qѥ⯴S>9ww*Sy+i%Vhi +RT~i:%$69E\/vR<3J>\:v=$Ǯ㈢[XR=+j`p` w{nd_ +(>I!R^9hT@Cvڻ۟ +X3zlsJH//z:Pv9vz %a㏼JG>P.-J-;g +P"qTzR75Ät X=m<B3iQG)X'ʋ} RH'0Շӟ(dkKT`ubr-n;J{UeTN՝Ů{_)OڷXl+F]DU٣P
;>`DkGԽQ@Ӛ"G?M3iYߌ4()p<z )-&lbx's-<wʜJk!uh[̊桹@&z+cT0#fR_ +$Id X}h +uJbAo+Nۃ$PS}QkOcR&K3qk$½5iP+ *H~Wl+dMqH\TI跧k`m<,A_n9UvKUB8Iϖ-@@)t+v5O=W#έ"-}{ Uo_jKFzh +BMՅTnOGŮi֪ϤQ9j{\bQc[{^uCphB +Z+*$xJ뚄̑KMԣqOA4`?
lܠJY0ޝ5J^B\xEpGPgtӄNVޟ @Kh]%Ҁ(Z&X|жL/m4!NWy؊l%BFm樝JkP\G|]j@" +T>u7ZLSQk[Cjo4[~mZ/Gj\4:6@$Ѫe4~@38ǃ0?K; GeZ~iؚC2iûj^c{</my^nFr{EJ_"F]b#Y5ޡ9rp(JSR*PtL*}{G{ì2N<W!,%%aͅt'cz!UcBPf +! #7*"oVt*\ʲ[ş9[Lp9XcUW{z|j:ƶN93 _TWN/+\+RiڽH#hMڳݍt ʞ14\cܗ[y&*a%/a?;e-G',x*DZ|%l2tQE,rYG}>V=)g,k8!I8E38*:6GJ8R:Mt+fKtoTۣ<j ]:%VF)ha +()h?`_4TY⩙mN"R%j(h*RUG#SBit=
-T7ƕ`MW˩&T <UN
+Ϫ`W!}m(=UنT̼pbـ8,#ې]4ދ +E(Khք&JYp*Oq4Μ: +V&Scuk§):P9RJ,5[g&r053TToVڏz[mB}{%KЈ1-Jp(G-z[`
F7:Օ| +ݐĺުq͖jXiKt]Bb)ά@Ί7B $~s< Nd?p??GӅyILkU2OqO!0?K^,,e!B,!GZz7q1fthpAq2;88i$o
'K21T;k+;g{ƴQN9&nSd2hA(q!RȑvUAU{ƳZtR鵱<*Òq|(haYc~p +EwYH |ΝZtPXe0JR ,bRM"A3͋T/X;`N&S*w2g@^=T~XqX9515BơYIETcc /w +:aa15^<{zY[LL<$JrL&]9sOKJ,}B鮌Uf~|dP"hnv^IJ(7բ^ +ơ]0nw^^şۻO>7~?=yO_/}ݳ?<'}}Z*!h{R9ũ%0EjOoY>e~o .%)
4FxÍ6ke3ā +ơLF +<k.UVQkFELy;)
W}.:Rqn%eMr#~⣤I"yc +1K]P`v!;'ڨm +}bׄ!/.TrN1#o@<D+iv{)yC +Ilļփx^Vy+ñHPDHnKyl;=zTbѳDÔ˹ RU|㏝\z6ivI4\.*1čDlm:Č$T5B|OYV
$KАCC)k*dXھ~l7hI$lU42zD+D4OT'̰R D-iIV7#c` +[۳ԝr ?(lQn@\9 KR)F'HK YJX)6&}U} 5ڲx>OReUv!h\Qh57W!Gimgs/k +LdKu#$K:+bCb]BцYuSQ}"}$Uz?k^* +endstream
endobj
22 0 obj
<</Filter[/FlateDecode]/Length 22972>>stream
+HTW;6
];LK$bdr@z6-A$ϿdzG[,cџȶ?[ָ֟Y<|>-SY3x~Ewqˎ',[Z{γIb暵-NO!}f+pOg⺳=
[?zjOzӵ¡{Ccԉ=p:pJxiaB +:"-ĩ
!LK{zQ̏`. 45 ||}\%ԀaSg,z`UoN`SO_A05܃i'>xϴ8!QŘo,3rC˙,@@DOk>ܘ!GM8h*ӸމdOU<G QQl4X?~q:oY>@q@o9_^7v`.4&&28Q <_qՑ[pT#ЈOf8Ji?"7߁~ +Mf}uM'J\6@Ggg蓀f,QZ9LC0q?-\5hOkVXRY. -2Ņ^<!ŗPNB"&o-Ɣ R]>bD6蚆$Em%/!D$UN!%bYY}
j\s%@h+Jc +Mh_aWէ[)̛J6rxeD(*7CZz)yE"jiSX)~{ޒyDjoD64<HddE +'@1B}
6ҏb6:.
"xY+Ke$АlY{K +$CHl-0JP;ϟ]hu$긓Uzq\ +9v>"fsϹPF=ۛ*_؈SY bC v0F_Zz\wAc' +E[mlj?3E)Wёj\!}>\?\VoGT^!7b*e-z +Z6#o
Bsd̤|aGVn@AV_4
ȸkN[fi#0YKTSQgfgs:n5xp+S +(ās11 +l9#QUF-.;qv/^LuD^>CǕDtA-5?DKNx]F0}Coy7g:$;- NQm۱C)_Q Wn¾ya?m*6Hz.yxp +ƈ3ů4r bӼډL WFI6ݾDA4o~`z[(VUN~PT)<LEɋb\()C5sV95y0sm\VqzRvgtˡ8A|K
?5*}g*#M۶ɗ$ +J38$`sT,|d3ap!4S#)g!g]-+}Ze,g>sDA8!|Z>ݡL6h'V(aT*kWF*ĎXkELz}r宙c`g +13_⠡Gf5[eC*lPuK)$R0էQOuS}M7u)`E
;U ܲR;z {2y-Ȣ$}<
Q:^!^˨xUGh+JvQv+FkIV5O +#piFn~$+OU=ZeSz*'S + +NUvɞDM=zR^QvIvl%sEa*mB!^ {G!?o|?~_O_|;wMo?_~w?߿~boe?+^Z*>r>Y{>NO+dW(qv;-ANFF +˧RY`D^H,^:A`k·ą^9Fl㶺dPSfUե/,5Fq4dI=[;g=l7(wӈioPjWm阙ݟ+P&{p7^Dƅ8yR w9VN5yTZ.dy`%½$b*NVDFt$'sPeL0F*b>.3O.iKKA;/kT,VubIwūq>nI%&3+پaw@W-\zq^SWS"mo&Xa)σ +^p̸ՈXHN0ʥ/+Ns + .iIqNJ-v>pg3Q?{J=x +'qr}H5 +%Z(؊ܩi6z{S+k`%ۥȑe/DV(qtP3/\{'}}u +6Ie&>ԇxg)#r۹yIlP})`1\}Bbҿn5 +~ +NsDn^=hBB9
jKUjoh圧(~{Պ[,$KVy8>t)I\.U* X{y1kpw= +w!FZ +c7oȸO~G/\ӌ"h+H83uTa).]X'5}CGOj%'8vKirDNM~2N9<](i$ +_NnfyEj; _srdK;'D;"-(zamިaKu,IK{hrTQUji4
B^ !$wn$K2=;72̰3Ș=Qs;uH!6L.y#QSi7"cYUuvApDՙ:s'|o1EvLY#0:<SEs
vH6`5{e+*ƫ`n=2?,vSL՜9^%o_8ׂBx@>BwG +E/g̽We츎P !D%f + WϢ3Y6٫W/D5<4Y.c46ojWiz%`)>>EHlZ{Ч
r-$H$qnt)<\3әk*o!lh2Ot|3X ar̆
%x9UDܹ<Buqݏg?=URE&^< ֯w̄TTF .@FρZbUwřگp# +֨قRw/{nw;?g'
PGX&u*=
h,e~sM% +ftͤ\)Z<n*Č?sPA'I_5h!^TWQdMo9W܍'eRNR{)wMu-)l .iGכr.3A|UE9QC]b5Lޕįԃ8 1q0νgL +ln<A THA W)fQmsQzL8j9(]U?SɌy!V*bXD +^)YJ1Uo5r8
lqBe)JS)q{`P1j:8)5tzհiuy;R#i sB_]@(똅JA<r33rGl3Ar<2pqCB%=MSΙd[e,Rޮ6rXb/y,c"v;먲{#nM{lvA#8A#J +dOFJbnD"tz"$d~p0*0}!GN1g*ݾ]3u7VlѺj%c<'?q'8C|L"HO0OQMNt}_ + + +w1#9ߪkBMWN3_'S0jm;.+e_'(---Q8ţ4F+Ȟe$%*O|SZxؔ>}WkFGU?'UT8Dr7SĎƶºR;qu>FܻGp +iqOE
0|t<Q놲%3HsyZVY ѫuH5vs/:Ϟ124"AL"4=E7˴AM&`@u}Q^f?cV"JF@)yZy(?hyM˦tiXC?:S@Ĺn2f9oɲpeex|Lq T{Wr+y?g01"w[Y|}Fr"0? +osktI^4Ժ~GhڙO'%paV(?w.+2CPw\4ķr]dubI !s=J\Q$z;XR/gJL{}Z{넮i'
0ǺY\kLQܩnIIu؟TmU `Ji1(Ido"Ժ +5֍Z6pOئ@8_;: +`q;Tôs +͡/SU=mXJ{N167mbCxϴ9Bj +ff#1WGT7gE"!T}2W(*Wh~Y`J~r(mUS",-bC_L/';511yQ}?VCdqJզIp@߽E}Uۊ/l1'#J6 o]&,3?eGR kL.|4AU[Pۆ͛=<JeN_65(",UY *q:4ʅZXF4\g1gK{|x48J}nLiʒ{
\D.]O@OYS>o~_)1U+5h#pcd3ŵ(AxRǦj궂ڵl.Lej +X(X-nIf,B(a$ʝԯPYX4s?>Iˉ0isXx2 +>ei0+@N=>JYxjQY0ބ@RsMPM'HeuΗv=Ab12]o(wiP!9jdf~^Rb]XjA3^: +<o"37
>AߠC UCNas
rnΰ9#JQfRdx/<C[j*L.͊+J-!^A,Ez odBj2oN +ZOB +P9՞ul8nd
)\Rqiz7#vf(@FFSûD3U2(Q
nT9vS<fPm6?̡Ǜ~W76h "]>J27z n(YW:bQ[5TM`bl6r6uLA +VqyG7xY#=*X>m*;P@FkGZ} +.0J 0alt dNwY;zÜ2 +Lҩ~e>7r&3mf:4%>GܢDZ9kr/@s尮N$rѩ0E +O'f)..Ioì#;H&w@q\ +i:=Mwq(MK'"fhV>>BWkvZ8/joXT +@( +7P'"/{8O(IpyU'PqXM+jR~ų4꿟Ĩv*<1N+^!xeE?9kgQWz-5m1W!jG +䤓1DZdU?Q'E,뽍ܐay¿ &ToP4BF8X19혰xXIQަJ:@CΞ>:fXH5]!BC>SkKSOo*8EBMVFꝝ})qf*Hd+[4w^PU=O%R.܌Rmr|Շ Jv0x tsDOBYd>QBexf,Z07yIDzLp~Y7.9$-ڑU}{~d&wJ +yL-$af` +!cp`reG +¯ˁK0,@@k4/Nf2+9qfR0z$rm;\|"7zybKDzcydY鉺˔(8+\%a>R(px0z9YiU۳0]LRş!WSgkndMݖ6ǫfRos\I~6R.߯څ[ޙw-Ү)GbeL@H-(u`&U.ER|A5(~/ƍǕ1$i[4stZF7mz.`{J|F=ٚ#\3\B}E :M@TMYbz
;%dq6TCRJRqv\I:ՇO-kIH)XuZmeȀkp:?c !'+kzbgbu +q%YebϷΚ05f!$WNr +U!N,2fI6o&ĥ}BJ,+BL%̚C[pzSu;^"nH\ϥpB+}:Ͼ[?^;@ʳ[D\@̻pbh&?I{?"ȝ8oYETx<ⵧ-B[tĈsUKT[J +kK6ZװaH@kk +/ +jd4dm MeN#!K*P(gf|a +OiX;s6q{.
;֖$Զj>yK^iF +I3ED{b nY'ovȲTPIJ +5~iyưI +81vk +{j.fYnR̓E)5Wwrᄶa,v38cHrO; +IWA;Յ!#BtPb[9"jU_
tL@rRB1Vk%zGasv%|c&`7a 2h)~Rr%/d>ΐ[5-Gm{Eh3bġyȘض'd*h9iG^'AsӐebgλ^GDt)8YIl! AHVm恳8JÐh)e7Z/fGCN͡`ҩc'BG
% +sjѧi;653hXɚm;P(YA$$qnc25|Z4!Hс/ftˌڳ맧wt[JTE7U?˕ +FJ'-ωz1T@+ VlZic\0>fuyOD¶ϙ/6ךm&R'l2784vQ)`1
2I\yV4=eO3I4w*B"(frd/W%fpi
gsWyÄ)mdY&_hkϞL\fG=zhhK `˺H 4J:
#!ޝ@J@bf\m\@+ Vl?/tʿ1Ҙ\\ +?gs1 +?F~u\ +5bqXLkPoధVƇddvKK-@-h!pqKE+ j@=6jPO=#0=HV@MÞJro|؎*vvR>qR&5NӻYO*gzLh8>| Z Xh%фQih-L] +5V"M8(
Z+B\| + +MEDq5D@}g\.8BvsЊηN7w?>x{{uէ/{?zuu?Oxg:,g=O/+a^Nޛ~q)64g~_mٳZ3VK-eYk3#4)aI+t㰘nPIX +)=/Z6]0b$펡7fFZEBX_ɛ]Au-.*sø +f7UʡtZ'Ք +.>-8&[mRG0#H CPwZ,]#W/H]ͭꦰN +`kEvg}hcVPZUiB+&-q[(EB{-T5iB+&&#W. +@c@+7 +H+ 8Zl4+!vS:'Ak4}Bf%-ӤP`a;P@vABPDhs9AVP+So +)q0G;좆~Q-*4m~0[Xη"P]p*Ɓbo'Ӈgӛ|Wӗ?^_]NL'5ng&A?zJ䦗ӻfN)D~2nBiSG_³:_95-Hω>~l}YJT1gX4lXbN7zqu[67AWepp\?.`X(I{cn_LЫ/t+FsT˫@@Hig~
֡Z7/u)U\!Tߍ'|u:ZT0/wK_c%Mx'p'WLdvChFc۵R +E}&cgf_۩bROQm[AnjO;A}q]SNk-hS(B$C;%@
̾xF`.6ŹzD`,iMnzP(R
VjV<,mq5i1+rB!.փWފR-.B#έ5 u0SVr}m+pކ0=BaL)IuǍ
Z ٖ`H$Qk5=J([dS;ElCG.ntcV13b\Kia"vl|[Ey0 +% +ɒRc=:rˆZK+#lp~Kx+Wvð_:ŎDRz[י:@]_OJü<E)pZ|3%$k-/`I_OM +MV.kimdxfFXilű_@bǐ +sʨCc䉏
(bk,sƣ$=C$S[*j$G
mZ̒O#5moCR9 +^֟C~7+YBMD9wÎ(T=Gz`Y
)Pu28Zt1x +JdRQ1 >{Tط6;(9k}͜0no'q:go`K;`LN;.2XiTsΗYy`L_ミ+lǠ:7 +-r91:u~O3{?a0<!_?h:L8#Pb!YX_\Gy:`+oqj +yIJgiV |.jgR+P#R +veË㬅JgY#8edubd(y
ZarbnGBb-hs~@&뀸MK=gTz;I\q7DȽlaAZL,N-
:WOʍ-q9I5umӒZ*>@4PLgǍm%xt6L\v^n*3t|o7;VXh"UA,BۼćZFzfޜQ^uq>g`>PJ>ƫ)4"5m*[3<FˑO#iI|F#CE`G Kts[Akn|$\IOھ%5#wYK`x[E[HDNR7C$igk\'K^jbͱ[!SU <aJTfKcEJ൰{;jUӳjuiTF9znר*InrnDhM +Xh*f[צ,ݖxYaih2@<&\.מ~c[Mh!Q|EPcz:UסZ*9C66X(X +"CYN84F9AuvS~Opas8 Ps-08$}{lñsJP|p'/2I*!ӡt(Z-!-W&AW!._udnhHPY"?86dc&ɱ
"-'Hi=7pEشfOE]H'݃ij9?|N)OgcV&=^〔丞=Ν"]wtNiN'9xR-Xr7-:p-6ރ7&cG@tw5鶁cw;hijaY'ȍZ_*l`MW +W
+ߏYRrAVg|nzn9U<PҕJtc!O(! +$$ +6B@|Wch{g͋
ϟΕ: XYsd^:Ͱ҅z,egFxRD^sp8'X20ƁR@ZqF0C)@A`] +endstream
endobj
23 0 obj
<</Filter[/FlateDecode]/Length 9026>>stream
+HlW;%7
s?GRwpŢzw
j)~5af_?/>=x7qa7uħ~mp~h~@A%a!<SM\mѾzddiE]8idx|5q06>_Mҍ53pK &4tk"j.3à0;OE +3ƹ7DΖ>NFNE&Er3ּkv'SJ#י;5llk8L㥋'?e\KZv?9 `G廚ܯ
E/.XI 5:=,IN*i `l9G~-֥Vq4 +@Jg{m{%hkڠ9?XL'8@)Ϋ[7cunm^kH<բܕ7eCC4=\b~5Ō
6˃e|<J9۽,_Xj@[\/nvsctR18͡i +c6' FgAm!z*vMwn$6}`v" .jK}\rG7 pL^oIV|dn/jiY`ͬumv nYf`嗁hc2cCWK`E;@H`Y +6Wsaˀ)8OaZxղSF{;j?Rr3Cǝji7ze】,T睟gIb+ƈ0+k t26=8#TbF_ ,_ĮLEy#oz: ɠyIi){\rg\^m,vf^Vug#<dWۑE9 +Ke"貍Coݿ[*. Çk%Հj$3oUy{"Iy`N('`uCw+³x-0|p .x#+0 s]9PE
|"ֆM f?Q%v_24 edz]韁g->~ܰl^P} +Td23-*o.-i2I:ě<hR[}~#(g}2BI} +JP7ôZr8p*3'=,umRu(7v9P*zw2&zksj1;.f\H}F4l[<וYR]sF(88x?OtP'@gw
]:ѵ1"rV*;di<#vrhyRkykt:Sw-H_G<oɰۨ/#g||RRH萊|GXi8>:.gk%R&Ĕk0[VEn>Vëk9<]:=\:prd$DtM"CQ7ptּ]+ +jcg_:mY c76aSVƒm]E⮹ӗF+4nxu$~h:Hҍ?3uɣrlpX:a6p^[YX9B{ytp.)k5cA@&.#?R(w%+).25@vCqp~y뫂4bۄʣQA;Ť[c˝PA:yjl?l%{LI`gd +38?krv +OUr +ڛ7{jCrhnbT)ImŅsxxx$MBuV>&bȓpﶇ,|xL脟qWVLICJM9+,(nsX +;z.R2<,Dz[r{YyaD_;[aJsGgpQ@g̡ۡ4`ߜ-Alkl3^2yͲe^l#@ +\Y7H4li:qy7LxIWO(gLLN/?Y0NOA7{]YyR/x Ҳ:o1~r +Mˀ6O{݆&#sB$;)бx`xE_mm#GUNb`0v$V\/U[T9l?ɏ&H[[fLӡAb⍅50!ŝ 5&kIMr5,c:6}r
+5GlFI 6F/266$r "11o XSxF]VʔYmbLy\ʕPI +7\1FfKLe#a0+|O`$%t R̸zbz/Zvj$8!1*{/y @GP6GnT.ݤƈ0ƝEzXt(1\;,Ȏ3[(^('fr.}%7X6 h4{;5Y*_j| m5ھ!1 +PI8Ļݖ"j#(Ýѳt@~uɤVa1:l>
j }5>UӪ?fpA__~yZ.ꊘ]nI8#@iP9s`c(^r@:3Mh4A>Ƿ[ +M 6o 8(QCKkN"F{rYF(.aѷ2Z'mlCEjhmAMvj[a^Cj1n^Y#cF(B~#l;ob#ms(#lj3401M(sWi:A2O`j*(HTS>\ݸ4F=4= gd;DqQ'+e8eԜhoDck&m +ǟ&y.ҀXvSwًx +'픣#CÎ1qJw~}V?QĈ=i~q6&iu+:ٙPD +S̻}nqiQ#Xhۚ8vRͅʪ6]ٍ[q\!Vrnc+5x3n{dʛXhY\2eE3zҤkݥt\i`n!O9Mm>q[d36m"צ-e-ÚLj`d_C\FyY|ݢ +FbmL[=S($ʡDuJr<eJ%OcHGAd v¬,3"cp4nn^S 1ZL)XU02АS$;onc7ɰIl8~ Bg%o#m=@J_V8a'OM~ON_G/YլI]PV&o}uVܜɊ/]|O8UCǏۿ'?f\y6H=?4yzgmyJʃL.Gn%ԏO}=y6yK>ͦ$os*{,7?O٢Nݱ<y2OkśSYť;[>i('#?ݑ@utkؗuu8D~3_
WyS9ĺ{-nV6\4q'O +,w͞Zg5+ao|O^z 냩B\/J#vV633aYcr%.ݗCĬl8Wi҃If'<>|G(rW.6opבCU@{ Ghsn Cԣz<:]:?0γ}2ZK]T*QLvrh#^,o0QyǬzH_5H$k>🟋OX_/^Oo|{\ĩnSS}}uC볲)YyS1kw
iJK
$[<|p=t/;; +@{jy"Mu䢘`{^=jx{6YGуvV3ȫd-^U
<x~l(E9zg +vகYQ7> +lKgX7y݃W}SrURQbV5kV6\\T*=7x(rrz +JE?e,<JGN+)UZ卻 +&hz4FB$YAIF$:_J8Ѕ2;RH};?/IE(&kÄflU]dј]|hbخ^еy980J$lb +绔N.4]9@<w.%%‽*5EgZ?Zp8mܗuh]+L<(xN2$a/Jg'gئBO0Q +1o{%/-|_tuDě&<ԐPwi4a(>F4Q'וD +i)[ZqMLO|>:=sn-<NӔ%(]$ep6|fo"f6wW +endstream
endobj
24 0 obj
<</Filter[/FlateDecode]/Length 3723>>stream
+HWQo~/KJ'˪'+r(mn[.e~[Ǻ$pHLY3~|ILVB*BQ**:kԋuU.z=W?OoG;iїtP._KDkmyJ;/>s
xxR>G-M(c~
ޢ)\2cjfqXBr@f10tע, +)ϐlf(rU^IbV\nӴ +3Ck;1'\.{-lq '1U!wQ/*;YoMǔB|LvwV;Րp"3S[̗2&xŖUiIvJV +㧃r2zvdVUl:L"#X ȓ5x}Uvo{AbIhC< exlp.hfb76N1fƹ+ckD#O +VM^~o747uF
#!QK
-IQD<sH%Lo[8le/Tc<vjF`%|iYAWMZ'x^e@qOV< +LnӴ +L`%X}V
B"xI4֥ťI*]4h<0eV*Be8D:|¨Ѳ BS'</\#744.Öՠ4)[دë@ u/6x`~;ai`'aAprDrj˅oSk2TY$eF?AReQHNJ R\~nvrgZ͞K!nӴ +L`%X}V
B"xkQzJYiP,'Sg3aBO/yt R9ϊ ȓ5x}UvQhPwWRL؍MԱixąTKPEkn!31i"1(:TóppF!8.R[cpDL$ɶn|XJORu"lqH$#ԽY(".氠,3pzA/g{߈ИG<ijnqBˌ2wh +L`%XxY\5:WmBԖRѤ73BK_Brj/Xϣ)\(VݖZ69X|mk+
6t_l~-[D/`]9u@`"G<;X6ÏGmZl 3.xD9Qͅn#p28%L>x|kj)lB~O F*<EC]wc¥fb76NQfMc>O?5">8N%~kn!31i"1(:TX97) fT(J%߳1gH'J!DK BS'epADN:T@l6Ӹ{x EwN^l*ꄥ.氠,3p.`
zѠ7y`2iaa%XI=fW]U5T49LicPRB"ڦKhG +ע, +)c% 2M.XZQ"W=n@)sb|Yl!د%Q4g~ FgOҦ~I$lfqwAڠdQI{صc!3+R)좹:TjٶT4:5&QOCq\fZ.~<$NvCF%5)OdAĻ:SThД6ج߰z$#ԽyWㄥ٠]#ݼFGJ04 +B22V^nǖ!ig)yhQ|P"PPxj)lMf[!SH/uj|TҏarS{k/L>Auc~ +4^:/jKei>-7`lȦ,ZV\>cwwM-df7T +/h.Tjf5jmK97]F)`WD*~})? uo58ݙY~DYk%\@M|ZKr&5| xR*ZOFDHoOx/|qWhД62C##xEA.xp3XP83MIAkpɃ|}bax]}lyl#cӿp^ytҦ*F-)F:_,T^)U³T+aK<BK-Ka[jDv<\s _cl{gq7$ospC!|[تK\LlY0y&aQB6x[g?R|L)j8]֩]Tgb;QϘZ6 . +%x1K5cZBuu"MzN(O&to[be|{f=kNHbճRH~t"J{[GI ksmUN;HЖF0Cs[QĥЃ$&XnJvZD%#xPf3]pcb"34sJa+ +endstream
endobj
25 0 obj
<</Filter[/FlateDecode]/Length 12564>>stream
+HW[o۸~/ +]Ŀ漜)R[tMMǹp&\Sr>;r6X'ޣihGha6-O<'Ўcl' m&d1
^q<ߍI(d48rfIF~{%1Y~ +@yiͥmA3rZn-o͏ߘ/I|O;18Jcs*Y* +42CXogL>IFQ +Nߝ%3jb2'vr/#,ݥ۰=Dq [)c,tٷpxM]AstBb7^ ceCX +M٘B+El]aPwvtl^LbǻU?CwѾӊv賢т(g-MK۔G$z.ڇȌ|MiCIV6U%ќv퐼 +aCޡi 6Zݻ|F>E<Z4K{~B;Gό5Ƈ}x;<낾 ܓ&qEIFQ(zn3_ڤe0'HSDid;Z64ReD7uˀ[G-&-r[wNQip$#!ypvjj/w81,]0Q+L]AafLC#;.??)Cw5[PWWt؆˿?GU=j{uߢ[}oQ-oQnު5.MHI@PG;5/iJ#z$ߝ#=~2@A0{:x)~M$ٿ%fa Fnh1ƪz +z!+O]\GB:#P'xEpQ>9,L(c`)\Rhg75їlTnLU:fN 0f ݔ5,n@HWb1HG!,6xcfEYN<=Lb,e12,,T(eRN[v2d2+Flo]TyU=fťN%:t31*,]Ҡ0&-F+w'I֪`R1,Y樝LT-wtC!SnaY]52"aKLN~hlJ +RH,L{t.&2[!۔XSRtiUq8G,>Շ#<.ޅh8ip%6%fypBSkFŊc: +$JBgȂT:Q9VO'[՛1fz3f9PJC'DOmuCg@VMT#:˨6eI0!F NObqgDRBYAflGj*CU|zB
ᕒJI8RWW
Y+NQHdsb|Yo216 8"#vK n1)pcef2;\/~بK]0Q Q-:9"gPp/y+PF]$@1hA|xA[RIM YeYRYFWbdpD{S7Edu]Z0Ŵ̷̛1E-hePxˍtlR>ĐdؗH
@H= (1H+EI4(T:{A8)eN5^Ġ]]XԴ,d Yy +$Z/+'<UT^Vm5N89ċB;^$,~M
n_I=S"t4</v8ƾ琱c^x{/dy>P:
7[$MN Gȯ'g'>ϣ8)HJ{xre0lA@P,܍IHcp!'ݤcdTr6~wX{D{?F)V߲,MB`#UzE*̾醊̾iʼntA!>QϦN +XٔR+[)-\leqΪ+[pS\h"ĦUJYw8+=9ϕ_@]<xzy ֛w\8:иO.mO|ͺ>-Ah'5DziBBM|ɋ~=M"Ҥf8꼢D6Yh;C7YK:шwY-=EUUZY)- +]!-x[<gE&|ͽ*\Rു@D>GqHE#7*4 +
ޤJmV'-]Φ/U_Wm^lT[K.pqCi㳨~/7S/(rN0uVô'̸~kN+M5\Tqhk&Vmz0:hBԸ!ءUIz8m^EdRXV
1WvX=S&9BvVM(ZNYNƑ%,%sK*vn\X~,\&ZPC`b; lkX0uݟp1>I8ѽ;@~˘1 +Gyв[r>wh!`"'K$*/>o;څAyLlH zlojڒT&W;eVWw6;:e94NʳKz?AKLx]-&Y.^߾^YۼZ(DJiZpR~iv$ B|r!uo@@a )Ү)-12*A(bKiSkl[ Ϙ6SBmDt.AـT q$1BOzζ$s_=aU@fF6xj,;0-. +@MB+F5=KCPJK[΅` +WF٭a$_ZJ%y~ +$B'4n +AHA~NBVvgx|$xad|*/n{\\
Bi h +OY聵t}}H) +}>]vţw.ώt.(Go*=ʆVg/^Mf~\H 91":dDk_V_)m8-\쭷iJ%-lGG^T3s"PG\tPȔ5 +R.V֟"W֟"X֟ YvѲ~T3\[ +`{s%y6qqf՛.|}_\^,5NtW(dT0:|qV{_2!2p&GK
lلc[JTRzdWpodpUA[ +QL +kIm H6H*%\vP).gF؋Q'"GꝈCN$މU6`ȔXGp=Ї`MmG9c(BL +391n^&]A$DXږkbqV%y%V`K<¸K:BRVPh@u ;Ȗ>^n +8zղ\y3*y z!#a]piD^v] 9FÐ|p[ +1dY +VpNQo$}R 8 +B" +Փ +g +Œ%$"n,,й'h!aAzn?js}$:,t]a]ϦuW?ލ/g<~Wyooߧbt>ޠwv(K'Uj9~?i=}?rU*Ғh?kD9qd?*=?'/ٰwv_|/zǎP!҇;^k&fw_'ZP6t61<Z7iϭzP+$tzbwny09B&J5~ud}e{*ը+un/,ۉd湜KmS +B0A'SX7rVUy䗠vEg1zm~:3%b|9XWAG>uo4:1qe7k]]aש*qՔu
!e-4qJH&2@v[-O} w 7 =&Yc 5\ʖGNt^dYN>R˼pϜ\'I%)M=%A +] T
:#Ӻt_M8*Wk&|i<}PY-N@, +Zh /'x'YꌢN2A:˼q%٫T5LDs\P}ֺ{kԶ2SE=)UӲ0bUYqSIJ`(([GUX[%fwT5.핉Πa@WAH\wb39"e8@,ثT5LDxR1œ9rg]=5jUE7kWRrĪ}~XmC
m?DXjk
κj/o^wBPfCl?8غmgr0d)dN,
(:1cZ +0ϜE92FX<q.j1T9
!n
!ɮ + +7[8âv)TH!"r|"2@z3`g-~ET&tX,&s4hx&{]N[>{?j5]ˇӖc>F":߭[{]u,Oڌ\/dc08vy74O.n.3+A{=C:qN=O^
=ם<o#9Mt>jDk% >īT4cm ՃA~/}%$=En6Mo +tJLmgR@ؠkhô 96NŷbD:K8Ђ%}Ki7AuoAK@h϶uOYSfl8~P
OMY4-J3cNa\V've6y;S9M+Jys1^W%tBRN`9ej9˽}mHZbX̂/Y~:ij_o˕07imYK,+*$z&j(N +s ByfvZmє>K HͲ&Y97KT5|&P@r\GًC'h,Mfk) +щ<>qdUj +Z8YSMBשn(]/տȯ9n#zЗÎdr7`R~+c?d7g:Zh]bU꽨;e/p|8(_6,Rn~</.4SYeٮ|i!qrs.6Ů0 + (Wg, <0} 3㦑Y8}D%ZBvp7|g+UPRaNU@Qux{|=?^\_\ov'^nٮ( +at)|
*)6iZH{ˎ\ L`3nae(Y1h蓝iA}Gq(g!Z HVdn:1J-3NV%h>NЃo*g_#?158b.DXT$ce5,T edJń*kTZv'/ +9CCtKŶ0CX= +W@͠n[f&
̫ +5u:yUR@]plQ@4$@/}y(f;3>fc+OsOkҼW<B=Һ^R3[9V)zڤsH=.7%A}6wBn#A:@0=*tI#'5 cWbPbR
@D* +j fB,i 4ȚG! M8$@{eneQS,D麢!
O +ZV3 ύ]M<rz'J$<17jӈޤL(j0z1U\,j@@Ay;x-F{MaXLD/y] +csǎGr F.UG#39»ZςJrfђAێ^2#P̖,[Mɒu2zp ({#kb7÷ +X֢q G>F-H/ʓq`"%c/NGY"rzDjZ QBEN"Q x%XRH@(l"Ŭ_Eq/U5q4v +f0ݳ6$8}tf!۬TY̦g^ sƷ_(KHGYV +bs8bi1eY#|A,7lD(TLtjrTB?ga
:/#t!`Ea,lIc$1B,|=Cr*j2q"n{ #g1ppĶ"b +z{w;$r#ɇN+[!!FQE!&U<'gs@j +;qZ[>ubXA6KkJQ'(o|\^;}zZ7O;Uۓ8_49iKOz|)\b)tjmI_T7[JʉG5R^v;3s6ac&)ڃ2L2l@+J1:sM"#D¿#g29"!B7
\:I]|&, +綖N=S<Jb(ֲBc<&HQ Sq
Z=q7wjaMt}g߸!c}W
(|MαӘ:AfELt|Y/k9/]w!3sLŮKz
U`-z!5av5mc!EzLa; |XmO )]M{n=|4k/ +Q7pyoW5VRuU0%ؿiV`5-cmkX[lbHeHXҐUVH)Lu0UZf-'Y9t^hQQ$W +endstream
endobj
26 0 obj
<</Filter[/FlateDecode]/Length 16172>>stream
+HWNK}?H4u$$XDDQ.pn%?s~dc`%R(Vjյ_6C`/'QCT{EuQzbdži6tuwlVqv^!Zy +<Fz4Jfʋnh8וm[q/AOQU< +Ax;4n|K&}>[y0N +<q} + T]r#M㨸Y\s1>KS8<`/zfg܋m2X\]w&r:<S>06IO*Hq=jQ:pl5W0Yo[۰%%F"pFsArn0s0d>Hg]}8ײzȂ":^(
._6 +
;]2w~},lie:HSɖnt`i#-mFʧ4er, %U\@ j8wG/wOa + r#Jb('@pbE%rQ%5iIL˫(FqO+XTƍfE;ϓ'H_:pl1jNU'g:yA W0V +l)*f"iY7p_LX%1++$1 +o5k)#TjC@7eCs'7nP| +b)%ɵg}xFE}qp#$<H=m]Lk#M㨸YJ"GliZsylw_Bt[Y7m~ES]0Co$b69C +ǶYOd'glw驗v%]a| Ъ#&"nBF?!
Wp!B7)!S'^~{3 +.a=M˅t}Yqta^6·H۟`kuhӏQm}NՆȎ$B{vƁ]=۱A\=dQڗ#i]>q'6~Ii"[{|_BIA8DH~iq]+(У^~L0(9p88+l_Br.hZKw2_u;G/{4,OSz{
>B?Hp}'# SiܵD*,8%C=~nM"4S{:Y#gI}DUuy)QwR(dsTuIϬZejdZn~'^:{ޞ+$- q)ŎnށRD*"Z5$nB/^?h#sB=6`ʇ&IRzphYw ?ĕ$vCwkv-ơ +KP^׃㇂LKGXF$Kc))ugjYВ +Lxzk7X(J
1J%a`JD8PAS\!;y~ +b1J_`/iJv3mG`Ch!EO +Iv,De̅k7aҶo1תbHskLK5@V\UCcU )N^3ƶpBm>fL>oﱍ`pLsa"(P0M= +^<<& +6"y:ӫ)5@]8;F}% +CF1>!IA3c&9ԡ0Abxx`FBAc.nb"m1l + +,h.B{Tµ?HXBpM!<qdpΛo* a +®U;ft.nߤD&Tscqz{?2gy6*i
秊L#YD,+ 掊S'#RsgRD֪p.Ur6G.WE>l-n}8:z;⚇Ӈ,K?eR-?=9P >V3U(4K}sOk9)<>퍱b.T8JGhpʞU.QԞ>5AVwp>xw^<\MhzFvN}VĐ?g4'E=K0 \_}S<'ټ,W`?7/
ϫ8Keۋ,R[|\')ATy@QQ_UWzKO!p1
(Er<>KZˢy94ˤnr`*V͇jMvtKꋿg,f$vrҊ~͢ _n,Q;u.'«aAGk?6f=i*:O +%GxZ|ԓ~\=aO8С:QŠ[N2O[YY~T|E'4[νvZLF-#*ɮƢIVx|L-$}g$`q^j":QY'Suae06d-2eyy̳jLb#E(mnͳ +ft*seY"6 qlU9wi6YYY6.DVbFҡ\Nkl +?k?fׂ fEA9
+9kYe~VP6Ll%}pgXZѓ&Gez/ TN +U^97c弉J$l!{W"&wYw:չs + T +ǷTNE[ڭ\e\+(W1C^tY˥r&Yޖ/9KLU^'epךqomMd6LTQ + +VÓRaD.Gn:MSBlC
3Uw$U"{r} _M_N,+vK |s>"ʹ.%Tk怄 8!el5+ +dM k7M("4B+>;QDv
e ^TʽM?,kdnIDMw=ש۪ÐY^$H'U1;L3,CH͍O>858=xeijƳoŲ}z{(Fck&&@ +MNVN"[.f|qA)S3_pgxHE.[@H+{.@5qnH/+sR]Ll7=vIRL_.y8
d# +kX[!xsURO65=Xz$|ik}'h/`$a
R6K1AP;*aẞ +++^. +ha7} ]mLC;Nǥ + uUK~
`rhQ0V"X-Fr?Ҡ
IPOt@m_t4g1@+gYSWĽ9A%Qa^WrC~7Ѩ@c˂lnO3ZWS`KٯHsŔ$ϫ@NI.:0xI#(8AUbE(",bT9 q0rdh:o!fm o;^}84\pbsr%?n0zl[8%L.`det㏔r؛ǒC4Ekv*f'x%qA;@y\bE54A܊t5H-8%tqmW +v&KК}SA_%;{g4Lt
cZT% +% M~aaˍ 2Ls҄AG*pi 2NC4WxE@HGV]גn +?א +ܖFEqYV/nڳUoNvY5hpϞD߯Ls]hNS~qTV3Ţξ|z!?wyU_pm452ݸۮIO<,I,|bGM`ߟi(cjlrz.
(5DiW?mݦNnrld/5x{1b\0+K|i۾8ن h|Q/v(!=9v`lloU}mqu{'=d~LGU5$v]*8JߚH`S-d/|OhU7K&w~*Ps +Bk[7KISuY(4^"ϳyHƾÏQ7lgfYMǵg:TOyɵfyyv#R9>8Uf~mЩ0.3lkrvS?XV,)V/ΠԞ^f[+(N/y%}FnP
=QjvVY_TwgsWN]}+ޠok\-@S?2pHx?]n
tڳH)]LR}u2]%l_K)S}
^m^.*5jV +~e7S..6nZs3;`S՚(چ:m#N5}w*NUKb, FqF5`{ Ɯ>PE_M>N=t(] VJW[XbE Zg4\1%Ornw+iWSF5k"vCI,l f +'*3*3vMlu]&᧽|K/~./C|o:T\hځD 1:^@O +*JK/RdRo b,E +Y. iW
}mjwPj/$>!s Λ+ +teN`vn'JExyqqp$C TokJ!UEs @
bolcu +ٿ,#maF4o7+xo:n۵l+W2$O`L|fK{ck`k{Kr<&Zkp^2;kQZ\gf"pl -:FM (LSP 35#_8 +1Ut}x]$bYV:e3={~15R +G[q>KX;MQh9X +JFտhH2xjFx1>$*H2,Ow۬XX^K-Ǧv¯f.մoU
LR@adh!lm#p個X
#ROw5H%~_s_ ·:Ia3 cuk[O{8{ځL}ܩ]ׅ/dҏ@ZP*H͕^/+FB0l9#-opV駠QB¨ѳ"k<-l<OlomCX^YAHuq +_}:{.D㻷M=}
k
naV:9
ⱲQ͖CߡYg{-1VI9-ey4W~"{rm2JGefq%TZ5R +!4*Uۺg0Y2
3]q4|4(796+L{%;xj̑W+͛|M(z}j>Ŵ5ņ9FkJrӫP{VЫֆ+2K~ 劑ٙJ~][9>|7fi;@k'/f4{HR|
x'V
xڇV&ta)`)(>)-Z8M*گ3mi0hI~˷4AG~^=fܮp%A|3SԲ~pNԬ}YDz2A/9
WZ~GA!,`VGyN9&j*V^2Ar2|M>$]7MC'˯}ݎngƠK`/i 0Y +,`7qIA<5T7-Y0sVO.`3l>gvSw\+lbBjfzG&^ٮֻ3|VL\IZEͮZd?r2`ɧj?m9ƥX40Ht +*䚶|P)؍\^Z#darw1.JUFއε +\w=BϝLabN=ܮDg4䂤5h] +Рnv!!99 +3tR +q;Z)G.m>ˌqFմ QX*˅N#p$;Lɇ{]+ζlC9z'q'uoރQ#A2p3kM'&DjgsDǘ=Q&bnIQD`U"}m8C$yXcXɑ#W4]
Ke"ӢS{-hhm)CHP%l&<$]|aٍ;_zjyKѮki dy,m8~'04BMY~y2 + [%BR +RtAt]F:1CFLd"RA 0d!It T@9U'8ߞ+=Ͽ~#ԙ6»:eȖio'E)Wd`X:6^CH\z+W\}Wl'soJ̋u۹C[> ݫQ_2M +ԥ1@2把0
UiH.4&-\@aea88N(tHvAu߄82@$t?[~(/d_nt"ljJ7%t7!@~j3]PCzQMB6?HO+M Fʟm~#wf#3tgs{H +3
3
;lpA"m~J[R,'ӏG$/`9<B]ʐlO\`ZjzK>$q1?V.gj\D5J}$mǬ{iss|0?-4p3|ˌoV4~\t$;>\ QtRE䵥_,$lP%<l>,j?%&jЭRGC;`\,N)#Cf[=|ˤy},.Rk yQ<=BY,ݵGe4rQc +r++OC-R
<gays+N=p:]R%i 溅j5) +p_,;.L{SŅSdh_BPwWb\7݉)wAg`(ofܭA7 6[(9٥|"gL] +vX&]q>2|<A?[YjQ2 + +sLo"%㺾3
v.~n@
7`*4Q#Qux}hX$;됨\#|)j,BOmܙ/z> +XP O
`ZX-f'`~< FmݡY QL7{SL)b}D'/R~Il+V.v:H1T +0"ph.p0'PnOH"*͔n+Z,ubpTt~;u[qzEh
n<FvQ6aySxj#xSi<XС!uZ"l63=c]QysY(ΌO?OxDVȒSkXjRc?4 +i8=h_I5S9Z +ԹYR}>~pcKGZA{LNCDžE$"0y CMLɡ>|MQ%:@~eZ(:6
`rbgrI<_hx={.)z՜u9<F
;MCq8囩Mkq,SzACua"f$z]khfT.Ix}PDU6?h'CJ/z=2J}G_>Vzp\ +o}h.uIB!!O"QUkxACZq!|٨"f+*{SD'ng\5_(k~'wNÙw3)zMy5]^sVKSK +G<ڲtB +(鄳KbV!fP@J +Dc;͕j]³Fkg34~.*KۈRvZQ +i+2bC:_Hb. +pL˚lrb@S+D.z;adDU)oAU=u2j$F9jdSx&֏FmڨPR=fh<*֬+[#Neu&L[hu֕y몾+.|WݦHݒW'g,pBuQ74lu/R7} +endstream
endobj
27 0 obj
<</Filter[/FlateDecode]/Length 15293>>stream
+HWV"}kݏ`*ƂV)PT.4MRST +0%PIÀ
wDH'`DPofCϺK0$D7Q +?N?G1{У=de.ǝ[FnZurkcR{_ji +=~R`dtlJllkSd-E6~A+s$Nڷt(ir9̈F?.n`)$bdI/a
jAj[B0=CPXikl~4q#u
/Q1i*|Ntf++wZ$f4{KEn7%q8{#0\gZ?gxVe՞Q$rm0Zyk5xu
p=rNp(f5fuEp
[y*eՋGXVAOtRBx/գH?q)7Xߪzq*Sیm8pBZ]Yj1}CH`xZt]@9ňwW8{Z֗Oe >GfVA?/6?<`yߊf(OwGr8R@،1v_#ŭ+,_)
0_3k"˛
&@%mBB5,O=wn s/ (aLR.m|_#vsBR +Opz}F7JUJ>:an+5J·rfVhxϹ_Y8K*]'}GctP{cWu>عRބ9c
|8/] +i*HI;<NFx^)` +SK?,yS{OS +6=>Vh}#~~:+2"3 $R!S%V)u`bIdqK9*̦M\3Y4Eg'i?U3MoT>m|".;|"Y-*"r2\lF.9giEip˛dynDuZU21\jxOE#O@<Gp*+8[8 +z kp\1;.Zb.!ə- weA\x*1$s3\&̓$x ;x
ZҤWn>nBڛi9!&#yC6GC@A)uG<NAp%OG*8]JAnFet),| + 6!e_e+gOR'Dҹ!s'DnxJLؒ1: &R]LZע$7
o V,g +<R^*<<xTct, ܣqc7yC +l<~hqc\BIWz7/=AA3'1]j?S'-3tgP1H1b42dmxW߁H1C.op^B@I4#p7m6F00i]) +˔^c{4#v4^AͫWY4Qkbfd`HH[ֺˠSXʗ3_o4E&z=}jܔڧAmPkz%"ŖM(8"".#Ew\$M$$i +N7] +3/.{b-D8=}yv`tqnw0-%hVCQ/=U;ыwHs6[OrV?TXo>vx4o>W MpXA^ )8Zsĭܸ>l+pc^LUĄj#*7@emT>w¢iPa凢P SS0#KOՕjFK?ר?-b)>i|_Pu}9(rS:Bw@{)!gM}ՑO|=^`|\&wn6[bL@SPNRX@w/*PxZ@8%̴}c7uԛܮ0PjjslցË6t<j9'A<Mbl83vW<ңh`'SRz!bOa0u&c +Au/V
ET*D9xH(9KtJގgc~p|J\4mdCljsSNMvQwuZw;IHpbz$J5d?M[hubRD~
IqtbdMlbm(hC614)/^Ñ,iO"+&9o +vdgG-/iyẍֆΏ)QM ƊeA^vS&7ϘչAhk`Ć^6g:. +|P^M:jJ\]3Qh-
VApNݠl +j%Ƙ0ƾ&4*1Jb/FxKs6@.M OBA[M!7x2vn6[<S[02{~~5eZAS^"S=9GnNg0"hm(2h0Z7RN5~U
pS=x;?R_F&:>"@G6 +IZ_wIOs/vRwTKZ +?L/? ~/64yO+Z_N+ZU\p^̦ʞkVk`8#E(tza
j-_e4&*&,:&ZG3!KFQ,' Jb6b?*+e6TX7oj_yC""hOiLN炙di=.m,CFxz[/|\pDxuYR./[tuYEZQKe.ENc!arq&즎+GEL5s'$6nJ4NɄ)_y/PsEuR ID 60iS5К)1)F'C6(j2'ȒⲩKo':<,|E%֖ +(EzUD@"xFI'_ɚ]^EX
s:z|+͢_C[N,2\EzNY<p:eUcT+x)d +,j`T7Dj6IAӛeЅ!sV4Krx.gT\Z"0:̅A<? +GzҠb/vd40Eʱ7/@^騒->X. +I 2ڴ<lCZU,E~EUzoU9t,N5guyYUM{ì@M'A,@%`*,f4'2T+[ЛSwYcXڄ91?Gؤ2{:T16鵀YN&iY YrNI\fhdI6U~*F|7E`Vv"V,%̎(wӂ~DDkz
n1Aiگgz𩗮m+6a-s:q1sseفf+<9t_˺6Amf2GG\8-t66yv7ȳMlHy +817GmE+7\o{BP2rB3Eh + `qQ^; ij2шN.cVrs@hBm%q[cuuYEA%:d +(G%@oeFʶvc +a8GAJ^@@
lhO A''H(aWҁ
`E#he6~b,YS#
NO +ڀ|a"p#@ +"-8*ǡh,Yh@ +KH>`#JV+W/2ڣ!*y㵌 )hSc),QTr\![ srx{yLP1!W"(琑?ǬrƩkeesąo9F$8n'{#~'P^?D$52[9~!+]Z|H%sxc*S]3vbN0Aӆ%0mR0?_j8 hȒ*WYS2K}_Jo 4 +"( +1O'«:/]]y%7͑ґFc2RL2Mk
oRr#{k +P?mw63c~CEBP/S-E*p̉s!θeYl +SB$% /ainaȲM%:KCWU^Y*+;&Uʄe}nhL-moBx
}TM=PbSoQomvlF7fታ:]:.UӗUpTS*؏0F=Ce""<FE$*|O tT cLC`g8eҭ1:[c|L]Nka~Q1obh2IW ֮"~Ho۔6=tLE;(ځ<ZZ*W{i&o~\s!3>[C[yy1nQxMT]LVf00FE/yUłxX6R;3v6fRQm#m6 aQ2Q2R~wƾ tܹEJ0`?P:[$CO5OM_<_ 07-ܹx0ƫ&3pQ~H(o~AO<_"FW 2s$?B"0R"G'(TaDeQ9qHm` u<wal\yM[ԘS^kG!-HLѤPN,'Y +P9OU1~@ݻ*jjU *Rq\+l(\,KϪJ%\4C @EY5~br ÝX\1q5)ȷOwP4qxrfo? -./9WQj.?cr]REz2cihbNtgy@//Lo352^nbTb7-#M8^B~FNz܋h
8{w{ҽ26y1E`T+̝k,?)lc.+5(X,p6vQt~!o]kN;.yf$9x.tf+Fܠޠ# #^wLzwhrh)2aC;5&%
r&HCzE
ɤ!kOQ595E7k`MyA=̊⢟tutJ6(KTL,goUgc`1~9劔}t Zd@^uZ$ߏTȞe#?P˛PnPaǀF]&"`V\ R*-H7jnMrN}x9`<W;&aR=mcR68mIEG{kKÌ("][Ⱥ0(DXmܖ-;:U8xVtWiS">Pn^wYdUAA/ +(o2W #:j:uu{2neR.ۼ':ӗג[RhT tuŵ<?F,hk}fཙ8!c
%R!9J7-M}3qNluJhkH'NC;/; +0 +m"[AC +.Q^RFYnV!#R'Pg3Zpr\x@RgA@LP*.z%瘸H8vNؑ힝 +8:Y7r+=PY(&-K[$K@[jaO:b}Lbc IYQ@S1GDrXC
f +-tW<wKɕO˰Ldž9(Fc ;=9<\uYuҨKbc_PAb ` +"LNٓhd #Q-}MnY_y+u{U,L^4i&(г +bY҉% nK0 i
п cPaVa_OP-X.uV%M1}.3c|jFl#ix\M>14f^jMa@8Ńm|vթ!М9
(I͊$ +$k_b,c4cR-.bAN,b^l +[FzW;JJps;Hi|LJNswsFb#$ߟGK$W\F(/Yl>VJ3c +lK]/ +&,bxM"OL20G1dQ`07J0o &LK;6z{V^l 9=RYATDC7"2$S5
O0]C1*BM(ĺb5Uv +z4=QB$WdE'bM0E"XpYg1ɔz{簉n=*)5+%Lɒk!ynWk劾cY^JѶys5Lhy xK+ᣌINTHFx5i+&k^(ڢi\*H5:6a(b>AZGFz^TS0C`k`4ۭ)&s@toማ2>=]c3k(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 Binary files differindex 07bb66590c..ed7a1dded6 100644 --- a/macros/latex/contrib/jsonparse/jsonparse-doc.pdf +++ b/macros/latex/contrib/jsonparse/jsonparse-doc.pdf diff --git a/macros/latex/contrib/jsonparse/jsonparse-doc.tex b/macros/latex/contrib/jsonparse/jsonparse-doc.tex index 485bec0cbf..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.2} -\def\jsonparsefiledate{26 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.} @@ -196,8 +196,11 @@ \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 @@ -205,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}. @@ -248,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>} @@ -356,7 +376,7 @@ Parsing large JSON files can take quite a while. In order to speed up follow-up \begin{macrodef} |\JSONParsePut|{<token variable>}{<key>}[<JSON string>] \end{macrodef} -The commannd \macro{\JSONParsePut} is used by the externalization procedure to re-read already parsed JSON data to the main file. It essentially just adds a key-value pair to a 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. +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} diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty index 404e769ba7..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-26} {0.8.2} +\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3} {JSON Parse} \bool_new:N \l__jsonparse_debug_mode_bool @@ -51,6 +51,11 @@ 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. @@ -77,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 } , @@ -104,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 } { @@ -121,6 +185,7 @@ \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 } @@ -132,6 +197,7 @@ \cs_generate_variant:Nn \prop_item:Nn { Ne , ce } \cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee } \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 } @@ -591,6 +657,27 @@ \tl_set:Ne \l__jsonparse_temp_tl {#1} \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: } @@ -670,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} diff --git a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf Binary files differindex 552ebfe62c..b6afbc2fbb 100644 --- a/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf +++ b/macros/latex/contrib/profmaquette/doc/ProfMaquette-doc.pdf diff --git a/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty b/macros/latex/contrib/profmaquette/latex/ProfMaquette.sty index 9d2e501a04..9564aec94c 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/25}% +\def\filedate{2024/04/28}% \let\PfMfiledate\filedate% -\def\fileversion{0.92}% +\def\fileversion{0.93}% \let\PfMfileversion\fileversion% \ProvidesPackage{ProfMaquette}[\filedate\space v\fileversion\space Maquettage de documents]% @@ -40,12 +40,12 @@ \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,CorrigeInverse=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 +57,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}}% @@ -140,6 +140,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 @@ -894,7 +896,7 @@ \]% }% % -%%%% +% %%% Définitions des environnements pour la correction \makeatletter \newwrite\verbatim@out @@ -1039,6 +1041,7 @@ }% \def\PfMTexteDuCorrige{Corrigé de l'exercice} +\def\PfMTexteDeLEntrainement{Automatisme(s) lié(s) à l'exercice} \NewDocumentCommand\PfMAffichageCorrige{}{% \ifboolKV[Boulot]{CAN}{% @@ -1061,6 +1064,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} @@ -1194,7 +1234,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}};% }% }{}% }% @@ -1553,6 +1604,8 @@ \PfMAffichageSource% % \PfMLienVersSolution% + % + \PfMLienVersEntrainement% }% }% }% @@ -2025,6 +2078,8 @@ \PfMAffichageSource% % \PfMLienVersSolution% + % + \PfMLienVersEntrainement% }% }% }% @@ -2318,8 +2373,6 @@ \refstepcounter{PfMSection}% \PfMChoixCorrection% \refstepcounter{PfMExo}% - % \setbox\PfMBoxSauvegarde{#3\unskip\unpenalty\unpenalty} -% \setbox\PfMBoxSauvegarde=\vbox{#3} \ifboolKV[Boulot]{CorrigeSeul}{}{% \PfMChoixTitreSolution% \PfMChoixHideItemSolution% @@ -3001,6 +3054,8 @@ \PfMAffichageSource% % Lien vers la solution \PfMLienVersSolution + % Lien vers les entrainements + \PfMLienVersEntrainement }% }% }% @@ -3092,6 +3147,8 @@ \PfMAffichageSource% % \PfMLienVersSolution% + % + \PfMLienVersEntrainement% }% }% }% @@ -3343,6 +3400,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 @@ -3377,18 +3440,6 @@ \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% }% }{}% @@ -3436,56 +3487,39 @@ }{} } }% -% \ifboolKV[Boulot]{CorrigeFin}{% -% \AddToHook{env/Maquette/after}[Correction]{% -% \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% }% }{}% @@ -3497,17 +3531,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 }% }{}% @@ -3519,17 +3543,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% }% }{}% @@ -3545,24 +3559,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 }% }{}% @@ -3575,17 +3584,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% }% }{}% @@ -3595,17 +3594,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% }% @@ -3617,18 +3608,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{% @@ -3680,17 +3668,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% }% }{}% @@ -3703,17 +3681,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 Binary files differnew file mode 100644 index 0000000000..7eab416244 --- /dev/null +++ b/macros/latex/contrib/rpgicons/rpgicons-doc.pdf 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/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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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}, |