summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/customenvs/tex/customenvs.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/customenvs/tex/customenvs.sty')
-rw-r--r--macros/latex/contrib/customenvs/tex/customenvs.sty323
1 files changed, 322 insertions, 1 deletions
diff --git a/macros/latex/contrib/customenvs/tex/customenvs.sty b/macros/latex/contrib/customenvs/tex/customenvs.sty
index 08083eb103..ee8f4427a2 100644
--- a/macros/latex/contrib/customenvs/tex/customenvs.sty
+++ b/macros/latex/contrib/customenvs/tex/customenvs.sty
@@ -3,9 +3,10 @@
% 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/03/30 0.1.3 Custom classic environments]
+\ProvidesPackage{customenvs}[2024/04/04 0.1.4 Custom classic environments]
%====HISTORIQUE
+% v 0.1.4 Commande (en/fr) pour du texte dans une boîte arrondie, de hauteur 'figée' + 'Chat' SMS
% v 0.1.3 Environnement/Commande pour présentation d'un exercice
% v 0.1.2 Crayon de compétences
% v 0.1.1 Ajout de tableaux de compétences
@@ -54,6 +55,8 @@
\RequirePackage{calc}
\RequirePackage{tikz}
\usetikzlibrary{decorations.pathmorphing,positioning,shapes.misc,calc}
+\usepackage{tcolorbox}
+\tcbuselibrary{skins}
%%----COMMANDES FR
@@ -913,6 +916,179 @@
\EnvtExoCodeAvant%
}
+%====BOITE ARRONDIE
+\newlength{\tmpheightbox}
+\defKV[BoiteArrondie]{EspH=\def\RoundedBoxDelta{#1},Style=\def\RoundedBoxStyle{#1}}
+\setKVdefault[BoiteArrondie]{%
+ Fond=red,%
+ Texte=white,%
+ EspH=0.25em,%
+ Style=rect
+}
+\NewDocumentCommand\BoiteArrondie{ O{} m O{char} }{%
+ \restoreKV[BoiteArrondie]%
+ \setKV[BoiteArrondie]{#1}%
+ \settototalheight{\tmpheightbox}{\hbox{(EazertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN)#2}}%hauteur globale
+ \IfStrEqCase{\RoundedBoxStyle}{%
+ {rect}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=rectangle,rounded corners=0.25em,fill={\useKV[BoiteArrondie]{Fond}},inner sep=0.75pt,outer sep=0pt,text={\useKV[BoiteArrondie]{Texte}}] (#3) {\vphantom{(qE)}\kern\RoundedBoxDelta#2\kern\RoundedBoxDelta};}}%
+ {cercle}{\tikz[remember picture,baseline=(#3.base)]{\node[shape=circle,minimum height=\tmpheightbox,fill={\useKV[BoiteArrondie]{Fond}},inner sep=0.75pt,outer sep=0pt,text={\useKV[BoiteArrondie]{Texte}}] (#3) {\vphantom{(qE)}#2};}}%
+ }\relax
+}
+
+%%====Chat SMS
+
+%===Données utiles
+\newlength{\WidthofSMS}
+\newlength{\HeightofSMS}
+\newlength{\OffsetofSMS}
+\newlength{\WidthofSMSavatar}
+\newlength{\MarginofSMSavatar}
+\colorlet{smscolp}{teal!75!cyan!75!white}
+\colorlet{smscoltitle}{white}
+
+%===Styles [FR/EN]
+\tcbset{SMSglobal/.style={
+ enhanced,arc=0pt,outer arc=0pt,colback=\ProjectSmsColback,toptitle=0.3cm,bottomtitle=0.3cm,title={\null},
+ overlay={
+ %la barre de titre
+ \node[anchor=east,smscoltitle,font=\large] at ([xshift=-1mm]title.east) {\faVideo~~\faPhone*~~\faEllipsisV};
+ \node[draw=none,anchor=west,inner sep=1pt,text=smscoltitle,font=\large] at ([xshift=1mm]title.west) (picture) {\ProjectSmsAvat};
+ \node[draw=none,anchor=west,text=smscoltitle,font=\large,text depth=0pt,inner sep=1pt] at (picture.east) {\sffamily\bfseries\vphantom{pB}\NameofSMS} ;
+ %le bas
+ \draw[line width=0.85pt,darkgray] ([yshift=1cm]frame.south west) -- ([yshift=1cm]frame.south east);
+ \node[draw=smscolp!75!black,top color=lightgray!40,bottom color=lightgray!40,middle color=white,line width=1pt,rounded corners=2pt,text width={{\WidthofSMS-2.5cm}},minimum height=0.75cm,font=\large\ProjectSmsFonte,text=darkgray,inner xsep=6pt] at ([shift={(0,0.5cm)}]frame.south) {\textcolor{gray}{\rule[-0.1cm]{1pt}{0.5cm}}\,\ProjectSmsWrite};
+ \node[draw=none,font=\LARGE,text=darkgray!50,anchor=east,align=center] at ([shift={(-1mm,0.5cm)}]frame.south east) (send) {\faPaperPlane};
+ \node[draw=none,font=\LARGE,text=darkgray!50,anchor=west,align=center] at ([shift={(1mm,0.5cm)}]frame.south west) (add) {\faPlusCircle};
+ },
+ boxrule=0.85pt,colframe=darkgray,
+ title style={top color=smscolp!90!black,bottom color=smscolp!90!black,middle color=smscolp!75},
+ bottom=1.15cm,top=0mm,left=1mm,right=1mm
+ }
+}
+
+%===Keys [FR]
+\defKV[ProjetSMS]{%
+ Hauteur=\def\ProjectSmsHeight{#1},%
+ Largeur=\setlength{\WidthofSMS}{#1},%
+ Marge=\setlength{\OffsetofSMS}{#1},%
+ Couleur=\colorlet{smscolp}{#1},%
+ CouleurFond=\def\ProjectSmsColback{#1},%
+ CouleurR=\def\ProjectSmsColIn{#1},%
+ CouleurE=\def\ProjectSmsColOut{#1},%
+ CouleurTitre=\colorlet{smscoltitle}{#1},%
+ PoliceTxt=\def\ProjectSmsFonte{#1},%
+ Avatar=\def\ProjectSmsAvatar{#1},%
+ TxtEcrire=\def\ProjectSmsWrite{#1}
+}
+\setKVdefault[ProjetSMS]{%
+ Hauteur=auto,%
+ Largeur=7cm,%
+ Marge=1.5cm,%
+ CouleurFond={lightgray!5},%
+ CouleurR=lime!25,%
+ CouleurE=teal!25,%
+ TxtEcrire={Écrire\ldots},%
+ PoliceTxt=\normalfont,%
+ Avatar=\faAddressCard,%
+ AffAvatar=false,%
+ NoirBlanc=false
+}
+
+%===Envt [FR]
+\NewDocumentEnvironment{EnvSMS}{ O{} m }
+{
+ \restoreKV[ProjetSMS]%
+ \setKV[ProjetSMS]{#1}%
+ \def\NameofSMS{#2}%
+ \IfSubStr{\ProjectSmsAvatar}{Image}%
+ {%
+ \StrBehind{\ProjectSmsAvatar}{/}[\tmpimgavatar]%
+ \def\ProjectSmsAvat{\includegraphics[height=0.5cm]{\tmpimgavatar}}%
+ \ifboolKV[ProjetSMS]{AffAvatar}%
+ {%
+ \setlength{\WidthofSMSavatar}{\widthof{\includegraphics[height=0.5\baselineskip]{\tmpimgavatar}}}%
+ \setlength{\MarginofSMSavatar}{\WidthofSMSavatar+2pt}%
+ }%
+ {%
+ \setlength{\MarginofSMSavatar}{0pt}%
+ }%
+ }%
+ {%
+ \def\ProjectSmsAvat{\ProjectSmsAvatar}%
+ \ifboolKV[ProjetSMS]{AffAvatar}%
+ {%
+ \setlength{\WidthofSMSavatar}{\widthof{\tiny\ProjectSmsAvatar}}%
+ \setlength{\MarginofSMSavatar}{\WidthofSMSavatar+2pt}%
+ }%
+ {%
+ \setlength{\MarginofSMSavatar}{0pt}%
+ }%
+ }%
+ \IfStrEq{\ProjectSmsHeight}{auto}%
+ {%
+ \tcbset{SMSsize/.style={width=\WidthofSMS}}%
+ }%
+ {%
+ \setlength{\HeightofSMS}{\ProjectSmsHeight}%
+ \tcbset{SMSsize/.style={width=\WidthofSMS,height=\HeightofSMS,valign=bottom}}%
+ }%
+ \ifboolKV[ProjetSMS]{NoirBlanc}%
+ {%
+ \colorlet{smscolp}{lightgray!25}%
+ \def\ProjectSmsColback{lightgray!5}%
+ \def\ProjectSmsColIn{lightgray!10}%
+ \def\ProjectSmsColOut{lightgray!10}%
+ \colorlet{smscoltitle}{gray}%
+ }%
+ {}%
+ \tcolorbox[SMSsize,SMSglobal]%
+}
+{
+ \endtcolorbox%
+}
+
+%===Macros [FR]
+\NewDocumentCommand\SMSrec{ s m m }{%
+ \ifboolKV[ProjetSMS]{AffAvatar}%
+ {%
+ \IfSubStr{\ProjectSmsAvatar}{Image}%
+ {%
+ \tcbset{SMSAffLogo/.style={left skip=\MarginofSMSavatar,overlay={\node[anchor=north east] at ([yshift={1mm+1pt}]interior.north west) {\includegraphics[height=0.5\baselineskip]{\tmpimgavatar}};}}}%
+ }%
+ {%
+ \tcbset{SMSAffLogo/.style={left skip=\MarginofSMSavatar,overlay={\node[anchor=north east,font=\tiny,text=gray] at ([yshift={1mm+1pt}]interior.north west) {\ProjectSmsAvatar};}}}%
+ }%
+ }%
+ {%
+ \tcbset{SMSAffLogo/.style={}}%
+ }%
+ \tcbox[enhanced,interior code={},before skip=0.5mm,after skip=0.5mm,halign=left,left=1.5mm,right=1.5mm,
+ frame code={
+ \filldraw[\ProjectSmsColIn,draw=black,rounded corners=4pt]
+ (frame.south east) rectangle (frame.north west) ;
+ },
+ width={\WidthofSMS-\OffsetofSMS},top=1mm,bottom=1mm,
+ capture=minipage,fontupper=\small\ProjectSmsFonte,
+ attach boxed title to top left,
+ coltitle=black,fonttitle=\scriptsize\sffamily,
+ boxed title style={size=fbox,bottom=0pt,boxsep=2pt,frame empty,interior empty},
+ title={\@ifpackageloaded{babel}{\NoAutoSpacing#2}{#2}\IfBooleanTF{#1}{$\cdot$\scalebox{0.6}[0.6]{\faCheckCircle[regular]\!\faCheckCircle[regular]}~}{}},left=1mm,right=1mm,boxsep=0mm,SMSAffLogo]{#3}%
+}
+\NewDocumentCommand\SMSenv{ s m m }{%
+ \tcbox[enhanced,interior code={},before skip=0.5mm,after skip=0.5mm,halign=left,left=1.5mm,right=1.5mm,
+ frame code={
+ \filldraw[\ProjectSmsColOut,draw=black,rounded corners=4pt]
+ (frame.south east) rectangle (frame.north west) ;
+ },
+ width={\WidthofSMS-\OffsetofSMS},top=1mm,bottom=1mm,flush right,
+ capture=minipage,fontupper=\small\ProjectSmsFonte,
+ attach boxed title to top right,
+ coltitle=black,fonttitle=\scriptsize\sffamily,
+ boxed title style={size=fbox,bottom=0pt,boxsep=2pt,frame empty,interior empty},
+ title={\@ifpackageloaded{babel}{\NoAutoSpacing#2}{#2}\IfBooleanTF{#1}{}{$\cdot$\scalebox{0.6}[0.6]{\faCheckCircle[regular]\!\faCheckCircle[regular]}~}},left=1mm,right=1mm,boxsep=0mm]{#3}%
+}
+
+
%%----COMMANDES EN
%====QCMs
@@ -1169,4 +1345,149 @@
\end{tikzpicture}%
}
+%====ROUNDED BOX
+\defKV[RoundedBox]{hmargin=\def\RoundedBoxDelta{#1},style=\def\RoundedBoxStyle{#1}}
+\setKVdefault[RoundedBox]{%
+ bg=red,%
+ txt=white,%
+ hmargin=0.25em,%
+ style=rect
+}
+
+
+
+\NewDocumentCommand\RoundedBox{ O{} m O{char} }{%
+ \restoreKV[RoundedBox]%
+ \setKV[RoundedBox]{#1}%
+ \settototalheight{\tmpheightbox}{\hbox{(EazertyuiopqsdfghjklmwxcvbnAZERTYUIOPQSDFGHJKLMWXCVBN)#2}}%hauteur globale
+ \IfStrEqCase{\RoundedBoxStyle}{%
+ {rect}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=rectangle,rounded corners=0.25em,fill={\useKV[RoundedBox]{bg}},inner sep=0.75pt,outer sep=0pt,text={\useKV[RoundedBox]{txt}}] (#3) {\vphantom{(qE)}\kern\RoundedBoxDelta#2\kern\RoundedBoxDelta};}}%
+ {circle}{\tikz[remember picture,baseline=(#3.base)]{\node[minimum height=\tmpheightbox,shape=circle,fill={\useKV[RoundedBox]{bg}},inner sep=0.75pt,outer sep=0pt,text={\useKV[RoundedBox]{txt}}] (#3) {\vphantom{(qE)}#2};}}%
+ }\relax
+}
+
+%====Chat SMS
+%===Keys [EN]
+\defKV[ProjectSMS]{%
+ height=\def\ProjectSmsHeight{#1},%
+ width=\setlength{\WidthofSMS}{#1},%
+ margin=\setlength{\OffsetofSMS}{#1},%
+ color=\colorlet{smscolp}{#1},%
+ colback=\def\ProjectSmsColback{#1},%
+ colorin=\def\ProjectSmsColIn{#1},%
+ colorout=\def\ProjectSmsColOut{#1},%
+ coltitle=\colorlet{smscoltitle}{#1},%
+ fonttxt=\def\ProjectSmsFonte{#1},%
+ avatar=\def\ProjectSmsAvatar{#1},%
+ writetxt=\def\ProjectSmsWrite{#1}
+}
+\setKVdefault[ProjectSMS]{%
+ height=auto,%
+ width=7cm,%
+ margin=1.5cm,%
+ colback=lightgray!5,%
+ colorin=lime!25,%
+ colorout=teal!25,%
+ writetxt={Write\ldots},%
+ fonttxt=\normalfont,%
+ avatar=\faAddressCard,%
+ dispavatar=false,%
+ blackwhite=false
+}
+
+%===Envt [EN]
+\NewDocumentEnvironment{ChatSMS}{ O{} m }
+{
+ \restoreKV[ProjectSMS]%
+ \setKV[ProjectSMS]{#1}%
+ \def\NameofSMS{#2}%
+ \IfSubStr{\ProjectSmsAvatar}{img}%
+ {%
+ \StrBehind{\ProjectSmsAvatar}{/}[\tmpimgavatar]%
+ \def\ProjectSmsAvat{\includegraphics[height=0.5cm]{\tmpimgavatar}}%
+ \ifboolKV[ProjectSMS]{dispavatar}%
+ {%
+ \setlength{\WidthofSMSavatar}{\widthof{\includegraphics[height=0.5\baselineskip]{\tmpimgavatar}}}%
+ \setlength{\MarginofSMSavatar}{\WidthofSMSavatar+2pt}%
+ }%
+ {%
+ \setlength{\MarginofSMSavatar}{0pt}%
+ }%
+ }%
+ {%
+ \def\ProjectSmsAvat{\ProjectSmsAvatar}%
+ \ifboolKV[ProjectSMS]{dispavatar}%
+ {%
+ \setlength{\WidthofSMSavatar}{\widthof{\tiny\ProjectSmsAvatar}}%
+ \setlength{\MarginofSMSavatar}{\WidthofSMSavatar+2pt}%
+ }%
+ {%
+ \setlength{\MarginofSMSavatar}{0pt}%
+ }%
+ }%
+ \IfStrEq{\ProjectSmsHeight}{auto}%
+ {%
+ \tcbset{SMSsize/.style={width=\WidthofSMS}}%
+ }%
+ {%
+ \setlength{\HeightofSMS}{\ProjectSmsHeight}%
+ \tcbset{SMSsize/.style={width=\WidthofSMS,height=\HeightofSMS,valign=bottom}}%
+ }%
+ \ifboolKV[ProjectSMS]{blackwhite}%
+ {%
+ \colorlet{smscolp}{lightgray!25}%
+ \def\ProjectSmsColback{lightgray!5}%
+ \def\ProjectSmsColIn{lightgray!10}%
+ \def\ProjectSmsColOut{lightgray!10}%
+ \colorlet{smscoltitle}{gray}%
+ }%
+ {}%
+ \tcolorbox[SMSsize,SMSglobal]%
+}
+{
+ \endtcolorbox%
+}
+
+%===Macros [EN]
+\NewDocumentCommand\InSMS{ s m m }{%
+ \ifboolKV[ProjectSMS]{dispavatar}%
+ {%
+ \IfSubStr{\ProjectSmsAvatar}{img}%
+ {%
+ \tcbset{SMSAffLogo/.style={left skip=\MarginofSMSavatar,overlay={\node[anchor=north east] at ([yshift={1mm+1pt}]interior.north west) {\includegraphics[height=0.5\baselineskip]{\tmpimgavatar}};}}}%
+ }%
+ {%
+ \tcbset{SMSAffLogo/.style={left skip=\MarginofSMSavatar,overlay={\node[anchor=north east,font=\tiny,text=gray] at ([yshift={1mm+1pt}]interior.north west) {\ProjectSmsAvatar};}}}%
+ }%
+ }%
+ {%
+ \tcbset{SMSAffLogo/.style={}}%
+ }%
+ \tcbox[enhanced,interior code={},before skip=0.5mm,after skip=0.5mm,halign=left,left=1.5mm,right=1.5mm,
+ frame code={
+ \filldraw[\ProjectSmsColIn,draw=black,rounded corners=4pt]
+ (frame.south east) rectangle (frame.north west) ;
+ },
+ width={\WidthofSMS-\OffsetofSMS},top=1mm,bottom=1mm,
+ capture=minipage,fontupper=\small\ProjectSmsFonte,
+ attach boxed title to top left,
+ coltitle=black,fonttitle=\scriptsize\sffamily,
+ boxed title style={size=fbox,bottom=0pt,boxsep=2pt,frame empty,interior empty},
+ title={#2\IfBooleanTF{#1}{$\cdot$\scalebox{0.6}[0.6]{\faCheckCircle[regular]\!\faCheckCircle[regular]}~}{}},left=1mm,right=1mm,boxsep=0mm,SMSAffLogo]{#3}%
+}
+\NewDocumentCommand\OutSMS{ s m m }{%
+ \tcbox[enhanced,interior code={},before skip=0.5mm,after skip=0.5mm,halign=left,left=1.5mm,right=1.5mm,
+ frame code={
+ \filldraw[\ProjectSmsColOut,draw=black,rounded corners=4pt]
+ (frame.south east) rectangle (frame.north west) ;
+ },
+ width={\WidthofSMS-\OffsetofSMS},top=1mm,bottom=1mm,flush right,
+ capture=minipage,fontupper=\small\ProjectSmsFonte,
+ attach boxed title to top right,
+ coltitle=black,fonttitle=\scriptsize\sffamily,
+ boxed title style={size=fbox,bottom=0pt,boxsep=2pt,frame empty,interior empty},
+ title={#2\IfBooleanTF{#1}{}{$\cdot$\scalebox{0.6}[0.6]{\faCheckCircle[regular]\!\faCheckCircle[regular]}~}},left=1mm,right=1mm,boxsep=0mm]{#3}%
+}
+
+
\endinput \ No newline at end of file