% Réglages package "epigraph"
\setlength{\epigraphwidth}{0.8\textwidth} % Valeur par défaut : 0.4\textwidth
\renewcommand{\textflush}{flushepinormal}


%%% RACCOURCIS %%%
\newcommand{\version}{3.8}

% Générique
\newcommand{\Windows}{\texttt{Windows}}
\newcommand{\Linux}{\texttt{Linux}}
\newcommand{\Apple}{\texttt{Apple}}
\newcommand{\LinkedIn}{\texttt{LinkedIn}}
\newcommand{\Paint}{\texttt{Paint}}
\newcommand{\GIMP}{\texttt{GIMP}}
\newcommand{\Inkscape}{\texttt{Inkscape}}

% LaTeX (hologo)
\newcommand{\BibTeX}{\hologo{BibTeX}}
\newcommand{\LuaLaTeX}{\hologo{LuaLaTeX}}
\newcommand{\METAFONT}{\hologo{METAFONT}}
\newcommand{\MiKTeX}{\hologo{MiKTeX}}
\newcommand{\pdfLaTeX}{\hologo{pdfLaTeX}}
\newcommand{\pdfTeX}{\hologo{pdfTeX}}
\newcommand{\XeLaTeX}{\hologo{XeLaTeX}}

% LaTeX (custom)
\newcommand{\KaTeX}{Ka\TeX{}}
\newcommand{\Texmaker}{\texttt{Texmaker}}
\newcommand{\TikZ}{Ti\textit{k}Z}
\newcommand{\Beamer}{\texttt{Beamer}}

% Icônes
\newcommand{\folder}{\textcolor[RGB]{255,231,157}{\faFolder}}

%%% FIN RACCOURCIS %%%


%%% COULEURS %%%

% Page de garde et mind map
\definecolor{BlueFR}{RGB}{0,35,149}
\definecolor{RedFR}{RGB}{237,41,57}
\definecolor{NewOrange}{RGB}{247,111,43}
\definecolor{Gold}{RGB}{255,215,0}

% Aperçu Texmaker (Aide_LaTeX1.png) -- Hred = Red - Hyellow = Gold
\definecolor{Horange}{RGB}{255,156,0}
\definecolor{Hgreen}{RGB}{0,167,0}
\definecolor{Hblue}{RGB}{0,234,255}
\definecolor{Hpurple}{RGB}{169,15,219}

% Signature
\definecolor{lightningcyan}{RGB}{59,195,235}

%%% FIN COULEURS %%%


%%% TABLEAUX %%%

