% !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.7} \def\TPdate{03/06/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.7|~:~~~~Small patch for \textsf{Vignette} macro (see \texttt{[fr]} documentation) \verb|v0.1.6|~:~~~~Small patchs for \textsf{displayskip} + \textsf{pas-tableur} (see \texttt{[fr]} documentation) \verb|v0.1.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} \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$} \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) \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) \end{codehigh} \ListItemsChoice[Type=item]{\mylistofitemsb}{ListItemsB}(7,2,1,5,3) \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]{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]{ Search/Skill 1\\Skill 2,Model/{Skill 1\\Skill 2}} \hspace{1cm} \PencilSkills[Scale=0.75,BlockWidth=3cm]{ Search/Skill 1\\Skill 2,Model/{Skill 1\\Skill 2}} \hspace{1cm} \PencilSkills[Scale=0.75,BlockWidth=3cm,BlackWhite]{ 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}