texlive[72701] Master/texmf-dist: tkz-grapheur (29oct24)

commits+karl at tug.org commits+karl at tug.org
Tue Oct 29 21:07:48 CET 2024


Revision: 72701
          https://tug.org/svn/texlive?view=revision&revision=72701
Author:   karl
Date:     2024-10-29 21:07:48 +0100 (Tue, 29 Oct 2024)
Log Message:
-----------
tkz-grapheur (29oct24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-en.pdf
    trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-en.tex
    trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-fr.pdf
    trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-fr.tex
    trunk/Master/texmf-dist/tex/latex/tkz-grapheur/tkz-grapheur.sty

Modified: trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-en.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-en.tex	2024-10-29 20:07:35 UTC (rev 72700)
+++ trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-en.tex	2024-10-29 20:07:48 UTC (rev 72701)
@@ -6,6 +6,7 @@
 \usepackage[T1]{fontenc}
 \usepackage[utf8]{inputenc}
 \usepackage[english]{tkz-grapheur}
+\pgfplotsset{compat=newest}
 \usepackage{amsmath}
 \usepackage{fancyvrb}
 \usepackage{fancyhdr}
@@ -13,7 +14,7 @@
 \usepackage{nicefrac}
 \usepackage{fontawesome5}
 \usepackage{tcolorbox}
-\usepackage{minted}
+\usepackage{minted2}
 \tcbuselibrary{skins,minted}
 \fancyhf{}
 \renewcommand{\headrulewidth}{0pt}
@@ -30,11 +31,12 @@
 \hypersetup{pdfborder=0 0 0}
 \usepackage[margin=2cm]{geometry}
 \setlength{\parindent}{0pt}
-\def\TPversion{0.1.9}
-\def\TPdate{11/10/2024}
+\def\TPversion{0.2.0}
+\def\TPdate{29/10/2024}
 \usepackage{soul}
 \usepackage{codehigh}
 \usepackage{tabularray}
+\usepackage{alphalph}
 \sethlcolor{lightgray!25}
 \NewDocumentCommand\MontreCode{ m }{%
 	\hl{\vphantom{\texttt{pf}}\texttt{#1}}%
@@ -1685,10 +1687,116 @@
 
 \pagebreak
 
+\subsection{Some pgfplots macros}
+
+In addition to pgfplots/axis, there's few \textit{simple} macros in order to work with \MontreCode{pgfplots/axis} environement.
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%find intersection of two [name path] objects defined
+\findintersectionspgf[nodename baises]{object1}{object2}[\myt]
+%global extraction of coordinates
+\gextractxnodepgf{node}[\myxcoord]
+\gextractynodepgf{node}[\myycoord]
+\gextractxynodepgf{node}[\myxcoord][\myycoord]
+%area between curves
+\fillbetweencurvespgf[tikz options]{curve1}{curve2}<soft domain options>
+%cubic splines
+\addplotspline(*)[tikz options]<coeffs>{list of points}[\myspline]
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%\usepackage{alphalph}
+
+\begin{tikzpicture}
+	\begin{axis}%
+		[%
+		axis y line=center,axis x line=middle,                                   %axis
+		axis line style={line width=0.8pt,-latex},
+		x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70,                   %units
+		grid=both,xtick distance=5,ytick distance=2,                             %gridp
+		minor x tick num=4,minor y tick num=1,                                   %grids
+		extra x ticks={1985},extra x tick style={grid=none},                     %origx
+		extra y ticks={56},extra y tick style={grid=none},                       %origy
+		x tick label style={/pgf/number format/.cd,use comma,1000 sep={}},       %year
+		major tick length={2*3pt},minor tick length={1.5*3pt},                   %grads
+		every tick/.style={line width=0.8pt},enlargelimits=false,                %style
+		enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper},   %énlarge
+		]
+		%spline + y=66
+		\addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ;
+		\def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2}
+		\addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet]
+		%equation f(x)=66
+		\findintersectionspgf[MonItsc]{eqtest}{splinecubtest}
+		%extraction of coordinates
+		\gextractxnodepgf{(MonItsc-1)}[\xMonItscA]
+		\gextractxnodepgf{(MonItsc-2)}[\xMonItscB]
+		\gextractxnodepgf{(MonItsc-3)}[\xMonItscC]
+		\gextractxnodepgf{(MonItsc-4)}[\xMonItscD]
+		%vizualisation
+		\xintFor* #1 in {\xintSeq{1}{4}}\do{%
+			\draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ;
+			\filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ;
+		}
+		%area
+		\path [name path=xaxis] (1985,56) -- (2030,56);
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}>
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}>
+	\end{axis}
+\end{tikzpicture}
+
+Solutions of  $f(x)=66$ are \RoundNb[0]{\xMonItscA} \&\ \RoundNb[0]{\xMonItscB} \&\ \RoundNb[0]{\xMonItscC} \&\ \RoundNb[0]{\xMonItscD}.
+\end{tcblisting}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,text only}
+\begin{tikzpicture}
+	\begin{axis}%
+		[%
+		axis y line=center,axis x line=middle,                                   %axis
+		axis line style={line width=0.8pt,-latex},
+		x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70,                   %units
+		grid=both,xtick distance=5,ytick distance=2,                             %gridp
+		minor x tick num=4,minor y tick num=1,                                   %grids
+		extra x ticks={1985},extra x tick style={grid=none},                     %origx
+		extra y ticks={56},extra y tick style={grid=none},                       %origy
+		x tick label style={/pgf/number format/.cd,use comma,1000 sep={}},       %year
+		major tick length={2*3pt},minor tick length={1.5*3pt},                   %grads
+		every tick/.style={line width=0.8pt},enlargelimits=false,                %style
+		enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper},   %énlarge
+		]
+		%spline + y=66
+		\addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ;
+		\def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2}
+		\addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet]
+		%equation f(x)=66
+		\findintersectionspgf[MonItsc]{eqtest}{splinecubtest}
+		%extraction of coordinates
+		\gextractxnodepgf{(MonItsc-1)}[\xMonItscA]
+		\gextractxnodepgf{(MonItsc-2)}[\xMonItscB]
+		\gextractxnodepgf{(MonItsc-3)}[\xMonItscC]
+		\gextractxnodepgf{(MonItsc-4)}[\xMonItscD]
+		%vizualisation
+		\xintFor* #1 in {\xintSeq{1}{4}}\do{%
+			\draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ;
+			\filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ;
+		}
+		%area
+		\path [name path=xaxis] (1985,56) -- (2030,56);
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}>
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}>
+	\end{axis}
+\end{tikzpicture}
+
+Solutions of  $f(x)=66$ are \RoundNb[0]{\xMonItscA} \&\ \RoundNb[0]{\xMonItscB} \&\ \RoundNb[0]{\xMonItscC} \&\ \RoundNb[0]{\xMonItscD}.
+\end{tcblisting}
+
+
+
 \section{History}
 
 \begin{quote}
 \begin{verbatim}
