% tkz-tools-eu-utilities % Copyright 2023 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.00c} \def\filedate{2023/01/23} \typeout{2023/01/23 5.00c tkz-tools-eu-utilities.tex} \makeatletter \pgfkeys{/tkzClip/.cd, space/.store in = {\tkz@CLI@space}, space = {}} \def\tkzClip{\pgfutil@ifnextchar[{\tkz@Clip}{\tkz@Clip[]}} \def\tkz@Clip[#1]{% \pgfqkeys{/tkzClip}{#1} \ifx\tkzutil@empty\tkz@CLI@space \clip (\tkz@xa,\tkz@ya) rectangle (\tkz@xb,\tkz@yb); \else \edef\tkz@xxa{\fpeval{\tkz@xa-\tkz@CLI@space}} \edef\tkz@yya{\fpeval{\tkz@ya-\tkz@CLI@space}} \edef\tkz@xxb{\fpeval{\tkz@xb+\tkz@CLI@space}} % correction bug 2020 \edef\tkz@yyb{\fpeval{\tkz@yb+\tkz@CLI@space}} \clip (\tkz@xxa,\tkz@yya) rectangle (\tkz@xxb,\tkz@yyb); \fi } % for testing results \def\extractxy#1{% \pgfextractx{\pgf@x}{\pgfpointanchor{#1}{center}} \pgfextracty{\pgf@y}{\pgfpointanchor{#1}{center}} } %<-------------- some tools -------------------------------------------------> \def\tkzutil@empty{} \def\tkzutil@firstofone#1{#1} \def\tkzutil@firstoftwo#1#2{#1} \def\tkzutil@secondoftwo#1#2{#2} %<--------------------------------------------------------------------------–> \long\def\tkzutil@ifundefined#1{% \expandafter\ifx\csname#1\endcsname\relax \expandafter\tkzutil@firstoftwo \else \expandafter\tkzutil@secondoftwo \fi} %<--------------------------------------------------------------------------–> \long\def\iftkznodedefined#1#2#3{% \tkzutil@ifundefined{pgf@sh@ns@#1}{#3}{#2}% } %<--------------------------------------------------------------------------–> \gdef\tkzActivOff{% \edef\tkzTwoPtCode{\the\catcode`\:} \edef\tkzPtExCode{\the\catcode`\!} \edef\tkzPtVirCode{\the\catcode`\;} \catcode`\:=12 \catcode`\!=12 \catcode`\;=12 }% \gdef\tkzActivOn{% \catcode`\:=\tkzTwoPtCode\relax \catcode`\!=\tkzPtExCode\relax \catcode`\;=\tkzPtVirCode\relax }% %<--------------------------------------------------------------------------–> % Pour savoir le nombre de décimales d'un nombre % le nombre dans #1 et le résultat dans \c@pgfmath@countb %<--------------------------------------------------------------------------–> \newcommand\tkz@getdecimal[1]{\expandafter\@getdecimal#1.\@nil} \def\@getdecimal#1.#2\@nil{% \ifx\empty#2\empty % Si #2 est vide, c'est qu'il n'y avait pas de point % dans la chaîne initiale \c@pgfmath@countb0 % \gdef\tkz@decpart{}% \else % sinon c'est la chaîne qui suit le point décimal... \CountToken{#2}% % ... y compris le point en trop ajouté par \tkz@getdecimal :-) \advance\c@pgfmath@countb by-1 % \@@getdecimal#2\@nil \fi } \def\@@getdecimal#1.\@nil{\gdef\tkz@decpart{#1}} %<---------------------------------------------------------–> % code from JCC modifi \newcommand\CountToken[1]{% \c@pgfmath@countb0 % \expandafter\C@untToken#1\@nil %modifi ajout du expandafter } \newcommand\C@untToken{% \afterassignment\C@untT@ken\let\CurrT@ken= } \newcommand\C@untT@ken{% \ifx\CurrT@ken\@nil \else \advance\c@pgfmath@countb by1 % \expandafter\C@untToken \fi } %<---------------------------------------------------------–> \def\tkz@recuplast(#1,#2){\def\tkz@last{#1}} \def\tkz@stop{\tkz@stop} % end code from JCC %<---------------------------------------------------------–> % Tools %<---------------------------------------------------------–> %<–––––––– code from TeX in Practice ––––––––> \def\SubStringConditional #1#2{% TT\fi \edef\@MainString{#1}% \edef\@SubStringConditionalTemp{{#1}{#2}}% \expandafter\@SubStringConditional\@SubStringConditionalTemp } \def\@SubStringConditional #1#2{% \def\@TestSubS ##1#2##2\\{% \def\@TestTemp{##1}% }% \@TestSubS #1#2\\ \ifx\@MainString\@TestTemp \tkz@TestSubStringfalse \else \tkz@TestSubStringtrue \fi \iftkz@TestSubString } \def\RecursionMacroEnd #1#2#3{% #1\relax \def\@RecursionMacroEndNext{#2}% \else \def\@RecursionMacroEndNext{#3}% \fi \@RecursionMacroEndNext } \def\ReplaceSubStrings #1#2#3#4{% \def\@ReplaceResult{#1}% \edef\@ReplaceMain{#2}% \edef\@ReplaceSub{#3}% \edef\@ReplaceSubRep{#4}% \@ReplaceSubStrings } \def\@ReplaceSubStrings{% \RecursionMacroEnd {\if\SubStringConditional{\@ReplaceMain}{\@ReplaceSub}}% {\@ReplaceSubStringsDo}{\expandafter\edef\@ReplaceResult{\@ReplaceMain}}% } \def\@ReplaceSubStringsDoX{% \def\@ReplaceSubStringsDoA ##1% }% \def\@ReplaceSubStringsDo{% \expandafter\@ReplaceSubStringsDoX \@ReplaceSub ##2\@EndReplaceSubStrings{% \edef\@ReplaceMain{##1\@ReplaceSubRep ##2}% }% \expandafter\@ReplaceSubStringsDoA\@ReplaceMain \@EndReplaceSubStrings \@ReplaceSubStrings } %<---------------------------------------------------------–> \def\DisabledNumprint{% \let\tkz@numprint\numprint \let\numprint\relax } \def\EnabledNumprint{\let\numprint\tkz@numprint} %<---------------------------------------------------------–> %<---------------------------------------------------------–> \def\tkzHelpGrid{% \draw[help lines] (current bounding box.south west) grid (current bounding box.north east); } \makeatother \endinput