texlive[72764] Master/texmf-dist: customenvs (4nov24)

commits+karl at tug.org commits+karl at tug.org
Mon Nov 4 22:41:21 CET 2024


Revision: 72764
          https://tug.org/svn/texlive?view=revision&revision=72764
Author:   karl
Date:     2024-11-04 22:41:21 +0100 (Mon, 04 Nov 2024)
Log Message:
-----------
customenvs (4nov24)

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

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

Modified: trunk/Master/texmf-dist/doc/latex/customenvs/customenvs-doc-en.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/customenvs/customenvs-doc-en.tex	2024-11-04 21:41:11 UTC (rev 72763)
+++ trunk/Master/texmf-dist/doc/latex/customenvs/customenvs-doc-en.tex	2024-11-04 21:41:21 UTC (rev 72764)
@@ -34,8 +34,8 @@
 \usepackage[margin=1.5cm]{geometry}
 \setlength{\parindent}{0pt}
 
-\def\TPversion{0.2.3}
-\def\TPdate{09/14/2024}
+\def\TPversion{0.2.6}
+\def\TPdate{04/11/2024}
 \usepackage{tcolorbox}
 \sethlcolor{lightgray!25}
 \NewDocumentCommand\MontreCode{ m }{%
@@ -111,6 +111,12 @@
 
 \section{History}
 
+\verb|v0.2.6|~:~~~Whell of skills, speedometer
+
+\verb|v0.2.5|~:~~~Bugfix with exercices (\textsf{[fr]} macro)
+
+\verb|v0.2.4|~:~~~Small box \textit{marker}
+
 \verb|v0.2.3|~:~~~Highway signs + sold banners (see \textsf{[fr]} doc)
 
 \verb|v0.2.2|~:~~~Flared arrow, with \TikZ
@@ -117,27 +123,27 @@
 
 \verb|v0.2.1|~:~~~Enhancements for \textit{stars skills} + AutoGrid for \TikZ\ (see \textsf{[fr]} doc)
 
-\verb|v0.2.0|~:~~~~Skills with stars (\textsf{fontawesome5} or \TikZ)
+\verb|v0.2.0|~:~~~Skills with stars (\textsf{fontawesome5} or \TikZ)
 
-\verb|v0.1.9|~:~~~~Title banner
+\verb|v0.1.9|~:~~~Title banner
 
-\verb|v0.1.8|~:~~~~Score banner
+\verb|v0.1.8|~:~~~Score banner
 
-\verb|v0.1.7|~:~~~~Small patch for \textsf{Vignette} macro (see \texttt{[fr]} documentation)
+\verb|v0.1.7|~:~~~Small patch for \textsf{Vignette} macro (see \texttt{[fr]} documentation)
 
-\verb|v0.1.6|~:~~~~Small patchs for \textsf{displayskip} + \textsf{pas-tableur} (see \texttt{[fr]} documentation)
+\verb|v0.1.6|~:~~~Small patchs for \textsf{displayskip} + \textsf{pas-tableur} (see \texttt{[fr]} documentation)
 
-\verb|v0.1.5|~:~~~~New macros for boxes with \textsf{tcolorbox} (see \texttt{[fr]} documentation)
+\verb|v0.1.5|~:~~~New macros for boxes with \textsf{tcolorbox} (see \texttt{[fr]} documentation)
 
-\verb|v0.1.4|~:~~~~Create a SMS conversation
+\verb|v0.1.4|~:~~~Create a SMS conversation
 
-\verb|v0.1.3|~:~~~~Environment for exercise(s) (in french doc)
+\verb|v0.1.3|~:~~~Environment for exercise(s) (in french doc)
 
-\verb|v0.1.2|~:~~~~Pencil of skills
+\verb|v0.1.2|~:~~~Pencil of skills
 
-\verb|v0.1.1|~:~~~~Skills table (only french for the moment...)
+\verb|v0.1.1|~:~~~Skills table (only french for the moment...)
 
-\verb|v0.1.0|~:~~~~Initial version
+\verb|v0.1.0|~:~~~Initial version
 
 \vspace*{5mm}
 
@@ -714,4 +720,125 @@
   \end{tikzpicture}
 \end{demohigh}
 
+\subsection{Small markerbox}
+
+\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\tbcmarker[color=...,width=...,font=...]{text}
+\end{codehigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\tbcmarker{my text}
+\end{demohigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\tbcmarker[color=olive,font=\normalfont\normalsize]{my text}
+\end{demohigh}
+
+%\subsection{Letters wirh pixelart style (experimental)}
+%
+%\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%%one letter only
+%\PixlLetter%
+%    [height=...,thick=...,color=...,gridcolor=...,
+%    offseth=...,offsetv=...,gridafter=...,nospaceafter=...]
+%    <tikzpicture options>
+%    {letter}
+%
+%%several words
+%\PixlLetters%
+%    [height=...,thick=...,color=...,gridcolor=...,
+%    offseth=...,offsetv=...,gridafter=...,nospaceafter=...]
+%    {letters}
+%\end{codehigh}
+%
+%\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%\PixlLetter{M}\PixlLetter{o}\PixlLetter{n}\PixlLetter{k}\PixlLetter{e}\PixlLetter{y}
+%\end{codehigh}
+%
+%\PixlLetter{M}\PixlLetter{o}\PixlLetter{n}\PixlLetter{k}\PixlLetter{e}\PixlLetter{y}
+%
+%\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%\PixlLetters[height=2cm,color=red,gridafter,offsetv=1]{(Monkey)}
+%\end{codehigh}
+%
+%\PixlLetters[height=2cm,color=red,gridafter,offsetv=1]{(Monkey)}
+%
+%\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%\PixlLetters[color=blue]{Monkeys roxxxx !?}
+%\end{codehigh}
+%
+%\PixlLetters[color=blue]{Monkeys roxxxx !?}
+%
+%\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%\PixlLetters[color=red]{1+1=2}
+%\end{codehigh}
+%
+%\PixlLetters[color=red]{1+1=2}
+
+\subsection{Wheel of skills / speedometer}
+
+\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\WheelOfSkills[%
+    Radius=...,      %radius of wheel
+    Mark=...,        %absolute position of optional marker
+    Font=...,        %font of optional labels
+    SkillsList=...,  %list of optional skill labels
+    ]%
+    {number of skills or list of colors}
+\end{codehigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\WheelOfSkills[%
+    Radius=3cm,%
+    Mark=5.85,%
+    Font=\scriptsize\bfseries\ttfamily,%
+    SkillsList={Niv.1,Niv.2,Niv.3,Niv.4,Niv.5,Niv.6,Niv.7,Niv.8,Niv.9,Niv.10}]%
+    {10}%
+\end{demohigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\WheelOfSkills[%
+    Mark=1.5,%
+    Font=\scriptsize\bfseries\sffamily,%
+    SkillsList={LOW-MODERATE,NORMAL,HIGH,VERY HIGH,SEVERE,EXTREME,CATASTROPHIC}
+    ]%
+    {yellow!50,orange!50,red!50,blue!50,teal!50,purple!50,violet!50}%
+\end{demohigh}
+
+\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\begin{SkillsWheel}[%
+    Radius=...,      %radius of wheel
+    Mark=...,        %absolute position of optional marker
+    Font=...,        %font of optional labels
+    SkillsList=...,  %list of optional skill labels
+    ]{number of skills or list of colors}
+    \PutIconsSkills[Pos=...,Scale=...]{list of icons}
+\end{SkillsWheel}
+\end{codehigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+\begin{SkillsWheel}[Radius=5cm,Mark=5.85]%
+        {yellow!50,orange!50,red!50,blue!50,teal!50,purple!50,violet!50}
+    \PutIconsSkills[Echelle=3]%
+    {\faPython,\faAdjust,\faAngellist,\faAmbulance,\faAdjust,\faBabyCarriage,\faBlender}
+\end{SkillsWheel}
+\end{demohigh}
+
+\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%inline version, with automatic dimensions
+\miniskillwheel[Colors=...,Mark=...]{nb of levels}
+
+%normal version
+\tkzspeedometer[Size=...,Mark=...,Colors=...]{nb levels}
+\end{codehigh}
+
+\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
+%inline version, with automatic dimensions
+\scalebox{2.25}[2.25]{\sffamily Small inline \textit{skillwheel}
+\miniskillwheel[Colors=red/blue,Mark=4.33]{7} for testing.}
+
+%normal version
+\tkzspeedometer[Size=5cm,Mark=2.25,Colors=teal/magenta]{6}
+\end{demohigh}
+
 \end{document}
\ No newline at end of file

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

Modified: trunk/Master/texmf-dist/doc/latex/customenvs/customenvs-doc-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/customenvs/customenvs-doc-fr.tex	2024-11-04 21:41:11 UTC (rev 72763)
+++ trunk/Master/texmf-dist/doc/latex/customenvs/customenvs-doc-fr.tex	2024-11-04 21:41:21 UTC (rev 72764)
@@ -39,8 +39,8 @@
 \usepackage[margin=1.5cm]{geometry}
 \setlength{\parindent}{0pt}
 
-\def\TPversion{0.2.3}
-\def\TPdate{14 septembre 2024}
+\def\TPversion{0.2.6}
+\def\TPdate{4 novembre 2024}
 \usepackage{tcolorbox}
 \tcbuselibrary{listingsutf8}
 %\usepackage{eurosym}
@@ -65,14 +65,14 @@
 		keywordstyle={\color{blue}},%
 		classoffset=1,%
 		alsoletter={-},%
-		morekeywords={center,justify,\LstDeuxNiv,\LstTroisNiv,\LstQuatreNiv,\NoticeDeuxNiv,\NoticeTroisNiv,\NoticeQuatreNiv,\DeuxNivBatterie,\TroisNivBatterie,\QuatreNivBatterie,\DeuxNivSmiley,\TroisNivSmiley,\QuatreNivSmiley,\vcenterfa,\faIcon,part,RenewDocumentCommand,IfBooleanTF,\VilleDist},%
+		morekeywords={center,justify,\LstDeuxNiv,\LstTroisNiv,\LstQuatreNiv,\NoticeDeuxNiv,\NoticeTroisNiv,\NoticeQuatreNiv,\DeuxNivBatterie,\TroisNivBatterie,\QuatreNivBatterie,\DeuxNivSmiley,\TroisNivSmiley,\QuatreNivSmiley,\vcenterfa,\faIcon,part,RenewDocumentCommand,IfBooleanTF},%
 		keywordstyle={\color{violet}},%
 		classoffset=2,%
 		alsoletter={-},%
-		morekeywords={\ReponsesQCM,MultiCols,\CreerListeItems,\ListeChoixItems,\TableauCompetences,\CrayonDeCompetences,\StyleEnvtExo,\StyleEnvtExoDefaut,\TitreExo,\ipsum,EnvSMS,\SMSrec,\SMSenv,BoiteSimple,\SujetTitreExo,\CircledNumber,\AffVignette,\BoiteArrondie,\ChangerDisplaySkip,\celcouleur,\celfusion,\lignetxt,\colonnetxt,\celnumbreak,\celtxt,\BandeauScore,\InsererImage,\tkzBannerTri,\NiveauDiffExos,\tkzEtoiles,\tkzGrilleAuto,\tkzAutoGridLocal,\tkzAutoGridActivate,\tkzFlecheEvasee,PanneauAutoroute,\AfficheSoldes},%
+		morekeywords={\ReponsesQCM,MultiCols,\CreerListeItems,\ListeChoixItems,\TableauCompetences,\CrayonDeCompetences,\StyleEnvtExo,\StyleEnvtExoDefaut,\TitreExo,\ipsum,EnvSMS,\SMSrec,\SMSenv,BoiteSimple,\SujetTitreExo,\CircledNumber,\AffVignette,\BoiteArrondie,\ChangerDisplaySkip,\celcouleur,\celfusion,\lignetxt,\colonnetxt,\celnumbreak,\celtxt,\BandeauScore,\InsererImage,\tkzBannerTri,\NiveauDiffExos,\tkzEtoiles,\tkzGrilleAuto,\tkzAutoGridLocal,\tkzAutoGridActivate,\tkzFlecheEvasee,PanneauAutoroute,\AfficheSoldes,\tbcmarker,\VilleDist,\RoueNiveaux,EnvRoueNiveaux,\PlacerIconeNiveau,\PlacerIconesNiveaux,\MiniCompteurNiveaux,\tkzspeedometer},%
 		keywordstyle={\color{green!50!black}},%
 		classoffset=3,%
-		morekeywords={Largeur,Filets,EspacesCL,NbCols,Labels,PoliceLabels,EspaceLabels,Swap,Type,CoeffEspVert,EpTrait,Alea,LargeurNivs,Niveaux,NoticeNiveaux,Titre,PolTitre,PolNotice,PolComp,LigneSep,CouleurNotice,CouleurNiveaux,CouleurFond,Note,Notice,PoliceCateg,PoliceBloc,Couleurs,LargeurBloc,Echelle,NoirBlanc,Libelle,EpTrait,Police,Type,ComplementTitre,Titre,CodeDebut,Couleur,EchelleImage,Decoration,Trait,Avatar,AffAvatar,NoirBlanc,CouleurE,CouleurR,CouleurFond,Hauteur,Largeur,PoliceTxt,CouleurTitre,AlignH,bg,txt,bthick,bcol,raise,Type,EspH,Fond,Texte,Style,Dense,Avant,AvantS,Apres,ApresS,Global,align,width,Legende,CouleurFond,Hauteur,Ratio,AffLegende,Couleurs,EchelleSymboles,Symboles,vRemplir,vOffset,vCentrer,height,width,blockwidth,collight,colmedium,coldar,coltxt,fonttxt,swap,maincolor,logo,type,num,dispblock,customtype,Couleur,AlignV,Offset,NiveauMax,pasX,pasY,grilleauto,TailleFleche,Direction,Coeff,TypeFleche,Deplacement,LineCap,Epaisseur,CouleurCartouche,Fleches,CouleurFond,CouleurTitre,PoliceCartouche,TypeFleche,EspacementV,OffsetFleches,Dernier,PoliceEntete,PolicePrix,PoliceReduc,OffsetReduc,AgrandirReduc},%
+		morekeywords={Largeur,Filets,EspacesCL,NbCols,Labels,PoliceLabels,EspaceLabels,Swap,Type,CoeffEspVert,EpTrait,Alea,LargeurNivs,Niveaux,NoticeNiveaux,Titre,PolTitre,PolNotice,PolComp,LigneSep,CouleurNotice,CouleurNiveaux,CouleurFond,Note,Notice,PoliceCateg,PoliceBloc,Couleurs,LargeurBloc,Echelle,NoirBlanc,Libelle,EpTrait,Police,Type,ComplementTitre,Titre,CodeDebut,Couleur,EchelleImage,Decoration,Trait,Avatar,AffAvatar,NoirBlanc,CouleurE,CouleurR,CouleurFond,Hauteur,Largeur,PoliceTxt,CouleurTitre,AlignH,bg,txt,bthick,bcol,raise,Type,EspH,Fond,Texte,Style,Dense,Avant,AvantS,Apres,ApresS,Global,align,width,Legende,CouleurFond,Hauteur,Ratio,AffLegende,Couleurs,EchelleSymboles,Symboles,vRemplir,vOffset,vCentrer,height,width,blockwidth,collight,colmedium,coldar,coltxt,fonttxt,swap,maincolor,logo,type,num,dispblock,customtype,Couleur,AlignV,Offset,NiveauMax,pasX,pasY,grilleauto,TailleFleche,Direction,Coeff,TypeFleche,Deplacement,LineCap,Epaisseur,CouleurCartouche,Fleches,CouleurFond,CouleurTitre,PoliceCartouche,TypeFleche,EspacementV,OffsetFleches,Dernier,PoliceEntete,PolicePrix,PoliceReduc,OffsetReduc,AgrandirReduc,Rayon,Police,ListeNiveaux,Marqueur,Pos,Echelle,Couleurs,Taille},%
 		keywordstyle={\color{orange}}
 	},%
 	#1
@@ -152,6 +152,12 @@
 
 \section{Historique}
 
+\verb|v0.2.6|~:~~~Roue des compétences / speedometer
+
+\verb|v0.2.5|~:~~~Correction du fonctionnement de \texttt{EnvtExo}
+
+\verb|v0.2.4|~:~~~Petite boîte type \textit{marker}
+
 \verb|v0.2.3|~:~~~Panneaux autoroutiers + Affichettes de soldes
 
 \verb|v0.2.2|~:~~~Ajout d'une commande pour des flèches évasées, en \TikZ\
@@ -817,6 +823,133 @@
 
 \pagebreak
 
+\section{Roue de compétences}
+
+\subsection{Principe et fonctionnement}
+
+L'idée est de proposer une commande et un environnement pour créer une \textit{demie-roue} de compétences, basé sur \MontreCode{TikZ}.
+
+\begin{DemoCode}{listing only}
+\RoueNiveaux[clés]<options tikz>{couleurs ou nb de niveaux}%
+\end{DemoCode}
+
+\begin{DemoCode}{listing only}
+\begin{EnvRoueNiveaux}[clés]<options tikz>{couleurs ou nb de niveaux}%
+	\PlacerIconesNiveaux[clés]{liste d'icônes}
+\end{EnvRoueNiveaux}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\RoueNiveaux{5}\hspace{5mm}
+\RoueNiveaux{green!50,yellow!50,orange!50,red!50,brown!50}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{EnvRoueNiveaux}{4}
+	\PlacerIconesNiveaux{\faPython,\faAdjust,\faAngellist,\faAmbulance}
+\end{EnvRoueNiveaux}
+\end{DemoCode}
+
+\subsection{La commande et l'environnement}
+
+Les \MontreCode{clés} (communes) disponibles, à donner entre \MontreCode{[...]}, sont :
+
+\begin{itemize}
+	\item \MontreCode{Rayon} : rayon de la roue ; \MontreCode{4cm} par défaut
+	\item \MontreCode{Police} : police des éventuels labels ; \MontreCode{\textbackslash bfseries\textbackslash sffamily} par défaut
+	\item \MontreCode{ListeNiveaux} : liste éventuelle des niveaux, sous la forme \MontreCode{Label1,Label2,...}
+	\item \MontreCode{Marqueur} : position relative d'un éventuel marqueur.
+\end{itemize}
+
+L'argument optionnel, et entre \MontreCode{<...>}, permet de spécifier des options à la figure \MontreCode{TikZ} (comme une rotation, un alignement, etc)
+
+\smallskip
+
+L'argument, obligatoire et entre \MontreCode{\{...\}} est la liste des couleurs, ou le nombre de catégories pour une sortie en N\&B.
+
+\medskip
+
+Pour l'environnement, la commande \MontreCode{\textbackslash PlacerIconesNiveaux} permet de placer des icônes en lieu et place des libellés. les clés disponibles sont :
+
+\begin{itemize}
+	\item \MontreCode{Pos} :  position (excentricité) des icônes ; \MontreCode{0.8} par défaut
+	\item \MontreCode{Echelle} : échelle des icônes ; \MontreCode{2}.
+\end{itemize}
+
+\subsection{Exemples}
+
+\begin{DemoCode}{}
+\RoueNiveaux[%
+	Marqueur=1.5,%
+	Police=\scriptsize\bfseries\sffamily,%
+	ListeNiveaux={LOW-MODERATE,NORMAL,HIGH,VERY HIGH,SEVERE,EXTREME,CATASTROPHIC}
+	]%
+	{yellow!50,orange!50,red!50,blue!50,teal!50,purple!50,violet!50}%
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\RoueNiveaux[%
+	Rayon=3cm,%
+	Marqueur=5.85,%
+	Police=\scriptsize\bfseries\ttfamily,%
+	ListeNiveaux={%
+		Niv.1,Niv.2,Niv.3,Niv.4,Niv.5,Niv.6,Niv.7,Niv.8,Niv.9,Niv.10,Niv.11,Niv.12}%
+	]%
+	{12}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\begin{EnvRoueNiveaux}[Rayon=5cm,Marqueur=5.85]%
+		{yellow!50,orange!50,red!50,blue!50,teal!50,purple!50,violet!50}
+	\PlacerIconesNiveaux[Echelle=3]%
+		{\faPython,\faAdjust,\faAngellist,\faAmbulance,\faAdjust,\faBabyCarriage,\faBlender}
+\end{EnvRoueNiveaux}
+\end{DemoCode}
+
+\pagebreak
+
+\subsection{\og Speed-o-meter \fg}
+
+En marge de la roue \textit{détaillée}, il est possible d'utiliser une version simplifiée, soit en mode en ligne, soit en mode autonome.
+
+\smallskip
+
+À noter qu'en mode en ligne, les dimensions sont calculées automatiquement en fonction de la police courante.
+
+\begin{DemoCode}{listing only}
+%à utiliser en mode en ligne
+\MiniCompteurNiveaux[clés]<options tikz>{nb niveaux}
+\end{DemoCode}
+
+\begin{DemoCode}{listing only}
+%mode autonome
+\tkzspeedometer[clés]<options tikz>{nb niveaux}
+\end{DemoCode}
+
+Les \MontreCode{clés} (communes) disponibles, à donner entre \MontreCode{[...]}, sont :
+
+\begin{itemize}
+	\item \MontreCode{Couleurs} : couleur(s) (sous la forme \MontreCode{couleur} ou \MontreCode{couleurp/couleurs}) ; \MontreCode{black} par défaut
+	\item \MontreCode{Marqueur} : position relative d'un éventuel marqueur ;
+	\item \MontreCode{Taille} : taille du cadran (en mode autonome uniquement !)
+\end{itemize}
+
+L'argument optionnel, et entre \MontreCode{<...>}, permet de spécifier des options à la figure \MontreCode{TikZ} (comme une rotation, un alignement, etc)
+
+\smallskip
+
+L'argument, obligatoire et entre \MontreCode{\{...\}} est le nombre de niveaux.
+
+\begin{DemoCode}{}
+\scalebox{3}[3]{Petit compteur \MiniCompteurNiveaux[Couleurs=blue/red,Marqueur=4.33]{6} en ligne.}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\tkzspeedometer[Marqueur=3.66]{5}
+\end{DemoCode}
+
+\pagebreak
+
 \section{Bandeau de score}
 
 \subsection{Principe et fonctionnement}
@@ -1021,6 +1154,7 @@
 		\item une icône, via \texttt{fontawesome5}, dont la hauteur est adaptée à la hauteur de la ligne en cours ;
 		\item des étoiles, via \texttt{fontawesome5} ou \TikZ, dont la hauteur est adaptée à la hauteur de la ligne en cours ;
 		\item un petit chronomètre, via \texttt{pictochrono}, dont la hauteur est adaptée à la hauteur de la ligne en cours ;
+		\item un petit \textit{speedometer}, dont la hauteur est adaptée à la hauteur de la ligne en cours ;
 		\item une ceinture colorée, via \texttt{coloredbelts}, dont la hauteur est adaptée à la hauteur de la ligne en cours ;
 	\end{itemize}
 	\item le compteur (nommé \MontreCode{numeroexo}) peut être désactivé et \textit{adpaté} via les commandes classiques de compteurs.
@@ -1041,6 +1175,7 @@
 		\item \MontreCode{Ceinture/...} := afficher la ceinture couleur \MontreCode{...} à la fin de la ligne ;
 		\item \MontreCode{Chrono/...} := afficher le chrono de durée \MontreCode{...} à la fin de la ligne ;
 		\item \MontreCode{Points/...} := afficher les points \MontreCode{(... points)} à la fin de la ligne ;
+		\item \MontreCode{Speedo/...§...} := afficher un \textit{speedometer} ;
 		\item \MontreCode{faEtoiles/...} := afficher des étoiles de difficultés à la fin de la ligne ;
 		\item \MontreCode{tkzEtoiles/...} := afficher des étoiles de difficultés à la fin de la ligne ;
 	\end{itemize}
@@ -1058,7 +1193,6 @@
 \begin{DemoCode}{listing only}
 %commande d'étoiles (max=3 par défaut) avec fontawesome5
 \NiveauDiffExos[max]{nb}
-
 %commande d'étoiles (max=3 par défaut) avec tikz
 \tkzEtoiles[Couleur=...,CouleurFond=...,Offset=...,NiveauMax=...,AlignV=...]{nb}
 \end{DemoCode}
@@ -1126,28 +1260,30 @@
 
 \begin{EnvtExo}[Decoration=tkzEtoiles/3.5§5]\ipsum<Lang=FR,Type=sent>\end{EnvtExo}%exo8
 
-\begin{EnvtExo}[Decoration=Points/7]\ipsum<Lang=FR,Type=sent>\end{EnvtExo}%exo9
+\begin{EnvtExo}[Decoration=Points/7.5]\ipsum<Lang=FR,Type=sent>\end{EnvtExo}%exo9
 
-\begin{EnvtExo}[Type=Perso/{Titre perso }]\ipsum<Lang=FR,Type=sent>\end{EnvtExo}%exo10
+\begin{EnvtExo}[Decoration=Speedo/4.25§6]\ipsum<Lang=FR,Type=sent>\end{EnvtExo}%exo10
 
+\begin{EnvtExo}[Type=Perso/{Titre perso }]\ipsum<Lang=FR,Type=sent>\end{EnvtExo}%exo11
+
 \StyleEnvtExo[Couleur=red,CouleurDeco=teal,Police=\bfseries\ttfamily,EpTrait=2pt, Libelle={Exercice n°}]
 
 \begin{EnvtExo}[Decoration=Icone/\faAddressBook]
 \ipsum<Lang=FR,Type=sent>
-\end{EnvtExo}%exo11
+\end{EnvtExo}%exo12
 
 
-\begin{EnvtExo}[Type=Perso/{Titre perso },Decoration=Chrono/25,Trait=dashilles]%exo12
+\begin{EnvtExo}[Type=Perso/{Titre perso },Decoration=Chrono/25,Trait=dashilles]%exo13
 \ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
 \StyleEnvtExoDefaut
 \begin{EnvtExo}%
-	[Type=Perso/{Titre perso~},Decoration=Image/goku_ssj4,Trait=non,Compteur=false]%exo13
+	[Type=Perso/{Titre perso~},Decoration=Image/goku_ssj4,Trait=non,Compteur=false]%exo14
 \ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
-\TitreExo[Type=Perso/{Annexe Exercice 3},Compteur=false,Decoration=Image/sseiya_aiolos]%exo14
+\TitreExo[Type=Perso/{Annexe Exercice 3},Compteur=false,Decoration=Image/sseiya_aiolos]%exo15
 \ipsum<Lang=FR,Type=sent>
 \end{DemoCode}
 
@@ -1326,7 +1462,7 @@
 
 \end{DemoCode}
 
-\subsection{Boîte arrondie}
+\subsection{Boîte arrondie, petite boîte type marker}
 
 \begin{DemoCode}{listing only}
 \BoiteArrondie[Fond=...,Texte=...,EspH=...,Style=...]{texte}[noeud tikz]
@@ -1336,6 +1472,69 @@
 On lance le logiciel \BoiteArrondie[Fond=cyan!33,Texte=violet,EspH=2mm,Style=rect]{situé sur le bureau} en cliquant \BoiteArrondie[Fond=lightgray!25,Texte=darkgray]{droit}.
 \end{DemoCode}
 
+\begin{DemoCode}{listing only}
+\tbcmarker[Couleur=...,Largeur=...,Police=...]{contenu}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\tbcmarker{contenu}
+\end{DemoCode}
+
+\begin{DemoCode}{}
+\tbcmarker[Couleur=olive,Police=\normalfont\normalsize]{contenu}
+\end{DemoCode}
+
+%\subsection{Lettres à la manière d'un pixelart (expérimental)}
+%
+%L'idée est de proposer une présentation de (quelques) lettres (faite en \TikZ) sous la forme d'un \textit{pixelart}.
+%
+%\smallskip
+%
+%Par défaut les lettres ont une \textit{hauteur} de 5 carreaux (la taille est déterminée par rapport à la hauteur globale souhaitée, qui vaut par défaut 11~mm), et 2 carreaux ont été rajoutés en haut et en bas, et 1 carreau de chaque côté.
+%
+%\smallskip
+%
+%Attention cependant aux caractères spéciaux et/ ou aux lettres accentuées, qui pourraient poser problème (au quel cas la macro d'insertion individuelle est à préférer !)
+%
+%\begin{DemoCode}{listing only}
+%%une lettre
+%\PixlLetter%
+%    [height=...,thick=...,color=...,gridcolor=...,
+%    offseth=...,offsetv=...,gridafter=...,nospaceafter=...]
+%    <options tikzpicture>
+%    {lettre}
+%
+%%l'apostrophe, si besoin...
+%\PixlLetterQuote%
+%    [height=...,thick=...,color=...,gridcolor=...,
+%    offseth=...,offsetv=...,gridafter=...,nospaceafter=...]
+%    <options tikzpicture>
+%
+%%plusieurs lettres
+%\PixlLetters%
+%    [height=...,thick=...,color=...,gridcolor=...,
+%    offseth=...,offsetv=...,gridafter=...,nospaceafter=...]
+%    {lettres}
+%\end{DemoCode}
+%
+%\begin{DemoCode}{listing only}
+%\PixlLetter{S}\PixlLetter{i}\PixlLetter{n}\PixlLetter{g}\PixlLetter{e}
+%
+%\PixlLetters[height=2cm,color=red,gridafter,offsetv=1]{(Singe)}
+%
+%\PixlLetters[color=blue]{Les singes, c'est super !?}
+%
+%\PixlLetters[color=red]{1+1=2}
+%\end{DemoCode}
+%
+%\PixlLetter{S}\PixlLetter{i}\PixlLetter{n}\PixlLetter{g}\PixlLetter{e}
+%
+%\PixlLetters[height=2cm,color=red,gridafter,offsetv=1]{(Singe)}
+%
+%\PixlLetters[color=blue]{Les singes, c'est super !?}
+%
+%\PixlLetters[color=red]{1+1=2}
+
 \subsection{Bannière de titre}
 
 L'idée est de proposer une bannière, réalisée en \TikZ, pour présenter par exemple un titre.

Modified: trunk/Master/texmf-dist/doc/latex/customenvs/envtexo_exemples.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/customenvs/envtexo_exemples.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/customenvs/envtexo_exemples.tex	2024-11-04 21:41:11 UTC (rev 72763)
+++ trunk/Master/texmf-dist/doc/latex/customenvs/envtexo_exemples.tex	2024-11-04 21:41:21 UTC (rev 72764)
@@ -54,21 +54,25 @@
 	\ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
-\begin{EnvtExo}[Decoration=Points/7]%exo10
+\begin{EnvtExo}[Decoration=Speedo/4.25§6]%exo10
 	\ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
-\begin{EnvtExo}[Type=Perso/{Titre perso },Etoiles={2.5§5}]%exo11
+\begin{EnvtExo}[Decoration=Points/7.5]%exo11
 	\ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
+\begin{EnvtExo}[Type=Perso/{Titre perso },Etoiles={2.5§5}]%exo12
+	\ipsum<Lang=FR,Type=sent>
+\end{EnvtExo}
+
 \StyleEnvtExo[Couleur=red,CouleurDeco=teal,Police=\bfseries\ttfamily,EpTrait=2pt,Libelle={Exercice n°}]
 
-\begin{EnvtExo}[Decoration=Icone/\faAddressBook]%exo12
+\begin{EnvtExo}[Decoration=Icone/\faAddressBook]%exo13
 	\ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
-\begin{EnvtExo}[Type=Perso/{Titre perso },Decoration=Chrono/25,Trait=dashilles,Etoiles=0.5]%exo13
+\begin{EnvtExo}[Type=Perso/{Titre perso },Decoration=Chrono/25,Trait=dashilles,Etoiles=0.5]%exo14
 	\ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
@@ -75,11 +79,11 @@
 \StyleEnvtExoDefaut
 
 \begin{EnvtExo}%
-	[Type=Perso/{Titre perso~},Decoration=Image/goku_ssj4,Trait=non,Compteur=false]%exo14
+	[Type=Perso/{Titre perso~},Decoration=Image/goku_ssj4,Trait=non,Compteur=false]%exo15
 	\ipsum<Lang=FR,Type=sent>
 \end{EnvtExo}
 
-\TitreExo[Type=Perso/{Annexe Exercice 3},Compteur=false,Decoration=Image/sseiya_aiolos]%exo15
+\TitreExo[Type=Perso/{Annexe Exercice 3},Compteur=false,Decoration=Image/sseiya_aiolos]%exo16
 
 \ipsum<Lang=FR,Type=sent>
 

Modified: trunk/Master/texmf-dist/tex/latex/customenvs/customenvs.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/customenvs/customenvs.sty	2024-11-04 21:41:11 UTC (rev 72763)
+++ trunk/Master/texmf-dist/tex/latex/customenvs/customenvs.sty	2024-11-04 21:41:21 UTC (rev 72764)
@@ -3,9 +3,12 @@
 % source pencil...: CC-BY-SA 4.0 https://tex.stackexchange.com/questions/504092/replicating-a-fancy-bordered-text-style-in-latex/504145#504145
 
 \NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{customenvs}[2024/09/14 0.2.3 Custom classic environments]
+\ProvidesPackage{customenvs}[2024/11/04 0.2.6 Custom classic environments]
 
 %====HISTORIQUE
+% v 0.2.6	Roue des compétences / SkillsWheel / speedometer
+% v 0.2.5	Modification mineure des points dans l'environnement EnvtExo
+% v 0.2.4	Petite boîte marker
 % v 0.2.3	Panneau autoroutier + Panneau Soldes
 % v 0.2.2	Flèche évasée, en TikZ
 % v 0.2.1	Modification mineure de la gestion des étoiles tikz (baseline) + grille auto tikzpicture
@@ -947,8 +950,10 @@
 			\IfSubStr{\EnvtExoDeco}{Points}%
 				{%
 					\StrBehind{\EnvtExoDeco}{/}[\EnvtExoPts]%
-					\IfStrEq{\EnvtExoPts}{1}{\def\pts{point}}{\def\pts{points}}%
-					\,\textcolor{macouleurexodeco}{(\EnvtExoPts\ \pts)}%
+					\xintifboolexpr{ \EnvtExoPts <= 1 }{\def\pts{point}}{\def\pts{points}}%
+					%\IfStrEq{\EnvtExoPts}{1}{\def\pts{point}}{\def\pts{points}}%
+					%\,\textcolor{macouleurexodeco}{(\num{\EnvtExoPts} \pts)}%
+					\,\textcolor{macouleurexodeco}{(\StrSubstitute{\EnvtExoPts}{.}{{{,}}}\ \pts)}%
 				}{}%
 			\IfSubStr{\EnvtExoDeco}{Image}%
 				{%
@@ -956,6 +961,12 @@
 					\settototalheight{\tmp at image@hauteur at totale}{\hbox{\tmpstyleexo qB}}%
 					\,$\vcenter{\hbox{\includegraphics[height=\EnvtExoScaleImg\tmp at image@hauteur at totale]{\EnvtExoImg}}}$%
 				}{}%
+			\IfSubStr{\EnvtExoDeco}{Speedo}%
+				{%
+					\StrBehind{\EnvtExoDeco}{/}[\EnvtExoLevel]%
+					\StrCut{\EnvtExoLevel}{§}{\EnvtExoLevelSk}{\EnvtExoLevelTo}%
+					\,\MiniCompteurNiveaux[Couleurs=macouleurexodeco,Marqueur=\EnvtExoLevelSk]{\EnvtExoLevelTo}%
+				}{}%
 			\IfSubStr{\EnvtExoDeco}{faEtoiles}%
 				{%
 					\StrBehind{\EnvtExoDeco}{/}[\EnvtExoStars]%
@@ -1025,8 +1036,10 @@
 			\IfSubStr{\EnvtExoDeco}{Points}%
 				{%
 					\StrBehind{\EnvtExoDeco}{/}[\EnvtExoPts]%
-					\IfStrEq{\EnvtExoPts}{1}{\def\pts{point}}{\def\pts{points}}%
-					\,\textcolor{macouleurexodeco}{(\EnvtExoPts\ \pts)}%
+					\xintifboolexpr{ \EnvtExoPts <= 1 }{\def\pts{point}}{\def\pts{points}}%
+					%\IfStrEq{\EnvtExoPts}{1}{\def\pts{point}}{\def\pts{points}}%
+					%\,\textcolor{macouleurexodeco}{(\num{\EnvtExoPts} \pts)}%
+					\,\textcolor{macouleurexodeco}{(\StrSubstitute{\EnvtExoPts}{.}{{{,}}}\ \pts)}%
 				}{}%
 			\IfSubStr{\EnvtExoDeco}{Image}%
 				{%
@@ -1116,8 +1129,9 @@
 			\IfSubStr{\EnvtExoDeco}{Points}%
 				{%
 					\StrBehind{\EnvtExoDeco}{/}[\EnvtExoPts]%
-					\IfStrEq{\EnvtExoPts}{1}{\def\pts{point}}{\def\pts{points}}%
-					\,(\EnvtExoPts\ \pts)%
+					\xintifboolexpr{ \EnvtExoPts <= 1 }{\def\pts{point}}{\def\pts{points}}%
+					%\,(\EnvtExoPts\ \pts)%
+					\,\textcolor{macouleurexodeco}{(\StrSubstitute{\EnvtExoPts}{.}{{{,}}}\ \pts)}%
 				}{}%
 			\IfSubStr{\EnvtExoDeco}{Image}%
 				{%
@@ -1194,8 +1208,9 @@
 			\IfSubStr{\EnvtExoDeco}{Points}%
 				{%
 					\StrBehind{\EnvtExoDeco}{/}[\EnvtExoPts]%
-					\IfStrEq{\EnvtExoPts}{1}{\def\pts{point}}{\def\pts{points}}%
-					\,(\EnvtExoPts\ \pts)%
+					\xintifboolexpr{ \EnvtExoPts <= 1 }{\def\pts{point}}{\def\pts{points}}%
+					%\,(\EnvtExoPts\ \pts)%
+					\,\textcolor{macouleurexodeco}{(\StrSubstitute{\EnvtExoPts}{.}{{{,}}}\ \pts)}%
 				}{}%
 			\IfSubStr{\EnvtExoDeco}{Image}%
 				{%
@@ -3068,4 +3083,459 @@
 	\endtcolorbox%
 }
 
+%====tcbmarker
+\defKV[tcbmarker]{%
+	Couleur=\def\tcbmarkercolor{#1},%
+	color=\def\tcbmarkercolor{#1},%
+	Police=\def\tcbmarkerfonte{#1},%
+	font=\def\tcbmarkerfonte{#1},%
+	Largeur=\def\tcbmarkerlarg{#1},%
+	width=\def\tcbmarkerlarg{#1}
+}
+\setKVdefault[tcbmarker]{%
+	Couleur=yellow,%
+	color=yellow,%
+	Police=\small\sffamily,%
+	font=\small\sffamily,%
+	Largeur=auto,%
+	width=auto
+}
+
+\NewDocumentCommand\tbcmarker{ O{} D<>{} m }{%
+	\restoreKV[tcbmarker]%
+	\setKV[tcbmarker]{#1}%
+	\IfEq{\tcbmarkerlarg}{auto}%
+		{%
+			\tcbset{tcbmarkerbase/.style={enhanced,box align=base}}
+		}%
+		{%
+			\tcbset{tcbmarkerbase/.style={enhanced,capture=minipage,width=\tcbmarkerlarg}}
+		}%
+	\tcbox[tcbmarkerbase,nobeforeafter,fontupper=\tcbmarkerfonte,%
+	boxrule=0.5pt,boxsep=0.5mm,left=2mm,right=5mm,top=0pt,bottom=0pt,colback=\tcbmarkercolor!15,colframe=\tcbmarkercolor!20!black,sharp corners,rounded corners=southeast,arc is angular,arc=3mm,%
+	underlay={\path[line width=0.5pt,fill=tcbcolback!80!black] ([yshift=3mm]interior.south east)--++(-0.4,-0.1)--++(0.1,-0.2);\path[line width=0.5pt,draw=tcbcolframe,shorten <=-0.05mm,shorten >=-0.05mm] ([yshift=3mm]interior.south east)--++(-0.4,-0.1)--++(0.1,-0.2);},drop fuzzy shadow,#2,before upper={\vphantom{(qÉ)}},#2]{#3}%
+}
+
+%====SkillsWheel [en & fr]
+\usetikzlibrary{bbox}
+\newlength{\skilwheelradius}
+\setlength\skilwheelradius{4cm}
+
+\defKV[skillswheel]{%
+	Rayon=\setlength\skilwheelradius{#1},%
+	Radius=\setlength\skilwheelradius{#1},%
+	Police=\def\skilwheelfonte{#1},%
+	Font=\def\skilwheelfonte{#1},%
+	ListeNiveaux=\def\skilwheelskills{#1},%
+	SkillsList=\def\skilwheelskills{#1},%
+	Marqueur=\def\skilwheelmark{#1},%
+	Mark=\def\skilwheelmark{#1}
+}
+\setKVdefault[skillswheel]{%
+	Rayon=3cm,Radius=3cm,
+	Police=\bfseries\sffamily,Font=\bfseries\sffamily,%
+	ListeNiveaux={},SkillsList={},%
+	Marqueur={},Mark={}
+}
+
+\NewDocumentCommand\RoueNiveaux{ O{} D<>{} m }{%
+	%1 := clés
+	%2 := liste couleurs
+	%3 := choix marqueur
+	\restoreKV[skillswheel]%
+	\setKV[skillswheel]{#1}%
+	%\IfEq{#3}{}{\xdef\skilwheelmark{-1}}{\xdef\skilwheelmark{#3}}%
+	\IfSubStr{#3}{,}%
+		{%
+			\readlist*\skilswheelcolors{#3}%
+		}%
+		{%
+			\xdef\skilswheelcolorslen{#3}%
+		}%
+	\IfEq{\skilwheelmark}{}%
+		{}%
+		{%
+			\xintifboolexpr{\skilwheelmark >= 0 'and' \skilwheelmark <= \skilswheelcolorslen}%
+				{%
+					\xdef\skilswheelposcurs{\xintfloateval{180-180*(\skilwheelmark)/\skilswheelcolorslen}}%
+				}%
+				{%
+					\xdef\skilswheelposcurs{\xintfloateval{0.5*\skilswheelcolorslen}}%
+				}%
+		}%
+	\IfEq{\skilwheelskills}{}{}{\readlist*\skilswheellstskills{\skilwheelskills}}%
+	\begin{tikzpicture}[transform shape,#2]
+		\foreach \i in {1,...,\skilswheelcolorslen}{%
+			\IfSubStr{#3}{,}%
+				{%
+					\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius},fill={\skilswheelcolors[\i]}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+				}%
+				{%
+					\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+				}%
+			%label
+			\IfEq{\skilwheelskills}{}%
+				{}%
+				{%
+					\xintifboolexpr{ 180*(\i-1)/\skilswheelcolorslen <= 90}%
+						{%
+							\draw[draw=none] ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above right,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+						}%
+						{%
+							\draw[draw=none] ({180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above left,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+						}%
+				}%
+		}%
+		\IfEq{\skilwheelmark}{}%
+			{}%
+			{%
+				\node[rotate={90+\skilswheelposcurs},regular polygon,regular polygon sides=3,fill=black,inner sep=0pt,minimum size={0.125*\skilwheelradius},outer sep=0pt] at (\skilswheelposcurs:{1.0125\skilwheelradius}) {} ;
+			}%
+	\end{tikzpicture}%
+}
+
+\NewDocumentCommand\WheelOfSkills{ O{} D<>{} m }{%
+	%1 := clés
+	%2 := liste couleurs
+	%3 := choix marqueur
+	\restoreKV[skillswheel]%
+	\setKV[skillswheel]{#1}%
+	%\IfEq{#3}{}{\xdef\skilwheelmark{-1}}{\xdef\skilwheelmark{#3}}%
+	\IfSubStr{#3}{,}%
+		{%
+			\readlist*\skilswheelcolors{#3}%
+		}%
+		{%
+			\xdef\skilswheelcolorslen{#3}%
+		}%
+	\IfEq{\skilwheelmark}{}%
+		{}%
+		{%
+			\xintifboolexpr{\skilwheelmark >= 0 'and' \skilwheelmark <= \skilswheelcolorslen}%
+				{%
+					\xdef\skilswheelposcurs{\xintfloateval{180-180*(\skilwheelmark)/\skilswheelcolorslen}}%
+				}%
+				{%
+					\xdef\skilswheelposcurs{\xintfloateval{0.5*\skilswheelcolorslen}}%
+				}%
+		}%
+	\IfEq{\skilwheelskills}{}{}{\readlist*\skilswheellstskills{\skilwheelskills}}%
+	\begin{tikzpicture}[transform shape,#2]
+		\foreach \i in {1,...,\skilswheelcolorslen}{%
+			\IfSubStr{#3}{,}%
+				{%
+					\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius},fill={\skilswheelcolors[\i]}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+				}%
+				{%
+					\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+				}%
+			%label
+			\IfEq{\skilwheelskills}{}%
+				{}%
+				{%
+					\xintifboolexpr{ 180*(\i-1)/\skilswheelcolorslen <= 90}%
+						{%
+							\draw[draw=none] ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above right,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+						}%
+						{%
+							\draw[draw=none] ({180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above left,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+						}%
+				}%
+		}%
+		\IfEq{\skilwheelmark}{}%
+			{}%
+			{%
+				\node[rotate={90+\skilswheelposcurs},regular polygon,regular polygon sides=3,fill=black,inner sep=0pt,minimum size={0.125*\skilwheelradius},outer sep=0pt] at (\skilswheelposcurs:{1.0125\skilwheelradius}) {} ;
+			}%
+	\end{tikzpicture}%
+}
+
+\defKV[skillswheellevel]{%
+	Pos=\def\skilswheelposlab{#1},%
+	Echelle=\def\skilswheelscalelab{#1},%
+	Scale=\def\skilswheelscalelab{#1},%
+}
+\setKVdefault[skillswheellevel]{%
+	Pos=0.80,%
+	Echelle=2,Scale=2
+}
+
+\NewDocumentCommand\PlacerIconeNiveau{ O{} m m }{%
+	\restoreKV[skillswheellevel]%
+	\setKV[skillswheellevel]{#1}%
+	\node[rotate={90-(180*(#2-0.5)/\skilswheelcolorslen)},inner sep=0pt,outer sep=0pt,scale=\skilswheelscalelab] at ({180-180*(#2-0.5)/\skilswheelcolorslen}:{\skilswheelposlab\skilwheelradius}) {#3} ;
+}
+
+\NewDocumentCommand\PutIconSkill{ O{} m m }{%
+	\restoreKV[skillswheellevel]%
+	\setKV[skillswheellevel]{#1}%
+	\node[rotate={90-(180*(#2-0.5)/\skilswheelcolorslen)},inner sep=0pt,outer sep=0pt,scale=\skilswheelscalelab] at ({180-180*(#2-0.5)/\skilswheelcolorslen}:{\skilswheelposlab\skilwheelradius}) {#3} ;
+}
+
+\NewDocumentCommand\PlacerIconesNiveaux{ O{} m }{%
+	\restoreKV[skillswheellevel]%
+	\setKV[skillswheellevel]{#1}%
+	\readlist*\skllsticon{#2}%
+	\foreach \i in {1,...,\skllsticonlen}{%
+		\node[rotate={90-(180*(\i-0.5)/\skilswheelcolorslen)},inner sep=0pt,outer sep=0pt,scale=\skilswheelscalelab] at ({180-180*(\i-0.5)/\skilswheelcolorslen}:{\skilswheelposlab\skilwheelradius}) {\skllsticon[\i]} ;
+	}
+}
+
+\NewDocumentCommand\PutIconsSkills{ O{} m }{%
+	\restoreKV[skillswheellevel]%
+	\setKV[skillswheellevel]{#1}%
+	\readlist*\skllsticon{#2}%
+	\foreach \i in {1,...,\skllsticonlen}{%
+		\node[rotate={90-(180*(\i-0.5)/\skilswheelcolorslen)},inner sep=0pt,outer sep=0pt,scale=\skilswheelscalelab] at ({180-180*(\i-0.5)/\skilswheelcolorslen}:{\skilswheelposlab\skilwheelradius}) {\skllsticon[\i]} ;
+	}
+}
+
+\NewDocumentEnvironment{EnvRoueNiveaux}{ O{} D<>{} m }%
+{%
+	%1 := clés
+	%2 := liste couleurs
+	%3 := choix marqueur
+	\restoreKV[skillswheel]%
+	\setKV[skillswheel]{#1}%
+	%\IfEq{#3}{}{\xdef\skilwheelmark{-1}}{\xdef\skilwheelmark{#3}}%
+	\IfSubStr{#3}{,}%
+	{%
+		\readlist*\skilswheelcolors{#3}%
+	}%
+	{%
+		\xdef\skilswheelcolorslen{#3}%
+	}%
+	\IfEq{\skilwheelmark}{}%
+	{}%
+	{%
+		\xintifboolexpr{\skilwheelmark >= 0 'and' \skilwheelmark <= \skilswheelcolorslen}%
+		{%
+			\xdef\skilswheelposcurs{\xintfloateval{180-180*(\skilwheelmark)/\skilswheelcolorslen}}%
+		}%
+		{%
+			\xdef\skilswheelposcurs{\xintfloateval{0.5*\skilswheelcolorslen}}%
+		}%
+	}%
+	\IfEq{\skilwheelskills}{}{}{\readlist*\skilswheellstskills{\skilwheelskills}}%
+	\begin{tikzpicture}[transform shape,#2]
+		\foreach \i in {1,...,\skilswheelcolorslen}{%
+			\IfSubStr{#3}{,}%
+			{%
+				\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius},fill={\skilswheelcolors[\i]}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+			}%
+			{%
+				\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+			}%
+			%label
+			\IfEq{\skilwheelskills}{}%
+			{}%
+			{%
+				\xintifboolexpr{ 180*(\i-1)/\skilswheelcolorslen <= 90}%
+				{%
+					\draw[draw=none] ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above right,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+				}%
+				{%
+					\draw[draw=none] ({180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above left,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+				}%
+			}%
+		}%
+		\IfEq{\skilwheelmark}{}%
+		{}%
+		{%
+			\node[rotate={90+\skilswheelposcurs},regular polygon,regular polygon sides=3,fill=black,inner sep=0pt,minimum size={0.125*\skilwheelradius},outer sep=0pt] at (\skilswheelposcurs:{1.0125\skilwheelradius}) {} ;
+		}%
+}%
+{%
+	\end{tikzpicture}%
+}
+
+\NewDocumentEnvironment{SkillsWheel}{ O{} D<>{} m }%
+{%
+	%1 := clés
+	%2 := liste couleurs
+	%3 := choix marqueur
+	\restoreKV[skillswheel]%
+	\setKV[skillswheel]{#1}%
+	%\IfEq{#3}{}{\xdef\skilwheelmark{-1}}{\xdef\skilwheelmark{#3}}%
+	\IfSubStr{#3}{,}%
+	{%
+		\readlist*\skilswheelcolors{#3}%
+	}%
+	{%
+		\xdef\skilswheelcolorslen{#3}%
+	}%
+	\IfEq{\skilwheelmark}{}%
+	{}%
+	{%
+		\xintifboolexpr{\skilwheelmark >= 0 'and' \skilwheelmark <= \skilswheelcolorslen}%
+		{%
+			\xdef\skilswheelposcurs{\xintfloateval{180-180*(\skilwheelmark)/\skilswheelcolorslen}}%
+		}%
+		{%
+			\xdef\skilswheelposcurs{\xintfloateval{0.5*\skilswheelcolorslen}}%
+		}%
+	}%
+	\IfEq{\skilwheelskills}{}{}{\readlist*\skilswheellstskills{\skilwheelskills}}%
+	\begin{tikzpicture}[transform shape,#2]
+		\foreach \i in {1,...,\skilswheelcolorslen}{%
+			\IfSubStr{#3}{,}%
+			{%
+				\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius},fill={\skilswheelcolors[\i]}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+			}%
+			{%
+				\draw[line join=mitter,line cap=rect,line width=\fpeval{0.015\skilwheelradius}] ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) -- ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) arc({180-180*(\i-1)/\skilswheelcolorslen}:{180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) arc({180-180*(\i)/\skilswheelcolorslen}:{180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) ;
+			}%
+			%label
+			\IfEq{\skilwheelskills}{}%
+			{}%
+			{%
+				\xintifboolexpr{ 180*(\i-1)/\skilswheelcolorslen <= 90}%
+				{%
+					\draw[draw=none] ({180-180*(\i-1)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i-1)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above right,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+				}%
+				{%
+					\draw[draw=none] ({180-180*(\i)/\skilswheelcolorslen}:\skilwheelradius) -- ({180-180*(\i)/\skilswheelcolorslen}:{0.075\skilwheelradius}) node[inner sep=1.5pt,sloped,pos=0.033,above left,font=\skilwheelfonte] {\vphantom{()}\skilswheellstskills[\i]} ;
+				}%
+			}%
+		}%
+		\IfEq{\skilwheelmark}{}%
+		{}%
+		{%
+			\node[rotate={90+\skilswheelposcurs},regular polygon,regular polygon sides=3,fill=black,inner sep=0pt,minimum size={0.125*\skilwheelradius},outer sep=0pt] at (\skilswheelposcurs:{1.0125\skilwheelradius}) {} ;
+		}%
+}%
+{%
+	\end{tikzpicture}%
+}
+
+\newlength{\tmphauteurgradniv}
+\newlength{\tmphauteurspeedom}
+
+\defKV[miniskillswheel]{%
+	Couleurs=\def\miniskillswheelcol{#1},%
+	Colors=\def\miniskillswheelcol{#1},%
+	Marqueur=\def\miniskillswheelmark{#1},%
+	Mark=\def\miniskillswheelmark{#1},%
+	Taille=\setlength{\tmphauteurspeedom}{#1},%
+	Size=\setlength{\tmphauteurspeedom}{#1}
+}
+\setKVdefault[miniskillswheel]{%
+	Couleurs=black,%
+	Colors=black,
+	Marqueur={},%
+	Mark={},
+	Taille=4cm,%
+	Size=4cm
+}
+
+\NewDocumentCommand\MiniCompteurNiveaux{ O{} D<>{} m }{%
+	\restoreKV[miniskillswheel]%
+	\setKV[miniskillswheel]{#1}%
+	\settototalheight{\tmphauteurgradniv}{\hbox{azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN}}%
+	\setlength{\tmphauteurgradniv}{0.90\tmphauteurgradniv}%.
+	\IfEq{\miniskillswheelmark}{}%
+		{}%
+		{%
+			\xintifboolexpr{\miniskillswheelmark >= 0 'and' \miniskillswheelmark <= #3}%
+				{%
+					\xdef\miniskilswheelposcurs{\xintfloateval{180-180*(\miniskillswheelmark)/(#3)}}%
+				}%
+				{%
+					\xdef\miniskilswheelposcurs{\xintfloateval{0.5*(#3)}}%
+				}%
+		}%
+	\IfSubStr{\miniskillswheelcol}{/}%
+		{%
+			\StrCut{\miniskillswheelcol}{/}{\miniskillswheelcolp}{\miniskillswheelcols}%
+		}%
+		{%
+			\xdef\miniskillswheelcolp{\miniskillswheelcol}\xdef\miniskillswheelcols{\miniskillswheelcol}%
+		}%
+	\begin{tikzpicture}[bezier bounding box,baseline={-0.075\tmphauteurgradniv},line width={0.075\tmphauteurgradniv},#2,transform shape]
+		\draw[\miniskillswheelcolp] (-15:{0.7588\tmphauteurgradniv}) arc(-15:195:{0.7588\tmphauteurgradniv}) --cycle ;
+		\foreach \i in {0,...,#3}{%
+			\draw[\miniskillswheelcolp,line cap=round] ({180-180*(\i)/#3}:{0.55\tmphauteurgradniv})--({180-180*(\i)/#3}:{0.65\tmphauteurgradniv}) ;
+		}
+		\IfEq{\miniskillswheelmark}{}%
+			{}%
+			{%
+				\draw[\miniskillswheelcols] (0,0) circle[radius=0.1\tmphauteurgradniv] ;
+				\draw[\miniskillswheelcols,line cap=round] ({\miniskilswheelposcurs}:{0.1\tmphauteurgradniv}) -- ({\miniskilswheelposcurs}:{0.6125\tmphauteurgradniv}) ;
+			}%
+	\end{tikzpicture}%
+}
+
+\NewDocumentCommand\miniskillwheel{ O{} D<>{} m }{%
+	\restoreKV[miniskillswheel]%
+	\setKV[miniskillswheel]{#1}%
+	\settototalheight{\tmphauteurgradniv}{\hbox{azertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN}}%
+	\setlength{\tmphauteurgradniv}{0.90\tmphauteurgradniv}%.
+	\IfEq{\miniskillswheelmark}{}%
+		{}%
+		{%
+			\xintifboolexpr{\miniskillswheelmark >= 0 'and' \miniskillswheelmark <= #3}%
+				{%
+					\xdef\miniskilswheelposcurs{\xintfloateval{180-180*(\miniskillswheelmark)/(#3)}}%
+				}%
+				{%
+					\xdef\miniskilswheelposcurs{\xintfloateval{0.5*(#3)}}%
+				}%
+		}%
+	\IfSubStr{\miniskillswheelcol}{/}%
+		{%
+			\StrCut{\miniskillswheelcol}{/}{\miniskillswheelcolp}{\miniskillswheelcols}%
+		}%
+		{%
+			\xdef\miniskillswheelcolp{\miniskillswheelcol}\xdef\miniskillswheelcols{\miniskillswheelcol}%
+		}%
+	\begin{tikzpicture}[bezier bounding box,baseline={-0.075\tmphauteurgradniv},line width={0.075\tmphauteurgradniv},#2,transform shape]
+		\draw[\miniskillswheelcolp] (-15:{0.7588\tmphauteurgradniv}) arc(-15:195:{0.7588\tmphauteurgradniv}) --cycle ;
+		\foreach \i in {0,...,#3}{%
+			\draw[\miniskillswheelcolp,line cap=round] ({180-180*(\i)/#3}:{0.55\tmphauteurgradniv})--({180-180*(\i)/#3}:{0.65\tmphauteurgradniv}) ;
+		}
+		\IfEq{\miniskillswheelmark}{}%
+			{}%
+			{%
+				\draw[\miniskillswheelcols] (0,0) circle[radius=0.1\tmphauteurgradniv] ;
+				\draw[\miniskillswheelcols,line cap=round] ({\miniskilswheelposcurs}:{0.1\tmphauteurgradniv}) -- ({\miniskilswheelposcurs}:{0.6125\tmphauteurgradniv}) ;
+			}%
+	\end{tikzpicture}%
+}
+
+\NewDocumentCommand\tkzspeedometer{ O{} D<>{} m }{%
+	\restoreKV[miniskillswheel]%
+	\setKV[miniskillswheel]{#1}%
+	\setlength{\tmphauteurgradniv}{0.9\tmphauteurspeedom}%
+	\IfEq{\miniskillswheelmark}{}%
+		{}%
+		{%
+			\xintifboolexpr{\miniskillswheelmark >= 0 'and' \miniskillswheelmark <= #3}%
+				{%
+					\xdef\miniskilswheelposcurs{\xintfloateval{180-180*(\miniskillswheelmark)/(#3)}}%
+				}%
+				{%
+					\xdef\miniskilswheelposcurs{\xintfloateval{0.5*(#3)}}%
+				}%
+		}%
+	\IfSubStr{\miniskillswheelcol}{/}%
+		{%
+			\StrCut{\miniskillswheelcol}{/}{\miniskillswheelcolp}{\miniskillswheelcols}%
+		}%
+		{%
+			\xdef\miniskillswheelcolp{\miniskillswheelcol}\xdef\miniskillswheelcols{\miniskillswheelcol}%
+		}%
+	\begin{tikzpicture}[bezier bounding box,line width={0.075\tmphauteurgradniv},#2,transform shape]%
+		\draw[\miniskillswheelcolp] (-15:{0.7588\tmphauteurgradniv}) arc(-15:195:{0.7588\tmphauteurgradniv}) --cycle ;
+		\foreach \i in {0,...,#3}{%
+			\draw[\miniskillswheelcolp,line cap=round] ({180-180*(\i)/#3}:{0.55\tmphauteurgradniv})--({180-180*(\i)/#3}:{0.65\tmphauteurgradniv}) ;
+		}%
+		\IfEq{\miniskillswheelmark}{}%
+			{}%
+			{%
+				\draw[\miniskillswheelcols] (0,0) circle[radius=0.1\tmphauteurgradniv] ;%
+				\draw[\miniskillswheelcols,line cap=round] ({\miniskilswheelposcurs}:{0.1\tmphauteurgradniv}) -- ({\miniskilswheelposcurs}:{0.6125\tmphauteurgradniv}) ;%
+			}%
+	\end{tikzpicture}%
+}
+
 \endinput
\ No newline at end of file



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