+0.2.0 : [Alt] key for Hermite spline + few pgfplots macros
 0.1.9 : Bugfix
 0.1.8 : New commands [in french doc] (binomial, cabweb,\ldots)
 0.1.6 : Vertical asymptote + [in french doc] commands for integrals

Modified: trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-fr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-fr.tex	2024-10-29 20:07:35 UTC (rev 72700)
+++ trunk/Master/texmf-dist/doc/latex/tkz-grapheur/tkz-grapheur-doc-fr.tex	2024-10-29 20:07:48 UTC (rev 72701)
@@ -6,6 +6,8 @@
 \usepackage[T1]{fontenc}
 \usepackage[utf8]{inputenc}
 \usepackage{tkz-grapheur}
+\pgfplotsset{compat=newest}
+\usepackage{alphalph}
 \usepackage{amsmath}
 \usepackage{enumitem}
 \usepackage{fancyvrb}
@@ -31,8 +33,8 @@
 \hypersetup{pdfborder=0 0 0}
 \usepackage[margin=2cm]{geometry}
 \setlength{\parindent}{0pt}
-\def\TPversion{0.1.9}
-\def\TPdate{11/10/2024}
+\def\TPversion{0.2.0}
+\def\TPdate{29/10/2024}
 \usepackage{soul}
 \usepackage{codehigh}
 \usepackage{tabularray}
@@ -176,7 +178,7 @@
 
 \subsection{Description et idées générales}
 
