guide-libreasso/lolipop.cls
2020-05-16 14:53:30 +02:00

776 lines
24 KiB
TeX

% Bienvenue sur la classe lolipop.
\ProvidesClass{lolipop}[2012/03/31]
% Lolipop est une classe LaTeX moderne.
\NeedsTeXFormat{LaTeX2e}
% Elle se base pour l'essentiel sur la classe LaTeX book.
\LoadClass[10pt,twoside,french]{book}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Dépendances générales
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Nous écrivons en unicode.
\RequirePackage[utf8]{inputenc}
% Nous utilisons de jolies fontes vectorielles.
\RequirePackage[T1]{fontenc}
% Packagé dans tex-gyre
\RequirePackage{tgchorus}
% Packagé dans lmodern
\RequirePackage{lmodern}
% Nous étendons LaTeX avec le symbole €.
\RequirePackage{eurosym}
\DeclareUnicodeCharacter{20AC}{{\euro}}
% Nous aurons besoin de quadrichromie,
\RequirePackage[cmyk]{xcolor}
% ainsi que de différentes subtilités graphiques.
\RequirePackage{pgf}
\RequirePackage{tikz}
\usetikzlibrary{shapes,snakes,shadows,arrows}
\RequirePackage{amssymb}
% Le paquet environ permet facilement de switcher entre macro et environnement.
\usepackage{environ}
% Le paquet ifthen facilite le contrôle de flux.
\usepackage{ifthen}
\usepackage[strict]{changepage}
% Nous définissons de nouveaux types de flottants en nous appuyant sur le paquet
% float.
\usepackage{float}
% Nous éditons les hyperliens, avec césure, unicode, et sans cadre.
\RequirePackage[hyphens]{url}
\RequirePackage[breaklinks=true, unicode=True, pdfborder={0 0 0}]{hyperref}
\def\UrlNoBreaks{\do\(\do\[\do\{\do\<\do\:}%
% Le paquet microtype permet les fonctionnalités de microtypographie.
% \RequirePackage{microtype}
% Et finalement, nous mettrons en oeuvre les subtilités de la typographie
% française.
\RequirePackage[french]{babel}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Chemins
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\@includes{includes/}
\def\@images{\@includes images/}
\def\@screenshots{\@includes screenshots/}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mise en page
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Avec geometry, c'est trop facile.
\RequirePackage[
paperwidth = 168mm,
paperheight = 230mm,
inner = 17mm,
outer = 3.2cm,
marginparwidth = 2.7cm,
marginparsep = .5cm,
top = 15mm,
bottom = 25mm,
twoside
]{geometry}
% Toutefois, nous modifierons la géométrie pour le mainmatter, et la restaurons
% pour le backmatter.
\let\ltxmainmatter\mainmatter
\def\mainmatter{
\newgeometry{
inner = 17mm,
outer = 6.2cm,
marginparwidth = 5.7cm,
marginparsep = .5cm,
top = 15mm,
bottom = 25mm,
twoside
}
\ltxmainmatter
}
\let\ltxbackmatter\backmatter
\def\backmatter{
\restoregeometry
\ltxbackmatter
}
% Headers et footers discrets
\pagestyle{plain}%
% Pas de césure pour les mots en majuscule.
\uchyph=0
% Traits de coupe et marques d'impression, en option
\usepackage{eso-pic}
\def\lolipop@addborder{
\pgfdeclareimage{bordure}{\@images bordure}
\newcommand\reflecteven[1]{\checkoddpage\ifoddpage{{##1}}\else\reflectbox{##1}\fi}
\AddToShipoutPicture{%
\parindent 0pt%
\reflecteven{\pgfuseimage{bordure}}%
\hspace{-168mm}
}
}
\DeclareOption{imprimeur}{\lolipop@addborder}
\ProcessOptions
% Autorisons plus d'écarts entre mots.
\pretolerance=9999
% \tolerance=1000
% \emergencystretch 0.5pt
% \hbadness9999
% \vbadness9999
\setlength\parskip{0pt plus 4pt minus 0pt}
% Autorisons plus d'écarts entre flottants.
\setlength\floatsep {12\p@ \@plus 4\p@ \@minus 4\p@}
\setlength\textfloatsep{20\p@ \@plus 4\p@ \@minus 6\p@}
\setlength\intextsep {12\p@ \@plus 4\p@ \@minus 4\p@}
\setlength\abovecaptionskip{10\p@ \@plus 4\p@ \@minus 2\p@}
\setlength\belowcaptionskip{0\p@ \@plus 4\p@ \@minus 0\p@}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Mise en forme
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Couleur %%%
% Le magenta est la couleur dominante du guide.
\definecolor{mgray}{cmyk}{0,0.191,0.080,0.263}
\definecolor{magenta}{cmyk}{0,1,0,0}
\newcommand{\magenta}{\color{magenta}}
% Nous l'utiliserons notamment pour les emphases.
\renewcommand{\emph}[1]{{\it#1}}
\newcommand{\strong}[1]{{\bf\magenta#1}}
% Ainsi que pour les exergues, que nous définirons comme un paragraphe centré
% dans la marge.
\NewEnviron{exergue}{
\let\href\fnhref
\marginpar{
\checkoddpage\ifoddpage\raggedright\else\raggedleft\fi
\begin{minipage}{4.0cm}
\centering
\bf\large\magenta
\BODY
\end{minipage}
}
\let\href\mphref
}
%%% Hyperliens %%%
% La coloration des liens est sans intérêt en général (on le fera à plus haut
% niveau si nécessaire).
\hypersetup{colorlinks=false}
% Par contre, ceux-ci doivent être imprimés vu que le guide est destiné à
% l'impression. Pour cela, nous stockons l'interfaces de hyperref et
% redéfinissons les notres.
\let\hhref\href
\let\hurl\url
\let\href\mphref
\newcommand{\mphref}[2]{\hhref{#1}{#2\footnote{\url{#1}}}}
\renewcommand{\url}[1]{\hurl{#1}}
\newcommand{\email}[1]{\hhref{mailto:#1}{\tech{#1}}}
% Cependant, cela ne permet plus d'afficher un lien dans une footnote. Pour
% cela, on va hacker les footnotes.
\newcommand{\fnhref}[2]{#2 (\url{#1})}
\let\ltxfootnote\footnote
\renewcommand{\footnote}[1]{%
\let\href\fnhref%
\ltxfootnote{#1}%
\let\href\mphref%
}
%%% Fontes %%%
% Une interface pour acceder aux fontes TgChorus.
\newcommand{\chorus}{\fontfamily{qzc}\selectfont}
\newcommand{\textchorus}[1]{{\chorus #1}}
% Nous utiliserons TgChorus pour les headers.
\newcommand{\headingfont}{\chorus}
\newcommand{\textheadingfont}[1]{{\chorus #1}}
%%% Autres interfaces %%%
% Pour l'écrit étranger.
\newcommand{\foreign}[1]{{\it #1}}
\let\etranger\foreign
% Pour les marques.
\newcommand{\brand}[1]{{#1}}
\let\marque\brand
% Pour les aspects techniques.
\newcommand{\tech}[1]{{\tt #1}}
\let\info\tech
\let\shell\tech
\let\command\tech
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Sectionning
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%% Décoration %%%
\newcommand\reflectodd[1]{\checkoddpage\ifoddpage{\reflectbox{#1}}\else{#1}\fi}
\newlength{\headwidth}
\pgfdeclareimage{tache}{\@images tache}
\newcommand{\fancychapter}[1]{
\reflectodd{
\setlength\headwidth{0.6\columnwidth}
\setbox0=\hbox{\hspace{1em}\reflectodd{#1}}
\ifthenelse{\lengthtest{\wd0>\headwidth}}
{\setbox0=\hbox{\hspace{1em}\reflectodd{\parbox[b]{0.6\columnwidth}{\alignhead #1}}}}{}
\pgfmathsetmacro{\largeur}{\wd0*0.07}
\parindent\z@
\begin{tikzpicture}
\draw[thick,scale=0.5] (0,0) -- node[above=10pt-1.1\dp0]{\copy0} (\largeur + 0.35,0);
\node {\pgfuseimage{tache}};
\end{tikzpicture}
}
}
\newcommand{\fancymark}[1]{
\setbox0=\hbox{#1}
\pgfmathsetmacro{\largeur}{\wd0*0.07}
\begin{tikzpicture}
\draw[thick,scale=0.5] (0,0) -- node[above=1pt-\dp0]{\copy0} (\largeur + 0.35,0);
\draw[scale=0.5] (\largeur,0) to[in=175,out=0,looseness=1.25] (\largeur + 0.75,0.25) node {$\scriptscriptstyle\blacksquare$};
\draw[thick,scale=0.5] (\largeur + 0.125,0) -- (\largeur + 0.75 + 0.25 + 0.125,0) node {$\scriptscriptstyle\blacktriangleright$};
\draw[scale=0.5] (\largeur+0.25,0) to[in=170,out=0,looseness=1.25] (\largeur+1-0.125,-0.25) node {$\scriptscriptstyle\bigstar$};
\end{tikzpicture}
}
%%% Chapitres %%%
\def\alignhead{\checkoddpage\ifoddpage\raggedright\else\raggedleft\fi}
\renewcommand\chapter{
\clearpage
\global\@topnum\z@
\@afterindentfalse
\secdef\@chapter\@schapter
}
\def\@chapapp{}
\def\@makechapterhead#1{%
\vspace*{20\p@}%
{\parindent \z@
\alignhead
\headingfont
\ifnum \c@secnumdepth >\m@ne
\if@mainmatter
\Huge\bfseries
{\Large\@chapapp}\space\thechapter.\par
\vspace*{10\p@}%
\fi
\fi
\interlinepenalty\@M
\fancychapter {
\headingfont
\Huge \bfseries #1
}
\par\nobreak
\vskip 20\p@
}
}
\def\@makeschapterhead#1{%
\vspace*{20\p@}%
{\parindent \z@
\alignhead
\fancychapter {
\headingfont
\interlinepenalty\@M
\Huge \bfseries #1
}
\par\nobreak
\vskip 20\p@
}
}
%%% Autres %%%
\renewcommand\section{\@startsection {section}{1}{\z@}%
{-2.5ex \@plus -2ex \@minus -.2ex}%
{2.3ex \@plus.2ex \@minus-.1ex}%
{\raggedright\magenta\headingfont\Large\bfseries}}
\renewcommand\subsection{\@startsection{subsection}{2}{\z@}%
{-2.25ex\@plus -2ex \@minus -.2ex}%
{1.5ex \@plus .1ex \@minus-.1ex}%
{\raggedright\magenta\headingfont\large\bfseries}}
\renewcommand\subsubsection{\@startsection{subsubsection}{3}{\z@}%
{-2.00ex\@plus -2ex \@minus -.2ex}%
{1.2ex \@plus .1ex \@minus-.1ex}%
{\raggedright\magenta\headingfont\normalsize\bfseries$\blacktriangleright$\hspace{1ex}}}
\renewcommand\paragraph{\@startsection{paragraph}{4}{\z@}%
{-1.8ex \@plus-1ex \@minus-.1ex}%
{0.5ex \@plus 0.1ex \@minus-.1ex}%
{\raggedright\normalcolor\normalfont\normalsize\itshape$\looparrowright$\hspace{1ex}}}
\renewcommand\subparagraph{\@startsection{subparagraph}{5}{\parindent}%
{2.25ex \@plus 1ex \@minus .1ex}%
{-1em}%
{\normalcolor\normalfont\normalsize\itshape}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Flottants : captures
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Redéfinissons un style "lolipop", inspiré de plain.
\newcommand\floatc@lolipop[2]{
\setbox\@tempboxa\hbox{\textit{\normalcolor #2}}%
\ifdim\wd\@tempboxa>\hsize \textit{\normalcolor #2}\par
\else\hbox to\hsize{\hfil\box\@tempboxa\hfil}\fi
}
\newcommand\fs@lolipop{
\let\@fs@capt\floatc@lolipop
\def\@fs@pre{}\def\@fs@post{}%
\def\@fs@mid{\vspace\abovecaptionskip\relax}%
\let\@fs@iftopcapt\iffalse}
% Et utilisons le style lolipop
\floatstyle{lolipop}
\newfloat{screenshot}{tbp}{scr}
\floatname{screenshot}{Capture}
% Mais le flottant ne sera pas l'interface utilisateur. À la place, nous
% utiliserons un environnement "capture", pour simplifier.
\NewEnviron{capture}[2][tbp]{
\let\href\fnhref
\begin{screenshot}[#1]
\begin{center}
\pgfimage[width=0.9\columnwidth]{\@screenshots #2}
\end{center}
\caption{\BODY}
\end{screenshot}
\let\href\mphref
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Flottants : logiciels
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Commençons par écrire un constructeur pour les parametres à déclarer.
\def\lolipop@declare#1{%
\global\long\expandafter%
\def \csname lolipop@#1\endcsname {}%
\global\long\expandafter%
\def \csname #1\endcsname ##1{%
\global\long\expandafter%
\def \csname lolipop@#1\endcsname{##1}%
}%
}
% Déclarons les paramètres qui nous intéressent.
\lolipop@declare{nom}
\lolipop@declare{logo}
\lolipop@declare{description}
\lolipop@declare{apprentissage}
\lolipop@declare{installation}
\lolipop@declare{lien}
\lolipop@declare{equivalent}
% L'interface utilisateur est l'environnement "logiciel". Là où le logiciel est
% déclaré, son résumé est inséré en marge et une référence est crée.
\NewEnviron{logiciel}{
\nom{} \logo{} \description{} \apprentissage{}
\installation{} \lien{} \equivalent{}
\BODY
\let\href\fnhref
\marginpara{
\label{logiciel:\lolipop@nom}
\begin{rosebox}{\lolipop@nom}
\sffamily\footnotesize
% Logo : \lolipop@logo
\if@not@empty{\lolipop@description }{\lolipop@description \\ }
\if@not@empty{\lolipop@apprentissage}{Apprentissage : \iconify{hirondelle}{\lolipop@apprentissage} \\ }
\if@not@empty{\lolipop@installation }{Installation : \iconify{marguerite}{\lolipop@installation} \\ }
\if@not@empty{\lolipop@lien }{Lien : \lolipop@lien \\ }
\if@not@empty{\lolipop@equivalent }{Équivalents : \lolipop@equivalent \\ }
\end{rosebox}
}
\let\href\mphref
}
% \marginpara est une version améliorée de \marginpar ...
\newlength\marginboxwidth
\setlength\marginboxwidth{57mm}
\def\marginpara#1{%
\setbox0=\hbox{\parbox[c]{\marginboxwidth}{#1}}%
\marginpar{\mbox{}\vspace{0.1\ht0}\copy0\vspace{0.1\ht0}}%
}
% Déclarons les icones utilisées de façon répétitives, pour optimiser l'espace.
\pgfdeclareimage[height=8pt]{hirondelle1}{\@images hirondelle1}
\pgfdeclareimage[height=8pt]{hirondelle2}{\@images hirondelle2}
\pgfdeclareimage[height=8pt]{marguerite1}{\@images marguerite1}
\pgfdeclareimage[height=8pt]{marguerite2}{\@images marguerite2}
% Une jolie boite de titre pour coller cela.
\tikzstyle{roseboxstyle}=[fill=magenta!20, very thick, drop shadow={color = magenta!60!black!40}, rectangle, inner sep=4pt, inner ysep=4pt]
\tikzstyle{rosetitlebox}=[fill=magenta, text=black, drop shadow={color = magenta!70!black!70}, inner ysep=4pt, inner sep=1ex]
\addtolength\marginboxwidth{-4pt}
\NewEnviron{rosebox}[1]{
\begin{tikzpicture}
\node [roseboxstyle] (box){
\begin{minipage}{\marginboxwidth}
\checkoddpage\ifoddpage\raggedright\else\raggedleft\fi
\vspace{10pt}
\begin{minipage}{40mm}
\BODY
\end{minipage}
\vspace{-8pt}
\end{minipage}
};
\checkoddpage\ifoddpage
\node[rosetitlebox, rounded corners, right=6pt] at (box.north west) {\large\bf #1};
\else
\node[rosetitlebox, rounded corners, left=6pt] at (box.north east) {\large\bf #1};
\fi
\end{tikzpicture}
}
% Test si un contenu est vide.
\def\if@not@empty#1#2{%
\ifthenelse{\equal{#1}{}}{}{#2}%
}
% Insert autant d'image1 que d'étoiles passées en argument. Complète avec autant
% d'image2 que nécessaire. Ce n'est pas codé très intelligemment, mais c'est
% efficace.
\def\iconify#1#2{
\ifthenelse{\equal{#2}{*}}{
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#11}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#12}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#12}}}
}
{
\ifthenelse{\equal{#2}{**}}{
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#11}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#11}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#12}}}
}
{
\ifthenelse{\equal{#2}{***}}{
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#11}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#11}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#11}}}
}
{
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#12}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#12}}}
\raisebox{-2pt}{\makebox[1em]{\pgfuseimage{#12}}}
}
}
}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Flottants : ressources
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Définit un autre type de flottant, les encarts "Pour aller plus loin"
\NewEnviron{ressource}[1]{
\let\href\fnhref
\label{#1}
\marginpara{
\cyanbox{Pour aller plus loin}{
\sffamily\footnotesize \BODY
\ifthenelse{\equal{#1}{}}{}{%
\begin{center}
\pgfimage[width=35mm]{\@images #1}
\end{center}
}
}
}
\let\href\mphref
}
% Ce flottant fait appel à une autre boite en marge, que l'on nomme les cyanbox
\tikzstyle{cyanboxstyle}=[fill=cyan!20, very thick, drop shadow={color = cyan!60!black!40}, rectangle, inner sep=4pt, inner ysep=4pt]
\tikzstyle{cyantitlebox}=[fill=cyan, text=black, drop shadow={color = cyan!70!black!70}, inner ysep=4pt, inner sep=1ex]
\newcommand{\cyanbox}[2]{
\begin{tikzpicture}
\node [cyanboxstyle] (box){
\begin{minipage}{\marginboxwidth}
\checkoddpage\ifoddpage\raggedright\else\raggedleft\fi
\vspace{10pt}
\begin{minipage}{40mm}
\raggedright #2
\end{minipage}
\end{minipage}
};
\checkoddpage\ifoddpage
\node[cyantitlebox, rounded corners, right=6pt] at (box.north west) {\bf #1};
\else
\node[cyantitlebox, rounded corners, left=6pt] at (box.north east) {\bf #1};
\fi
\end{tikzpicture}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Flottants : le saviez vous ?
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Définit un autre type de flottant, les encarts "Le saviez vous ?"
\def\lesaviezvous{Le saviez vous~?\Large?}
\newcommand\didyouknow[1]{
\let\href\fnhref
\label{#1}
\marginpara{
\begin{bluebox}{\lesaviezvous}
\sffamily\footnotesize #1
\end{bluebox}
}
\let\href\mphref
}
% Ce flottant fait appel à une autre boite en marge, que l'on nomme les bluebox
\tikzstyle{blueboxstyle}=[fill=cyan!20, very thick, drop shadow={color = cyan!60!black!40}, rectangle, inner sep=4pt, inner ysep=4pt]
\tikzstyle{bluetitlebox}=[fill=cyan, text=black, drop shadow={color = cyan!70!black!70}, inner ysep=4pt, inner sep=1ex]
\NewEnviron{bluebox}[1]{
\begin{tikzpicture}
\node [blueboxstyle] (box){
\begin{minipage}{\marginboxwidth}
\checkoddpage\ifoddpage\raggedright\else\raggedleft\fi
\vspace{10pt}
\begin{minipage}{40mm}
\raggedright\BODY
\end{minipage}
\end{minipage}
};
\checkoddpage\ifoddpage
\node[bluetitlebox, rounded corners, right=6pt] at (box.north west) {\bf #1};
% \node[left=-8pt] at (box.west) {\bf\Huge\textcolor{black!60}{?}};
\else
\node[bluetitlebox, rounded corners, left=6pt] at (box.north east) {\bf #1};
% \node[right=-8pt] at (box.east) {\bf\Huge\textcolor{black!60}{?}};
\fi
\end{tikzpicture}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Flottants : encarts
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\newlength\boxwidth
\newlength\bottomspace
\setlength\boxwidth{131mm}
\setlength\bottomspace{-\baselineskip}
\addtolength\boxwidth{-10pt}
% Ce flottant fait appel à une autre boite en marge, que l'on nomme les whitebox
\tikzstyle{whiteboxstyle}=[draw=magenta, fill=white, very thick, rectangle, rounded corners, inner sep=4pt, inner ysep=4pt]
\tikzstyle{whitetitlebox}=[fill=white, text=black, drop shadow, inner ysep=4pt, inner sep=1ex]
\def\whitebox#1#2{
\checkoddpage\ifoddpage\else\hspace{-\marginparwidth}\hspace{15mm}\fi
\begin{tikzpicture}
\node [whiteboxstyle] (box){
\begin{minipage}{\boxwidth}
\parindent 15pt
\vspace{10pt}
#2
\end{minipage}
};
\node[whitetitlebox, rounded corners, right=6pt] at (box.north west) {\bf #1};
\end{tikzpicture}
\vspace{\bottomspace}
}
% Et utilisons le style lolipop
\floatstyle{lolipop}
\newfloat{encartflottant}{tbp}{scr}
\floatname{encartflottant}{Encart}
% Mais le flottant ne sera pas l'interface utilisateur. À la place, nous
% utiliserons un environnement "encart", pour simplifier.
\NewEnviron{encart}[2][tbp]{
\begin{encartflottant}[#1]
\label{#2}
\whitebox{#2}{\BODY}
\end{encartflottant}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Glossaire(s)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Entree de glossaire
\NewEnviron{Glossaire}[1]{%
\setlength\parskip{0pt plus 0pt minus 0pt}
\subsubsection{#1}%
\hypertarget{glossaire:#1}{}%
\BODY%
}
% Référence dans le texte
% TODO: améliorer la présentation.
% Idée : ne mettre en exergue qu'une fois par chapitre, à la première occurence.
\newcommand{\glossaire}[2][]{%
\ifthenelse{\equal{#1}{}}{\def\target{#2}}{\def\target{#1}}%
\hyperlink{glossaire:\target}{%\magenta#2\textsuperscript{?}}%
#2}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1er et 2e de couvertures
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Déclarons les paramètres qui nous intéressent
\lolipop@declare{title}
\lolipop@declare{subject}
\lolipop@declare{keywords}
\lolipop@declare{version}
\lolipop@declare{date}
\lolipop@declare{organisation}
\lolipop@declare{orgwebsite}
\lolipop@declare{orgcontact}
\lolipop@declare{orgaddress}
\lolipop@declare{sourcesaddress}
% Profitons en pour renseigner les métadonnées.
\AtBeginDocument{
\hypersetup{
pdftitle=\lolipop@title,
pdfauthor=\lolipop@organisation,
pdfsubject=\lolipop@subject,
pdfkeywords=\lolipop@keywords,
}
}
% Page de titre
\def\maketitle{%
\thispagestyle{empty}
\AddToShipoutPicture*{%
\parindent 0pt%
\pgfimage{\@images couverture}%
}
\mbox{}
\clearpage
\makeours
\clearpage
}
% Ours
\def\makeours{
\mbox{}
\vfill
\begin{center}\footnotesize
\lolipop@title\ --- \reflectbox{\copyright} \lolipop@organisation \\
Version \lolipop@version\ du \lolipop@date \\
\lolipop@orgaddress \\
Site Web : \url{\lolipop@orgwebsite} \\
\email{\lolipop@orgcontact} \\
\vspace{0.5\baselineskip}
Licence de ce document : voir page \pageref{licence}. \\
Sources originales et version \info{pdf} maintenue : \\
\url{\lolipop@sourcesaddress}
\end{center}
\vspace{1cm}
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 3e et 4e de couvertures
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\def\makecouv{
\clearpage
\checkoddpage\ifoddpage\mbox{}\clearpage\fi
\setlength\bottomspace{0.0\baselineskip}
\RenewEnviron{encart}[1]{
\begin{encartflottant}[b!]
\hspace{-16mm}\whitebox{##1}{\BODY}
\end{encartflottant}
}
\newgeometry{
inner = 17mm,
outer = 20mm,
marginparwidth = 0mm,
marginparsep = 0mm,
top = 14mm,
bottom = 14mm,
twoside
}
\setlength\floatsep{16\p@ \@plus 8\p@ \@minus 4\p@}
\thispagestyle{empty}
\setcounter{footnote}{0}
\mbox{}\par
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Table des matières
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\setcounter{tocdepth}{2}
\renewcommand*\l@chapter[2]{%
\ifnum \c@tocdepth >\m@ne
\addpenalty{-\@highpenalty}%
\vskip 1.0em \@plus\p@
\setlength\@tempdima{1.5em}%
\begingroup
\parindent \z@ \rightskip \@pnumwidth
\parfillskip -\@pnumwidth
\leavevmode \magenta\headingfont\bfseries\large
\advance\leftskip\@tempdima
\hskip -\leftskip
#1\nobreak\hfil \nobreak\hb@xt@\@pnumwidth{\hss #2}\par
\penalty\@highpenalty
\endgroup
\fi}
\renewcommand*\l@section{\@dottedtocline{1}{1.5em}{2.3em}}
\renewcommand*\l@subsection{\@dottedtocline{2}{3.8em}{3.2em}}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Signature
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\usepackage{multicol}
\NewEnviron{signature}{
\vfill
\begin{center}
\begin{tabular}{lll}
\BODY
\end{tabular}
\end{center}
\vfill
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Annexes
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\let\ltxappendix\appendix
\renewcommand\appendix{\par
\ltxappendix
%\addtocontents{toc}{\clearpage}
\setcounter{chapter}{0}
\setcounter{section}{0}
\gdef\thechapter{\@Alph\c@chapter}
\def\@chapapp{Annexe}
\@mainmattertrue
}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Index(es)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Divers
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% On utilise des tirets quadratins à la place de tous les tirets possibles ...
\DeclareUnicodeCharacter{2012}{{--}}
\DeclareUnicodeCharacter{2013}{{--}}
\DeclareUnicodeCharacter{2014}{{--}}
\DeclareUnicodeCharacter{2015}{{--}}