% !TeX TXS-program:compile = txs:///arara
% arara: lualatex: {shell: no, synctex: no, interaction: batchmode}
% arara: lualatex: {shell: no, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')

\documentclass[french,11pt,a4paper]{article}
%\usepackage[utf8]{inputenc}
%\usepackage[T1]{fontenc}
%\usepackage{amssymb}
\usepackage{amssymb}
\usepackage{fontspec}
\setmonofont[Scale=MatchLowercase]{Inconsolatazi4}
\usepackage[normalulem]{CreationBoites}
\usepackage{xstring}
\usepackage{enumitem}
%\RequirePackage[normalem]{ulem}
\usepackage{soul}
\usepackage{codehigh}
\usepackage{multicol}
\usepackage{tabularray}
\usepackage{lipsum}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
%\rhead{\sffamily\small\affloetalab[Legende]}
\lfoot{\sffamily\small [CreationBoites]}
\cfoot{\sffamily\small - \thepage{} -}
\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
\usepackage{hologo}
\providecommand\tikzlogo{Ti\textit{k}Z}
\providecommand\TeXLive{\TeX{}Live\xspace}
\providecommand\PSTricks{\textsf{PSTricks}\xspace}
\let\pstricks\PSTricks
\let\TikZ\tikzlogo

\usepackage{hyperref}
\urlstyle{same}
\hypersetup{pdfborder=0 0 0}
\usepackage[margin=1.5cm]{geometry}
\setlength{\parindent}{0pt}

\sethlcolor{lightgray!25}
\NewDocumentCommand\MontreCode{ m }{%
	\hl{\vphantom{\texttt{pf}}\texttt{#1}}%
}

\CreationBoite[blue]{BoiteDeDemo}{CompteurBoiteDemo}{\faIcons}{Boîte Démo/Boîtes Démos}
\CreationBoite[red]{BoiteDanger}{CompteurBoiteDanger}{\twemoji{warning}}{Danger/Dangers}[colback=red!10]
\CreationBoiteAlt[orange]{montestcadre}{cpttestcadre}{Boîte Démo Alt}{Boîtes Démo Alt}{$\blacktriangleright$\,}

\usepackage{babel}

\begin{document}

\pagestyle{fancy}

\thispagestyle{empty}

\begin{center}
	\begin{minipage}{0.88\linewidth}
	\begin{tcolorbox}[colframe=yellow,colback=yellow!15]
		\begin{center}
			\begin{tabular}{c}
				{\Huge \texttt{CreationBoites}}\\
				\\
				{\LARGE Création \textit{semi-}automatique de boîtes \textit{tcbox}} \\
				\\
				{\LARGE avec quelques éléments de personnalisation.} \\
				\\
				{\small \texttt{Version \cbpackageversion{} -- \cbpackagedate}}
		\end{tabular}
		\end{center}
	\end{tcolorbox}
\end{minipage}
\end{center}

\begin{center}
	\begin{tabular}{c}
	\texttt{Cédric Pierquet}\\
	{\ttfamily c pierquet -- at -- outlook . fr}\\
	%\texttt{\url{https://forge.apps.education.fr/pierquetcedric/packages-latex}}\\
	\texttt{\url{https://github.com/cpierquet/latex-packages/tree/main/creationboites}}
\end{tabular}
\end{center}

\hrule

\vfill

\begin{tcolorbox}[colframe=lightgray,colback=white]
\begin{BoiteDeDemo}
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[Compteur=false]
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[Pluriel]
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[SousTitre={Un petit sous-titre}]
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[ComplementTitre={ - Un complément de titre}]%noter l'espace ;-)
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[ModifLabel={ super important}]%noter l'espace ;-)
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[Logo={example-image}]
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDeDemo}[Icone={\faLightbulb}]
	\lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDanger}[Compteur=false,Emoji=snake]
	\lipsum[1][1]
\end{BoiteDanger}
\end{tcolorbox}

\begin{tcolorbox}[colframe=lightgray,colback=white]
\begin{montestcadre}[SouligneLabel]
\lipsum[1][1]
\end{montestcadre}
\end{tcolorbox}

\vfill~

\pagebreak

\phantomsection

\hypertarget{matoc}{}

\tableofcontents

\vspace*{5mm}

\hrule

\pagebreak

\section{Le package CreationBoites}

\subsection{Idées}

L'idée est de proposer un moyen de \textit{générer} des boîtes simples, créées grâce à \MontreCode{tcolorbox}, de manière \textit{semi}-automatisée.

\smallskip

Chaque boîte sera définie -- avec un style global -- via :

\begin{itemize}
	\item un \textbf{nom} (pour l'environnement) ;
	\item un nom de \textbf{compteur} pour la numéroter ;
	\item une \textbf{couleur} (optionnelle et noire par défaut) ;
	\item une \textbf{icône} ou un \textbf{logo} ou un \textbf{emoji} ;
	\item un \textbf{label} (singulier ou pluriel).
\end{itemize}

\medskip

Il ne faut pas voir ce package comme un outil avancé de création, \MontreCode{tcolorbox} étant déjà suffisamment complet pour que l'utilisateur puisse faire tout ce dont il a envie, mais comme un \textit{assistant simple} pour créer des boîtes pour des supports de cours par exemple !

\subsection{Les couleurs}

De manière expérimentale, la création de chaque boîte va également :

\begin{itemize}
	\item créer un nom de couleur de \textit{bordure} ;
	\item créer un nom de couleur de \textit{fond} (titre ou boîte en fonction du style) ;
	\item permettre d'utiliser la couleur courante de \textit{bordure} ou de \textit{fond} via des couleurs \textit{génériques}.
\end{itemize}

Les couleurs \textit{courantes} (à l'intérieur d'une boîte) sont définies par \MontreCode{cbcoulbord} et \MontreCode{cbcoulfond}.

\subsection{Chargement}

Le package se charge dans le préambule, via \MontreCode{\textbackslash usepackage\{CreationBoites\}}.

Les seuls packages chargés sont :

\begin{itemize}
	\item \MontreCode{tcolorbox} (avec les libraires \MontreCode{fitting,skins}) ;
	\item \MontreCode{fontawesome}, \MontreCode{simplekv}, \MontreCode{twemojis} ;% et \MontreCode{xstring} ;
	\item la librairie \MontreCode{breakable} avec l'option \MontreCode{[breakable]} de chargement du package ;
	\item le package \MontreCode{ulem} avec les options \MontreCode{[ulem]} ou \MontreCode{[normalulem]} de chargement du package.
\end{itemize}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\usepackage{CreationBoites}                    %version classique, avec fa5, par défaut
\usepackage[nonfa]{CreationBoites}             %sans fa
\usepackage[fa6]{CreationBoites}               %version  avec fa6
\usepackage[fa7]{CreationBoites}               %version  avec fa7
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\usepackage[breakable]{CreationBoites}         %version avec breakable
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\usepackage[ulem]{CreationBoites}              %version avec ulem
\usepackage[normalulem]{CreationBoites}        %version avec [normalem]ulem
\end{codehigh}

\pagebreak

\subsection{Fonctionnement basique}

Le package propose deux macros principales :

\begin{itemize}
	\item \MontreCode{\textbackslash CreationBoite} pour créer les différentes boîtes/environnements ;
	\item \MontreCode{\textbackslash ParamBoites} pour une modification \textit{globale} de certains paramètres des boîtes (polices et marges).
\end{itemize}

\medskip

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\CreationBoite[Couleur]{Nom}{Compteur}{Icône}{Libellés}[options tcbox]
\ParamBoites[Clés]
\end{codehigh}

\medskip

La couleur de la bordure (pour réutilisation) est donc définie de manière globale par \MontreCode{cbcoulbord<Nom>}.

La couleur du fond (pour réutilisation) est donc définie de manière globale par \MontreCode{cbcoulfond<Nom>}.

\medskip

Ainsi, les exemples de boîtes données sur la page de garde ont été créées grâce à :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\CreationBoite%
    [blue]                         %Couleur de base
    {BoiteDeDemo}                  %Nom de l'environnement
    {CompteurBoiteDemo}            %Compteur
    {\faIcons}                     %Icône
    {Boîte Démo/Boîtes Démos}      %Libellés (sing/plur)

\CreationBoite%
    [red]                          %Couleur de base
    {BoiteDanger}                  %Nom de l'environnement
    {CompteurBoiteDanger}          %Compteur
    {\twemoji{warning}}            %Emoji
    {Danger/Dangers}               %Libellés (sing/plur)
    [colback=red!10]               %options tcbox spécifiques pour la boîte Danger
\end{codehigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\setcounter{CompteurBoiteDemo}{0}
\setcounter{CompteurBoiteDanger}{0}
\begin{BoiteDeDemo}
    \lipsum[1][1]
\end{BoiteDeDemo}

\begin{BoiteDanger}
    \lipsum[2][1]
\end{BoiteDanger}
\end{demohigh}

Dans ce cas la boîte est créée grâce à la syntaxe suivante :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{NomEnv}[Clés]<Options tcbox>
...
\end{NomEnv}
\end{codehigh}

\pagebreak

\section{Utilisation basique}

\subsection{Style global de la boîte}

Le style global des boîtes est défini par :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\tcbset{baseboite/.style={
    enhanced,sharp corners=uphill,boxrule=\eptraitboite,%
    before skip=0.5em,after skip=0.5em,%
    colback=white,top=4mm,%
    left={\margeboite-\margeinttitreboite-\eptraitboite},%
    right={\margeboite-\margeinttitreboite-\eptraitboite}
}%
}
\end{codehigh}

À noter que le \MontreCode{\textbackslash margeboite-\textbackslash margeinttitreboite-\textbackslash eptraitboite} vient :

\begin{itemize}
	\item des \MontreCode{\textbackslash margeinttitreboite} du paramètre \MontreCode{inner sep} du nœud Ti\textit{k}Z ;
	\item des \MontreCode{\textbackslash eptraitboite} du paramètre \MontreCode{boxrule} de la boîte \textit{titre}.
\end{itemize}

\subsection{Paramétrage simple de la boîte}

Il est possible de rajouter ou modifier quelques éléments de chaque boîte (les clés suivantes sont cumulables) :

\begin{itemize}
	\item un \textsf{sous-titre} (couleur \textsf{rouge foncé}) peut être ajouté (en haut à droite de la boîte), via la clé \MontreCode{[SousTitre=...]} ;
	\item le label peut être modifié :
	\begin{itemize}
		\item le compteur peut être désactivé, grâce à la clé \MontreCode{[Compteur=false]} ;
		\item la clé \MontreCode{[Pluriel]} force le pluriel du label ;
		\item un complément peut être rajouté entre le label et le compteur grâce à la clé \MontreCode{[ModifLabel=...]} ;
		\item un complément peut être rajouté après le compteur grâce à la clé \MontreCode{[ComplementTitre=...]} ;
	\end{itemize}
	\item une petite image (type \textit{filigrane}) peut être rajoutée (de hauteur 24pt et pivotée de 45° dans le sens horaire par défaut), dans le coin \textit{bas-droite} de la boîte :
	\begin{itemize}
		\item en spécifiant l'image grâce à la clé \MontreCode{[Logo=...]} ;
		\item en spécifiant hauteur/rotation/opacité grâce aux clés \MontreCode{[HauteurLogo=...]} , \MontreCode{[RotationLogo=...]} et \MontreCode{[OpaciteLogo=...]} ;
	\end{itemize}
	\item un petit emoji (type \textit{filigrane}) peut être rajoutée (de hauteur 24pt et pivotée de 45° dans le sens horaire par défaut), dans le coin \textit{bas-droite} de la boîte :
	\begin{itemize}
		\item en spécifiant l'emoji grâce à la clé \MontreCode{[Emoji=...]} ;
		\item en spécifiant hauteur/rotation/opacité grâce aux clés \MontreCode{[HauteurLogo=...]} , \MontreCode{[RotationLogo=...]} et \MontreCode{[OpaciteLogo=...]} ;
	\end{itemize}
	\item une petit logo (type \textsf{fontawesome5}) peut être rajoutée (d'échelle 1 et pivotée de 30° dans le sens horaire par défaut), dans le coin \textit{bas-droite} de la boîte :
	\begin{itemize}
		\item en spécifiant l'image grâce à la clé \MontreCode{[Icone=...]} ;
		\item en spécifiant échelle/rotation/opacité grâce aux clés \MontreCode{[EchelleIcone=...]} , \MontreCode{[RotationIcone=...]} et \MontreCode{[OpaciteIcone=...]}.
	\end{itemize}
\end{itemize}

Dans le cas de l'utilisation de \MontreCode{[Logo=...]}/\MontreCode{[Icone=...]}/\MontreCode{[Emoji=...]}, il est également possible de spécifier la position relative par rapport au coin inférieur droit, via la clé \MontreCode{[OffsetDeco=\{xoffset,yoffset\}]} (valant \MontreCode{\{-10pt,10pt\}} par défaut).

\medskip

Des options spécifiques \MontreCode{tcolorbox} peuvent être passées en option à l'environnement, elles sont à mettre entre \MontreCode{<...>} avant le corps de l'environnement.

\pagebreak

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\setcounter{CompteurBoiteDemo}{0}
\begin{BoiteDeDemo}[Compteur=false]
\lipsum[1][1-2]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[Pluriel]<width=0.5\linewidth>
On peut utiliser la couleur de \textcolor{cbcoulbord}{bordure} et la couleur de \fcolorbox{cbcoulbord}{cbcoulfond}{fond du titre}.

Il est possible d'utiliser la \textcolor{cbcoulbordmontestcadre}{couleur} de la boîte \texttt{montestcadre}.
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[SousTitre={Un petit sous-titre}]
\lipsum[1][1-2]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[ComplementTitre={ - Un complément de titre}]%noter l'espace ;-)
\lipsum[1][1-2]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[ModifLabel={ super important}]%noter l'espace ;-)
\lipsum[1][1-2]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[Logo={example-image}]
\lipsum[1][3-4]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[Logo={example-image},HauteurLogo=5mm,RotationLogo=10]
\lipsum[1][3-4]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[Icone={\faYoutube},EchelleIcone=1.25,RotationIcone=15]
	\lipsum[1][3-4]
\end{BoiteDeDemo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[Emoji={snake},RotationIcone=15]
	\lipsum[1][3-4]
\end{BoiteDeDemo}
\end{demohigh}

Et en \textit{cumulant} des clés de personnalisation on peut obtenir :

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[%
    ModifLabel={s super importants},ComplementTitre={ (vraiment super importants)},%
    SousTitre={- Source -},Compteur=false,Logo={example-image-a},%
    HauteurLogo=1cm,RotationLogo=15,OpaciteLogo=1
    ]
\lipsum[2][1-4]
\end{BoiteDeDemo}
\end{demohigh}

\pagebreak

\subsection{Personnalisation \textit{intermédiaire}}

Il est possible de paramétrer \textit{facilement} certaines options, via la commande \MontreCode{\textbackslash ParamBoites[...]} :

\begin{itemize}
	\item la police du label grâce à la clé \MontreCode{[PoliceTitre=...]} (\verb*|\bfseries\sffamily| par défaut) ;
	\item la police du sous-titre grâce à la clé \MontreCode{[PoliceSousTitre=...]} (\verb*|\small\bfseries\sffamily| par défaut) ;
	\item la couleur de base du sous-titre grâce à la clé \MontreCode{[CouleurSousTitre=...]} (\verb*|red| par défaut) ;
	\item les marges gauche et droite grâce à la clé \MontreCode{[Marge=...]} (\verb*|4mm| par défaut) ;
	\item l'épaisseur des bordures grâce à la clé \MontreCode{[EpaisseurBordure=...]} (\verb*|1.25pt| par défaut) ;
	\item la marge spécifique pour la boîte \textit{titre} grâce à clé \MontreCode{[MargeTitre=...]} (\verb*|3pt| par défaut).
\end{itemize}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\ParamBoites[%
    Marge=2cm,MargeTitre=2mm,%
    PoliceTitre=\large\bfseries\ttfamily,%
    PoliceSousTitre=\scriptsize\bfseries\sffamily,%
    CouleurSousTitre=orange]
\end{codehigh}

\ParamBoites[Marge=2cm,MargeTitre=2mm,PoliceTitre=\large\bfseries\ttfamily,PoliceSousTitre=\scriptsize\bfseries\sffamily,CouleurSousTitre=orange]

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{BoiteDeDemo}[SousTitre={- Un petit sous-titre -}]
\lipsum[1][1-2]
\end{BoiteDeDemo}
\end{demohigh}

On peut revenir aux paramètres par défaut grâce à la commande \MontreCode{\textbackslash ParamBoites} (sans argument).

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\ParamBoites
\begin{BoiteDeDemo}[SousTitre={- Un petit sous-titre -}]
\lipsum[1][1-2]
\end{BoiteDeDemo}
\end{demohigh}

\pagebreak

\section{Utilisation avancée}

\subsection{Styles spécifiques}

Il est possible quand même de modifier \textit{en profondeur} les boîtes créées, en redéfinissant les commandes suivantes via \verb*|\RenewDocumentCommand| :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%\usepackage{xstring}
\NewDocumentCommand\TitreBoite{ m m m m }{%
    %1=couleur
    %2=icone
    %3=nom
    %4=compteur
    % \BoxModifLabel = texte entre label et compteur
    % \BoxCpltTitle = Texte après le compteur
    \node[inner sep=\margeinttitreboite,rounded corners=3pt,draw=#1,line width=\eptraitboite,%
      rectangle,fill=#1!5!white,anchor=west,xshift=\margeboite,text=black,%
      font=\policetitreboite]%
      at (frame.north west)
      {%
      \,\CreaBoitesIfNoValueOrEmptyTF{#2}{}{{\tailleiconeboite#2}~}\vphantom{Ppé}%
      \ifboolKV[Boites]{Pluriel}{\StrBehind{#3}{/}}{\StrBefore{#3}{/}}%
      \IfStrEq{\BoxModifLabel}{}{}{\BoxModifLabel}\ifboolKV[Boites]{Compteur}{~#4}{}%
      \IfStrEq{\BoxCpltTitle}{}{}{\BoxCpltTitle}\,%
      } ;
}
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\NewDocumentCommand\SousTitreBoite{ }{%\BoxSubTitle = Sous-titre
    \node[fill=white,anchor=east,xshift=-\margeboite,text=red!75!black,%
    font=\policesoustitreboite] at (frame.north east) %
    {\vphantom{Ppé}\BoxSubTitle} ;
}
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\NewDocumentCommand\LogoCoinDroit{ }{%
    \begin{tcbclipinterior}
        \node[opacity=\BoxOpaciteLogo,rotate=-\BoxRotationLogo]%
        at ($(interior.south east)+(\BoxOffsetLogo)$) %
        {\includegraphics[height=\BoxHauteurLogo]{\BoxLogo}};%
    \end{tcbclipinterior}%
}
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\NewDocumentCommand\IconeCoinDroit{ }{%
    \begin{tcbclipinterior}
        \node[opacity=\BoxOpaciteIcone,rotate=-\BoxRotationIcone,scale=\BoxEchelleIcone]%
        at ($(interior.south east)+(\BoxOffsetLogo)$){\BoxIcone};
    \end{tcbclipinterior}%
}
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\NewDocumentCommand\EmojiCoinDroit{ }{%
    \begin{tcbclipinterior}
        \node[opacity=\BoxOpaciteIcone,rotate=-\BoxRotationIcone]%
        at ($(interior.south east)+(\BoxOffsetLogo)$){\twemoji[height=\BoxHauteurLogo]{\BoxLogoEmoji}};
    \end{tcbclipinterior}%
}
\end{codehigh}

\pagebreak

\subsection{Exemple de personnalisations avancées}

Par exemple, on peut modifier globalement le comportement de la boîte :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%\usepackage{xstring}
\tcbset{baseboite/.style={
    enhanced,boxrule=0.75pt,%
    center,width=0.75\linewidth,%
    before skip=1em,after skip=1em,%
    colback=white,top=4mm,left=1mm,right=1mm
    }%
}
\RenewDocumentCommand\TitreBoite{ m m m m }{%
    \node[inner sep=2pt,draw=#1,line width=0.75pt,rounded corners,%
    rectangle,fill=white,anchor=center,xshift=-1cm,text=black,%
    font=\policetitreboite]%
    at (frame.north)
    {%
    ~#2 #3\ifboolKV[Boites]{Compteur}{~#4}{}\IfStrEq{\BoxCpltTitle}{}{}{\BoxCpltTitle}~
    } ;
}
\RenewDocumentCommand\SousTitreBoite{ }{%
    \node[fill=white,anchor=center,%
    font=\policesoustitreboite] at (frame.south) {\vphantom{pP}\BoxSubTitle} ;
}
\ParamBoites[PoliceTitre=\bfseries,PoliceSousTitre=\small\sffamily]
\CreationBoite{BoxDef}{CompteurDefi}{\faAddressBook}{Définition}
\CreationBoite[lime]{BoxProp}{CompteurProp}{\faAmbulance}{Propriété}[colback=lime!25]
\end{codehigh}

\tcbset{baseboite/.style={
enhanced,boxrule=0.75pt,%
center,width=0.75\linewidth,%
before skip=1em,after skip=1em,%
colback=white,top=4mm,left=1mm,right=1mm
}%
}

\RenewDocumentCommand\TitreBoite{ m m m m }{%
\node[inner sep=2pt,draw=#1,line width=0.75pt,rounded corners,%
rectangle,fill=white,anchor=center,text=black,%
font=\policetitreboite]%
at (frame.north)
{%
~#2 #3\ifboolKV[Boites]{Compteur}{~#4}{}\IfStrEq{\BoxCpltTitle}{}{}{\BoxCpltTitle}~
} ;
}

\RenewDocumentCommand\SousTitreBoite{ }{%
\node[fill=white,anchor=center,%
font=\policesoustitreboite] at (frame.south) %
{\vphantom{pP}\BoxSubTitle} ;
}

\ParamBoites[PoliceTitre=\bfseries,PoliceSousTitre=\small\sffamily]

\CreationBoite{BoxDef}{CompteurDefi}{\faAddressBook}{Définition}
\CreationBoite[lime]{BoxProp}{CompteurProp}{\faAmbulance}{Propriété}[colback=lime!25]

\begin{demohigh}
On va montrer en situation :

\begin{BoxDef}[ComplementTitre={ (importante)},SousTitre={- Fin -}]
\lipsum[1][1-2]
\end{BoxDef}

\begin{BoxProp}[ComplementTitre={ (très importante)},Compteur=false]
\lipsum[1][3-4]
\end{BoxProp}

Voili voilà !
\end{demohigh}

\pagebreak

\subsection{Galerie pour des boîtes à destination de cours}

Pour les exemples suivants, les paramètres et styles ont été remis par défaut.

Toute couleur (\MontreCode{xcolor} n'est pas chargé avec des options spécifiques) peut être utilisée pour créer une boîte.

\tcbset{baseboite/.style={
	enhanced,sharp corners=uphill,boxrule=1.25pt,%
	before skip=0.5em,after skip=0.5em,%
	colback=white,top=4mm,left={\margeboite-4.25pt},right={\margeboite-4.25pt}
}%
}

\RenewDocumentCommand\TitreBoite{ m m m m }{%
	%1=couleur
	%2=icone
	%3=nom
	%4=compteur
	% \BoxModifLabel = texte entre label et compteur
	% \BoxCpltTitle = Texte après le compteur
	\node[inner sep=3pt,rounded corners=3pt,draw=#1,line width=1.25pt,%
	rectangle,fill=#1!5!white,anchor=west,xshift=\margeboite,text=black,%
	font=\policetitreboite]%
	at (frame.north west)
	{%
		\,\CreaBoitesIfNoValueOrEmptyTF{#2}{}{{\small#2}~}\vphantom{Ppé}%
		\ifboolKV[Boites]{Pluriel}{\StrBehind{#3}{/}}{\StrBefore{#3}{/}}%
		\IfStrEq{\BoxModifLabel}{}{}{\BoxModifLabel}\ifboolKV[Boites]{Compteur}{~#4}{}%
		\IfStrEq{\BoxCpltTitle}{}{}{\BoxCpltTitle}\,%
	} ;
}

\RenewDocumentCommand\SousTitreBoite{ }{%\BoxSubTitle = Sous-titre
	\node[fill=white,anchor=east,xshift=-\margeboite,text=red!75!black,%
	font=\policesoustitreboite] at (frame.north east) %
	{\vphantom{Ppé}\BoxSubTitle} ;
}

\RenewDocumentCommand\LogoCoinDroit{ }{%
	\begin{tcbclipinterior}%
		\node[opacity=\BoxOpaciteLogo,rotate=-\BoxRotationLogo]%
		at ($(interior.south east)+(-10pt,10pt)$) %
		{\includegraphics[height=\BoxHauteurLogo]{\BoxLogo}};%
	\end{tcbclipinterior}%
}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\ParamBoites %on remet à 0 les paramètres
\CreationBoite[teal]{EnvDefi}{CptDefi}{\faIcon[regular]{comment-dots}}{Définition/Définitions}
\CreationBoite[yellow]{EnvHumour}{CptHumour}{\faIcon[regular]{laugh-wink}}{Humour/Humours}
\CreationBoite[violet]{EnvProp}{CptProp}{\faCog}{Propriété/Propriétés}
\CreationBoite[red]{EnvThm}{CptThm}{\faBullhorn}{Théorème/Théorèmes}[colback=red!10]
\CreationBoite[blue]{EnvRmq}{CptRmq}{\faHandPointRight[regular]}{Remarque/Remarques}

\begin{EnvDefi}
\lipsum[1][3-4]
\end{EnvDefi}

\begin{EnvHumour}
\lipsum[2][3-4]
\end{EnvHumour}

\begin{EnvProp}
\lipsum[2][3-4]
\end{EnvProp}

\begin{EnvThm}
\lipsum[2][3-4]
\end{EnvThm}

\begin{EnvRmq}[Pluriel,Logo={example-image-1x1},SousTitre={ - Fondamentales -}]
\lipsum[3][1-7]
\end{EnvRmq}
\end{demohigh}

\pagebreak

\section{Styles alternatifs}

\subsection{Style alternatif v1}

\subsubsection{Idées}

L'idée est de proposer un style alternatif, avec moins de \textit{fioritures}.

Le style global est :

\begin{itemize}
	\item fond légèrement coloré ;
	\item bordure gauche ;
	\item personnalisation du titre.
\end{itemize}

Pour le moment, deux modèles d'utilisation du compteur sont disponibles :

\begin{itemize}
	\item une version avec compteur global ;
	\item une version avec compteur réinitialisé par section.
\end{itemize}

{\footnotesize \faBomb}~Dans le cas où un autre comportement du compteur est attendu, il est tout à fait possible de récupérer le code source de la macro de création, et de l'adapter.

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%version avec compteur 'global'
\CreationBoiteAlt%
  [Couleur]%
  {Nom}%
  {Compteur}%
  {Label singulier}
  {Label pluriel}
  [options tcbox]

%version avec compteur 'lié' à 'section'
\CreationBoiteAltResetSection%
  [Couleur]%
  {Nom}%
  {Compteur}%
  {Label singulier}
  {Label pluriel}
  [options tcbox]
\end{codehigh}

La boîte ainsi créée a la syntaxe suivante.

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{monenvt}[clés]
...
\end{monenvt}

%-- Les clés disponibles sont :
% ComplementTitre = {}     (entre le label et le compteur)
% SousTitre       = {}     (après le compteur, en italique)
% Compteur        = true
% Pluriel         = false
% SouligneLabel   = false  (il faut charger ulem dans ce cas !)
\end{codehigh}

\subsubsection{Exemples}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\setKVdefault[cpaltboites]{SouligneLabel=true} %souligné par défaut
\CreationBoiteAltResetSection%avec compteur lié à la section
  [red]{testintro}{cptintro}{Intro}{Intros}{$\blacktriangleright$\,}
\CreationBoiteAlt%avec compteur global
  [teal]{testcadre}{cbcptcadre}{Cadre}{Cadres}{$\blacktriangleright$\,}

\begin{testintro}
\lipsum[1][1-2]
\end{testintro}

\begin{testintro}[ComplementTitre={ super importante},SousTitre={ (essentiel)}]
\lipsum[1][1-2]
\end{testintro}

\begin{testcadre}
\lipsum[1][5-6]
\end{testcadre}

\renewcommand\policetitreboite{\itshape\scshape}
\begin{testcadre}[Pluriel]
On essaye avec les couleurs stockées, comme celle de \textcolor{cbcoulbord}{la bordure}.
\end{testcadre}
\end{demohigh}

\subsubsection{Définitions des paramètres}

Les boîtes \texttt{Alt} sont définies grâce aux définitions suivantes :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\tcbset{basecpcours/.style={
  enhanced,empty,size=small,boxsep=2.25pt,top=0pt,bottom=2.25pt,left=2.25pt,right=2.25pt,
  overlay={%
    \fill[#1!2.5] (frame.north west) rectangle (frame.south east) ;
    \draw[line width=1.5pt,#1] (frame.north west) -- (frame.south west) ;
    }
  }
}

\newcommand\policetitreboite{\bfseries\sffamily}
\end{codehigh}

\pagebreak

\subsection{Style alternatif v2}

\subsubsection{Idées}

L'idée est de proposer un style autre alternatif, inspiré d'un travail d'\textsf{Arnaud Blas}.

Le style global est :

\begin{itemize}
  \item bordure arrondie suivant titre et boîte ;
  \item personnalisation du titre.
\end{itemize}

Pour le moment, deux modèles d'utilisation du compteur sont disponibles :

\begin{itemize}
  \item une version avec compteur global ;
  \item une version avec compteur réinitialisé par section.
\end{itemize}

{\footnotesize \faBomb}~Dans le cas où un autre comportement du compteur est attendu, il est tout à fait possible de récupérer le code source de la macro de création, et de l'adapter.

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%version avec compteur 'global'
\CreationBoiteAAlt%
  [Couleur]%
  {Nom}%
  {Compteur}%
  {Label singulier}
  {Label pluriel}
  [options tcbox]

%version avec compteur 'lié' à 'section'
\CreationBoiteAAltResetSection%
  [Couleur]%
  {Nom}%
  {Compteur}%
  {Label singulier}
  {Label pluriel}
  [options tcbox]
\end{codehigh}

La boîte ainsi créée a la syntaxe suivante.

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{monenvt}[clés]
  ...
\end{monenvt}

%-- Les clés disponibles sont :
% ComplementTitre   = {}     (entre le label et le compteur)
% SousTitre         = {}     (après le compteur, en italique)
% Compteur          = true
% Pluriel           = false
% SouligneLabel     = false  (il faut charger ulem dans ce cas !)
% EpaisseurSouligne = 1pt
% Fond              = false (white si true)
% Ombre             = false (uniquement en mode Fond)
\end{codehigh}

\subsubsection{Exemples}

\setKVdefault[abaltboites]{SouligneLabel=true} %souligné par défaut
\CreationBoiteAAlt%
  [blue]{abdef}{abdef}{Définition}{Définitions}{$\blacktriangleright$\,}
\CreationBoiteAAlt%
  [red]{abprop}{abprop}{Propriété}{Propriétés}{$\blacktriangleright$\,}
\CreationBoiteAAlt%
  [orange]{abthm}{abthm}{Théorème}{Théorèmes}{$\blacktriangleright$\,}
\CreationBoiteAAlt%
  [teal]{abexo}{abexo}{Exercice}{Exercices}{$\blacktriangleright$\,}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\setKVdefault[abaltboites]{SouligneLabel=true} %souligné par défaut
\CreationBoiteAAlt%
  [blue]{abdef}{abdef}{Définition}{Définitions}{$\blacktriangleright$\,}
\CreationBoiteAAlt%
  [red]{abprop}{abprop}{Propriété}{Propriétés}{$\blacktriangleright$\,}
\CreationBoiteAAlt%
  [orange]{abthm}{abthm}{Théorème}{Théorèmes}{$\blacktriangleright$\,}
\CreationBoiteAAlt%
  [teal]{abexo}{abexo}{Exercice}{Exercices}{$\blacktriangleright$\,}
\end{codehigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{abdef}%
    [Pluriel,Compteur=false,ComplementTitre={ introductives},%
    SousTitre={ (importantes ?)}]
\lipsum[1][1-3]

Et on peut récupérer la couleur courante du \textsf{\textcolor{cbcoulbord}{bord}} (avec \MontreCode{cbcoulbord}) ou du \textsf{\textcolor{cbcoultitre}{titre}} (avec \MontreCode{cbcoultitre}).
\end{abdef}

\begin{abprop}
\lipsum[1][1-3]
\end{abprop}

\begin{abthm}
\lipsum[1][1-3]
\end{abthm}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10,style/demo=yellow!10]
\begin{abexo}
\lipsum[1][1-3]
\end{abexo}

\begin{abexo}[Fond]
\lipsum[1][1-3]
\end{abexo}

\begin{abexo}[Fond,Ombre]
  \lipsum[1][1-3]
\end{abexo}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\renewcommand\policetitreboite{\itshape\scshape}
\begin{abprop}[Pluriel]
On essaye avec les couleurs stockées, comme celle de \textcolor{cbcoulbord}{la bordure}.
\end{abprop}
\end{demohigh}

\subsubsection{Définitions des paramètres}

Les boîtes \texttt{AAlt} sont définies grâce aux définitions suivantes :

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\tcbset{abbaseboite/.style={%#1 = color
    enhanced,empty,%
    attach boxed title to top left={yshift=-2.5mm},
    left=1mm,right=2mm,bottom=1mm,top=1.75mm,
    boxed title style={empty,size=small,top=0pt,bottom=0pt},
    varwidth boxed title=0.66\linewidth,
    frame code={
      \path (title.east|-frame.north) coordinate (aux);
      \path[draw=#1,line width=1pt, rounded corners=3pt]
      (frame.west) |- ([xshift=-2.5mm]title.north east) to[out=0, in=180] ([xshift=7.5mm]aux)-|([xshift=-1pt]frame.east)|-([yshift=1pt]frame.south)-|cycle;
    },
  }
}
\end{codehigh}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\tcbset{abbaseboitefond/.style={%#1 = color
    enhanced,empty,%
    attach boxed title to top left={yshift=-2.5mm},
    left=1mm,right=2mm,bottom=1mm,top=1.75mm,
    boxed title style={empty,size=small,top=0pt,bottom=0pt},
    varwidth boxed title=0.66\linewidth,
    frame code={
      \path (title.east|-frame.north) coordinate (aux);
      \path[draw=#1,fill=white,line width=1pt, rounded corners=3pt, abbaseboiteombre]
      (frame.west) |- ([xshift=-2.5mm]title.north east) to[out=0, in=180] ([xshift=7.5mm]aux)-|([xshift=-1pt]frame.east)|-([yshift=1pt]frame.south)-|cycle;
    },
  }
}

\newcommand\policetitreboite{\bfseries\sffamily}
\end{codehigh}

\pagebreak

\subsection{Macro unique de génération}

Une macro \textit{unique} existe, afin de créer la boîte en fonction :

\begin{itemize}
  \item du \textsf{style} ;
  \item du \textsf{compteur} si possible.
\end{itemize}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\GenereBoite<clés>%
  [Couleur]%
  {Nom}%
  {Compteur}%
  {Label singulier}
  {Label pluriel}
  [options tcbox]

% ===== <clés> :
% style         = parmi cp/default/ab/ha/tx  (cp)
% reset section = booléen pour le compteur   (false)
\end{codehigh}

\setKVdefault[cpaltboites]{SouligneLabel=true,Fond,Ombre} %souligné par défaut
\GenereBoite<style=ab>%
 [red]{genintro}{genintro}{Intro}{Intros}{$\blacktriangleright$\,}
\GenereBoite<style=cp>%
  [teal]{gencadre}{gencadre}{Cadre}{Cadres}{$\blacktriangleright$\,}
\GenereBoite<style=default>%
  [orange]{genprop}{genprop}{Propriété}{Propriété}{$\blacktriangleright$}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\setKVdefault[cpaltboites]{SouligneLabel=true,Fond,Ombre} %souligné par défaut
\GenereBoite<style=ab>%
  [red]{genintro}{genintro}{Intro}{Intros}{$\blacktriangleright$\,}
\GenereBoite<style=cp>%
  [teal]{gencadre}{gencadre}{Cadre}{Cadres}{$\blacktriangleright$\,}
\GenereBoite<style=default>%
  [orange]{genprop}{genprop}{Propriété}{Propriété}{$\blacktriangleright$}
\end{codehigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{genintro}
\lipsum[1][1]
\end{genintro}

\begin{gencadre}
\lipsum[2][1]
\end{gencadre}

\begin{genprop}
\lipsum[3][1]
\end{genprop}
\end{demohigh}

\pagebreak

\subsection{Utilisation d'un compteur personnalisé}

IL est également possible (c'est une fonctionnalité encore en version \textit{beta}) de spécifier un \textsf{compteur} existant et personnalisé (qui doit donc \textit{exister}) dans les boîtes, accessible via la clé \MontreCode{[CompteurPerso=...]}.

\smallskip

Le trousseau de clés pour les boîtes \textit{classiques} est \MontreCode{[Boites]}, alors que celui pour les autres est \MontreCode{[cpaltboites]}.

\newcounter{moncompteurglobal}
\GenereBoite<style=default>[orange]{TestA}{TestA}{Propriété}{Propriétés}{$\blacktriangleright$}
\GenereBoite<style=default>[gray]{TestB}{TestB}{Définition}{Définitions}{$\blacktriangleright$}
\GenereBoite<style=default>[teal]{TestC}{TestC}{Remarque}{Remarques}{$\blacktriangleright$}
\setKVdefault[Boites]{CompteurPerso=moncompteurglobal}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\newcounter{moncompteurglobal}
\GenereBoite<style=default>%
  [orange]{TestA}{TestA}{Propriété}{Propriétés}{$\blacktriangleright$}
\GenereBoite<style=default>%
  [gray]{TestB}{TestB}{Définition}{Définitions}{$\blacktriangleright$}
\GenereBoite<style=default>%
  [teal]{TestC}{TestC}{Remarque}{Remarques}{$\blacktriangleright$}
\setKVdefault[Boites]{CompteurPerso=moncompteurglobal}
\end{codehigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{TestA}
\lipsum[1][3-4]
\end{TestA}
\begin{TestB}
\lipsum[2][3-4]
\end{TestB}
\begin{TestC}
\lipsum[2][3-4]
\end{TestC}
\begin{TestB}
\lipsum[2][3-4]
\end{TestB}
\begin{TestC}[Pluriel,Logo={example-image-1x1},SousTitre={ - Fondamentales -}]
\lipsum[3][1-7]
\end{TestC}
\end{demohigh}

\pagebreak

\section{Galerie}

\setKVdefault[cpaltboites]{SouligneLabel=false} %souligné par défaut

\subsection{Design : cp}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\GenereBoite<style=cp>%
  [red]{testA}{testA}{Label}{Labels}{$\blacktriangleright$\,}

\begin{testA}
\lipsum[1][1-5]
\end{testA}
\end{demohigh}

\subsection{Design : ab}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\GenereBoite<style=ab>%
  [red]{testB}{testB}{Label}{Labels}{$\blacktriangleright$\,}

\begin{testB}
\lipsum[1][1-5]
\end{testB}
\end{demohigh}

\subsection{Design : ha}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\GenereBoite<style=ha>%
  [red]{testC}{testC}{Label}{Labels}{$\blacktriangleright$\,}

\begin{testC}
\lipsum[1][1-5]
\end{testC}
\end{demohigh}

\subsection{Design : tx}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\GenereBoite<style=tx>%
  [red]{testD}{testD}{Label}{Labels}{$\blacktriangleright$\,}

\begin{testD}
\lipsum[1][1-5]
\end{testD}
\end{demohigh}

\subsection{Design : default}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\GenereBoite<style=default>%
  [red]{testE}{testE}{Label}{Labels}{$\blacktriangleright$\,}

\begin{testE}
\lipsum[1][1-5]
\end{testE}
\end{demohigh}

\pagebreak

\section{Boîtes exercices avec niveaux de difficulté (expérimental)}

\subsection{Présentation}

L'environnement \MontreCode{exocbhlb} propose un environnement léger (sans cadre, un simple filet coloré) destiné à la mise en forme d'\textbf{exercices ou activités} avec~:

\begin{itemize}
  \item un \textbf{numéro} automatique (compteur \MontreCode{cbhlb} par défaut) ;
  \item un \textbf{niveau de difficulté} (0 à 4) matérialisé par des pastilles
  \raisebox{\depth}{\ding{108}\ding{108}\ding{109}\ding{109}}
  et une couleur dédiée ;
  \item un \textbf{type} optionnel (cours, qcm, python\ldots) affiché en sous-titre avec une icône \MontreCode{lucide-icons}, \textbf{librement extensible} par l'utilisateur.
\end{itemize}

\medskip

Les dépendances supplémentaires chargées par ce module sont \MontreCode{pifont} (pastilles) et \MontreCode{lucide-icons} (icônes de sous-titres) — déjà incluses dans \MontreCode{CreationBoites}.

\subsection{Paramétrage global}

Les réglages globaux (polices, épaisseur du filet, label, compteur, couleurs) s'appliquent via~:

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\paramsexocbhlb{clés}       %nouvelles valeurs globales
\paramsexocbhlb{}           %retour aux valeurs par défaut du package
\end{codehigh}

\medskip

{\small
\begin{center}
  \begin{tblr}{
      colspec={|Q[l,m]|Q[l,m]|Q[l,m]|},
      hlines, vlines,
      row{1}={font=\bfseries},
    }
    Clé & Effet & Défaut \\
    \MontreCode{eptrait} & épaisseur du filet sous le titre & \MontreCode{0.375mm} \\
    \MontreCode{police num} & police du numéro & \MontreCode{\textbackslash Large\textbackslash bfseries\textbackslash sffamily} \\
    \MontreCode{police sstitre} & police du sous-titre & \MontreCode{\textbackslash footnotesize\textbackslash bfseries\textbackslash sffamily} \\
    \MontreCode{police niveau} & police du libellé + pastilles & \MontreCode{\textbackslash scriptsize\textbackslash bfseries\textbackslash sffamily} \\
    \MontreCode{label exo} & texte avant le numéro & \MontreCode{\{\}} (vide) \\
    \MontreCode{apres num} & texte après le numéro & \MontreCode{\{\}} (vide) \\
    \MontreCode{compteur} & nom du compteur \LaTeX{} & \MontreCode{cbhlb} \\
    \MontreCode{couleurs} & booléen — active/désactive les couleurs & \MontreCode{true} \\
    \MontreCode{couleur auto} & booléen — voir~\S suivant & \MontreCode{true} \\
  \end{tblr}
\end{center}
}

\subsection{La clé \texttt{couleur auto}}

Chaque sous-titre dispose d'une couleur dédiée \MontreCode{cbhlbcoul<type>} (ex.
\MontreCode{cbhlbcoulpython}). La clé \MontreCode{couleur auto} contrôle si cette couleur est utilisée ou non~:

\begin{itemize}
  \item \MontreCode{couleur auto=true} (par défaut) : \textbf{tous} les sous-titres
  s'affichent dans la couleur \textbf{du niveau} courant, quelles que soient les
  couleurs dédiées définies ;
  \item \MontreCode{couleur auto=false} : chaque sous-titre utilise sa couleur dédiée
  \MontreCode{cbhlbcoul<type>} si elle existe, sinon retombe sur la couleur du niveau.
\end{itemize}

\subsection{Syntaxe de l'environnement}

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\begin{exocbhlb}[niveau=N,type=xxx]<options tcbox>
%corps de l'exercice
\end{exocbhlb}
\end{codehigh}

\medskip

{\small
\begin{center}
  \begin{tblr}{
      colspec={|Q[l,m]|Q[l,m]|Q[l,m]|},
      hlines, vlines,
      row{1}={font=\bfseries},
    }
    Niveau & Couleur & Libellé + pastilles \\
    \MontreCode{0} & \textcolor{cbhlbcoulcours}{\rule{8pt}{8pt}}~\MontreCode{cbhlbcoulcours} & (aucun)~~\raisebox{\depth}{\ding{109}\ding{109}\ding{109}\ding{109}} \\
    \MontreCode{1} & \textcolor{cbhlbcoulfacile}{\rule{8pt}{8pt}}~\MontreCode{cbhlbcoulfacile} & FACILE~~\raisebox{\depth}{\ding{108}\ding{109}\ding{109}\ding{109}} \\
    \MontreCode{2} & \textcolor{cbhlbcoulmoyen}{\rule{8pt}{8pt}}~\MontreCode{cbhlbcoulmoyen} & MOYEN~~\raisebox{\depth}{\ding{108}\ding{108}\ding{109}\ding{109}} \\
    \MontreCode{3} & \textcolor{cbhlbcouldifficile}{\rule{8pt}{8pt}}~\MontreCode{cbhlbcouldifficile} & DIFFICILE~~\raisebox{\depth}{\ding{108}\ding{108}\ding{108}\ding{109}} \\
    \MontreCode{4} & \textcolor{cbhlbcoulexpert}{\rule{8pt}{8pt}}~\MontreCode{cbhlbcoulexpert} & EXPERT~~\raisebox{\depth}{\ding{108}\ding{108}\ding{108}\ding{108}} \\
  \end{tblr}
\end{center}
}

\medskip

Les types prédéfinis (clé \MontreCode{type=...}) sont~:
\MontreCode{cours}, \MontreCode{qcm}, \MontreCode{vraifaux}, \MontreCode{python},
\MontreCode{important}, \MontreCode{tableur}, \MontreCode{geogebra}.

\subsection{Exemples}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\setcounter{cbhlb}{0}
\begin{exocbhlb}[niveau=1]
\lipsum[1][1-2]
\end{exocbhlb}

\begin{exocbhlb}[niveau=3,type=python]
\lipsum[1][1-2]
\end{exocbhlb}

\begin{exocbhlb}[niveau=4,type=vraifaux]
\lipsum[1][1-2]
\end{exocbhlb}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%type texte brut (aucune macro cbhlbsstitreATTENTION définie)
\begin{exocbhlb}[niveau=2,type=ATTENTION]
\lipsum[1][1-2]
\end{exocbhlb}

%type brut avec contenu LaTeX direct via §
\begin{exocbhlb}[niveau=2,type=§{\textcolor{red}{ATTENTION}}]
\lipsum[1][1-2]
\end{exocbhlb}
\end{demohigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%couleurs désactivées + label personnalisé
\paramsexocbhlb{couleurs=false,label exo={Exercice\enspace},apres num={\,$\cdot$}}
\begin{exocbhlb}[niveau=2]<width=0.5\linewidth>
\lipsum[1][1-2]
\end{exocbhlb}
\paramsexocbhlb{}
\end{demohigh}

\subsection{Ajouter un nouveau type}

Trois niveaux d'extension, \textbf{sans toucher au \texttt{.sty}}~:

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%-- a) couleur dédiée seule (texte brut coloré, couleur auto=false nécessaire)
\colorlet{cbhlbcouloral}{violet}

%-- b) icône seule (suit la couleur du niveau)
\def\cbhlbsstitreoral{{\lucideicon[height=auto]{mic}\,ORAL}}

%-- c) icône + couleur dédiée (solution complète)
\def\cbhlbsstitreoral{{\lucideicon[height=auto]{mic}\,ORAL}}
\colorlet{cbhlbcouloral}{violet}
\end{codehigh}

\medskip

Une macro de création \textbf{tout-en-un} est également disponible~:

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
%\gencbhlbsoustitre{suffixe}{couleur}{contenu}
\gencbhlbsoustitre{oral}{violet}{\lucideicon[height=auto]{mic}\,ORAL}
\gencbhlbsoustitre{scratch}{teal}{\lucideicon[height=auto]{blocks}\,SCRATCH}
\end{codehigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\gencbhlbsoustitre{oral}{violet}{\lucideicon[height=auto]{mic}\,ORAL}
\paramsexocbhlb{couleur auto=false}

\begin{exocbhlb}[niveau=3,type=oral]
\lipsum[1][1-2]
\end{exocbhlb}

\gencbhlbsoustitre{scratch}{teal}{\lucideicon[height=auto]{blocks}\,SCRATCH}
\begin{exocbhlb}[niveau=1,type=scratch]
\lipsum[1][1-2]
\end{exocbhlb}
\paramsexocbhlb{}
\end{demohigh}

\begin{tcolorbox}[enhanced,colframe=lightgray,colback=lightgray!10,before skip=8pt,after skip=8pt]
\small
Le nom passé à \MontreCode{type=...} doit correspondre \textbf{exactement} (casse comprise) à la fin du nom de macro \MontreCode{cbhlbsstitre<nom>} et de couleur
\MontreCode{cbhlbcoul<nom>}. Ainsi \MontreCode{type=Oral} (majuscule) ne déclenchera ni \MontreCode{\textbackslash cbhlbsstitreoral} ni \MontreCode{cbhlbcouloral}.
\end{tcolorbox}

\subsection{Environnement avec compteur dédié}

\MontreCode{\textbackslash CreationExoStyleH} génère un \textbf{nouvel environnement} avec son propre compteur indépendant (créé automatiquement si besoin)~:

\begin{codehigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\CreationExoStyleH{NomEnvironnement}{NomCompteur}
\end{codehigh}

\begin{demohigh}[language=latex/latex2,style/main=cyan!10,style/code=cyan!10]
\CreationExoStyleH{exoTD}{cptTD}
\CreationExoStyleH{exoAppro}{cptAppro}

\begin{exoTD}[niveau=1]
\lipsum[1][1-2]
\end{exoTD}

\begin{exoAppro}[niveau=4,type=python]
\lipsum[1][1-2]
\end{exoAppro}

\begin{exoTD}[niveau=2,type=qcm]
\lipsum[1][1-2]
\end{exoTD}
\end{demohigh}

Les deux compteurs \MontreCode{cptTD} et \MontreCode{cptAppro} évoluent
\textbf{indépendamment}. Les réglages globaux (\MontreCode{\textbackslash paramsexocbhlb})
s'appliquent à tous les environnements créés via \MontreCode{\textbackslash CreationExoStyleH}.

\pagebreak

\section{Historique}

\verb|v0.20d|~:~~~~ajout d'un bloc 'exercice' (expérimental)

\verb|v0.20c|~:~~~~Possibilité d'utiliser un compteur personnalisé

\verb|v0.20b|~:~~~~Ajout d'autres styles alternatifs + macro unifiée de création

\verb|v0.20a|~:~~~~Ajout d'un mode de sauvegarde des couleurs à l'intérieur des boîtes

\verb|v0.1.9|~:~~~~Bugfix avec \texttt{AltBoite} et compteur...

\verb|v0.1.8|~:~~~~Ajout d'un style alternatif 'épuré' (\texttt{CreationBoiteAlt})

\verb|v0.1.7|~:~~~~Suppression de la dépendance à \texttt{xstring}

\verb|v0.1.6|~:~~~~Pré-compatibilité avec \texttt{fontawesome7}

\verb|v0.1.5|~:~~~~Correction des espacements

\verb|v0.1.4|~:~~~~Possibilité de rajouter des options \textsf{tcbox} lors de la création des boîtes

\verb|v0.1.3|~:~~~~Compatibilité avec \texttt{twemojis}

\verb|v0.1.2|~:~~~~Pré-compatibilité avec \texttt{fontawesome6}

\verb|v0.1.1|~:~~~~Correction d'un bug avec \texttt{[breakable]} + Clés pour des \texttt{[Icone]}

\verb|v0.1.0|~:~~~~Version initiale

\vspace*{15mm}

\pagebreak

\end{document}