-Avec ce modeste package, loin des capacités offertes par exemple par les excellents packages \MontreCode{tkz-*}\footnote{par exemple tkz-base \url{https://ctan.org/pkg/tkz-base} et tkz-fct \url{https://ctan.org/pkg/tkz-fct}.} (d'Alain Matthes) ou \MontreCode{tzplot}\footnote{CTAN :  \url{https://ctan.org/pkg/tzplot}.} (de In-Sung Cho), il est possible de travailler sur des graphiques de fonctions, en langage \TikZ, de manière \textit{intuitive} et \textit{explicite}.
+Avec ce modeste package, loin des capacités offertes par exemple par les excellents packages \MontreCode{pgfplots}\footnote{CTAN : \url{https://ctan.org/pkg/pgfplots}}, \MontreCode{tkz-*}\footnote{par exemple tkz-base \url{https://ctan.org/pkg/tkz-base} et tkz-fct \url{https://ctan.org/pkg/tkz-fct}.} (d'Alain Matthes) ou \MontreCode{tzplot}\footnote{CTAN :  \url{https://ctan.org/pkg/tzplot}.} (de In-Sung Cho), il est possible de travailler sur des graphiques de fonctions, en langage \TikZ, de manière \textit{intuitive} et \textit{explicite}.
 
 \smallskip
 
@@ -185,7 +187,7 @@
 \smallskip
 
 \begin{itemize}
-	\item des styles particuliers pour les objets utilisés ont été définis, mais ils peuvent localement être modifiés ;
+	\item des styles particuliers pour les objets utilisés ont été définis (modifiables localement) ;
 	\item le nom des commandes est sous forme \textit{opérationnelle}, de sorte que la construction des éléments graphiques a une forme quasi \textit{algorithmique}.
 \end{itemize}
 
@@ -224,6 +226,7 @@
 \begin{itemize}
 	\item \MontreCode{tikz}, avec les librairies \MontreCode{calc,intersections,patterns,patterns.meta,bbox} ;
 	\item \MontreCode{simplekv}, \MontreCode{xintexpr}, \MontreCode{xstring}, \MontreCode{listofitems} ;
+	\item \MontreCode{pgfplots}, avec la librairie \MontreCode{fillbetween} (désactivable via \MontreCode{[nonpgfplots]}) ;
 	\item \MontreCode{xint-regression}\footnote{CTAN : \url{https://ctan.org/pkg/xint-regression}.} (pour les régressions, désactivable via \MontreCode{[nonxintreg]}).
 \end{itemize}
 
@@ -231,8 +234,10 @@
 
 Le package charge également \MontreCode{siunitx} avec les options classiques \texttt{[fr]}, mais il est possible de ne pas le charger en utilisant l'option \MontreCode{[nonsiunitx]}.
 
-\smallskip
+\pagebreak
 
+\subsection{Chargement du package}
+
 Le package charge également la librairie \TikZ\ \MontreCode{babel}, mais il est possible de ne pas la charger en utilisant l'option \MontreCode{[nontikzbabel]}.
 
 \smallskip
@@ -248,10 +253,12 @@
 
 %chargement sans tikz.babel
 \usepackage[nontikzbabel]{tkz-grapheur}
+
+%chargement sans pgfplots + options compat
+\usepackage[nonpgfplots]{tkz-grapheur}
+\pgfplotsset{compat=...}
 \end{tcblisting}
 
-\pagebreak
-
 À noter également que certaines commandes peuvent utiliser des packages comme \MontreCode{nicefrac}, qui sera donc à charger le cas échéant.
 
 \smallskip
@@ -266,6 +273,8 @@
 
 La précision des résultats (de détermination) semble être aux environs de $10^{-4}$, ce qui devrait normalement garantir des tracés et lectures \textit{satisfaisantes}. Il est quand même conseillé d'être prudent quant aux résultats obtenus et ceux attendus.
 
+\pagebreak
+
 \subsection{Exemple introductif}
 
 On peut par exemple partir de l'exemple suivant, pour \textit{illustrer} le cheminement des commandes de ce package. Les commandes et la syntaxe seront détaillées dans les sections suivantes !
@@ -272,7 +281,7 @@
 
 \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
 \begin{GraphiqueTikz}%
-	[x=7.5cm,y=7.5cm,Xmin=0,Xmax=1.001,Xgrille=0.1,Xgrilles=0.02,
+	[x=10cm,y=10cm,Xmin=0,Xmax=1.001,Xgrille=0.1,Xgrilles=0.02,
 	Ymin=0,Ymax=1.001,Ygrille=0.1,Ygrilles=0.02]
 	\TracerAxesGrilles[Elargir=2.5mm,Police=\small]%
 		{0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1}
@@ -703,7 +712,8 @@
 	\item \MontreCode{Nom} : nom de la courbe d'interpolation (important pour la suite !) ;
 	\item \MontreCode{Coeffs} : modifier (voir la documentation de \textsf{ProfLycee}\footnote{CTAN : \url{https://ctan.org/pkg/proflycee}} les \textit{coefficients} du spline ;
 	\item \MontreCode{Couleur} : couleur du tracé (\MontreCode{black} par défaut) ;
-	\item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut).
+	\item \MontreCode{Trace} : booléen pour tracer également la courbe (\MontreCode{false} par défaut) ;
+	\item \MontreCode{Alt} : booléen pour activer une autre \textit{méthode de calcul} (\MontreCode{false} par défaut).
 \end{itemize}
 
 L'argument obligatoire permet quant à lui de spécifier la liste des points supports sous la forme \MontreCode{x1/y1/f'1§x2/y2/f'2§...} avec :
@@ -717,12 +727,13 @@
 
 \begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
 \begin{GraphiqueTikz}%
-	[x=0.8cm,y=1cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
+	[x=0.8cm,y=0.8cm,Xmin=-7,Xmax=4,Ymin=-3,Ymax=5]
 	\TracerAxesGrilles[Elargir=2.5mm]{-7,-6,...,4}{-3,-2,...,5}
 	%définition de la liste des points support du spline
 	\def\LISTETEST{-6/4/-2§-5/2/-2§-4/0/-2§-2/-2/0§1/2/2§3/3.5/0.5}
-	%définition et tracé du spline cubique
+	%définition et tracé du spline cubique (x2)
 	\DefinirCourbeSpline[Nom=splinetest,Trace,Couleur=olive]{\LISTETEST}
+	\DefinirCourbeSpline[Alt,Nom=splinetest,Trace,Couleur=teal]{\LISTETEST}
 \end{GraphiqueTikz}
 \end{tcblisting}
 
@@ -2145,6 +2156,124 @@
 	\lstcmd{nb aléat~~~~~~~}{\ChoisirNbAlea}{nbalea}
 \end{description}
 
+\newpage
+
+\section{Quelques commandes liées à pgfplots}
+
+\subsection{Introduction}
+
+Pour des graphiques avec des fenêtres d'affichage \textit{particulières}, il est fort possible que les commandes \textit{classiques} de \MontreCode{tkz-grapheur} coincent, avec notamment des \MontreCode{dimension tool large}$\ldots$
+
+\smallskip
+
+Dans ce cas, il est possible d'utiliser plutôt l'environnement \MontreCode{axis} de \MontreCode{pgfplots} qui est plus palier ce problème \textit{interne}$\ldots$
+
+\MontreCode{tkz-grapheur} ne fournit pas d'environnement dédié pour la création de la fenêtre, mais quelques commandes spécifiques ont été intégrées pour certains points, avec un fonctionnement assez semblable (donc se référer aux paragraphes précédents) à celui des commandes \textit{classiques}.
+
+\subsection{Macros spécifique pgfplots/axis}
+
+\begin{tcblisting}{listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5,listing only}
+%déterminer l'intersection de deux objets préalablement définis via [name path]
+\findintersectionspgf[base nom nœuds]{objet1}{objet2}[macro nb total]
+
+%extraction (globale, non limitée à l'environnement) et stockage de coordonnées
+\gextractxnodepgf{nœud}[\myxcoord]
+\gextractynodepgf{nœud}[\myycoord]
+\gextractxynodepgf{nœud}[\myxcoord][\myycoord]
+
+%domaine entre courbes
+\fillbetweencurvespgf[options tikz]{courbe1}{courbe2}<options soft domain>
+
+%splines cubiques
+\addplotspline(*)[options tikz]<coeffs>{liste des points support}[\monspline]
+\end{tcblisting}
+
+\subsection{Exemple illustré}
+
+\begin{tcblisting}{listing only,listing engine=minted,minted language=latex,colframe=lightgray,colback=lightgray!5}
+%\usepackage{alphalph}
+
+\begin{tikzpicture}
+	\begin{axis}%
+		[%
+		axis y line=center,axis x line=middle,                                   %axes
+		axis line style={line width=0.8pt,-latex},
+		x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70,                   %unités
+		grid=both,xtick distance=5,ytick distance=2,                             %grillep
+		minor x tick num=4,minor y tick num=1,                                   %grilles
+		extra x ticks={1985},extra x tick style={grid=none},                     %origx
+		extra y ticks={56},extra y tick style={grid=none},                       %origy
+		x tick label style={/pgf/number format/.cd,use comma,1000 sep={}},       %année
+		major tick length={2*3pt},minor tick length={1.5*3pt},                   %grads
+		every tick/.style={line width=0.8pt},enlargelimits=false,                %style
+		enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper},   %élargir
+		]
+		%spline + y=66
+		\addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ;
+		\def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2}
+		\addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet]
+		%recherche d'antécédents
+		\findintersectionspgf[MonItsc]{eqtest}{splinecubtest}
+		%extraction des coordonnées
+		\gextractxnodepgf{(MonItsc-1)}[\xMonItscA]
+		\gextractxnodepgf{(MonItsc-2)}[\xMonItscB]
+		\gextractxnodepgf{(MonItsc-3)}[\xMonItscC]
+		\gextractxnodepgf{(MonItsc-4)}[\xMonItscD]
+		%visualisation
+		\xintFor* #1 in {\xintSeq{1}{4}}\do{%
+			\draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ;
+			\filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ;
+		}
+		%intégrale
+		\path [name path=xaxis] (1985,56) -- (2030,56);
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}>
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}>
+	\end{axis}
+\end{tikzpicture}
+
+Les solutions de $f(x)=66$ sont d'environ \ArrondirNum*[0]{\xMonItscA} \&\ \ArrondirNum*[0]{\xMonItscB} \&\ \ArrondirNum*[0]{\xMonItscC} \&\ \ArrondirNum*[0]{\xMonItscD}.
+\end{tcblisting}
+
+\begin{tikzpicture}
+	\begin{axis}%
+		[%
+		axis y line=center,axis x line=middle,                                   %axes
+		axis line style={line width=0.8pt,-latex},
+		x=0.33cm,y=0.55cm,xmin=1985,xmax=2030,ymin=56,ymax=70,                   %unités
+		grid=both,xtick distance=5,ytick distance=2,                             %grillep
+		minor x tick num=4,minor y tick num=1,                                   %grilles
+		extra x ticks={1985},extra x tick style={grid=none},                     %originex
+		extra y ticks={56},extra y tick style={grid=none},                       %originey
+		x tick label style={/pgf/number format/.cd,use comma,1000 sep={}},       %année
+		major tick length={2*3pt},minor tick length={1.5*3pt},                   %grads
+		every tick/.style={line width=0.8pt},enlargelimits=false,                %style
+		enlarge x limits={abs=2.5mm,upper},enlarge y limits={abs=2.5mm,upper},   %élargir
+		]
+		%spline + y=66
+		\addplot[name path global=eqtest,mark=none,red,line width=1.05pt,domain=1985:2030] {66} ;
+		\def\LISTETEST{1985/60/0§1995/68/0§2015/58/0§2025/69/0§2030/62/-2}
+		\addplotspline*[line width=1.05pt,violet,name path global=splinecubtest]{\LISTETEST}[\monsplineviolet]
+		%recherche d'antécédents
+		\findintersectionspgf[MonItsc]{eqtest}{splinecubtest}
+		%extraction des coordonnées
+		\gextractxnodepgf{(MonItsc-1)}[\xMonItscA]
+		\gextractxnodepgf{(MonItsc-2)}[\xMonItscB]
+		\gextractxnodepgf{(MonItsc-3)}[\xMonItscC]
+		\gextractxnodepgf{(MonItsc-4)}[\xMonItscD]
+		%visualisation
+		\xintFor* #1 in {\xintSeq{1}{4}}\do{%
+			\draw[line width=0.9pt,densely dashed,olive,->,>=latex] (MonItsc-#1) -- (\csname xMonItsc\AlphAlph{#1}\endcsname,56) ;
+			\filldraw[olive] (MonItsc-#1) circle[radius=1.75pt] ;
+		}
+		%intégrale
+		\path [name path=xaxis] (1985,56) -- (2030,56);
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscB:\xMonItscA}>
+		\fillbetweencurvespgf{splinecubtest}{xaxis}<domain={\xMonItscD:\xMonItscC}>
+	\end{axis}
+\end{tikzpicture}
+
+Les solutions de $f(x)=66$ sont d'environ \ArrondirNum*[0]{\xMonItscA} \&\ \ArrondirNum*[0]{\xMonItscB} \&\ \ArrondirNum*[0]{\xMonItscC} \&\ \ArrondirNum*[0]{\xMonItscD}.
+
 \pagebreak
 
 \section{Historique}
@@ -2151,6 +2280,7 @@
 
 {\footnotesize \begin{quote}
 \begin{verbatim}
+0.2.0 : Méthode alternative des splines cubiques + commandes auxiliaires pgfplots
 0.1.9 : Correction d'un bug avec la détermination d'unités
 0.1.8 : Courbes ECC/FCC + Toile récurrence + Points discontinuité + HistoBinom
 0.1.7 : Méthodes intégrales avec des splines

Modified: trunk/Master/texmf-dist/tex/latex/tkz-grapheur/tkz-grapheur.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tkz-grapheur/tkz-grapheur.sty	2024-10-29 20:07:35 UTC (rev 72700)
+++ trunk/Master/texmf-dist/tex/latex/tkz-grapheur/tkz-grapheur.sty	2024-10-29 20:07:48 UTC (rev 72701)
@@ -2,9 +2,10 @@
 % licence    : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txtf
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{tkz-grapheur}[2024/10/11 0.1.9 Des outils en TikZ pour travailler comme avec un grapheur]
+\ProvidesPackage{tkz-grapheur}[2024/10/29 0.2.0 Des outils en TikZ pour travailler comme avec un grapheur]
 
 %====HISTORIQUE
+% v 0.2.0	Petites commandes en lien avec pgfplots + modification mineure splinecubique (calculs Alt)
 % v 0.1.9	Correction d'un bug avec la détermination des unités...
 % v 0.1.8	Ajout des courbes d'ECC/FCC + Toile récurrence + Points discontinuité + Histobinom
 % v 0.1.7	Méthodes intégrales avec des splines
@@ -29,6 +30,10 @@
 \DeclareOption{nonxintreg}{\@loadxintregfalse}%
 \DeclareOption{noxintreg}{\@loadxintregfalse}%
 
+\newif\if at loadpgfplots \@loadpgfplotstrue
+\DeclareOption{nonpgfplots}{\@loadpgfplotsfalse}%
+\DeclareOption{nopgfplots}{\@loadpgfplotsfalse}%
+
 \newif\if at lngenglish \@lngenglishfalse
 \DeclareOption{english}{\@lngenglishtrue}%
 
@@ -38,6 +43,10 @@
 %====BASE
 \RequirePackage{tikz}
 \RequirePackage{ifthen}
+\if at loadpgfplots
+	\RequirePackage{pgfplots}
+	\usepgfplotslibrary{fillbetween}
+\fi
 \usetikzlibrary{calc,intersections,patterns,patterns.meta,bbox}
 \RequirePackage{simplekv}
 \RequirePackage{xintexpr}
@@ -101,10 +110,26 @@
 %====PATCH NUM
 \@ifundefined{ArrondirNum}%
 	{%
-		\NewDocumentCommand\ArrondirNum{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}%
+		\NewDocumentCommand\ArrondirNum{ s O{2} m}{%
+			\IfBooleanTF{#1}%
+				{%
+					\xintfloateval{round(#3,#2)}\relax%
+				}%
+				{%
+					\num{\xintfloateval{round(#3,#2)}}\relax%
+				}%
+		}%
 	}%
 	{%
-		\RenewDocumentCommand\ArrondirNum{ O{2} m}{\num{\xintfloateval{round(#2,#1)}}\relax}%
+		\RenewDocumentCommand\ArrondirNum{ s O{2} m}{%
+			\IfBooleanTF{#1}%
+				{%
+					\xintfloateval{round(#3,#2)}\relax%
+				}%
+				{%
+					\num{\xintfloateval{round(#3,#2)}}\relax%
+				}%
+		}%
 	}%
 
 %====STYLES DE BASE
@@ -869,17 +894,18 @@
 	Nom=spline,%
 	Couleur=black,%
 	Coeffs=3,%
-	Trace=false
+	Trace=false,%
+	Alt=false
 }
 
-\NewDocumentCommand\GenererSpline{ m m O{\monspline} }{%
+\NewDocumentCommand\GenererSpline{ s m m O{\monspline} }{%
 	%1=liste
 	\setsepchar[.]{§./}%
-	\readlist*\SPLlistepoints{#1}%
+	\readlist*\SPLlistepoints{#2}%
 	%les données
 	\def\tmpsplinenumdeb{1}
 	\def\tmpsplinenumfin{\SPLlistepointslen}%
-	\pflextractcoeff{#2}{\tmpsplinenumdeb}%
+	\pflextractcoeff{#3}{\tmpsplinenumdeb}%
 	%nb de calculs
 	\def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}%
 	%extraction des coordonnées
@@ -889,10 +915,16 @@
 	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xb%
 	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\yb%
 	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimeb%
-	\xdef#3{(\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb)}%
+	\IfBooleanTF{#1}%
+		{%
+			\xdef#4{(\xa,\ya) ..controls +({(\xb-\xa)/\COEFFA},{\fprimea*(\xb-\xa)/\COEFFA}) and +({-(\xb-\xa)/\COEFFA},{-\fprimeb*(\xb-\xa)/\COEFFA}).. (\xb,\yb)}%
+		}%
+		{%
+			\xdef#4{(\xa,\ya) ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFA}).. (\xb,\yb)}%
+		}%
 	\foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{%
 		%extraction des coeffs de compensation
-		\pflextractcoeff{#2}{\i}%
+		\pflextractcoeff{#3}{\i}%
 		\def\j{\inteval{\i+1}}%
 		\itemtomacro\SPLlistepoints[\i,1]\xa%
 		\itemtomacro\SPLlistepoints[\i,2]\ya%
@@ -900,7 +932,13 @@
 		\itemtomacro\SPLlistepoints[\j,1]\xb%
 		\itemtomacro\SPLlistepoints[\j,2]\yb%
 		\itemtomacro\SPLlistepoints[\j,3]\fprimeb%
-		\xdef#3{#3 ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb)}%
+		\IfBooleanTF{#1}%
+			{%
+				\xdef#4{#4 ..controls +({(\xb-\xa)/\COEFFA},{\fprimea*(\xb-\xa)/\COEFFA}) and +({-(\xb-\xa)/\COEFFA},{-\fprimeb*(\xb-\xa)/\COEFFA}).. (\xb,\yb)}%
+			}%
+			{%
+				\xdef#4{#4 ..controls +({atan \fprimea}:{(\xb-\xa)/\COEFFA}) and +({-180 + atan \fprimeb}:{(\xb-\xa)/\COEFFB}).. (\xb,\yb)}%
+			}%
 	}%
 }
 
@@ -908,7 +946,13 @@
 	%1=liste
 	\restoreKV[GraphiqueTikzSpline]%
 	\setKV[GraphiqueTikzSpline]{#1}%
-	\GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+	\ifboolKV[GraphiqueTikzSpline]{Alt}%
+		{%
+			\GenererSpline*{#2}{\pflsplinecoeffs}[#3]%
+		}%
+		{%
+			\GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+		}%
 	\begin{scope}
 		\ifboolKV[GraphiqueTikzSpline]{Trace}%
 			{%
@@ -940,7 +984,13 @@
 	%1=liste
 	\restoreKV[GraphiqueTikzSpline]%
 	\setKV[GraphiqueTikzSpline]{#1}%
-	\GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+	\ifboolKV[GraphiqueTikzSpline]{Alt}%
+		{%
+			\GenererSpline*{#2}{\pflsplinecoeffs}[#3]%
+		}%
+		{%
+			\GenererSpline{#2}{\pflsplinecoeffs}[#3]%
+		}%
 	\begin{scope}
 		\draw[pflcourbe,{\useKV[GraphiqueTikzSpline]{Couleur}}] #3 ;
 	\end{scope}
@@ -3018,7 +3068,8 @@
 	Name=spline,%
 	Color=black,%
 	Coeffs=3,%
-	Trace=false
+	Trace=false,%
+	Alt=false
 }
 
 \NewDocumentCommand\GenerateSpline{ m m O{\myspline} }{%
@@ -4586,4 +4637,98 @@
 		{}%
 }
 
+%====pgfplots small macros
+\NewDocumentCommand\findintersectionspgf{ O{ITSC} m m D<>{\myt} }{%
+	%1 = name of node name
+	%2 = 1st object
+	%3 = 2d object
+	%4 = macro storing number of intersections
+	\path[name intersections={of=#2 and #3,name=#1,total=\t}] \pgfextra{\xdef#4{\t}} ;
+}
+
+\NewDocumentCommand\gextractxnodepgf{ m O{\myxcoord} }{%
+	\path \pgfextra{\pgfplotspointgetcoordinates{#1}\pgfkeysgetvalue{/data point/x}{\tmpxgetvalue}\xdef#2{\tmpxgetvalue}} ;
+}
+
+\NewDocumentCommand\gextractynodepgf{ m O{\myycoord} }{%
+	\path \pgfextra{\pgfplotspointgetcoordinates{#1}\pgfkeysgetvalue{/data point/y}{\tmpygetvalue}\xdef#2{\tmpygetvalue}} ;
+}
+
+\NewDocumentCommand\gextractxynodepgf{  m O{\myxcoord} O{\myycoord} }{%
+	\path \pgfextra{\pgfplotspointgetcoordinates{#1}\pgfkeysgetvalue{/data point/x}{\tmpxgetvalue}\xdef#2{\tmpxgetvalue}\pgfkeysgetvalue{/data point/y}{\tmpygetvalue}\xdef#3{\tmpygetvalue}} ;
+}
+
+\NewDocumentCommand\fillbetweencurvespgf{ O{gray,fill opacity=0.25} m m D<>{} }{%
+	\addplot[#1] fill between [of=#2 and #3,soft clip={#4}];
+}
+
+\NewDocumentCommand\gensplinecubicpgf{ s m m O{\monspline} }{%
+	%1=liste
+	\setsepchar[.]{§./}%
+	\readlist*\SPLlistepoints{#2}%
+	%les données
+	\def\tmpsplinenumdeb{1}
+	\def\tmpsplinenumfin{\SPLlistepointslen}%
+	\pflextractcoeff{#3}{\tmpsplinenumdeb}%
+	%nb de calculs
+	\def\SPLnbsplines{\inteval{\tmpsplinenumfin-1}}%
+	%extraction des coordonnées
+	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xa%
+	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\ya%
+	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimea%
+	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,1]\xb%
+	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,2]\yb%
+	\itemtomacro\SPLlistepoints[\tmpsplinenumdeb,3]\fprimeb%
+	\IfBooleanTF{#1}%
+		{%
+			\xdef\tmpcontrolsxa{\xintfloateval{(\xa)+(\xb-\xa)/\COEFFA}}%
+			\xdef\tmpcontrolsya{\xintfloateval{(\ya)+\fprimea*(\xb-\xa)/\COEFFA}}%
+			\xdef\tmpcontrolsxb{\xintfloateval{(\xb)-(\xb-\xa)/\COEFFA}}%
+			\xdef\tmpcontrolsyb{\xintfloateval{(\yb)-\fprimeb*(\xb-\xa)/\COEFFA}}%
+		}%
+		{%
+			\xdef\tmpcontrolsxa{\xintfloateval{(\xa)+cos(atand(\fprimea))*(\xb-\xa)/\COEFFA}}%
+			\xdef\tmpcontrolsya{\xintfloateval{(\ya)+sin(atand(\fprimea))*(\xb-\xa)/\COEFFA}}%
+			\xdef\tmpcontrolsxb{\xintfloateval{(\xb)-cos(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}%
+			\xdef\tmpcontrolsyb{\xintfloateval{(\yb)-sin(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}%
+		}%
+	\xdef#4{(\xa,\ya) ..controls (\tmpcontrolsxa,\tmpcontrolsya) and (\tmpcontrolsxb,\tmpcontrolsyb).. (\xb,\yb)}%
+	\foreach \i in {\tmpsplinenumdeb,...,\SPLnbsplines}{%
+		%extraction des coeffs de compensation
+		\pflextractcoeff{#3}{\i}%
+		\def\j{\inteval{\i+1}}%
+		\itemtomacro\SPLlistepoints[\i,1]\xa%
+		\itemtomacro\SPLlistepoints[\i,2]\ya%
+		\itemtomacro\SPLlistepoints[\i,3]\fprimea%
+		\itemtomacro\SPLlistepoints[\j,1]\xb%
+		\itemtomacro\SPLlistepoints[\j,2]\yb%
+		\itemtomacro\SPLlistepoints[\j,3]\fprimeb%
+		\IfBooleanTF{#1}%
+			{%
+				\xdef\tmpcontrolsxa{\xintfloateval{(\xa)+(\xb-\xa)/\COEFFA}}%
+				\xdef\tmpcontrolsya{\xintfloateval{(\ya)+\fprimea*(\xb-\xa)/\COEFFA\fprimea*(\xb-\xa)/\COEFFA}}%
+				\xdef\tmpcontrolsxb{\xintfloateval{(\xb)-(\xb-\xa)/\COEFFA}}%
+				\xdef\tmpcontrolsyb{\xintfloateval{(\yb)-\fprimeb*(\xb-\xa)/\COEFFA}}%
+			}%
+			{%
+				\xdef\tmpcontrolsxa{\xintfloateval{(\xa)+cos(atand(\fprimea))*(\xb-\xa)/\COEFFA}}%
+				\xdef\tmpcontrolsya{\xintfloateval{(\ya)+sin(atand(\fprimea))*(\xb-\xa)/\COEFFA}}%
+				\xdef\tmpcontrolsxb{\xintfloateval{(\xb)-cos(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}%
+				\xdef\tmpcontrolsyb{\xintfloateval{(\yb)-sin(atand(\fprimeb))*(\xb-\xa)/\COEFFA}}%
+			}%
+		\xdef#4{#4 ..controls (\tmpcontrolsxa,\tmpcontrolsya) and (\tmpcontrolsxb,\tmpcontrolsyb).. (\xb,\yb)}%
+	}%
+}
+
+\NewDocumentCommand\addplotspline{ s O{} D<>{3} m O{\monspline} }{%
+	\IfBooleanTF{#1}%
+		{%
+			\gensplinecubicpgf*{#4}{#3}[#5]%
+		}%
+		{%
+			\gensplinecubicpgf{#4}{#3}[#5]%
+		}%
+	\draw[#2] #5 ;
+}
+
 \endinput
\ No newline at end of file



More information about the tex-live-commits mailing list.