% !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{fontspec}
\setmonofont[Scale=MatchLowercase]{Inconsolatazi4}
\usepackage{CreationBoites}
\usepackage{enumitem}
\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}

\def\TPversion{0.1.0}
\def\TPdate{26 août 2023}
\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}{\faBomb}{Danger/Dangers}

\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 \TPversion{} -- \TPdate}}
		\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://github.com/cpierquet/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{BoiteDanger}[Compteur=false]
	\lipsum[1][1]
\end{BoiteDanger}
\end{tcolorbox}

\vfill~

\pagebreak

\phantomsection

\hypertarget{matoc}{}

\tableofcontents

\vspace*{5mm}

\hrule

\vspace*{5mm}

\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} ;
	\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{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{fontawesome5}, \MontreCode{simplekv} et \MontreCode{xstring}.
\end{itemize}

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

\subsection{Utilisation 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}{Libéllés}
\ParamBoites[Clés]
\end{codehigh}

\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}      %Libélés (sing/plur)

\CreationBoite%
    [red]                          %Couleur de base
    {BoiteDanger}                  %Nom de l'environnement
    {CompteurBoiteDanger}          %Compteur
    {\faBomb}                      %Icône
    {Danger/Dangers}               %Libélés (sing/plur)
\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}
\end{itemize}

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.

\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>
\lipsum[1][1-2]
\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}

\pagebreak

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}

\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]
\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)
      {%
      \,\IfStrEq{#2}{}{}{{\small#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)+(-10pt,10pt)$) %
        {\includegraphics[height=\BoxHauteurLogo]{\BoxLogo}};%
    \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]
\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é}
\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é}

\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)
	{%
		\,\IfStrEq{#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}
\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{Historique}

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

\vspace*{15mm}

\pagebreak

\end{document}