<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">% \iffalse meta-comment
%% udes-genie-these.dtx
%% Copyright 2023 Charles-Antoine Brunet
%
% This work may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.3
% of this license or (at your option) any later version.
% The latest version of this license is in
%   http://www.latex-project.org/lppl.txt
% and version 1.3 or later is part of all distributions of LaTeX
% version 2005/12/01 or later.
%
% This work has the LPPL maintenance status `maintained'.
%
% The Current Maintainer of this work is Charles-Antoine Brunet and
%   can be contacted at Charles-Antoine.Brunet@USherbrooke.ca
%
% This work consists of the files udes-genie-these.dtx and udes-genie-these.ins
% and the derived files udes-genie-these.cls.
% \fi
%
% \iffalse
%&lt;@@=udesgeniethese&gt;
%&lt;these|protocole&gt;%%
%&lt;these|protocole&gt;%%-----------------------------------------------------------------------------
%&lt;these|protocole&gt;%%---   IDENTIFICATION   ------------------------------------------------------
%&lt;these|protocole&gt;%%-----------------------------------------------------------------------------
%&lt;these|protocole&gt;
%&lt;these&gt;\ProvidesExplClass{udes-genie-these}{2023/09/01}{3.1.0}
%&lt;these&gt;  {UniversitÃ© de Sherbrooke, FacultÃ© de gÃ©nie: classe de document pour thÃ¨ses, mÃ©moires, DPR et essais}
%&lt;protocole&gt;\ProvidesExplClass{udes-genie-protocole}{2023/09/01}{3.1.0}
%&lt;protocole&gt;  {UniversitÃ© de Sherbrooke, FacultÃ© de gÃ©nie: classe de document pour le protocole de rÃ©daction}
%&lt;these|protocole&gt;
%&lt;*driver&gt;
\documentclass[12pt,letterpaper,french]{l3doc}
\usepackage[T1]{fontenc}
\usepackage{kpfonts}
\usepackage[scaled=0.7881]{DejaVuSansMono}
\usepackage[french]{babel}
\usepackage{setspace,xspace,hologo,bookmark}
\hypersetup{colorlinks=true,linkcolor=blue,citecolor=blue,urlcolor=blue,linktocpage=true}
\setlength{\parskip}{1ex plus0.25ex minus0ex}
\setlength{\parindent}{0em}
\clubpenalty=10000  % PenalitÃ© pour lignes orphelines
\widowpenalty=10000 % PenalitÃ© pour lignes veuves
\singlespacing %\singlespacing \onehalfspacing \doublespacing \setstretch{1.25}
\makeatletter
\c@IndexColumns = 2
\c@GlossaryColumns = 2
\makeatother
\EnableCrossrefs
\CodelineIndex
\RecordChanges
\OnlyDescription
\GlossaryPrologue{\section*{Historique des changements}\markboth{Historique des changements}{Historique des changements}  \addcontentsline{toc}{section}{Historique des changements}
}
\IndexPrologue{\section*{Index}\markboth{Index}{Index}\addcontentsline{toc}{section}{Index}}
\newcommand{\lancienneclasse}{\cls{udes-genie-demt}\xspace}
\newcommand{\laclassename}{udes-genie-these}
\newcommand{\laclasse}{\cls{\laclassename}\xspace}
\newcommand{\laclasseprefix}{\cls{udes-genie}\xspace}
\newcommand{\laclassefile}{\file{udes-genie-these.cls}\xspace}
\newcommand{\laclassetitre}{\textsf{\laclassename}\xspace}
\newcommand{\babel}{\pkg{babel}\xspace}
\newcommand{\latex}{\hologo{LaTeX}\xspace}
\newcommand{\latexiii}{\hologo{LaTeX3}\xspace}
\newcommand{\pdflatex}{\hologo{pdfLaTeX}\xspace}
\newcommand{\lualatex}{\hologo{LuaLaTeX}\xspace}
\newcommand{\xelatex}{\hologo{XeLaTeX}\xspace}
\newcommand{\bibtex}{\hologo{BibTeX}\xspace}
\newcommand{\fac}{FacultÃ© de gÃ©nie\xspace}
\newcommand{\overleaf}{\textsf{Overleaf}\xspace}
\newcommand{\protocole}{protocole\xspace}
\newcommand{\protocoleit}{\textit{protocole}\xspace}
\newcommand{\protlgu}{\textit{Protocole de rÃ©daction aux Ã©tudes supÃ©rieures} de la FacultÃ© de gÃ©nie de l'UniversitÃ© de Sherbrooke\xspace}
\newcommand{\package}{package\xspace}
\newcommand{\packages}{packages\xspace}
\newcommand{\encodage}{UTF-8\xspace}
\newcommand{\enchamp}{\textbf{Nom} &amp; \textbf{Requis} &amp; \textbf{\bibtex}}
\newcommand{\non}{}
\newcommand{\oui}{\ding{'63}}
\newcommand{\bipm}{\textit{Bureau international des poids et mesures} (BIPM)\xspace}  \newcommand{\siunitx}{\pkg{siunitx}\xspace}
\newcommand{\windows}{\textsf{Windows}\xspace}
\newcommand{\macos}{\textsf{MacOS}\xspace}
\newcommand{\linux}{\textsf{Linux}\xspace}
\newcommand{\miktex}{\textsf{MiKTeX}\xspace}
\newcommand{\texlive}{\textsf{TeX Live}\xspace}
\newcommand{\tlmgr}{\textsf{TeX Live Manager}\xspace}
\newcommand{\ctan}{\textsf{CTAN}\xspace}
\newcommand{\ctanurl}{\url{https://www.ctan.org/pkg/udes-genie-these}}

\addto\captionsfrench
{
	\renewcommand{\glossaryname}{Historique~des~changements}
	\renewcommand{\contentsname}{Table~des~matiÃ¨res}
	\renewcommand{\bibname}{Liste~des~rÃ©fÃ©rences}
}

\begin{document}
	\DisableImplementation
	\DocInput{udes-genie-these.dtx}
	\clearpage
  \PrintChanges
	\PrintIndex
\end{document}
%&lt;/driver&gt;
% \fi
%
% \CheckSum{17}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
% Digits \0\1\2\3\4\5\6\7\8\9
% Exclamation \! Double quote \" Hash (number) \#
% Dollar \$ Percent \% Ampersand \&amp;
% Acute accent \' Left paren \( Right paren \)
% Asterisk \* Plus \+ Comma \,
% Minus \- Point \. Solidus \/
% Colon \: Semicolon \; Less than \&lt;
% Equals \= Greater than \&gt; Question mark \?
% Commercial at \@ Left bracket \[ Backslash \\
% Right bracket \] Circumflex \^ Underscore \_
% Grave accent \` Left brace \{ Vertical bar \|
% Right brace \} Tilde \~}
%
% \changes{v1.0}{2017-01-18}{PremiÃ¨re version}
% \changes{v1.1}{2017-07-18}{Adaptation Ã&nbsp; la nouvelle version de babel (changements internes).}
% \changes{v1.2}{2017-12-21}{Adaptation Ã&nbsp; la nouvelle version de \latexiii (changements internes).}
% \changes{v2.0}{2018-09-26}{Adaptations pour respecter la nouvelle version du protocole de rÃ©daction.}
% \changes{v2.0.1}{2020-04-17}{(Aussi connue comme v2.0a) Correction de bugs. Changements internes. Changements Ã&nbsp; la documentation.}
% \changes{v2.0.2}{2022-09-15}{Maintenance (LaTeX2e 2020-02-02 Ã&nbsp; 2022-06-01). Distribution sur CTAN. Adaptations Ã&nbsp; la documentation.}
% \changes{v3.0}{2022-09-19}{Support pour \pkg{biblatex}. Ajustements Ã&nbsp; la documentation.}
% \changes{v3.0.1}{2022-11-17}{Ajustements Ã&nbsp; la documentation et Ã&nbsp; l'exemple. Changements internes pour les formats LaTeX antÃ©rieurs Ã&nbsp; 2022-06-01.}
% \changes{v3.1.0}{2023-09-01}{Ajout des champs auto-bib et legendes-min. Ajustements Ã&nbsp; la documentation.  Correction de bugs. Format 2022-06-01 ou plus rÃ©cent requis. Maintenance interne.}
%
% \GetFileInfo{udes-genie-these.dtx}
%
% \title{CLASSE DE DOCUMENT \latex POUR LA RÃ‰DACTION AUX Ã‰TUDES SUPÃ‰RIEURES Ã€ LA FACULTÃ‰ DE GÃ‰NIE DE L'UNIVERSITÃ‰ DE SHERBROOKE\\{\large \laclassetitre, version 3.1.0}}
% \author{Charles-Antoine Brunet}
% \date{\today}
% \maketitle
%
% \begin{abstract}
% La classe de document \laclasse pour \latex gÃ¨re la mise en page et l'ordonnancement des parties prÃ©liminaires et de la liste des rÃ©fÃ©rences d'un document afin qu'il respecte le \protlgu. Ce document explique l'utilisation de \laclasse. Un exemple d'utilisation est aussi distribuÃ© avec la documentation de \laclasse.
% \end{abstract}
%
% \clearpage\tableofcontents\clearpage
%
% \section{Introduction}\label{sec:intro}
% La classe de document \laclasse pour \latex gÃ¨re la mise en page et l'ordonnancement des parties prÃ©liminaires et de la liste des rÃ©fÃ©rences d'un document afin qu'il respecte le \protlgu, ci-aprÃ¨s appelÃ© le \protocoleit. La derniÃ¨re version du \protocole est disponible dans l'intranet de la FacultÃ© de gÃ©nie.
%
% Ce document dÃ©taille l'utilisation de \laclasse afin de faciliter son utilisation. Un exemple complet est distribuÃ© avec \laclasse. Le but de ce document n'est pas d'expliquer l'utilisation gÃ©nÃ©rale de \latex ou de \bibtex. Pour cela, il faut consulter d'autres ouvrages. D'ailleurs, ce document assume une connaissance prÃ©alable fonctionnelle de \latex et de \bibtex.
%
% \subsection*{De la version~2 Ã&nbsp; la version~3}
%
% La version 3 contient un changement incompatible avec la version~2. Le changement rÃ©pond Ã&nbsp; des demandes faites Ã&nbsp; plusieurs reprises au cours des annÃ©es: supporter le \package |biblatex|. Heureusement, si vous utilisiez la version~2, la transition devrait vous prendre moins de deux minutes. Le paragraphe qui suit vous donne tous les dÃ©tails.
%
% Le style de rÃ©fÃ©rences est maintenant spÃ©cifiÃ© par le nouveau champ de configuration |style-references| et non plus dans le prÃ©ambule avec la macro |\bibliographystyle|. Il faut donc retirer une macro du style |\bibliographystyle{AAA}| et la remplacer par un champ de configuration du genre |style-references = AAA|. C'est tout!
%
%\section{Installation et vÃ©rification}\label{sec:inst}
% La classe \laclasse utilise des fonctionnalitÃ©s rÃ©centes de \latex. Il faut donc vous assurer d'avoir une version Ã&nbsp; jour de votre distribution \latex (\texlive ou \miktex). Si vous utilisez \overleaf, il faut vous assurer que votre projet compile avec la version la plus rÃ©cente de \texlive offerte.
%
% Selon votre distribution \latex, choisissez l'option qui vous convient.
% la classe
% \subsection*{\texlive et \miktex}
% La classe \laclasse est disponible sur \ctan et fait donc partie des deux distributions. Il y a deux options d'installation: pour une utilisation Ã&nbsp; \textit{long terme} et pour une utilisation Ã&nbsp; \textit{court terme}.
%
% \textbf{Long terme:}\\ Si vous pensez utiliser \laclasse pour les prochaines annÃ©es, alors vous pouvez installer \laclasse comme tout autre \package \latex: Ã&nbsp; partir de la console de \miktex ou du \tlmgr. Si vous utilisez \miktex, n'oubliez pas d'installer aussi la documentation, car elle est installÃ©e sÃ©parÃ©ment. Une fois la classe \laclasse installÃ©e, les mises Ã&nbsp; jour de \laclasse seront faites en mÃªme temps que les autres \packages Ã&nbsp; chaque fois que vous faites une mise Ã&nbsp; jour de votre distribution \latex.
%
% Notez que la documentation de \laclasse est disponible avec la commande |texdoc|, comme tous les autres \packages \latex. Sur la ligne de commande, il suffit d'utiliser la commande suivante:
%
% |texdoc udes-genie-these|
%
% L'exemple d'utilisation qui est distribuÃ© avec \laclasse est situÃ© dans le mÃªme rÃ©pertoire que la documentation, donc dans un sous-rÃ©pertoire de votre distribution \latex.
%
% \textbf{Court terme:}\\ Si vous pensez utiliser \laclasse Ã&nbsp; court terme, alors procÃ©dez comme avec \overleaf, comme ce qui suit.
%
% \subsection*{\overleaf}
%  Cette mÃ©thode fonctionne pour \overleaf et aussi toutes les autres distributions \latex. Pour utiliser \laclasse, vous pouvez rÃ©cupÃ©rer une archive sur l'intranet de la FacultÃ© de gÃ©nie qui contient tout ce qu'il faut pour compiler un document. Consultez le fichier |README| distribuÃ© pour la suite.
%
% Cette maniÃ¨re de fonctionner fait en sorte que vous Ãªtes responsables de faire les mises Ã&nbsp; jour, car elles ne se feront pas automatiquement. Cela veut aussi dire qu'au cours du temps, si vous n'Ãªtes pas vigilants, vous pourriez avoir plusieurs projets qui utilisent \laclasse, mais qui utilisent des versions diffÃ©rentes.
%
% Dans \overleaf, pour l'instant, la classe \laclasse ne fait pas partie des \packages prÃ©installÃ©s et il n'est pas possible non plus de l'installer de maniÃ¨re standard, comme avec les autres distributions \latex (\miktex et \texlive). Selon les informations sur le site web d'\overleaf au moment de l'Ã©criture de ces lignes, leur distribution \texlive est mise Ã&nbsp; jour une fois par annÃ©e lorsque la nouvelle version de \texlive est disponible. Avec un peu de chance, \laclasse fera partie d'\overleaf lors de leur prochaine mise Ã&nbsp; jour. MÃªme dans ce cas, cela veut dire que la classe \laclasse serait mise Ã&nbsp; jour qu'une seule fois par annÃ©e.
%
% \subsection*{VÃ©rification}
% Afin de vÃ©rifier que l'installation s'est bien passÃ©e, il vous est suggÃ©rÃ© de compiler l'exemple distribuÃ© avec \laclasse. C'est le meilleur moyen de savoir si vous avez tout ce qu'il faut.
%
% L'exemple a Ã©tÃ© compilÃ© avec succÃ¨s avec \overleaf et les distributions \miktex et \texlive sous \windows, \macos et \linux. Si des erreurs surviennent avec l'exemple, typiquement, c'est que l'installation de \laclasse n'a pas Ã©tÃ© faite correctement ou que la distribution de \latex qui est utilisÃ©e est incomplÃ¨te ou dÃ©suÃ¨te.
%
%\section{Contact et support technique}\label{sec:support}
% Une personne est responsable du support de \laclasse. Vous pouvez contacter cette personne uniquement dans les situations suivantes:
%\begin{itemize}
%	\item Si des non-conformitÃ©s par rapport Ã&nbsp; la derniÃ¨re version du \protocole sont identifiÃ©es et que la section~\ref{sec:conformite} ne donne pas d'indication Ã&nbsp; ce sujet.
%	\item S'il y a des incompatibilitÃ©s avec d'autres \packages \latex et que \laclasse est la cause du problÃ¨me.
% \item Si vous avez une idÃ©e gÃ©niale afin d'amÃ©liorer \laclasse  et qu'elle serait bÃ©nÃ©fique pour les autres. Cela Ã&nbsp; condition que votre idÃ©e ne soit pas dÃ©jÃ&nbsp; rÃ©alisÃ©e par d'autres \packages \latex existants et Ã&nbsp; condition que votre idÃ©e ne soit pas une prÃ©fÃ©rence personnelle.
%\end{itemize}
%
% La personne responsable ne rÃ©pondra que pour des questions concernant les types de situations mentionnÃ©es ci-haut. Ne la contactez donc pas pour des questions reliÃ©es Ã&nbsp; l'usage gÃ©nÃ©ral de \latex ou de \bibtex, car vos questions resteront sans rÃ©ponses. L'entÃªte du fichier \laclassefile nomme une personne responsable avec un courriel afin de la contacter.
%
% \section{ConformitÃ© au protocole}\label{sec:conformite}
% Les chances sont que vous utilisez plusieurs \packages \latex pour la rÃ©daction de votre document. Soyez donc vigilant et assurez-vous qu'ils ne modifieront pas le comportement de \laclasse ou tout autre aspect couvert par le \protocole afin de remettre un document qui est conforme.
%
% La classe \laclasse est rÃ©putÃ©e Ãªtre conforme Ã&nbsp; la derniÃ¨re version du \protocole. Si vous apportez des modifications aux fichiers distribuÃ©s, vous pourriez alors remettre un document qui n'est pas conforme. Si des divergences au \protocole autres que celles mentionnÃ©es dans cette section sont identifiÃ©es, vous pouvez contacter la personne responsable (voir la section~\ref{sec:support}) en mentionnant et en expliquant les divergences. Ainsi, les correctifs nÃ©cessaires seront apportÃ©s dans les versions futures et tous bÃ©nÃ©ficieront des amÃ©liorations.
%
% Bien que \laclasse automatise et gÃ¨re la mise en forme d'un document et l'ordonnancement des pages prÃ©liminaires et de la liste des rÃ©fÃ©rences, elle ne tente pas de reproduire les fonctionnalitÃ©s de \packages existants afin de laisser un maximum de libertÃ© pour la rÃ©daction. Plus spÃ©cifiquement, les points suivants ne sont pas pris en charge.
%
%	\subsection{Minuscules et majuscules} Ã€ cause de la quantitÃ© d'exceptions qui surviennent, tout ce qui est relatif aux exigences des  minuscules et majuscules, comme pour les titres de chapitres et de sections, n'est pas gÃ©rÃ© automatiquement par \laclasse. Cela veut dire que l'auteure ou l'auteur d'un document doit s'assurer de bien respecter ce qui est demandÃ© dans le \protocole au sujet des minuscules et des majuscules.
%
%	\subsection{LÃ©gendes} La position des lÃ©gendes des tableaux et des figures, telle qu'exigÃ©e par le \protocole, n'est pas gÃ©rÃ©e automatiquement. L'auteure ou l'auteur d'un document doit s'assurer de positionner correctement les lÃ©gendes.
%
% \subsection{Sous-figures et sous-tableaux} La numÃ©rotation ainsi que la rÃ©fÃ©rence aux sous-figures et aux sous-tableaux ne sont pas gÃ©rÃ©es automatiquement par \laclasse, car plusieurs \packages \latex permettent aisÃ©ment de satisfaire les exigences du \protocole Ã&nbsp; ce sujet. Le \package \pkg{subcaption} en est un exemple. L'auteure ou l'auteur d'un document doit s'assurer de bien respecter le \protocole Ã&nbsp; ce sujet.
%
% \subsection{SystÃ¨me international d'unitÃ©s}
% Le protocole requiert que le systÃ¨me international d'unitÃ©s soit utilisÃ©. L'Ã©criture correcte des unitÃ©s est l'un des endroits oÃ¹ il y a le plus d'erreurs dans un document, car les rÃ¨gles d'Ã©critures des unitÃ©s ne sont pas bien connues. Pourtant, elles sont fixÃ©es par le \bipm qui publie des documents Ã&nbsp; ce sujet. L'usage correct des unitÃ©s n'est pas gÃ©rÃ© par \laclasse, mais plusieurs \packages \latex peuvent aider Ã&nbsp; la rÃ©daction et le respect des normes de rÃ©daction, dont \siunitx.
%
%\section{Utilisation}\label{sec:utilisation}%
% Un document basÃ© sur \laclasse est rÃ©digÃ© comme tout autre document \latex standard de type \cls{book}, car la classe \laclasse est basÃ©e sur cette classe ainsi que sur d'autres \packages standards de \latex. La classe de document \laclasse ne devrait pas interfÃ©rer avec les \packages standards de \latex et toutes les macros habituelles de \latex sont accessibles et l'utilisation de tout \package \latex est permis. La classe \laclasse tente d'imposer le minimum afin de maximiser la libertÃ© de la personne qui rÃ©dige.
%
% Ce qui suit explique l'utilisation de \laclasse et il peut Ãªtre avantageux de suivre avec l'exemple qui est distribuÃ© avec \laclasse.
%
% \subsection{Encodage}\label{sec:encodage}
% L'encodage des fichiers distribuÃ©s est \encodage, autant pour l'exemple d'utilisation que pour \laclasse. Cet encodage est maintenant l'encodage par dÃ©faut de toutes les variantes de \latex pour les fichiers en entrÃ©e. En effet, depuis la version d'avril 2018, \latex et \pdflatex prÃ©sument que l'encodage des fichiers en entrÃ©e est \encodage et il n'est donc plus nÃ©cessaire de le spÃ©cifier avec le \package \pkg{inputenc} dans le prÃ©ambule. Normalement, si vous avez une distribution Ã&nbsp; jour, le \package \pkg{inputenc} est utilisÃ© uniquement si l'encodage n'est pas \encodage, malgrÃ© que de le spÃ©cifier ne cause pas de torts. Par design, l'encodage \encodage est le seul admis par \lualatex et \xelatex et l'usage du \package \pkg{inputenc} n'a aucun effet. Bref, il est maintenant avantageux d'avoir tous les fichiers en entrÃ©e dans l'encodage \encodage.
%
% Les fontes utilisÃ©es ne sont pas imposÃ©es afin de donner la mÃªme libertÃ© que les classes standards de \latex, comme \pkg{book} et \pkg{article}. L'encodage des fontes est fixÃ© avec le \package \pkg{fontenc} dans le prÃ©ambule du document, comme tout autre document \latex.
%
%\begin{implementation}
%%-----------------------------------------------------------------------------
%%---   DECLARATION DES VARIABLES   -------------------------------------------
%%-----------------------------------------------------------------------------
\bool_new:N \g_@@_autobib_bool
\bool_new:N \g_@@_legendes_min_bool
\bool_new:N \g_@@_lignes_bool
\bool_new:N \g_@@_liste_figures_bool
\bool_new:N \g_@@_liste_tableaux_bool

\clist_new:N \g_@@_dedicace_cl
\clist_new:N \g_@@_fichiers_references_cl
\clist_new:N \g_@@_jury_codirecteurs_cl
\clist_new:N \g_@@_jury_evaluateurs_cl
\clist_new:N \g_@@_pas_jury_cl
\clist_new:N \g_@@_remerciements_cl
\clist_new:N \g_@@_specialite_cl

\int_new:N \g_@@_pages_int
\int_new:N \l_@@_tmp_int

\seq_new:N \g_@@_jury_codirecteurs_mf_seq
\seq_new:N \g_@@_jury_evaluateurs_mf_seq

\tl_new:N \g_@@_acknowledgementsname_tl
\tl_new:N \g_@@_adressname_tl
\tl_new:N \g_@@_auteur_nom_tl
\tl_new:N \g_@@_auteur_prenom_tl
\tl_new:N \g_@@_date_annee_tl
\tl_new:N \g_@@_date_mois_tl
%&lt;protocole&gt;\tl_new:N \g_@@_date_cres_tl
%&lt;protocole&gt;\tl_new:N \g_@@_date_cefg_tl
\tl_new:N \g_@@_dedicace_tl
\tl_new:N \g_@@_departement_tl
\tl_new:N \g_@@_dprdoctorat_tl
\tl_new:N \g_@@_dprmaitrise_tl
\tl_new:N \g_@@_essai_tl
\tl_new:N \g_@@_facultyname_tl
\tl_new:N \g_@@_fichier_acronymes_tl
\tl_new:N \g_@@_fichier_lexique_tl
\tl_new:N \g_@@_fichier_remerciements_tl
\tl_new:N \g_@@_fichier_resume_anglais_tl
\tl_new:N \g_@@_fichier_resume_francais_tl
\tl_new:N \g_@@_fichier_symboles_tl
\tl_new:N \g_@@_format_tl
\tl_new:N \g_@@_juryname_tl
\tl_new:N \g_@@_jury_codirname_tl
\tl_new:N \g_@@_jury_codirnamef_tl
\tl_new:N \g_@@_jury_directeur_tl
\tl_new:N \g_@@_jury_directeur_mf_tl
\tl_new:N \g_@@_jury_dirname_tl
\tl_new:N \g_@@_jury_dirnamef_tl
\tl_new:N \g_@@_jury_evalname_tl
\tl_new:N \g_@@_jury_evalnamef_tl
\tl_new:N \g_@@_langue_tl
\tl_new:N \g_@@_listacronymsname_tl
\tl_new:N \g_@@_listsymbolsname_tl
\tl_new:N \g_@@_memoire_tl
\tl_new:N \g_@@_mots_cles_anglais_tl
\tl_new:N \g_@@_mots_cles_francais_tl
\tl_new:N \g_@@_motsclesname_tl
\tl_new:N \g_@@_programme_tl
\tl_new:N \g_@@_references_engin_tl
\tl_new:N \g_@@_specialite_tl
\tl_new:N \g_@@_specialityname_tl
\tl_new:N \g_@@_style_references_tl
\tl_new:N \g_@@_these_tl
\tl_new:N \g_@@_titre_anglais_tl
\tl_new:N \g_@@_titre_francais_tl
\tl_new:N \g_@@_type_tl
\tl_new:N \g_@@_udesname_tl

%%-----------------------------------------------------------------------------
%%---   DECLARATION DES CONSTANTES   ------------------------------------------
%%-----------------------------------------------------------------------------
\int_const:Nn \c_@@_max_pages_dprdoctorat_int {40}
\int_const:Nn \c_@@_max_pages_dprmaitrise_int {25}
\int_const:Nn \c_@@_max_pages_essai_int {70}
\int_const:Nn \c_@@_max_pages_memoire_int {120}
%&lt;protocole&gt;\int_const:Nn \c_@@_max_pages_protocole_int {10000}
\int_const:Nn \c_@@_max_pages_these_int {250}

\tl_const:Nn \c_@@_female_tl {f}
\tl_const:Nn \c_@@_format_livre_tl {livre}
\tl_const:Nn \c_@@_format_simple_tl {simple}
\tl_const:Nn \c_@@_langue_english_tl {english}
\tl_const:Nn \c_@@_langue_francais_tl {francais}
\tl_const:Nn \c_@@_male_tl {m}
\tl_const:Nn \c_@@_programme_aero_tl {aerospatial}
\tl_const:Nn \c_@@_programme_chim_tl {chimique}
\tl_const:Nn \c_@@_programme_civil_tl {civil}
\tl_const:Nn \c_@@_programme_elec_tl {electrique}
\tl_const:Nn \c_@@_programme_meca_tl {mecanique}
%&lt;protocole&gt;\tl_const:Nn \c_@@_protocole_droits_tl {Tous~droits~rÃ©servÃ©s.\ FacultÃ©~de~gÃ©nie,~UniversitÃ©~de~Sherbrooke.}
%&lt;protocole&gt;\tl_const:Nn \c_@@_protocole_notice_tl {Document~adoptÃ©~Ã&nbsp;~la~FacultÃ©~de~gÃ©nie~de~l'UniversitÃ©~de~Sherbrooke~par~le~ComitÃ©~de~la~recherche~et~des~Ã©tudes~supÃ©rieures~(\g_@@_date_cres_tl)~et~le~ComitÃ©~des~Ã©tudes~de~la~facultÃ©~de~gÃ©nie~(\g_@@_date_cefg_tl).}
\tl_const:Nn \c_@@_references_biblatex_tl {biblatex}
\tl_const:Nn \c_@@_references_bibtex_tl {bibtex}
\tl_const:Nn \c_@@_type_dprdoctorat_tl {dprdoctorat}
\tl_const:Nn \c_@@_type_dprmaitrise_tl {dprmaitrise}
\tl_const:Nn \c_@@_type_essai_tl {essai}
\tl_const:Nn \c_@@_type_memoire_tl {memoire}
%&lt;protocole&gt;\tl_const:Nn \c_@@_type_protocole_tl {protocole}
\tl_const:Nn \c_@@_type_these_tl {these}

%%-----------------------------------------------------------------------------
%%---   INITIALISATION DE VARIABLES   -----------------------------------------
%%-----------------------------------------------------------------------------
\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl
\tl_gset:Nn \g_@@_style_references_tl {plain}

%% Identifie les types de documents avec dedicace (optionnelle)
\clist_gput_right:Nx \g_@@_dedicace_cl
  {\c_@@_type_essai_tl, \c_@@_type_memoire_tl, \c_@@_type_these_tl}
%% Identifie les types de documents sans jury
\clist_gput_right:Nx \g_@@_pas_jury_cl
  {\c_@@_type_essai_tl}
%% Identifie les types de documents avec remerciements (optionnels)
\clist_gput_right:Nx \g_@@_remerciements_cl
  {\c_@@_type_essai_tl, \c_@@_type_memoire_tl, \c_@@_type_these_tl}
%% Identifie les types de documents avec specialite
\clist_gput_right:Nx \g_@@_specialite_cl
  {\c_@@_type_memoire_tl, \c_@@_type_these_tl}

%%-----------------------------------------------------------------------------
%%---   MESSAGES D'ERREURS   --------------------------------------------------
%%-----------------------------------------------------------------------------
\msg_new:nnnn {udesgeniethese}{erreur_format}{Un~LaTeX~plus~rÃ©cent~est~nÃ©cessaire.~Veuillez~mettre~Ã&nbsp;~jour~votre~distribution~LaTeX.}{Le~format~2022-06-01~ou~un~plus~rÃ©cent~est~nÃ©cessaire.}

\msg_new:nnnn {udesgeniethese}{biblatex_en_trop}{Avec~l'option~bibtex,~il~ne~faut~pas~charger~le~package~biblatex.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{biblatex_manquant}{L'option~biblatex~requiert~de~charger~le~package~biblatex~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{auteur_nom_vide}{Le~nom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{auteur_prenom_vide}{Le~prenom~de~l'auteur~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Auteur~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{config_fichier_vide}{Le~fichier~pour~#1~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{config_fichiers_vides}{Les~fichiers~pour~#1~ne~sont~pas~specifies.~Specifiez-les~avec~la~cle~'#2'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{config_langue_vide}{La~langue~principale~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~cle~'langue'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{config_programme_vide}{Le~programme~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'programme'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{config_type_vide}{Le~type~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~cle~'type'~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{date_annee_vide}{L'annee~de~la~date~du~document~n'est~pas~specifiee.~Specifiez-la~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{date_mois_vide}{Le~mois~de~la~date~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\Date~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{dprdoctorat_max_pages}{La~DPR~de~doctorat~semble~longue.~Le~protocole~exige~un~maximum~de~40~pages.}{Consultez~le~protocole~de~redaction.}

\msg_new:nnnn {udesgeniethese}{dprmaitrise_max_pages}{La~DPR~de~maitrise~semble~longue.~Le~protocole~exige~un~maximum~de~25~pages.}{Consultez~le~protocole~de~redaction.}

\msg_new:nnnn {udesgeniethese}{essai_max_pages}{L'essai~semble~long.~Le~protocole~exige~un~maximum~de~70~pages.}{Consultez~le~protocole~de~redaction.}

\msg_new:nnnn {udesgeniethese}{memoire_max_pages}{Le~memoire~semble~long.~Le~protocole~exige~un~maximum~de~120~pages.}{Consultez~le~protocole~de~redaction.}

\msg_new:nnnn {udesgeniethese}{mots_cles_anglais_vide}{Les~mots-cles~anglais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{mots_cles_francais_vide}{Les~mots-cles~francais~ne~sont~pas~specifies.~Specifiez-les~avec~la~macro~\MotsClesFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{remerciements_longs}{Les~remerciements~doivent~etre~d'une~page~maximum.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{resume_anglais_long}{Le~resume~anglais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{titre_resume_mots_cles_anglais}{Le~titre,~le~resume~et~les~mots-cles~anglais~doivent~etre~donnes.~On~ne~peut~donner~l'un~sans~les~autres.}{Consultez~la~documentation.}

\msg_new:nnnn {udesgeniethese}{resume_francais_long}{Le~resume~francais~doit~etre~d'une~page~maximum,~incluant~les~mots-cles.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{these_max_pages}{La~these~semble~longue.~Le~protocole~exige~un~maximum~de~250~pages}{Consultez~le~protocole~de~redaction.}

\msg_new:nnnn {udesgeniethese}{titre_anglais_vide}{Le~titre~anglais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreAnglais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{titre_francais_vide}{Le~titre~francais~du~document~n'est~pas~specifie.~Specifiez-le~avec~la~macro~\TitreFrancais~dans~le~preambule.}{Consultez~la~documentation~de~la~classe.}

\msg_new:nnnn {udesgeniethese}{aerospatial}{Le~type~du~document~doit~etre~essai~si~le~programme~est~aerospatial.~Specifiez-le~~bon~type~dans~la~configuration~du~document.}{Consultez~la~documentation~de~la~classe.}

%\end{implementation}
%
% \subsection{Options} \label{class-options}
% Pour utiliser \laclasse, il faut spÃ©cifier son utilisation avec la macro \cs{documentclass} de \latex. La classe \laclasse a deux types d'options qui sont spÃ©cifiÃ©es dans le paramÃ¨tre optionnel de \cs{documentclass}.
%
%\begin{variable}{livre,simple}
%\begin{syntax}
% |\documentclass| \oarg{style} \{\laclassename\}
%\end{syntax}
% La valeur de \meta{style} est |livre| ou |simple|, tel que spÃ©cifiÃ© dans le \protocole. Si le paramÃ¨tre est absent, le style |livre| est utilisÃ© par dÃ©faut.
%
%\end{variable}
%
%\begin{variable}[added=2022-09-19]{bibtex,biblatex}
%\begin{syntax}
% |\documentclass| \oarg{engin-bib} \{\laclassename\}
%\end{syntax}
% La valeur de \meta{engin-bib} est |bibtex| ou |biblatex|, selon ce que vous voulez utiliser. Si rien n'est spÃ©cifiÃ©, |bibtex| est utilisÃ© par dÃ©faut.
%
% Si le choix est |bibtex|, le style bibliographique est spÃ©cifiÃ© avec le champ de configuration |style-references| et les fichiers de rÃ©fÃ©rences utilisÃ©s par |bibtex| sont ceux spÃ©cifiÃ©s avec le champ |references| (voir la section~\ref{sec:config}). La liste des rÃ©fÃ©rences est gÃ©nÃ©rÃ©e automatiquement par \laclasse avec la macro |\bibliography|.
%
% Si le choix est de |biblatex|, la personne qui rÃ©dige le document est responsable de charger le \package |biblatex| avec la macro |\usepackage| dans le prÃ©ambule, car trop de cas de figures peuvent survenir afin d'assurer un chargement correct. La liste des rÃ©fÃ©rences est gÃ©rÃ©rÃ©e automatiquement par \laclasse avec la macro |\printbibliography| et les fichiers de rÃ©fÃ©rences sont spÃ©cifiÃ©s avec le champs de configuration |references| (voir la section~\ref{sec:config}). Les fichiers de rÃ©fÃ©rences sont fournis automatiquement par \laclasse avec la macro |\addbibresource|. Le champ de configuration |style-references| est ignorÃ©, car le style est gÃ©rÃ© par la personne qui rÃ©dige avec avec l'aide de |biblatex|.
%
%\end{variable}
%\begin{implementation}
%%-----------------------------------------------------------------------------
%%---   OPTIONS DE CLASSE   ---------------------------------------------------
%%-----------------------------------------------------------------------------
\IfFormatAtLeastTF {2022-06-01}
  {}{\msg_fatal:nn{udesgeniethese}{erreur_format}}

\DeclareKeys
{
  biblatex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_biblatex_tl},
  biblatex .usage:n = load,
  bibtex .code:n = {\tl_gset_eq:NN \g_@@_references_engin_tl \c_@@_references_bibtex_tl},
  bibtex .usage:n = load,
  livre .code:n = {
    \PassOptionsToClass{twoside,openright}{book}
    \PassOptionsToPackage{twoside=true}{geometry}
    \tl_gset_eq:NN \g_@@_format_tl \c_@@_format_livre_tl
  },
  livre .usage:n = load,
  simple .code:n = {
    \PassOptionsToClass{oneside,openany}{book}
    \PassOptionsToPackage{twoside=false}{geometry}
    \tl_gset_eq:NN \g_@@_format_tl \c_@@_format_simple_tl
  },
  simple .usage:n = load,
  unknown .code:n = {\PassOptionsToClass{\CurrentOption}{book}},
}

\SetKeys{livre}

\ProcessKeyOptions


%%-----------------------------------------------------------------------------
%%---   DEPENDANCES DE CLASSE   -----------------------------------------------
%%-----------------------------------------------------------------------------
\LoadClass[letterpaper,12pt]{book}

\RequirePackage[english,french]{babel}
\RequirePackage{caption,fancyhdr,flafter,geometry,parskip,setspace}

%%-----------------------------------------------------------------------------
%%---   MACROS DE DOCUMENT (USAGER)   --------------------------------------
%%-----------------------------------------------------------------------------
%\end{implementation}
%
% \subsection{Configuration du document}\label{sec:config}
% Le \protocole a des exigences au niveau de l'ordonnancement de certaines parties ou de certains Ã©lÃ©ments de prÃ©sentation. Certaines de ces exigences sont gÃ©rÃ©es automatiquement en utilisant la macro de configuration du document, la macro |\ConfigurationDocument|. Cette macro est utilisÃ©e dans le prÃ©ambule du document. Lâ€™exemple distribuÃ© avec \laclasse montre un exemple de configuration. Vous devez Ã©videmment adapter le contenu des champs de la configuration du document pour reflÃ©ter vos besoins et les noms de vos fichiers. Il est Ã&nbsp; remarquer que chaque ligne qui spÃ©cifie un champ se termine par une virgule.
%
%\begin{function}{\ConfigurationDocument}
%\begin{syntax}
%\begin{verbatim}
% \ConfigurationDocument
% {
%   ...
% }
%\end{verbatim}
%\end{syntax}
%\end{function}
%
%\begin{variable}{langue}
%\begin{syntax}
% |langue =| \meta{valeur}
%\end{syntax}
% Ce champ spÃ©cifie la langue principale utilisÃ©e dans le document. Les choix pour \meta{valeur} sont |francais| et |english|. Il n'y a pas de valeur par dÃ©faut, ce champ doit Ãªtre spÃ©cifiÃ©.
%\end{variable}
%
%\begin{variable}{type}
%\begin{syntax}
% |type =| \meta{valeur}
%\end{syntax}
% Ce champ spÃ©cifie le type document, comme une thÃ¨se de doctorat. Les choix pour \meta{valeur} sont |dprmaitrise|, |dprdoctorat|, |essai|, |memoire| et |these|. Il n'y a pas de valeur par dÃ©faut, ce champ doit Ãªtre spÃ©cifiÃ©.
%\end{variable}
%
%\begin{variable}{programme}
%\begin{syntax}
% |programme =| \meta{valeur}
%\end{syntax}
% Ce champ spÃ©cifie le programme d'Ã©tude. Les choix pour \meta{valeur} sont |electrique|, |mecanique|, |aerospatial|, |chimique| et |civil|. Il n'y a pas de valeur par dÃ©faut, ce champ doit Ãªtre spÃ©cifiÃ©.
%\end{variable}
%
%\begin{variable}{lignes}
%\begin{syntax}
% |lignes =| \meta{valeur}
%\end{syntax}
% Ce champ spÃ©cifie si des lignes sont prÃ©sentes dans l'entÃªte et le pied de page du document. Les choix pour \meta{valeur} sont |true| et |false|. Si ce champ est omis, la valeur par dÃ©faut est |true|. Il est possible aussi de spÃ©cifier uniquement |lignes| pour spÃ©cifier |true|, comme dans l'exemple au dÃ©but de la section.
%\end{variable}
%
%\begin{variable}{liste-figures,liste-tableaux}
%\begin{syntax}
% |liste-figures =| \meta{valeur}
% |liste-tableaux =| \meta{valeur}
%\end{syntax}
% Ces champs spÃ©cifient respectivement si une liste des figures et une liste des tableaux doivent Ãªtre gÃ©nÃ©rÃ©es. Les choix pour \meta{valeur} sont |true| et |false|. Si le champ est omis, la valeur par dÃ©faut est |true|. Il est possible aussi de spÃ©cifier uniquement |liste-figures| ou |liste-tableaux| pour spÃ©cifier |true|, comme dans l'exemple au dÃ©but de la section.
%\end{variable}
%
%\begin{variable}{fichier-resume-francais,fichier-resume-anglais}
%\begin{syntax}
% |fichier-resume-francais =| \marg{valeur}
% |fichier-resume-anglais =| \marg{valeur}
%\end{syntax}
% Ces champs spÃ©cifient respectivement le nom du fichier contenant le rÃ©sumÃ© franÃ§ais et le rÃ©sumÃ© anglais. \meta{valeur} est un nom de fichier et l'extension |.tex| est assumÃ©. Si, tout en respectant le \protocole, un de ces rÃ©sumÃ©s n'a pas Ã&nbsp; Ãªtre fourni, le champ correspondant peut Ãªtre omis.
%\end{variable}
%
%\begin{variable}{fichier-remerciements,fichier-lexique,fichier-symboles,fichier-acronymes}
%\begin{syntax}
% |fichier-remerciements =| \marg{valeur}
% |fichier-lexique =| \marg{valeur}
% |fichier-symboles =| \marg{valeur}
% |fichier-acronymes =| \marg{valeur}
%\end{syntax}
% Ces champs spÃ©cifient respectivement le nom du fichier contenant les remerciements, le lexique, la liste des symboles et la liste des acronymes. \meta{valeur} est un nom de fichier et l'extension |.tex| est assumÃ©. Si, tout en respectant le \protocole, une de ces parties prÃ©liminaires n'est pas donnÃ©e, le champ correspondant peut Ãªtre omis.
%\end{variable}
%
%\begin{variable}{fichiers-references}
%\begin{syntax}
% |fichiers-references =| \marg{valeur}
%\end{syntax}
% Ce champ spÃ©cifie les fichiers de bibliographie \bibtex Ã&nbsp; Ãªtre inclus pour la construction de la liste des rÃ©fÃ©rences par \bibtex ou un autre utilitaire Ã©quivalent. La liste des fichiers Ã&nbsp; utiliser est spÃ©cifiÃ©e par \meta{valeur}, une liste de noms de fichiers. Chaque nom de fichier est sÃ©parÃ© par une virgule. Ce champ ne doit pas contenir d'espaces superflus. D'autres dÃ©tails au sujet des rÃ©fÃ©rences bibliographiques sont donnÃ©s dans la section~\ref{sec:refbib}.
%\end{variable}
%
%\begin{variable}[added=2022-09-19]{style-references}
%\begin{syntax}
% |style-references =| \marg{valeur}
%\end{syntax}
% Ce champ spÃ©cifie le style bibliographique Ã&nbsp; utiliser pour la construction de la liste des rÃ©fÃ©rences, tel que requis par \bibtex ou un autres engins bibliographiques Ã©quivalents. Comme ce champ spÃ©cifie le style Ã&nbsp; utiliser, il n'est pas nÃ©cessaire de mettre la macro |\bibliographystyle| dans le prÃ©ambule, car la classe \laclasse automatise cette Ã©tape. Ce champ est ignorÃ©, si l'option de classe |biblatex| a Ã©tÃ© spÃ©cifiÃ© (voir la section~\ref{class-options}). Consultez le protocole au sujet des styles bibliographiques. D'autres dÃ©tails au sujet des rÃ©fÃ©rences bibliographiques sont donnÃ©s dans la section~\ref{sec:refbib}.
%\end{variable}
%
%\begin{variable}[added=2023-08-29]{auto-bib}
%\begin{syntax}
% |auto-bib =| \meta{valeur}
%\end{syntax}
% Ce champ est utilitaire et il est ignorÃ©, sauf si l'option |biblatex| de classe a Ã©tÃ© spÃ©cifiÃ© (voir section~\ref{class-options}). Les choix pour \meta{valeur} sont |true| et |false|. Si ce champ est |true|, l'extension |bib| est ajoutÃ©e automatiquement Ã&nbsp; tous les fichiers spÃ©cifiÃ©s avec le champ |fichiers-references|. Ceci peut Ãªtre pratique pour uniformiser les noms dans la liste des fichiers que \bibtex ou |biblatex| soit utilisÃ©. Si la valeur de ce champ est |false|, rien n'est fait. Si ce champ est omis, la valeur par dÃ©faut est |false|. Il est possible aussi de spÃ©cifier uniquement |auto-bib| pour spÃ©cifier |true|.
%\end{variable}
%
%
%\begin{variable}[added=2023-08-30]{legendes-min}
%\begin{syntax}
% |legendes-min =| \meta{valeur}
%\end{syntax}
% Ce champ permet de spÃ©cifier si les mots \textit{figure} et \textit{tableau} des lÃ©gendes sont Ã©crits en style \textit{minuscule} ou non. Si ce champ est |true|, alors seule la premiÃ¨re lettre du mot est en majuscule et ils sont Ã©crits comme suit: Figure et Tableau. Si ce champ est |false|, alors le style est \textit{petites majuscules} et ils sont Ã©crits comme suit: \textsc{Figure} et \textsc{Tableau}. La valeur par dÃ©faut de ce champ est |false|.
%\end{variable}
%\begin{implementation}
\DeclareDocumentCommand \ConfigurationDocument { m }
{ \keys_set:nn { udes-genie-these } { #1 } }

\keys_define:nn {udes-genie-these}
{
  langue .choices:nn = {francais,english}
    {\tl_gset_eq:NN \g_@@_langue_tl \l_keys_choice_tl},
  langue .value_required:n = true,
%&lt;these&gt;  type .choices:nn = {dprmaitrise,dprdoctorat,essai,memoire,these}
%&lt;protocole&gt;  type .choices:nn = {protocole}
    {\tl_gset_eq:NN \g_@@_type_tl \l_keys_choice_tl},
  type .value_required:n = true,
  programme .choices:nn = {electrique,mecanique,aerospatial,chimique,civil}
    {\tl_gset_eq:NN \g_@@_programme_tl \l_keys_choice_tl},
  programme .value_required:n = true,
  liste-figures .bool_gset:N = \g_@@_liste_figures_bool,
  liste-figures .default:n = true,
  liste-tableaux .bool_gset:N = \g_@@_liste_tableaux_bool,
  liste-tableaux .default:n = true,
  lignes .bool_gset:N = \g_@@_lignes_bool,
  lignes .default:n = true,
  fichier-resume-francais .tl_gset:N = \g_@@_fichier_resume_francais_tl,
  fichier-resume-francais .value_required:n = true,
  fichier-resume-anglais .tl_gset:N = \g_@@_fichier_resume_anglais_tl,
  fichier-resume-anglais .value_required:n = true,
  fichier-remerciements .tl_gset:N = \g_@@_fichier_remerciements_tl,
  fichier-remerciements .value_required:n = true,
  fichier-lexique .tl_gset:N = \g_@@_fichier_lexique_tl,
  fichier-lexique .value_required:n = true,
  fichier-symboles .tl_gset:N = \g_@@_fichier_symboles_tl,
  fichier-symboles .value_required:n = true,
  fichier-acronymes .tl_gset:N = \g_@@_fichier_acronymes_tl,
  fichier-acronymes .value_required:n = true,
  fichiers-references .clist_gset:N = \g_@@_fichiers_references_cl,
  fichiers-references .value_required:n = true,
  style-references .tl_gset:N = \g_@@_style_references_tl,
  style-references .value_required:n = true,
  auto-bib .bool_gset:N = \g_@@_autobib_bool,
  auto-bib .default:n = true,
  legendes-min .bool_gset:N = \g_@@_legendes_min_bool,
  legendes-min .default:n = true,
}

%\end{implementation}
%
% \subsection{Informations gÃ©nÃ©rales}\label{sec:macros}
% Les macros suivantes sont utilisÃ©es dans le prÃ©ambule du document.
%
%\begin{function}{\Auteur}
%\begin{syntax}
% |\Auteur| \marg{prÃ©nom} \marg{nom}
%\end{syntax}
% L'auteure ou l'auteur du document sur la page titre est spÃ©cifiÃ© avec cette macro. La macro a deux paramÃ¨tres qui spÃ©cifient le prÃ©nom et le nom de l'auteure ou l'auteur.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \Auteur {mm}
{
  \tl_gset:Nn \g_@@_auteur_prenom_tl {#1}
  \tl_gset:Nn \g_@@_auteur_nom_tl {#2}
}

%\end{implementation}
%
%\begin{function}{\Date}
%\begin{syntax}
% |\Date| \marg{mois} \marg{annÃ©e}
%\end{syntax}
% La date sur la page titre est spÃ©cifiÃ©e avec cette macro. La macro a deux paramÃ¨tres qui spÃ©cifient le mois et l'annÃ©e.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \Date {mm}
{
  \tl_gset:Nn \g_@@_date_mois_tl {#1}
  \tl_gset:Nn \g_@@_date_annee_tl {#2}
}

%\end{implementation}
%
%\begin{function}{\Dedicace}
%\begin{syntax}
% |\Dedicace| \marg{texte}
%\end{syntax}
% Le texte de la dÃ©dicace est spÃ©cifiÃ© avec cette macro. La macro a un seul paramÃ¨tre et il permet de spÃ©cifier le texte de la dÃ©dicace, typiquement une phrase courte.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \Dedicace {+m}
{ \tl_gset:Nn \g_@@_dedicace_tl {#1} }

%\end{implementation}
%
%\begin{function}{\Directeur,\Directrice}
%\begin{syntax}
% |\Directeur| \marg{prÃ©nom} \marg{nom}
% |\Directrice| \marg{prÃ©nom} \marg{nom}
%\end{syntax}
% La directrice principale ou le directeur principal de recherche est spÃ©cifiÃ© avec cette macro. Ces macros ont deux paramÃ¨tres qui spÃ©cifient le prÃ©nom et le nom de la directrice ou du directeur.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \Directeur {mm}
{
  \tl_gset:Nn \g_@@_jury_directeur_tl {#1\ #2}
  \tl_gset_eq:NN \g_@@_jury_directeur_mf_tl \c_@@_male_tl
}

\DeclareDocumentCommand \Directrice {mm}
{
  \tl_gset:Nn \g_@@_jury_directeur_tl {#1\ #2}
  \tl_gset_eq:NN \g_@@_jury_directeur_mf_tl \c_@@_female_tl
}

%\end{implementation}
%
%\begin{function}{\Codirecteur,\Codirectrice}
%\begin{syntax}
% |\Codirecteur| \marg{prÃ©nom} \marg{nom}
% |\Codirectrice| \marg{prÃ©nom} \marg{nom}
%\end{syntax}
% Les codirectrices et les codirecteurs de recherche sont spÃ©cifiÃ©s avec ces macros. Ces macros ont deux paramÃ¨tres qui spÃ©cifient le prÃ©nom et le nom de la codirectrice ou du codirecteur. Afin d'ajouter Ã&nbsp; la liste toutes les codirectrices et tous les codirecteurs, il faut utiliser ces macros autant de fois qu'il y a de codirectrices et de codirecteurs.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \Codirecteur {mm}
{
  \clist_gput_right:Nn \g_@@_jury_codirecteurs_cl {#1\ #2}
  \seq_gput_right:NV \g_@@_jury_codirecteurs_mf_seq \c_@@_male_tl
}

\DeclareDocumentCommand \Codirectrice {mm}
{
  \clist_gput_right:Nn \g_@@_jury_codirecteurs_cl {#1\ #2}
  \seq_gput_right:NV \g_@@_jury_codirecteurs_mf_seq \c_@@_female_tl
}

%\end{implementation}
%
%\begin{function}{\Evaluateur,\Evaluatrice}
%\begin{syntax}
% |\Evaluateur| \marg{prÃ©nom} \marg{nom}
% |\Evaluatrice| \marg{prÃ©nom} \marg{nom}
%\end{syntax}
% Les Ã©valuatrices et les Ã©valuateurs du jury sont spÃ©cifiÃ©s avec ces macros. Ces macros ont deux paramÃ¨tres qui spÃ©cifient le prÃ©nom et le nom d'une Ã©valuatrice ou d'un Ã©valuateur. Afin d'ajouter Ã&nbsp; la liste toutes les Ã©valuatrices et tous les Ã©valuateurs, il faut utiliser ces macros autant de fois qu'il y a d'Ã©valuatrices et d'Ã©valuateurs.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \Evaluateur {mm}
{
  \clist_gput_right:Nn \g_@@_jury_evaluateurs_cl {#1\ #2}
  \seq_gput_right:NV \g_@@_jury_evaluateurs_mf_seq \c_@@_male_tl
}

\DeclareDocumentCommand \Evaluatrice {mm}
{
  \clist_gput_right:Nn \g_@@_jury_evaluateurs_cl {#1\ #2}
  \seq_gput_right:NV \g_@@_jury_evaluateurs_mf_seq \c_@@_female_tl
}

%\end{implementation}
%
%\begin{function}{\MotsClesAnglais,\MotsClesFrancais}
%\begin{syntax}
% |\MotsClesAnglais| \marg{keywords}
% |\MotsClesFrancais| \marg{mots-clÃ©s}
%\end{syntax}
% Les mot-clÃ©s des rÃ©sumÃ©s anglais et franÃ§ais sont spÃ©cifiÃ©s avec ces macros. Ces macros ont un seul paramÃ¨tre et il spÃ©cifie la liste des mots-clÃ©s. Si, tout en respectant le \protocole des mots-clÃ©s dans une langue ne sont pas requis, alors l'usage de la macro correspondante peut Ãªtre omis.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \MotsClesAnglais {m}
{ \tl_gset:Nn \g_@@_mots_cles_anglais_tl {#1} }

\DeclareDocumentCommand \MotsClesFrancais {m}
{ \tl_gset:Nn \g_@@_mots_cles_francais_tl {#1} }

%\end{implementation}
%
%\begin{function}{\TitreAnglais,\TitreFrancais}
%\begin{syntax}
% |\TitreAnglais| \marg{title}
% |\TitreFrancais| \marg{titre}
%\end{syntax}
% Les titres anglais et franÃ§ais du document sont spÃ©cifiÃ©s avec ces macros. Ces macros ont un seul paramÃ¨tre qui spÃ©cifie le texte du titre. Si, tout en respectant le \protocole le titre dans une langue n'est pas requis, alors l'usage de la macro correspondante peut Ãªtre omis.
%\end{function}
%
%\begin{implementation}
\DeclareDocumentCommand \TitreAnglais {+m}
{ \tl_gset:Nn \g_@@_titre_anglais_tl {#1} }

\DeclareDocumentCommand \TitreFrancais {+m}
{ \tl_gset:Nn \g_@@_titre_francais_tl {#1} }

%\end{implementation}
%
%\subsection{Document multilingue}\label{sec:multi}
%
% Certains documents sont Ã©crits avec des parties en franÃ§ais et d'autres en anglais. C'est souvent le cas avec un mÃ©moire ou une thÃ¨se par articles oÃ¹, par exemple, les articles insÃ©rÃ©s sont Ã©crits en anglais alors que le reste du document est Ã©crit en franÃ§ais.
%
% La gestion du passage d'une langue Ã&nbsp; une autre dans les parties principales est laissÃ©e Ã&nbsp; la personne qui rÃ©dige le document. Cependant, la classe \laclasse est basÃ©e, entre autres, sur le \package \babel qui permet de gÃ©rer des documents multilingues. Pour plus de dÃ©tail sur le passage d'une langue Ã&nbsp; une autre dans un document, la lecture de la documentation de \babel est suggÃ©rÃ©e. Avec un bon usage des macros de \babel, la typographie sera ajustÃ©e en accord avec la langue de ces diffÃ©rentes parties du document.
%
%\subsection{RÃ©fÃ©rences bibliographiques}\label{sec:refbib}
% L'utilisation de \bibtex, ou autre utilitaires similaires, avec \laclasse est Ã©videmment possible.
%
% Le style bibliographique est spÃ©cifiÃ© dans le document avec le champ |style-references| de la configuration du document et les fichiers de rÃ©fÃ©rences (fichiers |.bib|) sont spÃ©cifiÃ©s avec le champ |fichiers-references|. Il est important de noter que le style bibliographique choisi doit respecter les exigences du \protocole. La section~\ref{sec:config} discute de ces champs et la section~\ref{class-options} discute aussi des options pour \bibtex et |biblatex|.
%
%\begin{implementation}
%&lt;*protocole&gt;
\DeclareDocumentCommand \DateCRES {m}
{ \tl_gset:Nn \g_@@_date_cres_tl {#1} }

\DeclareDocumentCommand \DateCEFG {m}
{ \tl_gset:Nn \g_@@_date_cefg_tl {#1} }

%&lt;/protocole&gt;
%%-----------------------------------------------------------------------------
%%---   MISE EN PAGE   --------------------------------------------------------
%%-----------------------------------------------------------------------------
\setlength{\parskip}{1.5ex plus0.25ex minus0ex}
\setlength{\parindent}{0em}
\clubpenalty=10000
\widowpenalty=10000
\geometry{letterpaper,hmargin={2.5cm,2.5cm},vmargin={2.5cm,2.5cm},
  foot=1.25cm,head=0.9cm,headsep=0.35cm,bindingoffset=0.5cm}
\captionsetup[table]{labelsep=quad,textformat=simple,font=normal,margin=5ex,position=top,skip=0.5ex}
\captionsetup[figure]{labelsep=quad,textformat=simple,font=normal,margin=5ex,position=bottom,skip=1ex}
\frenchsetup{ItemLabels=\textendash}

%%-----------------------------------------------------------------------------
%%---   REDEFINITION MACROS STANDARDS   ------------------------------------
%%-----------------------------------------------------------------------------
\renewcommand*{\appendix}
{
  \par\singlespacing
  \setcounter{chapter}{0}
  \setcounter{section}{0}
  \renewcommand*{\chaptername}{\appendixname}
  \renewcommand*{\thechapter}{\Alph{chapter}}
  \int_gset:Nn \g_@@_pages_int {\value{page}}
}

\renewcommand*{\subsubsection}{\@startsection{subsubsection}{3}{0pt}
  {-0.3ex plus-0.03ex minus0ex}{0.15ex plus 0.015ex minus0ex}{\normalfont\normalsize\sffamily\bfseries}}

\renewcommand*{\subsection}{\@startsection{subsection}{2}{0pt}
  {-0.6ex plus-0.06ex minus0ex}{0.3ex plus0.03ex minus0ex}{\normalfont\large\sffamily\bfseries}}

\renewcommand*{\section}{\@startsection{section}{1}{0pt}
  {-1.2ex plus-0.12ex minus0ex}{0.6ex plus0.06ex minus0ex}{\normalfont\Large\sffamily\bfseries}}

\renewcommand*{\chapter}
{
  \if@openright\cleardoublepage\else\clearpage\fi
  \thispagestyle{chapitre}
  \global\@topnum\z@
  \@afterindentfalse
  \secdef\@@_chapter\@@_schapter
}

%%-----------------------------------------------------------------------------
%%---   MACROS INTERNES   --------------------------------------------------
%%-----------------------------------------------------------------------------
\fancypagestyle{chapitre}
{\fancyhf{} \cfoot{\thepage} \renewcommand{\headrulewidth}{0pt}}

\newcommand*{\@@_chapter}[2][default]
{
  \ifnum \c@secnumdepth &gt;\m@ne
  \if@mainmatter
  \refstepcounter{chapter}
  \typeout{\chaptername\space\thechapter.}
  \addcontentsline{toc}{chapter}{\protect\numberline{\thechapter}#1}
  \else
  \addcontentsline{toc}{chapter}{\protect\numberline#1}
  \fi
  \else
  \addcontentsline{toc}{chapter}{\protect\numberline#1}
  \fi
  \chaptermark{#1}
  \addtocontents{lof}{\protect\addvspace{10\p@}}
  \addtocontents{lot}{\protect\addvspace{10\p@}}
  \if@twocolumn
  \@topnewpage[\@@_makechapterhead{#2}]
  \else
  \@@_makechapterhead{#2}
  \@afterheading
  \fi
}

\newcommand*{\@@_makechapterhead}[1]
{
  \group_begin:
  \parindent \z@ \normalfont % \raggedright
  \ifnum \c@secnumdepth &gt;\m@ne
  \if@mainmatter
  \LARGE\sffamily\bfseries \chaptername\space \thechapter
  \par\nobreak
  \vskip 0\p@
  \fi
  \fi
  \interlinepenalty\@M
  \LARGE\sffamily\bfseries #1 \par\nobreak
  \vskip 30\p@
  \group_end:
}

\newcommand*{\@@_schapter}[1]
{
  \if@twocolumn
  \@topnewpage[\@@_makeschapterhead{#1}]
  \else
  \@@_makeschapterhead{#1}
  \@afterheading
  \fi
}

\newcommand*{\@@_makeschapterhead}[1]
{
  \group_begin:
  \parindent \z@ \normalfont %\raggedright
  \vskip 0\p@
  \interlinepenalty\@M
  \LARGE\sffamily\bfseries #1 \par\nobreak
  \vskip 30\p@
  \group_end:
}

\cs_new:Npn \@@_caption_fmt #1 { #1 }

\cs_new:Npn \@@_setup_captions
{
  \addto\captionsfrench
  {
    \tl_gset:Nn \contentsname {TABLE~DES~MATIÃˆRES}
    \tl_gset:Nn \listfigurename {LISTE~DES~FIGURES}
    \tl_gset:Nn \listtablename {LISTE~DES~TABLEAUX}
    \tl_gset:Nn \chaptername {CHAPITRE}
    \tl_gset:Nn \bibname {LISTE~DES~RÃ‰FÃ‰RENCES}
    \tl_gset:Nn \appendixname {ANNEXE}
    \tl_gset:Nn \partname {PARTIE}
    \tl_gset:Nn \figurename {Figure}
    \tl_gset:Nn \tablename {Tableau}
    \tl_gset:Nn \glossaryname {LEXIQUE}
    \tl_gset:Nn \indexname {INDEX}
    \tl_gset:Nn \abstractname {RÃ‰SUMÃ‰}
    \tl_gset:Nn \refname {LISTE~DES~RÃ‰FÃ‰RENCES}
    \tl_gset:Nn \prefacename {PRÃ‰FACE}
    \tl_gset:Nn \CaptionSeparator {~~}
    \tl_gset:Nn \g_@@_listsymbolsname_tl {LISTE~DES~SYMBOLES}
    \tl_gset:Nn \g_@@_listacronymsname_tl {LISTE~DES~ACRONYMES}
    \tl_gset:Nn \g_@@_acknowledgementsname_tl {REMERCIEMENTS}
    \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÃ‰~DE~SHERBROOKE}
    \tl_gset:Nn \g_@@_facultyname_tl {FacultÃ©~de~gÃ©nie}
    \tl_gset:Nn \g_@@_specialityname_tl {SpÃ©cialitÃ©~:~}
    \tl_gset:Nn \g_@@_juryname_tl {MEMBRES~DU~JURY}
    \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(QuÃ©bec)~Canada}
    \tl_gset:Nn \g_@@_motsclesname_tl {Mots-clÃ©s~:}
    \tl_gset:Nn \g_@@_jury_codirname_tl {Codirecteur}
    \tl_gset:Nn \g_@@_jury_codirnamef_tl {Codirectrice}
    \tl_gset:Nn \g_@@_jury_dirname_tl {Directeur}
    \tl_gset:Nn \g_@@_jury_dirnamef_tl {Directrice}
    \tl_gset:Nn \g_@@_jury_evalname_tl {Ã‰valuateur}
    \tl_gset:Nn \g_@@_jury_evalnamef_tl {Ã‰valuatrice}
  }

  \addto\captionsenglish
  {
    \tl_gset:Nn \contentsname {TABLE~OF~CONTENTS}
    \tl_gset:Nn \listfigurename {LIST~OF~FIGURES}
    \tl_gset:Nn \listtablename {LIST~OF~TABLES}
    \tl_gset:Nn \chaptername {CHAPTER}
    \tl_gset:Nn \bibname {LIST~OF~REFERENCES}
    \tl_gset:Nn \appendixname {APPENDIX}
    \tl_gset:Nn \partname {PART}
    \tl_gset:Nn \figurename {\_@@_caption_fmt{Figure}}
    \tl_gset:Nn \tablename {\_@@_caption_fmt{Table}}
    \tl_gset:Nn \glossaryname {GLOSSARY}
    \tl_gset:Nn \indexname {INDEX}
    \tl_gset:Nn \abstractname {ABSTRACT}~
    \tl_gset:Nn \refname {LIST~OF~REFERENCES}
    \tl_gset:Nn \prefacename {PREFACE}
    \tl_gset:Nn \CaptionSeparator {~~}
    \tl_gset:Nn \g_@@_listsymbolsname_tl {LIST~OF~SYMBOLS}
    \tl_gset:Nn \g_@@_listacronymsname_tl {LIST~OF~ACRONYMS}
    \tl_gset:Nn \g_@@_acknowledgementsname_tl {ACKNOWLEDGEMENTS}
    \tl_gset:Nn \g_@@_udesname_tl {UNIVERSITÃ‰~DE~SHERBROOKE}
    \tl_gset:Nn \g_@@_facultyname_tl {FacultÃ©~de~gÃ©nie}
    \tl_gset:Nn \g_@@_specialityname_tl {SpecialitÃ©:~}
    \tl_gset:Nn \g_@@_juryname_tl {JURY~MEMBERS}
    \tl_gset:Nn \g_@@_adressname_tl {Sherbrooke~(QuÃ©bec)~Canada}
    \tl_gset:Nn \g_@@_motsclesname_tl {Keywords:}
    \tl_gset:Nn \g_@@_jury_codirname_tl {Co-supervisor}
    \tl_gset:Nn \g_@@_jury_codirnamef_tl {Co-supervisor}
    \tl_gset:Nn \g_@@_jury_dirname_tl {Supervisor}
    \tl_gset:Nn \g_@@_jury_dirnamef_tl {Supervisor} %Directress
    \tl_gset:Nn \g_@@_jury_evalname_tl {Examiner} %Internal et external
    \tl_gset:Nn \g_@@_jury_evalnamef_tl {Examiner} %Internal et external
  }
}

\cs_new:Npn \@@_validation
{
  \tl_if_blank:VT \g_@@_fichier_resume_francais_tl
  { \tl_gclear:N \g_@@_fichier_resume_francais_tl }

  \tl_if_blank:VT \g_@@_fichier_resume_anglais_tl
  { \tl_gclear:N \g_@@_fichier_resume_anglais_tl }

  \tl_if_blank:VT \g_@@_fichier_remerciements_tl
  { \tl_gclear:N \g_@@_fichier_remerciements_tl }

  \tl_if_blank:VT \g_@@_fichier_lexique_tl
  { \tl_gclear:N \g_@@_fichier_lexique_tl }

  \tl_if_blank:VT \g_@@_fichier_symboles_tl
  { \tl_gclear:N \g_@@_fichier_symboles_tl }

  \tl_if_blank:VT \g_@@_fichier_acronymes_tl
  { \tl_gclear:N \g_@@_fichier_acronymes_tl }

  \tl_if_blank:VT \g_@@_titre_francais_tl
  { \tl_gclear:N \g_@@_titre_francais_tl }

  \tl_if_blank:VT \g_@@_titre_anglais_tl
  { \tl_gclear:N \g_@@_titre_anglais_tl }

  \tl_if_blank:VT \g_@@_auteur_nom_tl
  { \tl_gclear:N \g_@@_auteur_nom_tl }

  \tl_if_blank:VT \g_@@_auteur_prenom_tl
  { \tl_gclear:N \g_@@_auteur_prenom_tl }

  \tl_if_blank:VT \g_@@_date_mois_tl
  { \tl_gclear:N \g_@@_date_mois_tl }

  \tl_if_blank:VT \g_@@_date_annee_tl
  { \tl_gclear:N \g_@@_date_annee_tl }

  \tl_if_blank:VT \g_@@_jury_directeur_tl
  { \tl_gclear:N \g_@@_jury_directeur_tl }

  \tl_if_blank:VT \g_@@_dedicace_tl
  { \tl_gclear:N \g_@@_dedicace_tl }

  \tl_if_blank:VT \g_@@_mots_cles_francais_tl
  { \tl_gclear:N \g_@@_mots_cles_francais_tl }

  \tl_if_blank:VT \g_@@_mots_cles_anglais_tl
  { \tl_gclear:N \g_@@_mots_cles_anglais_tl }

  \tl_if_empty:NT \g_@@_langue_tl
  { \msg_error:nn {udesgeniethese}{config_langue_vide} }

  \tl_if_empty:NT \g_@@_type_tl
  { \msg_error:nn {udesgeniethese}{config_type_vide}{type} }

%&lt;these&gt;  \tl_if_empty:NT \g_@@_programme_tl
%&lt;these&gt;  { \msg_error:nn {udesgeniethese}{config_programme_vide}{type} }
%&lt;these&gt;
  \clist_if_empty:NT \g_@@_fichiers_references_cl
  { \msg_error:nnnn {udesgeniethese}{config_fichiers_vides}{la~bibliographie}{fichiersReferences} }

  \tl_if_empty:NT \g_@@_auteur_nom_tl
  { \msg_error:nn {udesgeniethese}{auteur_nom_vide} }

  \tl_if_empty:NT \g_@@_auteur_prenom_tl
  { \msg_error:nn {udesgeniethese}{auteur_prenom_vide} }

  \tl_if_empty:NT \g_@@_date_annee_tl
  { \msg_error:nn {udesgeniethese}{date_annee_vide} }

  \tl_if_empty:NT \g_@@_date_mois_tl
  { \msg_error:nn {udesgeniethese}{date_mois_vide} }

  \token_case_meaning:Nn \g_@@_langue_tl
  {
    \c_@@_langue_francais_tl
    {
      \tl_if_empty:NT \g_@@_titre_francais_tl
        { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
%&lt;*these&gt;
      \tl_if_empty:NT \g_@@_mots_cles_francais_tl
        { \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }

      \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
        { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }

      \int_zero:N \l_tmpa_int
      \tl_if_empty:NF \g_@@_titre_anglais_tl
        { \int_incr:N \l_tmpa_int }
      \tl_if_empty:NF \g_@@_fichier_resume_anglais_tl
        { \int_incr:N \l_tmpa_int }
      \tl_if_empty:NF \g_@@_mots_cles_anglais_tl
        { \int_incr:N \l_tmpa_int }
      \int_case:nnF { \l_tmpa_int }
      {  {0}{}{3}{} }
      {
        \msg_error:nn {udesgeniethese}{titre_resume_mots_cles_anglais}
        \tl_gclear:N \g_@@_fichier_resume_anglais_tl % resume pas genere
      }
    }
    \c_@@_langue_english_tl
    {
      \tl_if_empty:NT \g_@@_titre_francais_tl
      { \msg_error:nn {udesgeniethese}{titre_francais_vide} }
      \tl_if_empty:NT \g_@@_mots_cles_francais_tl
      { \msg_error:nn {udesgeniethese}{mots_cles_francais_vide} }
      \tl_if_empty:NT \g_@@_fichier_resume_francais_tl
      { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~francais}{fichierResumeFrancais} }
      \tl_if_empty:NT \g_@@_titre_anglais_tl
      { \msg_error:nn {udesgeniethese}{titre_anglais_vide} }
      \tl_if_empty:NT \g_@@_mots_cles_anglais_tl
      { \msg_error:nn {udesgeniethese}{mots_cles_anglais_vide} }
      \tl_if_empty:NT \g_@@_fichier_resume_anglais_tl
      { \msg_error:nnnn {udesgeniethese}{config_fichier_vide}{le~resume~anglais}{fichierResumeAnglais} }
%&lt;/these&gt;
    }
  }
}

\cs_new:Npn \@@_setup_electrique
{
  \tl_gset:Nn \g_@@_departement_tl
    {DÃ©partement~de~gÃ©nie~Ã©lectrique~et~de~gÃ©nie~informatique}
  \tl_gset:Nn \g_@@_specialite_tl
    {gÃ©nie~Ã©lectrique}
  \tl_gset:Nn \g_@@_essai_tl
    {GEI~808~Essai}
  \tl_gset:Nn \g_@@_dprmaitrise_tl
    {GEI~727~DÃ©finition~du~projet~de~recherche}
  \tl_gset:Nn \g_@@_dprdoctorat_tl
    {SCA~772~DÃ©finition~du~projet~de~recherche~au~doctorat}
  \tl_gset:Nn \g_@@_memoire_tl
    {MÃ©moire~de~maitrise}
  \tl_gset:Nn \g_@@_these_tl
    {ThÃ¨se~de~doctorat}
}

\cs_new:Npn \@@_setup_mecanique
{
  \tl_gset:Nn \g_@@_departement_tl
    {DÃ©partement~de~gÃ©nie~mÃ©canique}
  \tl_gset:Nn \g_@@_specialite_tl
    {gÃ©nie~mÃ©canique}
  \tl_gset:Nn \g_@@_essai_tl
    {GMC~808~Essai}
  \tl_gset:Nn \g_@@_dprmaitrise_tl
    {GMC~727~DÃ©finition~du~projet~de~recherche}
  \tl_gset:Nn \g_@@_dprdoctorat_tl
    {SCA~772~DÃ©finition~du~projet~de~recherche~au~doctorat}
  \tl_gset:Nn \g_@@_memoire_tl
    {MÃ©moire~de~maitrise}
  \tl_gset:Nn \g_@@_these_tl
    {ThÃ¨se~de~doctorat}
}

\cs_new:Npn \@@_setup_aerospatial
{
  \@@_setup_mecanique
  \tl_gset:Nn \g_@@_essai_tl
    {GMC~809~Projet~en~gÃ©nie~aÃ©rospatial}
  \tl_if_eq:NNF \g_@@_type_tl \c_@@_type_essai_tl
    {\msg_error:nn {udesgeniethese}{aerospatial}}
}

\cs_new:Npn \@@_setup_chimique
{
  \tl_gset:Nn \g_@@_departement_tl
    {DÃ©partement~de~gÃ©nie~chimique~et~de~gÃ©nie~biotechnologique}
  \tl_gset:Nn \g_@@_specialite_tl
    {gÃ©nie~chimique}
  \tl_gset:Nn \g_@@_essai_tl
    {GCH~808~Essai}
  \tl_gset:Nn \g_@@_dprmaitrise_tl
    {GCH~727~DÃ©finition~du~projet~de~recherche}
  \tl_gset:Nn \g_@@_dprdoctorat_tl
    {SCA~772~DÃ©finition~du~projet~de~recherche~au~doctorat}
  \tl_gset:Nn \g_@@_memoire_tl
    {MÃ©moire~de~maitrise}
  \tl_gset:Nn \g_@@_these_tl
    {ThÃ¨se~de~doctorat}
}

\cs_new:Npn \@@_setup_civil
{
  \tl_gset:Nn \g_@@_departement_tl
    {DÃ©partement~de~gÃ©nie~civil}
  \tl_gset:Nn \g_@@_specialite_tl
    {gÃ©nie~civil}
  \tl_gset:Nn \g_@@_essai_tl
    {GCI~808~Projet~d'intÃ©gration:~essai}
  \tl_gset:Nn \g_@@_dprmaitrise_tl
    {GCI~727~DÃ©finition~du~projet~de~recherche}
  \tl_gset:Nn \g_@@_dprdoctorat_tl
    {SCA~772~DÃ©finition~du~projet~de~recherche~au~doctorat}
  \tl_gset:Nn \g_@@_memoire_tl
    {MÃ©moire~de~maitrise}
  \tl_gset:Nn \g_@@_these_tl
    {ThÃ¨se~de~doctorat}
}

\cs_new:Npn \@@_setup
{
  \token_case_meaning:Nn \g_@@_langue_tl
  {
    \c_@@_langue_francais_tl {
      \selectlanguage{french}
    }
    \c_@@_langue_english_tl {
      \selectlanguage{english}
    }
  }

  \bool_if:NTF \g_@@_lignes_bool
  {
    \renewcommand{\headrulewidth}{0.4pt}
    \renewcommand{\footrulewidth}{0.4pt}
  }
  {
    \renewcommand{\headrulewidth}{0pt}
    \renewcommand{\footrulewidth}{0pt}
  }

  \token_case_meaning:Nn \g_@@_format_tl
  {
    \c_@@_format_livre_tl
    {
      \pagestyle{fancy}
      \fancyhf{}
      \fancyhead[RO,LE]{\thepage}
      \fancyhead[LO]{\rightmark}
      \fancyhead[RE]{\leftmark}
    }
    \c_@@_format_simple_tl
    {
      \pagestyle{fancy}
      \fancyhf{}
      \cfoot{\thepage}
    }
  }
%&lt;these&gt;
%&lt;these&gt;  \use:c {_@@_setup_ \g_@@_programme_tl}
}

\cs_new:Npn \@@_generer_page_titre
{
  \group_begin:
  \begin{titlepage}
    \renewcommand*{\thepage}{T1}
    \vspace*{-0.5 in}
    \begin{center}
      \begin{tabular}{c}
        \Large \g_@@_udesname_tl \\
%&lt;protocole&gt;        \Large\g_@@_facultyname_tl
%&lt;these&gt;        \Large\g_@@_facultyname_tl\\
%&lt;these&gt;        \Large\g_@@_departement_tl\\[0.5ex]
      \end{tabular}
      \vfill
      \token_case_meaning:Nn \g_@@_langue_tl
      {
        \c_@@_langue_francais_tl {
          {\huge\g_@@_titre_francais_tl\par}
        }
        \c_@@_langue_english_tl {
          \begin{otherlanguage}{french}
            {\huge\g_@@_titre_francais_tl}
          \end{otherlanguage}\par
          {\Large\g_@@_titre_anglais_tl\par}
        }
      }
      \vfill
%&lt;these&gt;      \begin{tabular}{c}
%&lt;these&gt;        \Large \use:c {g_@@_ \g_@@_type_tl _tl}
%&lt;these&gt;        \clist_if_in:NVT \g_@@_specialite_cl \g_@@_type_tl
%&lt;these&gt;        {
%&lt;these&gt;          \\[0.5ex]\Large\g_@@_specialityname_tl\g_@@_specialite_tl
%&lt;these&gt;        }
%&lt;these&gt;      \end{tabular}
%&lt;these&gt;      \vfill
      \begin{tabular}{c}
        {\Large\g_@@_auteur_prenom_tl\ \g_@@_auteur_nom_tl}
      \end{tabular}
      \vfill
      {\Large \g_@@_adressname_tl \par \vspace{2ex}\g_@@_date_mois_tl\ \g_@@_date_annee_tl}
    \end{center}
  \end{titlepage}
%&lt;protocole&gt;  \thispagestyle{empty}
%&lt;protocole&gt;  \renewcommand*{\thepage}{T2}
%&lt;protocole&gt;  \null\vfill
%&lt;protocole&gt;  \c_@@_protocole_notice_tl\par
%&lt;protocole&gt;  \textcopyright\g_@@_date_annee_tl\ \c_@@_protocole_droits_tl
%&lt;protocole&gt;  \cleardoublepage
%&lt;these&gt;  \clearpage
%&lt;these&gt;  \if@openright\null\thispagestyle{empty}\renewcommand*{\thepage}{T2}\cleardoublepage\fi
  \group_end:
}

\cs_new:Npn \@@_generer_jury
{
  \group_begin:
  {\centering\chapter*{\g_@@_juryname_tl}}

  \begin{center}
    \vspace{4ex}
    \begin{tabular}{p{3in}}
      \hfill\large\g_@@_jury_directeur_tl\hfill\null \\ \hline
      \centering\small
      \token_case_meaning:Nn \g_@@_jury_directeur_mf_tl
      {
        \c_@@_male_tl   {\g_@@_jury_dirname_tl}
        \c_@@_female_tl {\g_@@_jury_dirnamef_tl}
      }
    \end{tabular}\par

    \tl_if_empty:NF \g_@@_jury_codirecteurs_cl
    { \vspace{6ex} }

    \clist_map_inline:Nn \g_@@_jury_codirecteurs_cl
    {
      \begin{tabular}{p{3in}}
        \hfill\large ##1 \hfill\null \\ \hline
        \seq_gpop_left:NN \g_@@_jury_codirecteurs_mf_seq \l_tmpa_tl
        \centering\small
        \token_case_meaning:Nn \l_tmpa_tl
        {
          \c_@@_male_tl   {\g_@@_jury_codirname_tl}
          \c_@@_female_tl {\g_@@_jury_codirnamef_tl}
        }
      \end{tabular}\par
    }

    \tl_if_empty:NF \g_@@_jury_evaluateurs_cl
    { \vspace{6ex} }

    \clist_map_inline:Nn \g_@@_jury_evaluateurs_cl
    {
      \begin{tabular}{p{3in}}
        \hfill\large ##1 \hfill\null \\ \hline
        \seq_gpop_left:NN \g_@@_jury_evaluateurs_mf_seq \l_tmpa_tl
        \centering\small
        \token_case_meaning:Nn \l_tmpa_tl
        {
          \c_@@_male_tl   {\g_@@_jury_evalname_tl}
          \c_@@_female_tl {\g_@@_jury_evalnamef_tl}
        }
      \end{tabular}\par
    }
  \end{center}

  \thispagestyle{empty}\clearpage
  \if@openright\null\thispagestyle{empty}\cleardoublepage\fi
  \group_end:
}

\cs_new:Npn \@@_generer_dedicace
{
  \tl_if_empty:NF \g_@@_dedicace_tl
  {
    \group_begin:
    \null\vfill\flushright
    \begin{minipage}{0.5\linewidth}
      \setlength{\parskip}{1.5ex}\setlength{\parindent}{0em}
      \g_@@_dedicace_tl
    \end{minipage}
    \vfill\vfill
    \thispagestyle{empty}\clearpage
    \if@openright\null\thispagestyle{empty}\cleardoublepage\fi
    \group_end:
  }
}

\cs_new:Npn \@@_generer_resume_francais
{
  \begin{otherlanguage}{french}
    \chapter*{\abstractname}
    \int_set:Nn \l_@@_tmp_int {\value{page}}
    \input{\g_@@_fichier_resume_francais_tl}\par
    \textbf{\g_@@_motsclesname_tl}~\g_@@_mots_cles_francais_tl \par
    \thispagestyle{empty}\clearpage
    \int_sub:Nn \l_@@_tmp_int {\value{page}}
    \int_compare:nNnT {\l_@@_tmp_int} &lt; {-1}
    { \msg_error:nn {udesgeniethese}{resume_francais_long} }
    \ifodd\value{page}\else\if@openright\null\thispagestyle{empty}\cleardoublepage\fi\fi
  \end{otherlanguage}
}

\cs_new:Npn \@@_generer_resume_anglais
{
  \begin{otherlanguage}{english}
    \chapter*{\abstractname}
    \int_set:Nn \l_@@_tmp_int {\value{page}}

    \tl_if_eq:NNT \g_@@_langue_tl \c_@@_langue_francais_tl
    {{\bfseries\g_@@_titre_anglais_tl}\par}

    \input{\g_@@_fichier_resume_anglais_tl}\par
    \textbf{\g_@@_motsclesname_tl}~\g_@@_mots_cles_anglais_tl \par
    \thispagestyle{empty}\clearpage
    \int_sub:Nn \l_@@_tmp_int {\value{page}}
    \int_compare:nNnT {\l_@@_tmp_int} &lt; {-1}
    {
      \msg_error:nn {udesgeniethese}{resume_anglais_long}
    }
    \ifodd\value{page}\else\if@openright\null\thispagestyle{empty}\cleardoublepage\fi\fi
  \end{otherlanguage}
}

\cs_new:Npn \@@_generer_remerciements
{
  \tl_if_empty:NF \g_@@_fichier_remerciements_tl
  {
    \chapter*{\g_@@_acknowledgementsname_tl}
    \int_set:Nn \l_@@_tmp_int {\value{page}}
    \input{\g_@@_fichier_remerciements_tl}\par
    \thispagestyle{empty}\clearpage
    \int_sub:Nn \l_@@_tmp_int {\value{page}}
    \int_compare:nNnT {\l_@@_tmp_int} &lt; {-1}
    {
      \msg_error:nn {udesgeniethese}{remerciements_longs}
    }
    \ifodd\value{page}\else\if@openright\null\thispagestyle{empty}\cleardoublepage\fi\fi
  }
}

\cs_new:Npn \@@_generer_pages_preliminaires
{
  \setcounter{page}{1}
%&lt;*these&gt;
  \clist_if_in:NVF \g_@@_pas_jury_cl \g_@@_type_tl
  { \@@_generer_jury }

  \@@_generer_resume_francais
  \token_case_meaning:Nn \g_@@_langue_tl
  {
    \c_@@_langue_francais_tl {
      \tl_if_blank:VF \g_@@_fichier_resume_anglais_tl
      { \@@_generer_resume_anglais }
    }
    \c_@@_langue_english_tl {
      \@@_generer_resume_anglais
    }
  }

  \clist_if_in:NVT \g_@@_dedicace_cl \g_@@_type_tl
  { \@@_generer_dedicace  }

  \clist_if_in:NVT \g_@@_remerciements_cl \g_@@_type_tl
  { \@@_generer_remerciements  }
%&lt;/these&gt;

  \tableofcontents
  \if@openright\cleardoublepage\else\clearpage\fi

  \bool_if:NT \g_@@_liste_figures_bool
  {
    \listoffigures
    \if@openright\cleardoublepage\else\clearpage\fi
  }

  \bool_if:NT \g_@@_liste_tableaux_bool
  {
    \listoftables
    \if@openright\cleardoublepage\else\clearpage\fi
  }
%&lt;*these&gt;

  \tl_if_empty:NF \g_@@_fichier_lexique_tl
  {
    \chapter*{\glossaryname}
    \markboth{\glossaryname}{\glossaryname}
    \input{\g_@@_fichier_lexique_tl}\par
    \if@openright\cleardoublepage\else\clearpage\fi
  }

  \tl_if_empty:NF \g_@@_fichier_symboles_tl
  {
    \chapter*{\g_@@_listsymbolsname_tl}
    \markboth{\g_@@_listsymbolsname_tl}{\g_@@_listsymbolsname_tl}
    \input{\g_@@_fichier_symboles_tl}\par
    \if@openright\cleardoublepage\else\clearpage\fi
  }

  \tl_if_empty:NF \g_@@_fichier_acronymes_tl
  {
    \chapter*{\g_@@_listacronymsname_tl}
    \markboth{\g_@@_listacronymsname_tl}{\g_@@_listacronymsname_tl}
    \input{\g_@@_fichier_acronymes_tl}\par
    \if@openright\cleardoublepage\else\clearpage\fi
  }
%&lt;/these&gt;
}

\cs_new:Npn \@@_generer_liste_references
{
  \refstepcounter{chapter}
  \addcontentsline{toc}{chapter}{\bibname}

  \token_case_meaning:Nn \g_@@_references_engin_tl
  {
    \c_@@_references_bibtex_tl
      { \bibliography{\g_@@_fichiers_references_cl} }
    \c_@@_references_biblatex_tl
      { \printbibliography }
  }

  \if@openright\cleardoublepage\else\clearpage\fi
}

%%-----------------------------------------------------------------------------
%%---   GESTION AUTOMATISEE   -------------------------------------------------
%%-----------------------------------------------------------------------------
\AddToHook{begindocument/before}
{
  \bool_if:NTF \g_@@_legendes_min_bool
    {\frenchsetup{SmallCapsFigTabCaptions=false}}
    {\cs_gset:Npn \@@_caption_fmt #1 { \textsc{#1} }}

  \token_case_meaning:Nn \g_@@_references_engin_tl
  {
    \c_@@_references_bibtex_tl
    {
  	  \IfPackageLoadedTF{biblatex}
  	     {\msg_error:nn {udesgeniethese}{biblatex_en_trop}}{}
    	\bibliographystyle{\g_@@_style_references_tl}
    }
    \c_@@_references_biblatex_tl
    {
  	  \IfPackageLoadedTF{biblatex}
  	    {}{\msg_error:nn {udesgeniethese}{biblatex_manquant}}

      \clist_map_inline:Nn \g_@@_fichiers_references_cl
      {
        \bool_if:nTF \g_@@_autobib_bool
          { \addbibresource{#1.bib} }
          { \addbibresource{#1} }
      }
    }
  }
  \@@_setup_captions
}

\AddToHook{begindocument/end}
{
  \@@_validation
  \@@_setup
  \frontmatter
  \singlespacing
  \@@_generer_page_titre
  \@@_generer_pages_preliminaires
  \mainmatter
  \onehalfspacing
}

\AddToHook{enddocument}
{
  % Si pas eu d'annexes avec \appendix
  \int_compare:nNnT {\g_@@_pages_int} = {0}
  { \int_gset:Nn \g_@@_pages_int {\value{page}} }

  \int_compare:nNnT {\g_@@_pages_int} &gt; {\use:c {c_@@_max_pages_ \g_@@_type_tl _int}}
  { \msg_error:nn {udesgeniethese}{\g_@@_type_tl _max_pages} }

  \backmatter
  \singlespacing
  \@@_generer_liste_references
}
%\end{implementation}
%\Finale
\endinput
</pre></body></html>