% Tableau bilan
\newenvironment{tableaubilan}[4]{
	\begin{longtable}{p{#1}p{#2}}
	% Définition des headers & footers du longtable
	{\hspace*{\fill}\textsc{#3}\hspace*{\fill}} & {\hspace*{\fill}\textsc{#4}\hspace*{\fill}} \\ \midrule
	\endhead
	\multicolumn{2}{r}{\textit{(suite sur la page suivante)}} \\
	\endfoot
	\multicolumn{2}{@{\hrulefill}c@{\hrulefill}}{\raisebox{-3pt}{~~\textsc{Fin du tableau}~~}}
	\endlastfoot
}{\end{longtable}}

%%% FIN TABLEAUX %%%


%%% BOÎTES %%%

% "Boîtes" -- Package tcolorbox
% Boîtes types
\newtcolorbox{boitetype}[4][]{enhanced, breakable, before upper = {\parindent17.6pt}, beforeafter skip = \baselineskip, colframe = #3, colback = #4, boxrule = 2pt, arc = 4mm, fonttitle = \bfseries, title = {#2}, coltitle = black, #1} % before upper = alinéa dans boîte

\newtcolorbox{boitecointype}[7][]{%
cornerrulewidth/.store in = {\tcbcornerrulewidth},
cornerrulewidth = #7,
topcornercolor/.store in = {\tcbtopcornercolor},
topcornercolor = #3,
bottomcornercolor/.store in = {\tcbbottomcornercolor},
bottomcornercolor = #4,
enhanced, breakable, before upper = {\parindent17.6pt}, beforeafter skip = \baselineskip, sharp corners, boxrule = 0pt, colback = #5, title = {#2}, fonttitle = \bfseries, coltitle = black, colbacktitle = #6, underlay unbroken = {
	\draw[\tcbtopcornercolor, line width = \tcbcornerrulewidth] ([xshift = -\tcbcornerrulewidth/2]frame.west) -- ([shift = {(-\tcbcornerrulewidth/2,\tcbcornerrulewidth/2)}]frame.north west) -- ([yshift = \tcbcornerrulewidth/2]frame.north);
	\draw[\tcbtopcornercolor, line width = \tcbcornerrulewidth] ([xshift = \tcbcornerrulewidth/2]frame.east) -- ([shift = {(\tcbcornerrulewidth/2,-\tcbcornerrulewidth/2)}]frame.south east) -- ([yshift = -\tcbcornerrulewidth/2]frame.south);
}, underlay first = {
	\draw[\tcbtopcornercolor, line width = \tcbcornerrulewidth] ([xshift = -\tcbcornerrulewidth/2]frame.west) -- ([shift = {(-\tcbcornerrulewidth/2,\tcbcornerrulewidth/2)}]frame.north west) -- ([yshift = \tcbcornerrulewidth/2]frame.north);
}, underlay last = {
	\draw[\tcbtopcornercolor, line width = \tcbcornerrulewidth] ([xshift = \tcbcornerrulewidth/2]frame.east) -- ([shift = {(\tcbcornerrulewidth/2,-\tcbcornerrulewidth/2)}]frame.south east) -- ([yshift = -\tcbcornerrulewidth/2]frame.south);
}, #1}


% Construction des autres boîtes en fonction d'une boîte type
\newenvironment{boite}[3][]{\begin{boitetype}[#1]{#2}{#3}{white}}{\end{boitetype}}
\newenvironment{boitecoin}[3][]{\begin{boitecointype}[#1]{#2}{#3}{#3}{#3!5!white}{#3!50}{2pt}}{\end{boitecointype}}

\newenvironment{regles}[2][]{\begin{boitetype}[sharp corners, boxrule = 3pt, coltitle = white, #1]{#2}{BrickRed}{Goldenrod}}{\end{boitetype}}
\newenvironment{definition}[2][]{\begin{boitecoin}[#1]{#2}{Green}}{\end{boitecoin}}
\newenvironment{conseil}[2][]{\begin{boitetype}[#1]{#2}{cyan}{cyan!40}}{\end{boitetype}}
\newenvironment{attention}[2][]{\begin{boitetype}[left = 6mm, coltitle = white, sharp corners = west, underlay = {%
	\path[fill = yellow!50!black] (frame.south west) rectangle node[white] {\huge\bfseries{}!} ([xshift = 4mm]frame.north west);
}, drop fuzzy shadow, #1]{#2}{yellow!20!black}{yellow!50}}{\end{boitetype}} % Nouvelle boîte "attention" -- Inspiration : boîte "marker" (code source guide tcolorbox)


%%% --- Explications --- %%%

% Ne fonctionne pas : \newenvironment{code}[2][]{\begin{boitecodetype}[#1]{#2}{LimeGreen}{LimeGreen!5!white}{LimeGreen!50}{2pt}{TeX}}{\end{boitecodetype}}

% Boite type avec listings impossible --> problème lors de l'appel du nouvel environnement 
% (en gros, avec une couche supplémentaire \newenvironment, listings n'arrive pas à bien détecter le début et la fin de l'environnement donc erreur)

% Solution :
% Utilisation de styles (commandes propres à tcolorbox & listings) pour recenser les options à utiliser
% Création ensuite de 3 environnements (distincts et non imbriqués) mais avec appel de ces commandes 
% ==> gain de lignes et généralisation possible

%%% --- FIN Explications --- %%%

% Stockage de 2 variables principales (plus propre)
% Autre solution : utiliser le code source tcolorbox (tcbcol@frame : couleur définie par colback)
% Attention : breakable non appliqué si "listing side text" (pas de coupure)
% ==> faire des "petits" bouts de code
\tcbset{
codemainoptions/.style = {
	maincolor/.store in = {\tcbmaincol},
	maincolor = LimeGreen,
	rulewidth/.store in = {\tcbrulewidth},
	rulewidth = 2pt,
	enhanced, breakable, beforeafter skip = \baselineskip, sharp corners, boxrule = \tcbrulewidth, colframe = \tcbmaincol, colback = \tcbmaincol!15, drop fuzzy shadow, colbacktitle = \tcbmaincol!50, coltitle = black, fonttitle = \bfseries, title = {#1},
	attach boxed title to top center = {yshift = -\tcbrulewidth/2-\tcboxedtitleheight/2, yshifttext = -\tcboxedtitleheight/2}, boxed title style = {boxrule = \tcbrulewidth, frame code = {
		\path[tcb fill frame] ([xshift = -3mm]frame.west) -- (frame.north west) -- (frame.north east) -- ([xshift = 3mm]frame.east) -- (frame.south east) -- (frame.south west) -- cycle;}, interior code = {
		\path[tcb fill interior] ([xshift = -2mm]interior.west) -- (interior.north west) -- (interior.north east) -- ([xshift = 2mm]interior.east) -- (interior.south east) -- (interior.south west) -- cycle;}}
}
}

%%% FIN BOÎTES %%%


%%% MISE EN FORME CODE LATEX %%%

\lstdefinestyle{mainlststyle}{
	language = {[LaTeX]TeX},	
	% Styles
	style = tcblatex,
	texcsstyle = *\color{cyan!65!black},
	commentstyle = \color{gray},
	inputencoding = utf8,
	% Options
	tabsize = 4, % Taille indentation
	columns = flexible, % Eviter espaces superflus lors copier-coller
	keepspaces = true,
	breaklines = true, % Retour à la ligne si code trop long
	breakatwhitespace = false,
	showspaces = false,
	showtabs = false,
	showstringspaces = false,
	upquote = true, % Apostrophes droites
	xleftmargin = 20pt, % Espace avec la marge
	numbers = left, 
	numbersep = 5pt, % Espace entre les numéros de ligne et le code
	numberstyle = \ttfamily\footnotesize\color{OrangeRed}\noncopynumber
}

% Hack pour ne pas sélectionner les numéros de ligne (code)
\newcommand{\noncopynumber}[1]{
	\BeginAccSupp{method = escape, ActualText = {}}
	#1
	\EndAccSupp{}
}

% N.B. : #2 = titre de la boite
\newtcblisting{code}[2][]{codemainoptions = {#2}, listing options = {style = mainlststyle}, listing only, #1}

\newtcblisting{codedisplay}[2][]{codemainoptions = {#2}, listing options = {style = mainlststyle}, listing side text, righthand ratio = 0.4, sidebyside gap = 13mm, bicolor, colbacklower = white, #1}

% compilable listing ==> compiler "main.tex" avec "-shell-escape"
\newtcblisting{coderesult}[2][]{codemainoptions = {#2}, listing options = {style = mainlststyle}, listing and comment, bicolor, colbacklower = white, compilable listing, run pdflatex, pdf comment, freeze pdf, comment style = {raster columns = 2, drop lifted shadow}, #1}

% Boîte spéciale code TikZ
% 1ère idée : nouvelle boîte brute avec listing and comment (comment = {\resizebox{\linewidth}{!}{\tcbuselistingtext}} -- \tcbuse... = contenu de la boîte soit code TikZ)
% 2nde idée : se contenter d'un "listing and text" avec structure boîte "codedisplay"
\newtcblisting{codetikz}[2][]{codemainoptions = {#2}, listing options = {style = mainlststyle}, listing and text, bicolor, colbacklower = white, #1}

%%% FIN MISE EN FORME CODE LATEX %%%