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

\documentclass[english,11pt,a4paper]{article}
%\usepackage[utf8x]{inputenc}
%\usepackage[T1]{fontenc}
%\usepackage{DejaVuSerif}
%\usepackage[scale=1.1]{inconsolata}
\usepackage{customenvs}
\usepackage{xspace}
\usepackage{tabularx}
\usepackage{soul}
\usepackage{codehigh}
\usepackage{fontawesome5}
\usepackage{lipsum}
\usepackage{fancyvrb}
\usepackage{fancyhdr}
\fancyhf{}
\renewcommand{\headrulewidth}{0pt}
\lfoot{\sffamily\small [customenvs]}
\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.5}
\def\TPdate{17/05/2024}
\usepackage{tcolorbox}
\sethlcolor{lightgray!25}
\NewDocumentCommand\MontreCode{ m }{%
	\hl{\vphantom{\texttt{pf}}\texttt{#1}}%
}

\usepackage{babel}

\begin{document}

\pagestyle{fancy}

\thispagestyle{empty}

\begin{center}
	\begin{minipage}{0.75\linewidth}
	\begin{tcolorbox}[colframe=yellow,colback=yellow!15]
		\begin{center}
			\renewcommand\arraystretch{1.25}
			\begin{tabular}{c}
				{\Huge \texttt{customenvs [en]}}\\
				\\
				{\Large Some custom environments,} \\
				{\Large with spacing enhancements.} \\
			\end{tabular}
			\renewcommand\arraystretch{1}
			
			\medskip
			
			{\small \texttt{Version \TPversion{} -- \TPdate}}
		\end{center}
	\end{tcolorbox}
\end{minipage}
\end{center}

\vspace*{1mm}

\begin{center}
	\begin{tabular}{c}
	\texttt{Cédric Pierquet}\\
	{\ttfamily c pierquet -- at -- outlook . fr}\\
	\texttt{\url{https://github.com/cpierquet/customenvs}}
\end{tabular}
\end{center}

\vspace*{5mm}

%\hrule
%
%\vspace*{2mm}
%
%{\centering Le nom du package vient de \textsf{ENVironnemenTS ALTernatifs}, avec le suffixe \textsf{FRançais}.\par}
%
%\vspace*{2mm}
%
%\hrule
%
%\vspace*{1cm}

\hrule

\phantomsection

\hypertarget{matoc}{}

\tableofcontents

\vspace*{5mm}

\hrule

\vfill

\section{History}

\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.3|~:~~~~Environment for exercise(s) (in french doc)

\verb|v0.1.2|~:~~~~Pencil of skills

\verb|v0.1.1|~:~~~~Skills table (only french for the moment...)

\verb|v0.1.0|~:~~~~Initial version

\vspace*{5mm}

\pagebreak

\section{The package customenvs}

\subsection{Idea}

The idea is to propose some classics environments with customizations (some are, for the moment, only in french) :

\begin{itemize}
	\item write in \textit{multicols}, with spacings enhancements ;
	\item present answers for a \textit{MCQ} ;
	\item create a list with \textit{choosen items} (randomly or by numbers) ;
	\item present a skill table.
\end{itemize}

\smallskip

The globa idea is ti propose \textit{user-friendly} environments, with explicit customizations, without using verbose syntax ; but there's other solutions, using for example \MontreCode{\textbackslash vspace} ou \MontreCode{\textbackslash  setlength} or \MontreCode{spacingtricks} package.

\subsection{Loading}

The package loads within the preamble with \MontreCode{\textbackslash usepackage\{customenvs\}}.

Loaded packages are 

\begin{itemize}
	\item \MontreCode{xstring}, \MontreCode{simplekv}, \MontreCode{listofitems}, \MontreCode{randomlist} and \MontreCode{xintexpr} ;
	\item \MontreCode{enumitem} ;
	\item \MontreCode{multicol} ;
	\item \MontreCode{tabularray} ;
	\item \MontreCode{fontawesome5} ;
\end{itemize}

Due to limitations, \MontreCode{enumitem}/\MontreCode{multicol}/\MontreCode{tabularray}\MontreCode{fontawesome5} can be \textit{un}loaded by \MontreCode{customenvs} (user must load them manually) via options :

\begin{itemize}
	\item \MontreCode{$\mathtt{\langle}$noenum$\mathtt{\rangle}$} ;
	\item \MontreCode{$\mathtt{\langle}$nomulticol$\mathtt{\rangle}$} ;
	\item \MontreCode{$\mathtt{\langle}$notblr$\mathtt{\rangle}$} ;
	\item \MontreCode{$\mathtt{\langle}$nofa$\mathtt{\rangle}$} ;
\end{itemize}

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%with all packages
\usepackage{customenvs}

%with option to no load some packages
\usepackage[option(s)]{customenvs}
\end{codehigh}

\newpage

\section{Answers for a MCQ}

\subsection{Idea}

The idea is to propose an environment to present answers for a MQC with \MontreCode{tabularray} (and not \MontreCode{multicols}).

\smallskip

It's possible to use 2, 3 or 4 answers (and with 4 answers it's possible to use 2 columns.)

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[options]{list of answers}<tblr options>
\end{codehigh}

The avalailable \MontreCode{options} are :

\begin{itemize}
	\item \MontreCode{Width} : \MontreCode{0.99\textbackslash linewidth} by default ;
	\item \MontreCode{Lines}  : \MontreCode{false} by default ;
	\item \MontreCode{SpaceCR} for Columns/Rows spacing, within \MontreCode{col/row} or \MontreCode{global} : \MontreCode{6pt/2pt} by default ;
	\item \MontreCode{NumCols}, 2 or 4 : \MontreCode{4} by default ;
	\item \MontreCode{Labels} for the labels : \MontreCode{a.} by default ;
	\begin{itemize}
		\item with \MontreCode{a} to \textit{enumerate} \MontreCode{a b c d} ;
		\item with \MontreCode{A} to \textit{enumerate} \MontreCode{A B C D} ;
		\item with \MontreCode{1} to \textit{enumerate} \MontreCode{1 2 3 4} ;
	\end{itemize}
	\item \MontreCode{FontLabels} : \MontreCode{\textbackslash bfseries} by default ;
	\item \MontreCode{SpaceLabels} : \MontreCode{\textbackslash kern5pt} by default ;
	\item \MontreCode{Swap}, for ACBD instead of ABCD : \MontreCode{false} by default.
\end{itemize}

The list of answers must be given within \MontreCode{answA § answB § ...}.

Specific options for \MontreCode{tblr} are given between last optionnal argument, between \MontreCode{<...>}.

\subsection{Examples}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%default output
\AnswersMCQ{Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[Lines]{Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[Lines,Labels=(1.),SpaceLabels={~~~}]{Answer A § Answer B § Answer C}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[Labels={A.},FontLabels={\color{red}\bfseries}]%
    {Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[Labels={1.},FontLabels={\color{red}\bfseries}]%
    {Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[NumCols=2,Labels={A.},FontLabels={\color{red}\bfseries}]%
    {Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[NumCols=2,Swap,Labels={A.},FontLabels={\color{red}\bfseries}]%
    {Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[Lines,NumCols=2,SpaceCR=6pt/10pt]%
    {Answer A § Answer B § Answer C § Answer D}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\AnswersMCQ[Width=10cm,NumCols=2,Lines]%
    {$\displaystyle\frac1x$ § $1+\displaystyle\frac1x$ § $-2x^2+5$ § $-\infty$}
    <rows={1.5cm}>
\end{demohigh}

\pagebreak

\section{List avec with picked elements (random or not)}

\subsection{Global use}

The idea is to :

\begin{itemize}
	\item create a list of items, the base for choices ;
	\item print the list with picked items.
\end{itemize}

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\CreateItemsList{list}{macro}{listname}
\end{codehigh}

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\ListItemsChoice[keys]{macro}{listname}(numbers)<enumitem options>
\end{codehigh}

The available \MontreCode{keys} are :

\begin{itemize}
	\item \MontreCode{Type} : \MontreCode{enum} or \MontreCode{item} ;
	\item \MontreCode{Random}  : \MontreCode{false} by default.
\end{itemize}

The second argument, mandatory and between \MontreCode{\{...\}} is the macro for the list.

The third argument, mandatory and between \MontreCode{\{...\}} is the name of the list.

The fourth argument, mandatory and between \MontreCode{(...)} give :

\begin{itemize}
	\item the number of random items to display, with \MontreCode{Random=true} ;
	\item the numbers of picked itemps, within \MontreCode{num1,num2,...}.
\end{itemize}


The last argument, optional and between \MontreCode{<...>} gives specific options to \MontreCode{enumitem} environment.

\medskip

Controls are done :

\begin{itemize}
	\item to verify that the liste doesn't exist (for the creation) ;
	\item to verify that that the list still exist (for the display).
\end{itemize}

\subsection{Examples}

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%creation of list ListItems, with macro \mylistofitems
\CreateItemsList%
    {Answer A,Answer B,Answer C,Answer D,Answer E,Answer F,Answer G,Answer H}%
    {\mylistofitems}{ListItems}
\end{codehigh}

\CreateItemsList%
{Answer A,Answer B,Answer C,Answer D,Answer E,Answer F,Answer G,Answer H}%
{\mylistofitems}{ListItems}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%items random
\ListItemsChoice[Random]{\mylistofitems}{ListItems}(5)
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%items picked 
\ListItemsChoice{\mylistofitems}{ListItems}(1,4,3,8,2)
\end{demohigh}

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%creation of list ListItemsB, with macro \mylistofitemsb
\CreateItemsList%
    {{$\int_0^1 x^2 dx$},{$\int_0^1 x^3 dx$},{$\int_0^1 x^4 dx$},...}%
    {\mylistofitemsb}{ListItemsB}
\end{codehigh}

\CreateItemsList%
{{$\int_0^1 x^2 dx$},{$\int_0^1 x^3 dx$},{$\int_0^1 x^4 dx$},{$\int_0^1 x^5 dx$},{$\int_0^1 x^6 dx$},{$\int_0^1 x^7 dx$},{$\int_0^1 x^8 dx$}}%
{\mylistofitemsb}{ListItemsB}

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%items picked 
\ListItemsChoice[Type=item]{\mylistofitemsb}{ListItemsB}(7,2,1,5,3)<label=$--$>
\end{codehigh}

\ListItemsChoice[Type=item]{\mylistofitemsb}{ListItemsB}(7,2,1,5,3)<label=$--$>

\pagebreak

\section{Pencil of skills}

\subsection{Global use}

The idea is to :

\begin{itemize}
	\item present of list of categories and skills ;
	\item presented like a pencil.
\end{itemize}

The code (within CC-BY-SA 4.0 license) is adapted from :

\hfill{\footnotesize \url{https://tex.stackexchange.com/questions/504092/replicating-a-fancy-bordered-text-style-in-latex/504145#504145}}\hfill~

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\PencilSkills[keys]<tikz options>{listofskills}
\end{codehigh}

The style is globally fixed, but there's some customization available.

\subsection{The macro}

Available \MontreCode{keys} are :

\begin{itemize}
	\item \MontreCode{FontCateg} : font for the categories ;
	\item \MontreCode{FontBlock} : font for the skills ;
	\item \MontreCode{Colors} : list of category's colors
	
	\MontreCode{BgCateg1/FgCateg1,BgCateg1/FgCateg1,...}
	
	(if \MontreCode{FgCateg1} est missing, \MontreCode{black} is used)
	\item \MontreCode{BlockWidth} : width of skill's block ;
	\item \MontreCode{Scale} : global scale
	\item \MontreCode{BlackWhite} : boolean for B\&W.
\end{itemize}

The second argument, optional and between \MontreCode{<...>} gives specific options to \MontreCode{enumitem} environment.

\smallskip

The last argument, mandatory and between \MontreCode{(...)} give the list of categories/skills, within

\MontreCode{Categ1/ListSkills1,Categ2/ListSkills2,...}.

\subsection{Examples}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%default output
\PencilSkills{Search/Skill 1\\ Skill 2,Model/{Skill 1\\ Skill 2}}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\PencilSkills[Scale=0.75]%
    {Search/Skill 1\\Skill 2,Model/{Skill 1\\Skill 2},%
    Represent/{Skill 1\\Skill 2},Calculate/{Skill 1\\Skill 2},%
    Reason/{Skill 1\\Skill 2},Communicate/{Skill 1\\Skill 2}}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\PencilSkills[Scale=0.75,BlockWidth=3cm]<rotate=90>{
    Search/Skill 1\\Skill 2,Model/{Skill 1\\Skill 2}}
\hspace{1cm}
\PencilSkills[Scale=0.75,BlockWidth=3cm]<rotate=-90>{
    Search/Skill 1\\Skill 2,Model/{Skill 1\\Skill 2}}
\hspace{1cm}
\PencilSkills[Scale=0.75,BlockWidth=3cm,BlackWhite]<rotate=45>{
    Search/Skill 1\\Skill 2,Model/{Skill 1\\Skill 2}}
\end{demohigh}

\pagebreak

\section{SMS conversation}

\subsection{Global use}

The idea is to present a conversation of SMS.

\begin{codehigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\begin{ChatSMS}[keys]{name}
  \InSMS(*){time}{msg}
  \OutSMS*(*){time}{msg}
\end{ChatSMS}
\end{codehigh}

The style is globally fixed, but there's some customization available.

\subsection{The environment}

Available \MontreCode{keys} are :

\begin{itemize}
	\item \MontreCode{height} : height of the window (auto or specific) ; \MontreCode{auto} by default
	\item \MontreCode{width} : width of the window ; \MontreCode{7cm} by default
	\item \MontreCode{margin} : margin (L or R) for the bubble \MontreCode{1.5cm} by default
	\item \MontreCode{color} : \textit{main} color (banner) ; \MontreCode{teal!75!cyan!75!white} by default ;
	\item \MontreCode{colback} : color for background ; \MontreCode{lightgray!5} by default
	\item \MontreCode{colorin} : color for incoming SMS ; \MontreCode{lime!25} by default
	\item \MontreCode{colorout} : color for outcoming SMS ; \MontreCode{teal!25} by default
	\item \MontreCode{writetxt} : text of sending zone ; \MontreCode{Write} by default
	\item \MontreCode{fonttxt} : bubble's font ; \MontreCode{\textbackslash normalfont} by default
	\item \MontreCode{avatar} : avatar of contact ; \MontreCode{\textbackslash faAddressCard} by default
	\item \MontreCode{dispavatar} : boolean for displaying avatar near the bubbles ; \MontreCode{false} by default
	\item \MontreCode{blackwhite} : boolean pour black\&white. \MontreCode{false} by default
\end{itemize}

The argument, mandatory and between \MontreCode{(...)} give the name of the contact.

\subsection{Macros for the bubbles}

Regarding the bubble creation commands, \MontreCode{\textbackslash InSMS} and \MontreCode{\textbackslash OutSMS}:

\begin{itemize}
	\item the \textit{starred} version does not display the \textit{checkmarks} of \textit{good reception};
	\item the first mandatory argument is the time to display ;
	\item the second mandatory argument is the message to display (including multi-lines).
\end{itemize}

\subsection{Examples}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
%with a personal image
\begin{ChatSMS}%
  [width=6cm,fonttxt=\sffamily,height=10cm,avatar=img/android,dispavatar]{CP}
  \InSMS{19:23}{Hi !}
  \OutSMS{19:23}{Hi !\\ How are you ?}
  \InSMS{19:25}{Just a problem with a math question\ldots}
  \OutSMS{19:26}{Wanna help ??}
  \InSMS{19:28}{Yes, I need to compute $\mathsf{\int_{0}^{1} x^2e^{-x}\,dx}$\ldots}
  \OutSMS*{19:30}{Take care !!}
\end{ChatSMS}
\end{demohigh}

\begin{demohigh}[language=latex/latex3,style/main=teal!25,style/code=teal!25]
\begin{ChatSMS}%
  [width=8cm,fonttxt=\sffamily,avatar=\faCanadianMapleLeaf,blackwhite]{CP}
  \InSMS{19:23}{Hi !}
  \OutSMS{19:23}{Hi !\\ How are you ?}
  \InSMS{19:25}{Just a problem with a math question\ldots}
  \OutSMS{19:26}{Wanna help ??}
  \InSMS{19:28}{Yes, I need to compute $\mathsf{\int_{0}^{1} x^2e^{-x}\,dx}$\ldots}
  \OutSMS*{19:30}{Take care !!}
\end{ChatSMS}
\end{demohigh}

\end{document}