% \iffalse meta-comment
%<*internal>
\iffalse
%</internal>
%<*readme>
denisbdoc - A personal package for documenting classes and packages, v. 0.9.1
=============================================================================

**The sole purpose of this (quick 'n dirty) `denisbdoc` package is for
documenting the classes written by their author (Denis Bitouzé).**

The class is supplied in `.dtx` format. If you want to unpack the `.dtx`
yourself, running:

     tex denisbdoc.dtx

will extract the package.

This package is currently not documented.
%</readme>
%<*internal>
\fi
\def\nameofplainTeX{plain}
\ifx\fmtname\nameofplainTeX\else
  \expandafter\begingroup
\fi
%</internal>
%<*install>
\input l3docstrip.tex
\askforoverwritefalse
\preamble
-----------------------------------------------------------------------------
denisbdoc --- A personal dirty package for documenting personal classes,
              version 0.9.1

Maintained by Denis Bitouzé
E-mail: denis.bitouze@univ-littoral.fr
Released under the LaTeX Project Public License v1.3c or later
See http://www.latex-project.org/lppl.txt
-----------------------------------------------------------------------------

\endpreamble
\postamble
Copyright (C) 2015-2020 by
  Denis Bitouzé <denis.bitouze@univ-littoral.fr>

It may be distributed and/or modified under the conditions of
the LaTeX Project Public License (LPPL), either version 1.3c of
this license or (at your option) any later version.  The latest
version of this license is in the file:
   http://www.latex-project.org/lppl.txt

This work is "maintained" (as per LPPL maintenance status) by
  Denis Bitouzé.

This work consists of the file  denisbdoc.dtx
                                denisbdoc.sty and
                                denisbdoc.ins.
\endpostamble
\usedir{tex/latex/denisbdoc}
\generate{
  \file{\jobname.sty}{\from{\jobname.dtx}{package}}
}
\nopreamble\nopostamble
\generate{
  \file{\jobname.xdy}{\from{\jobname.dtx}{xindy-style}}
  \file{\jobname-chng.xdy}{\from{\jobname.dtx}{xindy-style-chng}}
}
%</install>
%<install>\endbatchfile
%<*internal>
\usedir{source/latex/denisbdoc}
\generate{
  \file{\jobname.ins}{\from{\jobname.dtx}{install}}
}
\nopreamble\nopostamble
\usedir{/}
\generate{
  \file{README.md}{\from{\jobname.dtx}{readme}}
}%
\ifx\fmtname\nameofplainTeX
  \expandafter\endbatchfile
\else
  \expandafter\endgroup
\fi
%</internal>
%<*driver|package>
\RequirePackage{expl3,l3keys2e,xparse}
%</driver|package>
%<*driver>
% \documentclass[english,french]{ltxdoc}
% \usepackage{denisbdoc}
% % Silence annoying fp package messages
% %\DisableImplementation
% \begin{document}
%   \DocInput{\jobname.dtx}
% \end{document}
%</driver>
% \fi
%
% \GetFileInfo{\jobname.sty}
%
%\title{^^A
%  \textsf{denisbdoc} --- A personal package for documenting packages\thanks{^^A
%    This file describes \fileversion, last revised \filedate.^^A
%  }^^A
%}
%\author{^^A
%  Denis Bitouzé\thanks
%    {^^A
%      E-mail: \href{mailto:denis.bitouze@univ-littoral.fr}
%      {\texttt{denis.bitouze@univ-littoral.fr}}^^A
%    }^^A
%}
%\date{Released \filedate}
%
%\maketitle
%
%\changes{v0.1}{2015/03/15}{First CTAN version}
%\changes{v0.2}{2016/04/04}{Second CTAN version}
%\changes{v0.3}{2016/06/10}{Third CTAN version}
%\changes{v0.4}{2016/10/24}{Fourth CTAN version}
%\changes{v0.5}{2016/10/30}{Fifth CTAN version}
%\changes{v0.6}{2016/12/08}{Sixth CTAN version}
%\changes{v0.7}{2017/01/01}{Seventh CTAN version}
%\changes{v0.8}{2020/03/27}{Eighth CTAN version}
%\changes{v0.9}{2020/05/31}{Nineth CTAN version}
%\changes{v0.9.1}{2020/10/14}{Further CTAN version}
%
%\begin{abstract}
% ...
%\end{abstract}
%
%\tableofcontents
%
%\begin{documentation}
%
%\section{Introduction}
%
% ...
%
%\section{Installation}
%
% The package is supplied in \file{dtx} format and as a pre-extracted
% zip file, \file{\jobname.tds.zip}. The later is most convenient for
% most users: simply unzip this in your local texmf directory and
% run \texttt{texhash} to update the database of file locations. If
% you want to unpack the \file{dtx} yourself, running
% \texttt{tex \jobname.dtx} will extract the package whereas
% \texttt{latex \jobname.dtx} will extract it and also typeset the
% documentation.
%
% The package requires \LaTeX3 support as provided in the
% \pkg{l3kernel} and \pkg{l3packages} bundles. Both of these are available
% on \href{http://ctan.org}{\textsc{ctan}} as ready-to-install
% zip files. Suitable versions are available in MiK\TeX{}~2.9 and
% \TeX{}~Live 2014 (updating the relevant packages online may be
% necessary). \LaTeX3, and so \pkg{denisbdoc}, requires the \eTeX{}
% extensions: these are available on all modern \TeX{} systems.
%
% Typesetting the documentation requires a number of packages in
% addition to those needed to use the package. This is mainly
% because of the number of demonstration items included in the text. To
% compile the documentation without error, you will need the packages:
%\begin{itemize}
% \item \pkg{amsmath}
% \item \pkg{booktabs}
% \item \pkg{cancel}
% \item \pkg{caption}
% \item \pkg{cleveref}
% \item \pkg{colortbl}
% \item \pkg{csquotes}
% \item \pkg{helvet}
% \item \pkg{mathpazo}
% \item \pkg{multirow}
% \item \pkg{listings}
% \item \pkg{pgfplots}
% \item \pkg{xcolor}
%\end{itemize}
%
%\end{documentation}
%
%\begin{implementation}
%
%  \chapter{Implementation}
%
%    \begin{macrocode}
%<*package>
%    \end{macrocode}
%
%    \begin{macrocode}
%<@@=denisbdoc>
%    \end{macrocode}
%
% \section{Preliminaries}
%
% The usual preliminaries.
%    \begin{macrocode}
\ProvidesExplPackage {denisbdoc} {2020/10/14} {0.9.1}
  {A personal package for documenting packages}
%    \end{macrocode}
%
% Make sure that the version of \pkg{l3kernel} in use is sufficiently new.
% This will also trap any problems with \pkg{l3packages} (as the two are now
% tied together, version-wise).
%    \begin{macrocode}
\@ifpackagelater { expl3 } { 2012/11/21 }
  { }
  {
    \PackageError { denisbdoc } { Support~package~expl3~too~old }
      {
        You~need~to~update~your~installation~of~the~bundles~'l3kernel'~and~
        'l3packages'.\MessageBreak
        Loading~denisbdoc~will~abort!
      }
    \tex_endinput:D
  }
%    \end{macrocode}
%
% \section{Options}
%
%    \begin{macrocode}
\keys_define:nn { denisbdoc }
{
  yad .bool_gset:N = \g_@@_yad_bool,
  gzt .bool_gset:N = \g_@@_gzt_bool,
  nwejm .bool_gset:N = \g_@@_nwejm_bool,
  studentreport .bool_gset:N = \g_@@_studentreport_bool,
  lscape .bool_gset:N = \g_@@_lscape_bool,
}
%    \end{macrocode}
%
%    \begin{macrocode}
\ProcessKeysOptions { denisbdoc }
%    \end{macrocode}
%
% \section{Packages}
%
%    \begin{macrocode}
\PassOptionsToPackage{obeyspaces}{url}
%    \end{macrocode}
%
%    \begin{macrocode}
\sys_if_engine_pdftex:TF
{
  % \RequirePackage{cmap}
  \RequirePackage[T1]{fontenc}
  \RequirePackage[utf8]{inputenc}
%    \end{macrocode}
%
% In order to get rid of the warning "PDF inclusion: multiple pdfs with page
% group included in a single page" (see
% \url{http://tex.stackexchange.com/q/183149/18401}).
%    \begin{macrocode}
  \pdfsuppresswarningpagegroup=1
}{
  \RequirePackage{fontspec}
}
\RequirePackage{xpatch}%
\AtEndPreamble{%
  \RequirePackage{mweights}%
}%
%
% \let\denisbdoc@ORI@task\task
% \let\task\relax
% \RequirePackage{exsheets}
% \let\task\denisbdoc@ORI@task
\RequirePackage{fixfoot}%
%
%    \end{macrocode}
%
% For all the conditional ×\@ifclassloaded{beamer}{...}{...}× , we the following
% trick needed because patching commands when ×#× is involved can't happen in
% the argument to another command (see
% \url{https://tex.stackexchange.com/a/167107/18401}).
%    \begin{macrocode}
\newif\if@DBD@beamer@not@loaded@
\@DBD@beamer@not@loaded@true
\@ifclassloaded{beamer}{\@DBD@beamer@not@loaded@false}{\@DBD@beamer@not@loaded@true}
%
\if@DBD@beamer@not@loaded@
\RequirePackage{parskip}%
  \RequirePackage{marginnote}
  \RequirePackage{mparhack}
  \RequirePackage[inline]{enumitem}
\fi%
\RequirePackage{afterpage}%
\RequirePackage{calc}%
% \RequirePackage[lining]{libertine}%
\RequirePackage{siunitx}%
% \RequirePackage[a4paper]{geometry}%
\RequirePackage{booktabs}%
\RequirePackage{multirow}%
\RequirePackage[xr]{zref}%
\if@DBD@beamer@not@loaded@
  \RequirePackage[multiple]{footmisc}%
  \RequirePackage{rotating}%
\fi%
\bool_if:nTF {\g_@@_lscape_bool} {%
  \RequirePackage{lscape}%
}{%
  \RequirePackage{pdflscape}%
}
\RequirePackage{xspace}%
\RequirePackage{accsupp}
\RequirePackage{newunicodechar}
\RequirePackage{hologo}%
\RequirePackage{xifthen}%
\RequirePackage{refcount}%
\RequirePackage{etoolbox}%
\RequirePackage{iflang}%
\RequirePackage{ifpdf}%
\RequirePackage{amssymb}%
\if@DBD@beamer@not@loaded@
  \RequirePackage{tocvsec2}%
\fi
\RequirePackage{ltxcmds}%
\RequirePackage{csquotes}%
\RequirePackage{tikz}%
\RequirePackage{translator}%
% \RequirePackage{scrlfile}
%
\let\EUR\relax
\RequirePackage{comment}%
\RequirePackage{path}%
\RequirePackage{textcase}%
\RequirePackage{fontawesome}%
\@ifpackageloaded{biblatex}{%
%    \end{macrocode}
%
% Réglage nécessaire sans quoi le titre courant \textquote{BIBLIOGRAPHIE}
% apparaît en trop en entête et en pied de page
%    \begin{macrocode}
\AtEndPreamble{%
  \bool_if:nT {\g_@@_yad_bool} {%
    % \defbibheading{bibintoc}[\bibname]{\chapter*{#1}}%
    % % \defbibheading{subbibintoc}[\bibname]{\section*{#1}}%
    % \defbibheading{YAD@localbibs@heading}[\translate{lbl-localbibname}]{%
    %   % \YAD@setsecnumdepth{none}%
    %   \section*{#1}%
    %   % \YAD@setsecnumdepth{\YAD@secnumdepth}%
    % }%
%    \end{macrocode}
%
% Redéfinition de la commande d'insertion de la bibliographie et ce,
% seulement si le \Package{biblatex} est chargé
% \begin{macro}{\printbibliography}
%    \begin{macrocode}
    \let\_@@_printbibliography_ORI\printbibliography%
    \renewcommand{\printbibliography}[1][]{%
      \@ifpackageloaded{setspace}{%
        \singlespacing%
      }{%
      }
      \chapter*{\bibname}%
      \_@@_printbibliography_ORI[heading=none,#1]%
    }%
  }%
}%
}{%
  \RequirePackage[%backend=biber%
  ,style=authortitle,dashed=false
  ,autopunct=false,useprefix=true,backref]{biblatex}%
}%
%    \end{macrocode}
%
% In order to as many write \enquote{streams} in auxiliary files as needed. It
% has to be loaded not too late (otherwise it cannot fix troubles it is used
% for), but not too early (otherwise the compilation stops a long time at the
% line:
% ×/usr/local/texlive/.../texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg×,
% trouble reported to the author).
%    \begin{macrocode}
\RequirePackage{morewrites}%
\RequirePackage{babel}%
\RequirePackage[useregional]{datetime2}%
% \RequirePackage[nodayofweek]{datetime}%
% \RequirePackage{floatrow}%
\RequirePackage{subcaption}%
%
% \Pkg{tocbibind} should be loaded before \pkg{imakeidx}, otherwise it would
% destroy the |\indexprologue| feature of the latter.
\if@DBD@beamer@not@loaded@
  \RequirePackage{tocbibind}%
  \RequirePackage[xindy]{imakeidx}
\fi%
%
% \@ifpackageloaded{hypdoc}{%
% }{%
%   \let\oldmaketitle\maketitle
%   \RequirePackage{hypdoc}%
%   \let\maketitle\oldmaketitle
% }%
\RequirePackage{varioref}%
\@ifpackageloaded{tcolorbox}{%
}{%
  \RequirePackage{tcolorbox}%
}%
\@ifpackageloaded{hyperref}{%
}{%
  \RequirePackage[hyperfootnotes=false,hyperindex=false]{hyperref}%
}%
\RequirePackage{attachfile2}%
\@ifpackageloaded{nameref}{%
}{%
  \RequirePackage{nameref}%
}%
\@ifpackageloaded{hypcap}{%
}{%
  \if@DBD@beamer@not@loaded@
    \RequirePackage[all]{hypcap}%
  \fi%
}%
\@ifpackageloaded{bookmark}{%
}{%
  \RequirePackage[numbered]{bookmark}%
}%
\@ifpackageloaded{glossaries}{%
}{%
  \RequirePackage[xindy,hyperfirst=false,toc=false]{glossaries-extra}%
  \makeglossaries%
  \newglossaryentry{zip}{%
    name=zip,%
    category={format},%
    description={format~ de~ fichier~ permettant~ l'archivage~ (utilisation~
      d'un~ seul~ fichier~ pour~ stocker~ plusieurs~ fichiers)~ et~ la~
      compression~ de~ données~ (diminution~ de~ l'espace~ occupé~ sur~ le~
      support~ numérique)~ sans~ perte~ de~ qualité},%
    text={zip}%
  }%
  \setglossarystyle{indexhypergroup}%
  \setabbreviationstyle{long-short-sc}%
  \newcommand*{\formatfont}[1]{\textsc{#1}}%
  \glssetcategoryattribute{format}{glossnamefont}{formatfont}%
  \glssetcategoryattribute{format}{font}{formatfont}%
  \renewcommand*{\glsxtrregularfont}[1]{%
    \glshasattribute{\glslabel}{font}%
    {\csuse{\glsgetattribute{\glslabel}{font}}{#1}}%
    {#1}%
  }%
}%
\@ifpackageloaded{cleveref}{%
}{%
  \RequirePackage{cleveref}%
}%
%    \end{macrocode}
%
% Some code stolen from \pkg{hypdoc} in order page numbers in change history are
% hyperlinks.
%    \begin{macrocode}
\if@DBD@beamer@not@loaded@
  \def\hdpindex#1#2{%
    \csname\ifx\\#1\\relax\else#1\fi\endcsname{%
      \hyperpage{#2}%
    }%
  }
  \let\HDorg@wrglossary\@wrglossary
  \def\@wrglossary#1{%
    \let\HDorg@encapchar\encapchar
    \def\encapchar##1\encapchar##2\@nil{%
      \HDorg@encapchar
      hdpindex{##1}%
    }%
    \HDorg@wrglossary{#1\encapchar\encapchar\@nil}%
  }
\fi%
%    \end{macrocode}
%
%    \begin{macrocode}
\@ifpackageloaded{glossaries-extra}{%
  \renewcommand*{\glsxtrabbrvpluralsuffix}{}
}{%
}
%    \end{macrocode}
%
% % Some hacks to avoid issues of \pkg{hypdoc} reported by me at
% % \url{https://github.com/ho-tex/oberdiek/issues} (currently not used because
% % this package has to much issues).
% %    \begin{macrocode}
% \@ifpackageloaded{hypdoc}{%
%   % \let\theglossary\HDorg@theglossary
%   \def\listoftables{%
% %    \end{macrocode}
% %
% % Hack against point 2 of this issue:
% % \url{https://github.com/ho-tex/oberdiek/issues/12}.
% %    \begin{macrocode}
%     \bookmarksetup{startatroot}%
%     \cleardoublepage
% %    \end{macrocode}
% %
% %    \begin{macrocode}
%     \ifHD@numbered
%     \else
%     \stepcounter{HD@unique}%
%     \pdfbookmark[\HD@guesstoclevel{\HDorg@listoftables}]%
% %    \end{macrocode}
% %
% % Hack against of this issue:
% % \url{https://github.com/ho-tex/oberdiek/issues/8}.
% %    \begin{macrocode}
% {\listtablename}%
% %    \end{macrocode}
% %
% %    \begin{macrocode}
% {toc\theHD@unique}%
%     \fi
%     \begingroup
%     \HD@sectionpatch
%     \HDorg@listoftables
%     \endgroup
%   }
%   \def\listoffigures{%
% %    \end{macrocode}
% %
% % Hack against point 2 of this issue:
% % \url{https://github.com/ho-tex/oberdiek/issues/12}.
% %    \begin{macrocode}
%     \bookmarksetup{startatroot}%
%     \cleardoublepage
% %    \end{macrocode}
% %
% %    \begin{macrocode}
%     \ifHD@numbered
%     \else
%     \stepcounter{HD@unique}%
%     \pdfbookmark[\HD@guesstoclevel{\HDorg@listoffigures}]%
% %    \end{macrocode}
% %
% % Hack against of this issue:
% % \url{https://github.com/ho-tex/oberdiek/issues/8}.
% %    \begin{macrocode}
% {\listfigurename}%
% %    \end{macrocode}
% %
% %    \begin{macrocode}
% {toc\theHD@unique}%
%     \fi
%     \begingroup
%     \HD@sectionpatch
%     \HDorg@listoffigures
%     \endgroup
%   }
%   \patchcmd{\HDorg@listoffigures}
%   {\chapter*{\listfigurename}}%
%   {%
%     \setsecnumdepth{none}%
%     \chapter{\listfigurename}%
%     \resetsecnumdepth*%
%   }%
%   {}%
%   {}
%   \patchcmd{\HDorg@listoftables}
%   {\chapter*{\listtablename}}%
%   {%
%     \setsecnumdepth{none}%
%     \chapter{\listtablename}%
%     \resetsecnumdepth*%
%   }%
%   {}%
%   {}
% }{%
% }
% %    \end{macrocode}
%
% A trouble with ×\NoAutoSpacing× from \package{frenchb} has been fixed since
% version 3.2b 2016-04-18. But this cannot be discriminated directly (see
% \url{http://tex.stackexchange.com/q/309680/18401}), hence we rely on
% \Package{ltxcmds} for this:
%    \begin{macrocode}
\ltx@iffilelater{french.ldf}{2016/03/20}{%
}{%
  \DeclareRobustCommand*{\NoAutoSpacing}{\FBAutoSpaceGuillfalse%
    \ifFB@active@punct\noautospace@beforeFDP\shorthandoff{;:!?}\fi%
    \ifFB@xetex@punct\XeTeXinterchartokenstate=0 \fi%
    \ifFB@luatex@punct\FB@addDPspace=0 \FB@addGUILspace=0 \fi%
  }%
}
%    \end{macrocode}
%
% We momentarily switch to a \enquote{normal} category code régime in which the
% colon (:) is treated as \enquote{letter}, which is necessary when colon is
% used in code (here \pkg{TikZ} and \pkg{tcolorbox}).
%    \begin{macrocode}
\ExplSyntaxOff
\ifpdf
\tcbuselibrary{listingsutf8}
\else
\tcbuselibrary{listings}
\fi
\tcbuselibrary{%
  documentation,theorems,breakable,skins,xparse%
}
\tcbset{%
  commandshell/.style={%
    colback=black,
    colupper=white,
    colframe=yellow!75!black,
    breakable,
    listing only,
    listing options={style=tcblatex,language=bash,escapeinside={(*@}{@*)}},
    every listing line={%
      \textcolor{red}{%
        \small\ttfamily\bfseries%
        \BeginAccSupp{method=plain,ActualText={}}
        \$
        \EndAccSupp{}%
      }
    },
  }
}
%    \end{macrocode}
%
% We patch some \pkg{marginnote}'s internal macro in order |doc new| and |doc
% update| margin notes provided by \pkg{tcolorbox} are always on the left hand
% size and typesetted correctly.
%    \begin{macrocode}
% \renewcommand{\tcbdocmarginnote}[2][]{%
%   \marginnote{%
%   \begin{tcolorbox}[enhanced jigsaw,size=fbox,boxrule=1pt,leftrule=0pt,rightrule=0pt,
%     arc=0pt,outer arc=1pt,boxsep=1pt,top=1pt,bottom=1pt,
%     nobeforeafter,width=\marginparwidth,
%     colframe=red!50!white,colback=red!25!yellow!5!white,fontupper=\scriptsize,
%     if odd page or oneside={flushright upper}{flushright upper},
%     doc@marginnote,#1]#2\end{tcolorbox}}}
\tcbset{doc marginnote={if odd page or oneside={flushright upper}{flushright upper}}}
\reversemarginpar
\pretocmd{\tcbdocmarginnote}{%
  \patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
  \patchcmd{\@mn@margintest}{\@tempswafalse}{\@tempswatrue}{}{}
  \reversemarginpar%
}{}{}
\@ifpackageloaded{geometry}{%
  \geometry{marginparwidth=.65in}%
}{}
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareTotalTCBox{\commandshell}{ v }{ commandshell}{#1}
\newtcblisting{listingshell}[1][]{%
  % colback=black,
  % colupper=white,
  colback=white,
  colupper=black,
  colframe=yellow!75!black,
  breakable,
  listing only,
  listing options={%
    style=tcblatex,
    language=bash,
    escapeinside={(*@}{@*)},
    upquote=true,
    showstringspaces=false
  },
  every listing line={%
    \textcolor{red}{%
      \small\ttfamily\bfseries%
      \BeginAccSupp{method=plain,ActualText={}}
      \$
      \EndAccSupp{}%
    }
  },
  #1
}
\usetikzlibrary{trees,backgrounds,fit,calc,positioning}
%    \end{macrocode}
%
% The color of \package{attachfile(2)}'s links is by default too pale. We make
% it the same as the \package{tcolorbox}' one:
%    \begin{macrocode}
\attachfilesetup{color=Hyperlink}
%    \end{macrocode}
%
% In order to get \pkg{titleps}' header in index to include current index entry,
% we define the following |\indexmark| command
% (cf. \url{http://tex.stackexchange.com/q/335522/18401}) that will be inserted
% inside the (level 0) |\targetindexentry| command below.
%    \begin{macrocode}
\if@DBD@beamer@not@loaded@
\newcommand{\indexmark}[1]{\hypertarget{index:#1}{#1}\markboth{#1}{#1}}
%    \end{macrocode}
%
% In order to get \pkg{hyperref} and \pkg{xindy} work nicely together
% (cf. \url{http://geekographie.maieul.net/172}).
%    \begin{macrocode}
% \newcommand{\targetindexentry}[1]{\hypertarget{index:#1}{#1}}
\newcommand{\targetindexentry}[1]{\indexmark{#1}}
\newcounter{targeti}
\newcommand{\targetindexentryi}[1]{\stepcounter{targeti}\hypertarget{\thetargeti:index:#1}{#1}}
\newcounter{targetii}
\newcommand{\targetindexentryii}[1]{\stepcounter{targetii}\hypertarget{\thetargetii:index:#1}{#1}}
\newcommand{\seelink}[1]{\see{\hyperlink{index:#1}{#1}}}
\newcommand{\indexdef}[1]{\index{#1|definition}}
\newcommand{\indexex}[1]{%
  \index{#1|example}%
  \index{exemple!#1|example}%
}
\newcommand{\indexsee}[2]{\index{#1|see{#2}}}
%    \end{macrocode}
%
% We patch the |\printindex| command in order to store the symbolic name of the
% current index in the |\DBD@index@symbolic@name| dedicated command that will be
% used to uniquify the |\belowpdfbookmark| added at the beginning of each
% |\lettergroup| in the customized |theindex| environment (defined in the
% customized index style \File{denisbdoc.xdy}).
%    \begin{macrocode}
  \xpretocmd{\printindex}{\edef\DBD@index@symbolic@name{#1}}{}{\aaa}
  % \xpretocmd{\printindex}{\edef\DBD@index@symbolic@name{#1}}{}{\aaa}
%    \end{macrocode}
%
% We patch the |\indexprologue| command in order to provide a navigation line at
% the start of the index with links to each group that is present in the index
% (see \url{http://tex.stackexchange.com/q/334200/18401}).
%    \begin{macrocode}
% \renewcommand*{\marginfont}{\normalsize}
% \renewcommand*{\marginnotevadjust}{.625\baselineskip}
% %
% \xpatchcmd{\theindex}{\imki@indexlevel{\indexname}}{%
%   \imki@indexlevel{%
%     \marginnote{\normalsize\csuse{DBD@indexnavigation@\csuse{DBD@index@symbolic@name}}}%
%     \indexname%
%   }
% }{}{}%
\xpatchcmd{\indexprologue}{#2}{%
  #2
  \par\bigskip
  \csuse{DBD@indexnavigation@\csuse{DBD@index@symbolic@name}}%
}{}{\aaa}%
%    \end{macrocode}
%
%    \begin{macrocode}
\newcommand*{\indexheading}[2]{%
  \hypertarget{#2:#1}{\textbf{#1}}%
  \protected@write\@auxout{}{\string\DBD@indexgroup{#1}{#2}}%
}
%    \end{macrocode}
%
% We create a boolean which tests whether the letter in the navigation bar is
% the 1st one or not (in the latter case, a newline is added).
%    \begin{macrocode}
\newtoggle{@DBD@no@first@letter}
\newcommand*{\DBD@indexgroup}[2]{%
  \csgappto{DBD@indexnavigation@#2}{%
    \iftoggle{@DBD@no@first@letter}{%
      \,\textbar\,%
      % \\
    }{%
      \toggletrue{@DBD@no@first@letter}%
      \noindent%
    }%
    \hyperlink{#2:#1}{\textbf{#1}}%
  }%
}%
\fi
%    \end{macrocode}
%
%    \begin{macrocode}
\DeclareUrlCommand\urldirectory{\urlstyle{tt}}
%    \end{macrocode}
%
% We switch to the category code régime of LaTeX3.
%    \begin{macrocode}
\ExplSyntaxOn
%    \end{macrocode}
%
% \section{Strings and keywords}
%
% We now declare some private string constants.
%
% \begin{macro}{\c_@@_template_string_tl}
% \begin{macro}{\c_@@_sample_string_tl}
% \begin{macro}{\c_@@_flattemplate_string_tl}
% \begin{macro}{\c_@@_flatsample_string_tl}
% \begin{macro}{\c_@@_treetemplate_string_tl}
% \begin{macro}{\c_@@_treesample_string_tl}
%    \begin{macrocode}
\tl_const:Nn \c_@@_examples_path_tl {../exemples}
\tl_const:Nn \c_@@_template_string_tl {\c_@@_examples_path_tl/canevas}
\tl_const:Nn \c_@@_sample_string_tl {\c_@@_examples_path_tl/specimen}
\tl_const:Nn \c_@@_flattemplate_string_tl {\c_@@_template_string_tl/a-plat}
\tl_const:Nn \c_@@_flatsample_string_tl {\c_@@_sample_string_tl/a-plat}
\tl_const:Nn \c_@@_treetemplate_string_tl {\c_@@_template_string_tl/en-arborescence}
\tl_const:Nn \c_@@_treesample_string_tl {\c_@@_sample_string_tl/en-arborescence}
\tl_const:Nn \c_@@_template_sample_zip_string_tl {canevas-specimen.zip}
\tl_const:Nn \c_@@_these_aux_string_tl {these.aux}
\tl_const:Nn \c_@@_these_snippets_directory_tl {extraits-these}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\c_@@_unixtldirectory_string_tl}
% \begin{macro}{\c_@@_tlversion_string_tl}
% \begin{macro}{\c_@@_wintldirectory_string_tl}
% \begin{macro}{\c_@@_tldistdirectory_string_tl}
% \begin{macro}{\c_@@_docdirectory_string_tl}
% \begin{macro}{\c_@@_texdirectory_string_tl}
% \begin{macro}{\c_@@_sourcedirectory_string_tl}
% \begin{macro}{\c_@@_jobdirectory_string_tl}
% \begin{macro}{\c_@@_jobdocdirectory_string_tl}
% \begin{macro}{\c_@@_miktexdistdirectory_string_tl}
%    \begin{macrocode}
\tl_const:Nn \c_@@_unixtldirectory_string_tl {/usr/local/}
\tl_const:Nn \c_@@_tlversion_string_tl {2016}
\tl_const:Nn \c_@@_wintldirectory_string_tl {c:/}
\tl_const:Nn \c_@@_tldistdirectory_string_tl {texlive/\tlversion/texmf-dist/}
\tl_const:Nn \c_@@_miktexdistdirectory_string_tl {[TODO]}
\tl_const:Nn \c_@@_docdirectory_string_tl {doc/}
\tl_const:Nn \c_@@_texdirectory_string_tl {tex/}
\tl_const:Nn \c_@@_sourcedirectory_string_tl {source/}
\tl_const:Nn \c_@@_jobdirectory_string_tl {latex/\jobname}
\tl_const:Nn \c_@@_jobdocdirectory_string_tl {\docdirectory\jobdirectory}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
% \end{macro}
%
% For the asides opening and eventuelly closing punctuation marks.
%    \begin{macrocode}
\tl_const:Nn \c_@@_aside_string_tl {---}
%    \end{macrocode}
%
% \subsection{Colors}
%
%    \begin{macrocode}
\colorlet{specimens}{yellow!30}
\colorlet{canevas}{green!30}
\colorlet{doc}{specimens!50!canevas}
\colorlet{en-arborescence}{red!20}
\colorlet{a-plat}{blue!20}
\colorlet{texcs}{blue}
\colorlet{directive}{texcs}
\colorlet{mandatory-argument}{red}
\colorlet{environment}{teal}
\colorlet{key}{purple}
\colorlet{value}{violet}
\colorlet{keyword4}{key}
\colorlet{keyword5}{magenta}
\colorlet{comment}{gray}
\colorlet{string}{cyan}
\colorlet{math}{green!50!black}
\colorlet{meta}{brown}
\colorlet{preamble}{violet}
%    \end{macrocode}
%
% \subsection{Skips}
%
%    \begin{macrocode}
\skip_const:Nn \c_@@_listings_aboveskip_skip { \c_zero_dim plus 6pt }%
\skip_const:Nn \c_@@_listings_belowskip_skip { \c_zero_dim plus 6pt }%
%    \end{macrocode}
%
% \section{Local languages definitions for \Package{listings}}
%
% Now, we extend (or define new) local languages for the \Package{listings}.
%
% \subsubsection{Extension of the \enquote{LaTeX} TeX dialect}
%
%    \begin{macrocode}
\lstdefinelanguage[extLaTeX]{TeX}[LaTeX]{TeX}{%
  moretexcs={%
    footnotesize,huge,Huge,large,Large,LARGE,large,Large,scriptsize,tiny,%
    includegraphics,cite,ttwplink,cref,vref,LTXtable,tableofcontents,frontmatter,mainmatter,%
    part,chapter,section,subsection,subsubsection,paragraph,subparagraph,RequirePackage,%
    listoftables,listoffigures,lstlistingname,si,SI,ohm,num,space,shorthandon,shorthandoff,%
    abstractname,appendixname,contentsname,listfigurename,listtablename,indexname,%
    figurename,tablename,chaptername,pagename,seename,alsoname,proofname,bibname,glossaryname,%
    addto,captionsenglish,captionsfrench,lipsum,partname,refname,renewcommand*,%
    appendix,lstlistoflistings,graphicpath,loadglsentries,hypersetup,detect-all,SetWatermarkColor,%
    @pnumwidth,bookmarksetup,DeclareTextCommand,text,iiint,NewPairedDelimiter,%
    norm,lnorm,llnorm,lpnorm,supnorm,abs,prt,brk,brc,lrangle,leqgeq,%
    norm*,lnorm*,llnorm*,lpnorm*,supnorm*,abs*,prt*,brk*,brc*,lrangle*,leqgeq*,%
    pdfobjcompresslevel,chaptermark,PassOptionsToClass%
  },%
  morekeywords={[1]% Environments' names
    tabular,tabulary,math,document,minipage,eqnarray,eqnarray*,align,align*,%
    equation,gather,multline,flalign,equation*,gather*,multline*,flalign*,%
    itemize,itemize*,enumerate,enumerate*,description,description*,%
  },%
  morekeywords=[2]{% Keys of key-value lists and packages' names
    bookmarksdepth,see,babel,colorlinks,linktoc,width,left,right,subscript%
  },%
  morekeywords=[3]{% Values of key-value lists
    german,ngerman,french,english,spanish%
  }, alsoletter={-*@1234560}%
}%
\lstdefinelanguage[glossaries]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    makeglossaries,printglossaries,printglossary,newglossaryentry,gls,Gls,GLS,glspl,Glspl,%
    GLSpl,newacronym,%
    glsuseri,glsuserii,glsuseriii,glsuseriv,glsuserv,glsuservi,glsshortpluralkey,glslongpluralkey,%
    loadglsentries,%
    glsadd,glstextformat,glsnamefont,glossarypreamble,glossarypostamble,acrshort,acrshort*,%
    acrlong,acrfull,%
    Acrshort,ACRshort,Acrlong,ACRlong,Acrfull,ACRfull,acrshortpl,Acrshortpl,acrlongpl,Acrlongpl,%
    acrfullpl,Acrfullpl,%
    Acrlong*,acronymtype,printacronyms,printsymbols%
  },%
  % Mandatory arguments (other than environments' names)
  morekeywords={%
  },%
  % Mots-clés de niveau 2 : arguments obligatoires et environnements
  morekeywords=[2]{%
    first,firstplural,plural,sort,nonumberlist,name,acronym,acronyms,symbols,%
    user1,user2,user3,user4,user5,user6,hyper,style,xindy,toc,title,%
    useri,userii,useriii,useriv,userv,uservi%
  },%
  % Mots-clés de niveau 3 : arguments optionnels clés dans clé=valeur
  morekeywords=[3]{%
    listgroup,listhypergroup,%
    % textrm,textit,textsf,textsl,texttt,textup,textbf,textsc,textmd,emph,%
    hyperrm,hyperit,hypersf,hypersl,hypertt,hyperup,hyperbf,hypersc,hypermd,hyperemph%
  },%
  sensitive%
}[keywords,tex,comments]%
%
\lstdefinelanguage[biblatex]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    cite,Cite,parencite,Parencite,footcite,footcitetext,%
    smartcite,Smartcite,%
    textcite,Textcite,supercite,cites,Cites,parencites,%
    Parencites,footcitesfootcitetexts,textcites,Textcites,%
    supercites,autocite,Autocite,autocite*,Autocite*,autocites,%
    Autocites,citeauthor,Citeauthor,citetitle,citetitle*,%
    citeyear,citeurl,parentext,brackettext,nocite,fullcite,%
    footfullcite,volcite,Volcite,pvolcite,Pvolcite,fvolcite,%
    ftvolcite,tvolcite,Tvolcite,avolcite,Avolcite,notecite,%
    Notecite,pnotecite,Pnotecite,fnotecite,citename,citelist,%
    citefield,printbibliography,bibliography,citedate,%
    ExecuteBibliographyOptions,defbibnote,psq,psqq,addbibresource%
  },%
  % morekeywords={%
  %   @article,@book,@inbook,@bookinbook,@suppbook,@booklet,@collection,%
  %   @conference,@incollection,@suppcollection,@manual,@misc,@online,%
  %   @patent,@periodical,@suppperiodical,@proceedings,@inproceedings,%
  %   @reference,@inreference,@report,@thesis,@unpublished,@masterthesis,%
  %   @phdthesis,%
  %   @Article,@Book,@Inbook,@Bookinbook,@Suppbook,@Booklet,@Collection,%
  %   @conference,@Incollection,@Suppcollection,@Manual,@Misc,@Online,%
  %   @patent,@Periodical,@Suppperiodical,@Proceedings,@Inproceedings,%
  %   @reference,@Inreference,@Report,@Thesis,@Unpublished,@Masterthesis,%
  %   @Phdthesis,%
  %   @ARTICLE,@BOOK,@INBOOK,@BOOKINBOOK,@SUPPBOOK,@BOOKLET,@COLLECTION,%
  %   @CONFERENCE,@INCOLLECTION,@SUPPCOLLECTION,@MANUAL,@MISC,@ONLINE,%
  %   @PATENT,@PERIODICAL,@SUPPPERIODICAL,@PROCEEDINGS,@INPROCEEDINGS,%
  %   @REFERENCE,@INREFERENCE,@REPORT,@THESIS,@UNPUBLISHED,@MASTERTHESIS,%
  %   @PHDTHESIS,%
  %   @string,@String,@STRING,@comment%
  % },%
  % directives
  directives={%
    article,book,inbook,bookinbook,suppbook,booklet,collection,%
    conference,incollection,suppcollection,manual,misc,online,%
    patent,periodical,suppperiodical,proceedings,inproceedings,%
    reference,inreference,report,thesis,unpublished,masterthesis,%
    phdthesis,%
    Article,Book,Inbook,Bookinbook,Suppbook,Booklet,Collection,%
    conference,Incollection,Suppcollection,Manual,Misc,Online,%
    patent,Periodical,Suppperiodical,Proceedings,Inproceedings,%
    reference,Inreference,Report,Thesis,Unpublished,Masterthesis,%
    Phdthesis,%
    ARTICLE,BOOK,INBOOK,BOOKINBOOK,SUPPBOOK,BOOKLET,COLLECTION,%
    CONFERENCE,INCOLLECTION,SUPPCOLLECTION,MANUAL,MISC,ONLINE,%
    PATENT,PERIODICAL,SUPPPERIODICAL,PROCEEDINGS,INPROCEEDINGS,%
    REFERENCE,INREFERENCE,REPORT,THESIS,UNPUBLISHED,MASTERTHESIS,%
    PHDTHESIS,%
    string,String,STRING,comment%
  },%
  % Mots-clés de niveau 1 : attributs et options de biblatex
  morekeywords=[2]{%
    abstract,addendum,afterword,annotation,annotator,author,authortype,%
    bookauthor,bookpagination,booksubtitle,booktitle,booktitleaddon,%
    chapter,commentator,date,doi,edition,editor,editora,editorb,%
    editorc,editortype,editoratype,editorbtype,editorctype,eid,eprint,%
    eprintclass,eprinttype,eventdate,eventtitle,file,foreword,holder,%
    howpublished,indextitle,institution,introduction,isan,isbn,ismn,%
    isrn,issn,issue,issuesubtitle,issuetitle,iswc,journalsubtitle,%
    journaltitle,label,language,library,location,mainsubtitle,%
    maintitle,maintitleaddon,month,nameaddon,note,number,organization,%
    origdate,origlanguage,origlocation,origpublisher,origtitle,pages,%
    pagetotal,pagination,part,publisher,pubstate,reprinttitle,series,%
    shortauthor,shorteditor,shorthand,shorthandintro,shortjournal,%
    shortseries,shorttitle,subtitle,title,titleaddon,translator,type,%
    url,urldate,venue,version,volume,volumes,year,crossref,entryset,%
    entrysubtype,execute,gender,hyphenation,indexsorttitle,keywords,%
    options,presort,sortkey,sortname,sorttitle,sortyear,xref,annote,%
    archiveprefix,journal,key,pdf,primaryclass,school,address,%
    %
    backend,style,citestyle,bibstyle,sorting,maxnames,minnames,maxitems,minitems,%
    backref,abbreviate,firstinits,prenote,postnote,useprefix,autopunct%
  },%
  % Mots-clés de niveau 3 : valeurs des attributs identifiées
  morekeywords=[3]{%
    submitted,inpress,danish dutch,american,USenglish,english,%
    british,UKenglish,canadian,australian,newzealand,finnish,french,%
    francais,canadien,german,ngerman,austrian,naustrian,greek,%
    italian,norsk,nynorsk,brazil,portuges,spanish,swedish,%
    %
    biber,numeric,numeric-comp,numeric-verb,alphabetic,%
    alphabetic-verb,authoryear,authoryear-comp,authoryear-ibid,%
    authoryear-icomp,authortitle,authortitle-comp,authortitle-ibid,%
    authortitle-icomp,authortitle-terse,authortitle-tcomp,%
    authortitle-ticomp,verbose,verbose-ibid,verbose-note,%
    verbose-inote,verbose-trad1,verbose-trad2,verbose-trad3,%
    reading,draft,debug,%
    inline,footnote,superscript,plain,%
    nyt,ynt,none,false%
  },%
  alsoletter={-123},%
  sensitive,%
  delim=*[directive]@
  %
}[keywords,directives,tex,comments]%
%
\lstdefinelanguage[csquotes]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    enquote,textelp,textins,blockcquote,SetCiteCommand%
  },%
  % Mots-clés de niveau 1 : arguments optionnels
  morekeywords={%
  },%
  % Mots-clés de niveau 2 : arguments obligatoires et environnements
  morekeywords=[2]{%
    % title,
  },%
  % Mots-clés de niveau 3 : arguments optionnels clés dans clé=valeur
  morekeywords=[3]{%
    skipbib%
  },%
  % Mots-clés de niveau 4 : arguments optionnels valeurs de clés dans clé=valeur
  morekeywords=[4]{%
  },%
  sensitive%
}[keywords,tex,comments]%
%
\lstdefinelanguage[colophon]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    colophontitle,colophontitlestyle,colophontitlesize,colophonmidspace,%
    colophonpagestyle,colophontitlealign,colophonpretitlehook,colophonposttitlehook,%
    colophonparstyle,colophonparsize,colophonparlead,colophonnofirstindent,colophonpreparhook,%
    colophonpostparhook,colophonparalign,colophonnofullpage,colophonnoclrdblpg,colophonclrpg,%
    colophontopspace,colophonbotspace%
  },%
  % Mots-clés de niveau 1 : arguments optionnels
  morekeywords={%
  },%
  % Mots-clés de niveau 2 : arguments obligatoires et environnements
  morekeywords=[2]{%
    colophon,
  },%
  % Mots-clés de niveau 3 : arguments optionnels clés dans clé=valeur
  morekeywords=[3]{%
    titlestyle,titlesize,aftertitle,pagestyle,titlealign,%
    parstyle,parsize,parlead,nofirstindent,nofullpage,noclrdblpg,%
    clrpg,topspace,botspace%
  },%
  % Mots-clés de niveau 4 : arguments optionnels valeurs de clés dans clé=valeur
  morekeywords=[4]{%
  },%
  sensitive%
}[keywords,tex,comments]%
%
\lstdefinelanguage[tcolorbox]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    tcbset,tcbuselibrary,tcbsetforeverylayer%
  },%
  % Mots-clés de niveau 1 : arguments optionnels
  morekeywords={%
  },%
  % Mots-clés de niveau 2 : arguments obligatoires et environnements
  morekeywords=[2]{%
    colback,beamer,skins,listing,only,options,and,text%
  },%
  % Mots-clés de niveau 3 : arguments optionnels clés dans clé=valeur
  morekeywords=[3]{%
    lightgray,red!50!white,autoparskip,beforeafter,skip,balanced%
  },%
  alsoletter={ \ },%
  sensitive,%
}[keywords,tex,comments]%
%
\lstdefinelanguage[listings]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    lstset,lstinline,lstinputlisting,lstMakeShortInline,lstDeleteShortInline,lstdefinestyle%
  },%
  % Environments' names
  morekeywords={%
    listing,listingutf8%
  },%
  % Environments' names
  morekeywords=[1]{%
    lstlisting,%
  },%
  % Keys of key-value lists
  morekeywords=[2]{%
    language,showtabs,escapeinside,mathescape,basicstyle,keywordstyle,commentstyle,%
    stringstyle,numbers,frame,framesep,escapechar,tab,aboveskip,belowskip,%
    linerange,backgroundcolor,rulecolor,framerule,inputencoding,stepnumber,numberstyle,%
    rulesepcolor,style%
  },%
  % Values of key-value lists
  morekeywords=[3]{%
    Ada,left,single,shadowbox,Python%
  },%
  sensitive%
}[keywords,tex,comments]%
%
\lstdefinelanguage[xcolor]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    textcolor,fcolorbox,colorbox,color,rowcolors,arrayrulecolor,rownum%
  },%
  % Mots-clés de niveau 1 : arguments optionnels
  morekeywords={%
    %
  },%
  % Mots-clés de niveau 2 : arguments obligatoires et environnements
  morekeywords=[2]{%
    lightgray,red,blue,brown,purple,magenta,green,black,cyan,yellow,%
  },%
  % Mots-clés de niveau 3 : arguments optionnels clés dans clé=valeur
  morekeywords=[3]{%
    %
  },%
  sensitive%
}[keywords,tex,comments]%
%
\lstdefinelanguage[hyperref]{TeX}[LaTeX]{TeX}%
{%
  % Séquences de contrôles (communément appelées commandes ou macros)
  moretexcs={%
    href,url,hypersetup,hypertarget,hyperlink,pdfstringdefDisableCommands,texorpdfstring%
  },%
  % Mots-clés de niveau 1 : arguments optionnels
  morekeywords={%
    %
  },%
  % Mots-clés de niveau 2 : arguments obligatoires et environnements
  morekeywords=[2]{%
    breaklinks,colorlinks,bookmarks,pdfborderstyle,pdfborder,all,pdfencoding,final,%
    hidelinks,linktoc,%
  },%
  % Mots-clés de niveau 3 : arguments optionnels clés dans clé=valeur
  morekeywords=[3]{%
    unicode%
  },%
  sensitive%
}[keywords,tex,comments]%
% \end{macrocode}
%
% Definition of the \enquote{yad} \TeX{} dialect.
%    \begin{macrocode}
\lstdefinelanguage[yad]{TeX}[LaTeX]{TeX}{%
  moretexcs={% Control sequences' names
    author,title,subtitle,academicfield,speciality,date,supervisor,cosupervisor,comonitor,%
    referee,guest,examiner,committeepresident,pres,institute,coinstitute,company,doctoralschool,%
    laboratory,dedication,frontepigraph,keywords,subject,expression,tableofcontents,submissiondate,%
    maketitle,makedisclaimer,makekeywords,makelaboratory,makeabstract,makededications,%
    makefrontepigraphs,makebackcover,ordernumber,chapter*,disclaimer,newglssymbol,yadsetup,%
    comue,newcorporation,NoCaseChange%
    % acknowledgements,frenchabstract,foreword,preface,caution,
  },%
  % Environments' names
  morekeywords={%
    yathesis%
  },%
  morekeywords=[1]{% Environments' names
    abstract,dedicationspage,epigraphspage,epigraphs,%
    glossaries,otherlanguage%
  },%
  morekeywords=[2]{% Keys of key-value lists
    professor,seniorresearcher,mcf,associateprofessor,juniorresearcher,mcf*,associateprofessor*,%
    juniorresearcher*,corporation,corps,male,female,%
    distinction,award,affiliation,sepcorpaffilfrench,affiliationsecondary,sepcorpaffilenglish,%
    logo,url,nologo,space,mainlanguage,secnumdepth,tocdepth,depth,version,output,logoheight,%
    address,telephone,fax,email,type,acronym,heading,nowarning,noerror,nofrontcover,role,%
    hyperfootnotes,hyperindex,plainpages,pdfpagemode,pdfpagelayout,locale,gray,frametitle,%
    graphicx,adjustbox,setspace,xcolor,datatool,titleps,draftwatermark,babel,datetime,%
    bookmark,fncychap,localtocs,localtocs/depth,localbibs,localbibs*%
  },%
  morekeywords=[3]{% Values of key-value lists
    single,onehalf,double,doctor,yadsymbolstyle,%
    part,chapter,section,subsection,subsubsection,paragraph,subparagraph,%
    none,true,false,UseOutlines,TwoPageRight,UK,FR,dvipsnames,table,%
    Sonny,Lenny,Glenn,Conny,Rejne,Bjarne,PetersLenny,Bjornstrup,%
    screen,draft,inprogress,inprogress*,submitted,submitted*,final,paper,paper*,%
    fbox,shadowbox,ovalbox,supervisor*,cosupervisor*,comonitor*%
  },%
  morekeywords=[4]{% Class and packages options
    warn,nodayofweek,unicode,nostamp,all,numbered,a4paper,leqno,fleqn,10pt,11pt,12pt,%
    detect-all,breaklinks,oneside%
  },%
  morekeywords=[5]{% Translation labels
    email,phone,fax,caution,draft,prepared-at,prepared-at-pl,juniorresearcher,juniorresearcher*,%
    committeemembers,estimateddefensedate,seniorresearcher,supervisors-in-committee,%
    supervisors-in-committee-pl,aim,aimand,examiners,examiners-pl,guests,guests-pl,mcf,mcf*,%
    professor,referees,referees-pl,website,defendedon,supervisedby,thesisdefendedby,thesistitle,%
    inprogress,universitydepartment,inprogressfoottext,submittedfoottext,%
    coinstitute,company,institute,cosupervisor,cosupervisor*,comonitor,%
    comonitor*,supervisor,supervisor*,academicfield,doctoralschool,keywords,%
    ordernumber,committeepresident,committeepresident*,speciality%
  },%
  alsoletter={!-*1234560/}%
}%
%    \end{macrocode}
%
% Definition of the \enquote{gzt} \TeX{} dialect.
%    \begin{macrocode}
\lstdefinelanguage[gzt]{TeX}[LaTeX]{TeX}{%
  moretexcs={% Control sequences' names
    editorinchief,editor,president,classdesigner,classmaintainer,fontdesigner,%
    graphicdesigner,issuesetup,journalsetup,interviewee,academicsignature,%
    subtitle,editorial,gzttableofcontents,gztlocaltableofcontents,minitoc,presidentmessage,%
    acknowledgements,printminibios,aboutfrontcover,rubric,mathematics,%
    dossier,community,interview,teaching,parity,tellme,information,%
    rearviewmirror,tribute,books,email,question,smf,cad,Cad,gzt,%
    century,century*,aside,aside*,gztinput,gztnewtheorem,N,Z,D,Q,R,C,K,%
    printauthorsdetails,date,title,author,maketitle,item,printbibliography,%
    vec,surname,usetikzlibrary,arccos,arcsin,arctan,log,lg,le,leq,ge,geq,%
    gztverb,th,epigraph%
  },%
  % Mandatory arguments (other than environments' names)
  morekeywords={%
    gzt,gztarticle%
  },%
  morekeywords=[1]{% Environments' names
    abstract,minitoclist,bookreview,bookadvertisement,%
    gztfigure,gztfigure*,gzttable,gzttable*,gztscan,gztcode,%
    theorem,theoreme,corollary,corollaire,conjecture,proposition,%
    lemma,lemme,axiom,axiome,definition,remark,remarque,example,exemple,notation,%
    theorem*,theoreme*,corollary*,corollaire*,conjecture*,proposition*,proof,preuve,%
    lemma*,lemme*,axiom*,axiome*,definition*,remark*,remarque*,example*,exemple*,notation*%
  },%
  morekeywords=[2]{% Keys of key-value lists
    number,month,year,publisher,address,phone,fax,email,url,issn,isbn,short,minishort,notintoc,%
    abstract,frenchtitle,englishtitle,% title,label,%
    pictogram,list,help,diameter,textwidth,xshift,yshift,%
    affiliation,email,minibio,photo,webpage,frontcover,bibkey,copyright%
  },%
  morekeywords=[3]{% Values of key-value lists
    true,false,theorem,definition,proof%
  },%
  morekeywords=[4]{% Class and packages options
    pagegrid,forprinter,cover,forauthors,%
  },%
  alsoletter={!-*1234560}%
}%
%    \end{macrocode}
%
% Definition of the \enquote{nwejm} \TeX{} dialect.
%    \begin{macrocode}
\lstdefinelanguage[nwejm]{TeX}[LaTeX]{TeX}{%
  moretexcs={% Control sequences' names
    editorinchief,editor,president,classdesigner,classmaintainer,fontdesigner,%
    graphicdesigner,issuesetup,journalsetup,interviewee,academicsignature,%
    subtitle,editorial,nwejmtableofcontents,minitoc,presidentmessage,%
    acknowledgements,printminibios,aboutfrontcover,rubric,mathematics,%
    dossier,community,interview,teaching,parity,tellme,information,%
    rearviewmirror,tribute,books,email,question,smf,ie,Ie,nwejm,%
    century,century*,aside,aside*,nwejminput,nwejmnewtheorem,N,Z,D,Q,R,C,K,%
    printauthorsdetails,date,title,author,maketitle,item,printbibliography,%
    vec,surname,usetikzlibrary,arccos,arcsin,arctan,log,lg,le,leq,ge,geq,set,%
    nwejmverb,th,epigraph,keywords,msc,acknowledgments,E,I,grad,Div,curl,rot,supp,%
    DeclareMathOperator,BinaryOperators,dif,articlesetup,%
    bbN,bbZ,bbD,bbQ,bbR,bbC,bbK,%
    newenumeration%
  },%
  % Mandatory arguments (other than environments' names)
  morekeywords={%
    nwejm,nwejmart,%
  },%
  morekeywords=[1]{% Environments' names
    abstract,minitoclist,bookreview,bookadvertisement,%
    nwejmfigure,nwejmfigure*,nwejmtable,nwejmtable*,nwejmscan,nwejmcode,%
    theorem,theoreme,corollary,corollaire,conjecture,proposition,%
    lemma,lemme,axiom,axiome,definition,remark,remarque,example,exemple,notation,%
    theorem*,theoreme*,corollary*,corollaire*,conjecture*,proposition*,proof,preuve,%
    lemma*,lemme*,axiom*,axiome*,definition*,remark*,remarque*,example*,exemple*,notation*,%
    assertions,hypotheses%
  },%
  morekeywords=[2]{% Keys of key-value lists
    number,month,year,publisher,address,phone,fax,email,url,issn,isbn,short,minishort,notintoc,%
    abstract,frenchtitle,englishtitle,% title,label,%
    pictogram,list,help,diameter,textwidth,xshift,yshift,%
    affiliation,affiliationtagged,email,minibio,photo,webpage,frontcover,bibkey,copyright,%
    gradient,title/french,style,title,title-plural,singular,plural,label%
  },%
  morekeywords=[3]{% Values of key-value lists
    true,false,theorem,definition,proof%
  },%
  morekeywords=[4]{% Class and packages options
    pagegrid,forprinter,cover,forauthors,%
  },%
  alsoletter={!-*1234560/}%
}%
%    \end{macrocode}
%
% Definition of the \enquote{studentreport} \TeX{} dialect.
%    \begin{macrocode}
\lstdefinelanguage[studentreport]{TeX}[LaTeX]{TeX}{%
  moretexcs={% Control sequences' names
    reportsetup,daterange,companytutor,academictutor,companylogo%
  },%
  % Mandatory arguments (other than environments' names)
  morekeywords={%
  },%
  morekeywords=[1]{% Environments' names
  },%
  morekeywords=[2]{% Keys of key-value lists
    institute,subinstitute,subsubinstitute,year,10pt,11pt,12pt,internship,project,layout,%
    strings,pretitle,company,tutor,tutors,before~start~date,before~end~date,date,%
    logos,logosheights,keywords,subject,%
  },%
  morekeywords=[3]{% Values of key-value lists
    ulco,iutlco,gtelco,gimlco,%
  },%
  alsoletter={!-*1234560}%
}%
%    \end{macrocode}
%
% Enhancements of the \enquote{bash} ×sh× dialect.
%    \begin{macrocode}
\lstdefinelanguage{bash}[]{sh}%
{%
  morekeywords={%
    ssh-keygen,rsa,mkdir,cp,chmod,git,clone,tree,pull,lgr,lga,commit,%
    ls,add,record,push%
  },%
  alsoletter={!-*}%
}%
%    \end{macrocode}
%
% \section{Settings}
%
%    \begin{macrocode}
\hypersetup{colorlinks}%
%
\presetkeys{todonotes}{fancyline, color=white}{}%
%
\setlength\bibinitsep{1.25\baselineskip}
%
% \setglossarystyle{indexhypergroup}
% \setacronymstyle{long-sc-short}
%
% \SetupExSheets[question]{type=exam}
% \SetupExSheets[solution]{print=true}
%
\SetCiteCommand{\autocite}
%
%    \end{macrocode}
%
% The \pkg{kpfonts} and \pkg{libertine}'s ttfamilies are not as nice as
% \pkg{lmodern}'s one to my taste. So let's use the latter.
%    \begin{macrocode}
\renewcommand{\ttdefault}{lmtt}
%    \end{macrocode}
%
% \pkg{lmodern} doesn't provide extended bold italic typewritter, hence
% a warning when a command such as \pkg{tcolorbox}' |\docAuxCommand| is used in
% a italic context. To get rid of this warning, we silently substitute bold
% slanted to extended bold italic.
%    \begin{macrocode}
{%
  \ttfamily%
  \DeclareFontShape{T1}{lmtt}{bx}{it}{<-> ssub * lmtt/b/sl}{}%
}
%
% \renewcommand{\generalname}{Général}%
%
\if@DBD@beamer@not@loaded@
\ifcsdef{@chapter}{
  \xapptocmd{\@chapter}{%
    \addtocontents{dbwarninglist}{\protect\addvspace{10\p@}}%
    \addtocontents{dbremarklist}{\protect\addvspace{10\p@}}%
    \addtocontents{dbexamplelist}{\protect\addvspace{10\p@}}%
    \addtocontents{dbfaqlist}{\protect\addvspace{10\p@}}%
    \addtocontents{dbtablist}{\protect\addvspace{10\p@}}%
  }{}{}
}{}
\fi%
%
\sisetup{locale=FR,detect-all}
% \floatsetup[table]{style=plaintop}
%
% \lstset{%
%   breaklines=true,
%   basicstyle=\normalfont\ttfamily,
%   commentstyle=\color{comment}\itshape,
%   keywordstyle=\color{environment},
%   keywordstyle=[2]\color{key},
%   keywordstyle=[3]\color{value},
%   keywordstyle=[4]\color{keyword4},
%   keywordstyle=[5]\color{keyword5},
%   moredelim=*[s][\color{math}\ttfamily]{\[}{\]},
%   moredelim=*[s][\color{math}\ttfamily]{$}{$},
%   stringstyle=\color{string},
%   columns=flexible,
%   % prebreak={\c_space_tl\Righttorque},
%   % postbreak={\c_space_tl\Lefttorque}
% }%
%    \end{macrocode}
%
% Suppression du gras dans la commande ×\docAuxCommand× :
%    \begin{macrocode}
\def\disp@com#1{\colDef{\ttfamily#1}}
%    \end{macrocode}
%
% On définit une nouvelle clé pour la commande ×\includegraphics× de
% sorte à pouvoir inclure les pages d'un \File{.pdf} externe en
% indiquant non pas des numéros de pages absolus, mais plutôt des
% références qui devront être labellisées au moyen de la commande
% ×\zlabel× du \Package{zref} (ce dernier devant être chargé dans le
% \File{.tex} externe du \File{.pdf} avec les options ×user× et
% ×abspage×). Cf. \url{https://tex.stackexchange.com/a/31489/18401}.
%    \begin{macrocode}
\define@key{Gin}{bylabel}{%
    \edef\@tempa{{Gin}{page=\zref@extract{#1}{abspage}}}%
    \expandafter\setkeys\@tempa%
}%
%    \end{macrocode}
%
% \section{Macros, environments and theorems}
%
% \subsection{Macros}
%
% We create a command that displays the translatation of expressions.
%    \begin{macrocode}
\NewDocumentCommand \translateexpression { sm }
{
  \enquote{\foreignlanguage{french}{\translate{#2}}}~
  ou~
  \enquote{\foreignlanguage{english}{\translate{#2}}}%
  \IfBooleanF {#1}
  {
    \selonlangue%
    \index{expression!en~français!\enquote{\foreignlanguage{french}{\translate{#2}}}}%
    \index{expression!en~anglais!\enquote{\foreignlanguage{english}{\translate{#2}}}}%
  }
}
%    \end{macrocode}
%
% Some hacks to avoid "\makeindex"'s “title” option from \pkg{imakeidx} ignored
% if \pkg{tcolorbox}' indexation is used (see
% \url{http://tex.stackexchange.com/q/332284/18401}).
%    \begin{macrocode}
\@ifclassloaded{beamer}{%
}{%
  \expandafter\AtBeginDocument\expandafter{%
    \expandafter\def\expandafter\theindex\expandafter{\theindex}%
  }
  \expandafter\AtBeginDocument\expandafter{%
    \expandafter\def\expandafter\endtheindex\expandafter{\endtheindex}%
  }
%    \end{macrocode}
%
% Hack of \pkg{imakeidx} in order different indices have different extensions
% that can be taken in account by \pkg{latexmk}'s custom dependencies and
% subroutine (see \url{http://tex.stackexchange.com/q/336653/18401}). The
% extensions of input and output files are specified by new |extin| and |extout|
% options of |\makeindex|.
%    \begin{macrocode}
  \ExplSyntaxOff
  \def\imki@finalmessage#1{}% since you're using latexmk
  \def\imki@startidx#1#2{%
    \if@filesw
    \def\index{\@bsphack
      \@ifnextchar [{\@index}{\@index[\imki@jobname]}}
    \expandafter\newwrite\csname #1@idxfile\endcsname
    \immediate\openout \csname #1@idxfile\endcsname #1.#2\relax
    \typeout{Writing index file #1.#2}%
    \fi}
  \xpatchcmd\imki@makeindex
  {\imki@startidx\imki@name}
  {\imki@startidx\imki@name\imki@extout}
  {}{}
  \xpatchcmd\imki@build
  {\imki@dokey\imki@title}
  {\imki@dokey\imki@title
    \imki@dokey\imki@extin
    \imki@dokey\imki@extout}
  {}{}
  \xpatchcmd{\imki@putindex}
  {\imki@options}
  {\c_space_tl~ -o~ #1.\imki@extin\imki@options}
  {}{}
  \xpatchcmd{\imki@putindex}
  {.idx}
  {.\imki@extout}
  {}{}
  \xpatchcmd{\imki@putindex}
  {.ind}
  {.\imki@extin}
  {}{}
  \def\imki@extout{idx}\def\imki@extin{ind}
  \define@key{imki}{extout}{\def\imki@extout{#1}}
  \define@key{imki}{extin}{\def\imki@extin{#1}}
}%
\ExplSyntaxOn
%    \end{macrocode}
%
%    \begin{macrocode}
\@ifclassloaded{beamer}{%
}{%
  \cs_new_protected:Nn \_@@_alert:n
  {
    \begingroup
    \color{red}
    #1
    \endgroup
  }%
  \NewDocumentCommand \alert {m}
  {
    \_@@_alert:n {#1}
  }%
  \DeclareDocumentCommand \changes { smmm } {
    \IfBooleanTF {#1}
    {
      \tl_set:Nn \l_tmpa_tl {\alert{#4}}
    }{
      \tl_set:Nn \l_tmpa_tl {#4}
    }
    \ifx\@onlypreamble\@notprerr
    \index[\jobname-changes]{\texttt{#2}~(#3)!\l_tmpa_tl}
    \else
    \index[\jobname-changes]{\texttt{#2}~(#3)!\emph{Globalement}!\l_tmpa_tl|gobble}
    \fi
  }
  \DeclareDocumentCommand \PrintChanges { !O{} } {
    \indexprologue{#1}
%    \end{macrocode}
%
% The changes are printed in a numbered chapter hence subject to
% cross-references.
%    \begin{macrocode}
    \def\imki@indexlevel{\chapter}
    \printindex[\jobname-changes]
    \def\imki@indexlevel{\chapter*}
  }
}%
% \@ifpackageloaded{doc}{%
%   \renewcommand*{\changes@}[3]{%
%     \protected@edef\@tempa{%
%       \noexpand\glossary{\ttfamily#1\normalfont{}~(#2)\levelchar
%         \ifx\saved@macroname\@empty
%         \c_space_tl\actualchar\generalname
%         \else
%         \expandafter\@gobble\saved@macroname
%         \actualchar
%         \string\verb\quotechar*\verbatimchar\saved@macroname\verbatimchar
%         \fi
%         :\levelchar #3}}%
%     \@tempa
%     \endgroup
%     \@esphack
%   }
%   \cs_set_eq:NN \_@@_orig_changes \changes
%   \DeclareDocumentCommand \changes { smmm } {
%     \_@@_orig_changes{#2}{#3}{%
%       \IfBooleanTF {#1}
%       {
%         \alert{#4}%
%       }
%       {
%         #4%
%       }
%     }
%   }
% }{%
% }
%    \end{macrocode}
%
% In case of French language, we ask the plain style of \Package{csquotes} to be
% the right ones.
%    \begin{macrocode}
\IfLanguageName{french}{%
  \DeclarePlainStyle{«~}{~»}%
                    {“}{”}
}{}%
%    \end{macrocode}
%
% The following hack was provided by Clemens Niederberger
% (see \url{http://tex.stackexchange.com/q/304980}).
%
% This saves the url with all characters catcode other:
%    \begin{macrocode}
\tl_const:Nx \c_@@_standard_url_tl { \tl_to_str:n { https://ctan.org/pkg/ } }
%    \end{macrocode}
% Separate formatting:
% #1: package or class name
% #2: extra argument (e.g. font attribute)
\cs_new_protected:Npn \_@@_package_format:nn #1#2
{
  #2{\sffamily#1}
}
% The main macro
%   #1: boolean (true => no hyperlink)
%   #2: boolean (false => indexation)
%   #3: optional url
%   #4: package or class name
%   #5: index main entry (if #5 false)
%   #6: index subsubentry (if #5 false)
%   #7: extra argument for the package or class name (e.g. font attribute)
\cs_new_protected:Npn \_@@_package:nnnnnnn #1#2#3#4#5#6#7
{
  \texorpdfstring
  {
    \bool_if:nTF {#1}
    { \_@@_package_format:nn {#4}{#7} }
    {
      \tl_if_blank:nTF {#3}
      {
        \tl_set:Nx \l_tmpa_tl {\c_@@_standard_url_tl #4}
        \href
        { \l_tmpa_tl }
        { \_@@_package_format:nn {#4}{#7} }
      }
      {
        \href
        { #3 }
        { \_@@_package_format:nn {#4}{#7} }
      }
    }
    \IfBooleanF{#2}
    {
      \tl_if_empty:nTF {#6}
      {
        \index{#5!liste!\textsf{#4}}
      }{
        \index{#5!liste!\textsf{#4}!#6}
      }
    }
  }
  {#4}
}
\NewDocumentCommand{\package}{ s t+ O{} m !O{package} !O{} !O{} } {
  \_@@_package:nnnnnnn {#1}{#2}{#3}{#4}{package}{#6}{#7}
}
\NewDocumentCommand{\Package}{ s t+ O{} m !O{package} !O{} !O{} } {
  \IfLanguageName{french}{package~}{}%
  \_@@_package:nnnnnnn {#1}{#2}{#3}{#4}{package}{#6}{#7}
  \IfLanguageName{english}{~package}{}%
}
%
\NewDocumentCommand{\class}{ s t+ O{} m !O{} !O{} !O{} } {
  \IfLanguageName{french}{%
    \_@@_package:nnnnnnn {#1}{#2}{#3}{#4}{classe}{#6}{#7}
  }{}%
  \IfLanguageName{english}{%
    \_@@_package:nnnnnnn {#1}{#2}{#3}{#4}{class}{#6}{#7}
  }{}%
}
\NewDocumentCommand{\Class}{ s t+ O{} m !O{} !O{} !O{} } {
  \IfLanguageName{french}{%
    classe~%
    \_@@_package:nnnnnnn {#1}{#2}{#3}{#4}{classe}{#6}{#7}
  }{}%
  \IfLanguageName{english}{%
    \_@@_package:nnnnnnn {#1}{#2}{#3}{#4}{class}{#6}{#7}~%
    class
  }{}%
}
%
\cs_new_protected:Nn \_@@_format:n
{
  \textsc{#1}
}
\NewDocumentCommand{\format}{ m }
{%
  \_@@_format:n {#1}
}
\NewDocumentCommand{\Format}{ m }
{%
  \IfLanguageName{french}{format~}{}%
  \_@@_format:n {#1}%
  \IfLanguageName{english}{~format}{}%
}%
\cs_new_protected:Nn \_@@_file:n
{
  % \bgroup% \color{magenta}
  \texttt{#1}
  % \egroup
}
\NewDocumentCommand{\file}{ m }
{%
  \_@@_file:n {#1}
}
\NewDocumentCommand{\File}{ m }
{%
  \IfLanguageName{french}{fichier~}{}%
  \_@@_file:n {#1}%
  \IfLanguageName{english}{~file}{}%
}%
\NewDocumentCommand{\folder}{ m }
{
  \_@@_file:n {#1}%
}
\NewDocumentCommand{\Folder}{ m }
{%
  \IfLanguageName{french}{dossier~}{}%
  \_@@_file:n {#1}%
  \IfLanguageName{english}{~directory}{}%
}%
%
% \NewDocumentCommand \ie { s } {%
%   \IfBooleanTF {#1}
%   {
%     \IfLanguageName{french}{%
%       c'est-\`{a}-dire
%     }{}%
%     \IfLanguageName{english}{%
%       id est
%     }{}%
%   }
%   {
%     \IfLanguageName{french}{%
%       c.-à-d
%     }{}%
%     \IfLanguageName{english}{%
%       i.e
%     }{}%
%     \@ifnextchar.%
%     {
%     }{
%       .\xspace
%     }%
%   }
% }
%
\NewDocumentCommand{\program}{ m }
{
  \_@@_file:n {#1}%
}
\NewDocumentCommand{\texstudio}{  }
{
  \program{TeXstudio}\xspace
}
\NewDocumentCommand{\emacs}{  }
{
  \program{Emacs}\xspace
}
\NewDocumentCommand{\texlive}{ }
{
  \href{http://www.tug.org/texlive/}{\TeX{}\c_space_tl{}Live}\xspace
}
\NewDocumentCommand{\miktex}{ }
{
  \href{http://www.tug.org/texlive/}{MiK\TeX}\xspace
}
\NewDocumentCommand{\linux}{ }
{
  Linux\index{Linux}\xspace
}
\NewDocumentCommand{\macos}{ }
{
  Mac OS\index{Mac OS}\xspace
}
\NewDocumentCommand{\windows}{ }
{
  Windows\index{Windows}\xspace
}
%
\cs_new_protected:Nn \_@@_links:nnn
{
  \cs_if_exist:NTF \faExternalLink {%
    % \href{#2#3#1}{\texttt{#3}}~\href{http://mirror.ctan.org/macros/latex/contrib/yathesis/#2#3#1}{\faExternalLink}
    \texttt{#3}~% \textnormal{(\attachfile{#2#3#1})}
  }{
    % \href{#2#3#1}{\texttt{#3}}~\href{http://mirror.ctan.org/macros/latex/contrib/yathesis/#2#3#1}{}
    \texttt{#3}~% \textnormal{(\attachfile{#2#3#1})}
  }
}
\cs_new_protected:Nn \_@@_etctree:
{
  ...
}
\NewDocumentCommand{\etctree}{  }
{
  \_@@_etctree:%
}
\cs_new_protected:Nn \_@@_filetree:n
{
  \_@@_links:nnn {}{\folder/\subfolder/}{#1}
}
\NewDocumentCommand{\filetree}{ m }
{%
  \_@@_filetree:n {#1}
}
\NewDocumentCommand{\pdffiletree}{ m }
{%
  \_@@_filetree:n {#1.pdf}
}
\NewDocumentCommand{\texfiletree}{ m }
{%
  \_@@_filetree:n {#1.tex}
}
\cs_new_protected:Nn \_@@_zip_filetree:
{
  \bgroup% \color{magenta}
  \bfseries
  \color{red}
  \_@@_links:nnn {}{\folder/}{\subfolder.zip}
  \egroup
}
\NewDocumentCommand{\zipfiletree}{  }
{%
  \_@@_zip_filetree: {}
}
\cs_new_protected:Nn \_@@_directory_filetree:
{
  \bgroup% \color{magenta}
  \bfseries
  \color{blue}
  \_@@_links:nnn {../exemples}{}{\folder/}
  \egroup
}
\NewDocumentCommand{\directorytree}{  }
{%
  \_@@_directory_filetree: {}
}
\cs_new_protected:Nn \_@@_subdirectory_filetree:
{
  \bgroup% \color{magenta}
  \bfseries
  \color{blue}
  \_@@_links:nnn {.}{\folder/}{\subfolder/}
  \egroup
}
\NewDocumentCommand{\subdirectorytree}{  }
{%
  \_@@_subdirectory_filetree: {}
}
%
\cs_new_protected:Nn \_@@_mandatory:
{
  \hyperref[sec-comm-oblig]{%
    \textcolor{red!75!black}{
      % \sys_if_engine_pdftex:TF
      % {
      %   % \string!
      %   \ding{52}
      % }{
        \faLock
        % \ding{52}
      % }%
    }
    \ifnum\getpagerefnumber{sec-comm-oblig}=\thepage%
    \else%
    \textsuperscript{\ding{213}\,\kvtcb@text@pageshort\,\pageref*{sec-comm-oblig}}%
    \fi%
  }%
}
\cs_new_protected:Nn \_@@_mandatory_no_link:
{
  \textcolor{red!75!black}{
    \faLock
  }
}
\NewDocumentCommand{\mandatory}{ s }
{
  \IfBooleanTF {#1}
  { \_@@_mandatory_no_link: {} }
  { \_@@_mandatory: {} }
}%
%
\NewDocumentCommand{\unixtldirectory}{}
{
  \directorytree{\c_@@_unixtldirectory_string_tl}
}%
\NewDocumentCommand{\tlversion}{}
{
  \directorytree{\c_@@_tlversion_string_tl}
}%
\NewDocumentCommand{\wintldirectory}{}
{
  \directorytree{\c_@@_wintldirectory_string_tl}
}%
\NewDocumentCommand{\tldistdirectory}{}
{
  \directorytree{\c_@@_tldistdirectory_string_tl}
}%
\NewDocumentCommand{\miktexdistdirectory}{}
{
  \directorytree{\c_@@_miktexdistdirectory_string_tl}
}%
\NewDocumentCommand{\docdirectory}{}
{
  \directorytree{\c_@@_docdirectory_string_tl}
}%
\NewDocumentCommand{\texdirectory}{}
{
  \directorytree{\c_@@_texdirectory_string_tl}
}%
\NewDocumentCommand{\sourcedirectory}{}
{
  \directorytree{\c_@@_sourcedirectory_string_tl}
}%
\NewDocumentCommand{\jobdirectory}{}
{
  \directorytree{\c_@@_jobdirectory_string_tl}
}%
\NewDocumentCommand{\jobdocdirectory}{}
{
  \directorytree{\c_@@_jobdocdirectory_string_tl}
}%
%    \end{macrocode}
%
%    \begin{macrocode}
\NewDocumentCommand{\version}{ m }
{
  Version~\texttt{#1}
}
%    \end{macrocode}
%
%    \begin{macrocode}
\NewDocumentCommand{\pdf}{}
{
  \textsc{pdf}
}
%    \end{macrocode}
%
% \begin{macro}{\aside}
%    \begin{macrocode}
\DeclareDocumentCommand \aside { s m } {%
  \IfBooleanTF {#1}
  {
    \c_@@_aside_string_tl{}~#2
  }
  {
    \c_@@_aside_string_tl{}~#2~\c_@@_aside_string_tl
  }
}
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{century}
%    \begin{macrocode}
% \cs_new_protected:Nn \_@@_century:n
% {
%   \textsc{
%     \int_to_roman:n {#1}
%   }%
%   \int_compare:nNnTF { #1 } > { 1 }{\ieme}{\ier} si\`ecle%
% }
% \NewDocumentCommand \century { m } {%
%   \_@@_century:n {#1}%
% }
%    \end{macrocode}
% \end{macro}
% On définit une commande d'inclusion de \enquote{copie d'écran} qui
% inclut une page d'un \File{.pdf} externe en indiquant non pas des
% numéros de pages absolus, mais plutôt des références stipulées au
% moyen de la clé ×bylabel× ci-dessus. Ceci nécessite de charger le
% \Package{zref} avec l'option ×xr× dans le \File{.tex} où sont
% incluses les pages du \File{.pdf} externe.
%    \begin{macrocode}
\bool_if:nT {\g_@@_yad_bool} {%
  %
  \zexternaldocument{\c_@@_flatsample_string_tl/these}%
  \bool_new:N \g_@@_these_aux_exists%
  \msg_new:nnn{denisbdoc}{File~ `\c_@@_these_aux_string_tl'~ needed}{%
    File~ `\c_@@_these_aux_string_tl'~ needed~ (otherwise~ this~ document~ will~
    be~ incomplete)!~ Please~ go~ to~ `\c_@@_flatsample_string_tl'~
    directory~ and~ run~ first:\\\\

    \ \ latexmk~ -g~ -pdf~ -jobname=these~ -pdflatex="pdflatex~ \%O~ \string\ \\
    \ \ '\string\RequirePackage\{etoolbox\}~ \string\ \\
    \ \ \string\AtEndPreamble\{\string\RequirePackage\{yathesis-demo\}\}~ \string\ \\
    \ \ \string\input\{\%S\}'"~ these.tex
    \\\\
    Afterwards,~ recompile~ this~ document.%
  }%
  \file_if_exist:nTF {\c_@@_flatsample_string_tl/\c_@@_these_aux_string_tl} { \bool_gset_true:N
    \g_@@_these_aux_exists }{
    % \bool_gset_false:N \g_@@_these_aux_exists
    \msg_warning:nn{denisbdoc}{File~ `\c_@@_these_aux_string_tl'~ needed}
    \AfterEndPreamble{%
      \begin{dbwarning}{Documentation~incomplète~!}{documentation-incomplete}
        La~ présente~ documentation~ est~ incomplète~ car~ le~
        \File{\c_@@_these_aux_string_tl}~ est~ absent~ du~
        \Folder{\c_@@_flatsample_string_tl}.~ Pour~ régler~ le~ problème,~
        rendez-vous~ dans~ ce~ dossier~ et~ compilez~ le~ \File{these.tex}~ au~
        moyen~ de~ la~ commande~ suivante\footnote{Sur~ une~ seule~ ligne.}~ :
        \par\medskip

        \lstinline[language=bash,upquote=true,commentstyle=,stringstyle=,showstringspaces=false]+latexmk~-g~ -norc~ -r~ ./latexmkrc~-jobname=these-pdflatex="pdflatex~\%O~'\\RequirePackage\{etoolbox\}\\AtEndPreamble\{\\RequirePackage\{yathesis-demo\}\}\\input\{\%S\}'"~these+
      \end{dbwarning}
    }
  }
  %
  \msg_new:nnn{denisbdoc}{File~ `\c_@@_template_sample_zip_string_tl'~ needed}{%
    File~ `canevas-specimen.zip'~ needed~ (otherwise~ this~ document~ will~ be~
    incomplete)!~ Please~ get~ this~ file~ from~ the~ orignal~ yathesis'~
    documentation~ and~ save~ it~ in~ `../exemples/'~ folder.~ Afterwards,~
    recompile~ this~ document.%
  }%
  \file_if_exist:nTF {../\c_@@_template_sample_zip_string_tl} {}{
    \msg_warning:nn{denisbdoc}{File~ `\c_@@_template_sample_zip_string_tl'~ needed}
    \AfterEndPreamble{%
      \begin{dbwarning}{Documentation~incomplète~!}{}
        La~ version~ électronique~ (\pdf{})~ de~ la~ présente~ documentation~
        est~ incomplète~ :~ normalement,~ les~ canevas~ et~ spécimens~ y~ sont~
        intégrés~ par~ le~ biais~ de~ l'archive~ \gls{zip}~
        \file{\c_@@_template_sample_zip_string_tl}~ (alors~ accessible~ par~
        simple~ clic)~ mais~ ce~ n'est~ pas~ le~ cas~ ici,~ ce~ fichier~ étant~
        absent~ du~ dossier~ parent.~ % \Folder{\c_@@_examples_path_tl}.~
        Pour~ régler~ le~ problème,~ accédez~ à~ ce~ fichier~ attaché~ à~ la~
        version~ électronique~ originale~ de~ la~ documentation~ de~
        \yatcl{}\footnote{Disponible~ à~ l'adresse~
          \url{http://ctan.org/pkg/yathesis},~ si~ besoin~ est.}~ et~ placez-le~
        dans~ le~ \Folder{\c_@@_examples_path_tl}.
      \end{dbwarning}
    }
  }
  %
  \cs_new_protected:Nn \_@@_screenshot:nn
  {
    \bool_if:NTF {\g_@@_these_aux_exists} {
      \fbox{\includegraphics[bylabel=#2,width=#1\linewidth-2\fboxsep-2\fboxrule]{\c_@@_flatsample_string_tl/these}}%
    }{%
      \begin{dbwarning}{Copie~d'écran~manquante~!}{}
        Il~ devrait~ ici~ y~ avoir~ une~ copie\c_space_tl ~ d'écran.~ Cf.~
        \vref{wa-documentation-incomplete}~ pour~ plus~ de~ détails.
      \end{dbwarning}
    }
  }
  \NewDocumentCommand \screenshot { O{.45} m } {%
    \_@@_screenshot:nn {#1}{#2}
  }
}
%    \end{macrocode}
%
% We want to make the angle brackets generated by ×\meta× to be copied and
% pasted as they are, and not replaced by "h" and "i"
% (cf. \url{https://tex.stackexchange.com/q/18146/18401}).
%    \begin{macrocode}
\newunicodechar{〈}{$\langle$}
\newunicodechar{〉}{$\rangle$}
%    \end{macrocode}
%
%    \begin{macrocode}
\cs_new_protected:Nn \_@@_meta:nn
{
    \bgroup%
    \normalfont
    \ttfamily%
    \itshape%
    \textcolor{#1}{$\langle$#2$\rangle$}%
    \egroup%
}
\AtBeginDocument{%
  \RenewDocumentCommand{\meta}{ O{meta} m } {
    \_@@_meta:nn {#1}{#2}
  }
}%
%    \end{macrocode}
%
% \subsection{Environments}
%
%    \begin{macrocode}
\NewTCBListing{preamblecode}{ !O{} }{%
  codes,%
  drop~lifted~shadow,
  #1%
}
\NewTCBListing{preamblecode*}{ !O{} }{%
  codes,%
  enlarge~top~by=\c_zero_dim,
  drop~lifted~shadow,
  #1%
}
\NewTCBListing{bodycode}{ !O{} }{%
  codes,%
  #1%
}
\NewTCBInputListing{\preamblesampleold}{ O{these.tex} m m }{%
  samples,
  drop~lifted~shadow,
  listing~file={\c_@@_treesample_string_tl/#1},
  listing~options={rangebeginprefix=\\,rangeendsuffix=\},#2},
  #3,
}%
\NewTCBInputListing{\preamblesample}{ m m m }{%
  samples,
  drop~lifted~shadow,
  listing~file={\c_@@_these_snippets_directory_tl/#1},
  listing~options={#2},
  #3,
}%
\NewTCBInputListing{\bodysampleold}{ O{these.tex} m m }{%
  samples,
  listing~file={\c_@@_treesample_string_tl/#1},
  listing~options={rangebeginprefix=\\,rangeendsuffix=\},#2},
  #3,
}%
\NewTCBInputListing{\bodysample}{ m m m }{%
  samples,
  listing~file={\c_@@_these_snippets_directory_tl/#1},
  listing~options={#2},
  #3,
}%
% \newtcbinputlisting{\preamblesample}[3][these.tex]{%
%   samples,
%   drop~lifted~shadow,
%   listing~file={\c_@@_treesample_string_tl/#1},
%   listing~options={rangebeginprefix=\\,rangeendsuffix=\},#2},
%   #3,
% }%
% \newtcbinputlisting{\bodysample}[3][these.tex]{%
%   samples,
%   listing~file={\c_@@_treesample_string_tl/#1},
%   listing~options={rangebeginprefix=\\,rangeendsuffix=\},#2},
%   #3,
% }%
%    \end{macrocode}
%
% \subsection{Theorems}
%
%    \begin{macrocode}
\tl_new:N \g_@@_number_within_tl
\ifcsdef{chapter}{
  \tl_set:Nn \g_@@_number_within_tl {chapter}
}{
  \tl_set:Nn \g_@@_number_within_tl {section}
}
\@ifclassloaded{gztarticle}{\tl_set:Nn \g_@@_number_within_tl {section}}{}%
\@ifclassloaded{nwejmart}{\tl_set:Nn \g_@@_number_within_tl {section}}{}%
\@ifclassloaded{beamer}{\tl_set:Nn \g_@@_number_within_tl {section}}{}%
%    \end{macrocode}
%
%    \begin{macrocode}
\newtcbtheorem[list~inside=dbwarninglist,number~within=\g_@@_number_within_tl,crefname={avertissement}{avertissements}]{dbwarning}{Avertissement}{%
  colback=red!5!white,
  colframe=red!75!black,
  dbtcb
}{wa}
\newtcbtheorem[list~inside=dbexamplelist,number~within=\g_@@_number_within_tl,crefname={exemple}{exemples}]{dbexample}{Exemple}{%
  colback=lime!5!white,
  colframe=lime!75!black,
  dbtcb,
}{ex}
\newtcbtheorem[list~inside=dbremarklist,number~within=\g_@@_number_within_tl,crefname={remarque}{remarques}]{dbremark}{Remarque}{%
  colback=cyan!5!white,
  colframe=cyan!75!black,
  dbtcb
}{rq}
\newtcbtheorem[list~inside=dbfaqlist,number~within=\g_@@_number_within_tl,crefname={question}{questions}]{dbfaq}{Question}{%
  colback=lightgray!5!white,
  colframe=lightgray!75!black,
  % fontupper=\itshape,
  dbtcb
}{faq}
\newtcbtheorem[list~inside=dbtabularlist,number~within=\g_@@_number_within_tl,crefname={tableau}{tableaux}]{dbtab}{Tableau}{%
  colback=purple!5!white,
  colframe=purple!75!black,
  fontupper=\itshape,
  dbtcb
}{tab}
%    \end{macrocode}
%
% \section{Macros for menu entries}
%
% The following code is borrowed from
% \href{http://tex.stackexchange.com/a/40637/18401}{Enrico Gregorio (egreg)}.
%    \begin{macrocode}
\NewDocumentCommand{\menuentry}{ O{} m }
  {
   \group_begin: % to segregate local changes to keys and font
   \keys_set:nn { menuentry } { #1 }
   \exp_args:NNx \seq_set_split:Nnn \l_menuentry_seq { \l_menuentry_inputsep_tl } { #2 }
   \tl_use:N \l_menuentry_font_tl
   \bool_set_false:N \l_tmpa_bool
   \seq_map_function:NN \l_menuentry_seq \menuentry_process:n
   \group_end:
  }
\NewDocumentCommand{\menuentryset} { m }
  { \keys_set:nn { menuentry } { #1 } }

\tl_new:N \l_menuentry_font_tl
\tl_new:N \l_menuentry_sep_tl
\tl_new:N \l_menuentry_inputsep_tl
\seq_new:N \l_menuentry_seq

\cs_new:Npn \menuentry_process:n #1
  {
   \bool_if:NTF \l_tmpa_bool
     { \l_menuentry_sep_tl }
     { \bool_set_true:N \l_tmpa_bool }
   \tl_if_empty:nTF { #1 } {EMPTY~ARG!} { #1 }
  }
\keys_define:nn { menuentry }
  {
   menufont .tl_set:N = \l_menuentry_font_tl ,
   menusep  .tl_set:N = \l_menuentry_sep_tl,
   inputsep .tl_set:N = \l_menuentry_inputsep_tl,
  }
\keys_set:nn { menuentry }
  {
   menufont = \sffamily ,
   menusep  = ${}\to{}$
 }
%    \end{macrocode}
\menuentryset{inputsep=>}
%
% \section{Definitions specific to peticular classes or packages}
%
% \subsection{\Class{yathesis}}
%
%    \begin{macrocode}
\tl_const:Nn \c_@@_yat_class_name_tl {yathesis}
\tl_const:Nn \c_@@_configuration_directory_string_tl {configuration}
\tl_const:Nn \c_@@_configuration_file_string_tl {thesis.cfg}
\tl_const:Nn \c_@@_characteristics_file_string_tl {characteristics.tex}
\tl_const:Nn \c_@@_macros_file_file_string_tl {macros.tex}
\tl_const:Nn \c_@@_auxiliary_directory_string_tl {auxiliaires}
\tl_const:Nn \c_@@_glossary_file_string_tl {glossaire.tex}
\tl_const:Nn \c_@@_acronyms_file_string_tl {acronymes.tex}
\tl_const:Nn \c_@@_symbols_file_string_tl {symboles.tex}
\tl_const:Nn \c_@@_images_directory_string_tl {images}
\tl_const:Nn \c_@@_thesis_master_file_string_tl {these}
%    \end{macrocode}
%
% \begin{macro}{\yat}
% \begin{macro}{\yatpa}
% \begin{macro}{\yatcl}
%    \begin{macrocode}
\NewDocumentCommand \yat { }
{%
  \textsl{\textsf{\c_@@_yat_class_name_tl}}
}
\NewDocumentCommand \yatpa { }
{%
  \Package+{\c_@@_yat_class_name_tl}[\itshape][]\xspace
}
\NewDocumentCommand \yatcl { }
{%
  \texorpdfstring{\class+{\c_@@_yat_class_name_tl}[][][\itshape]\xspace}{yathesis}
}
\NewDocumentCommand \yatCl { }
{%
  \texorpdfstring{\Class+{\c_@@_yat_class_name_tl}[][][\itshape]\xspace}{classe yathesis}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
%    \begin{macrocode}
\NewDocumentCommand \configurationdirectory { }
{%
  \c_@@_configuration_directory_string_tl
}
\NewDocumentCommand \configurationfile { }
{%
  \c_@@_configuration_file_string_tl
}
\NewDocumentCommand \characteristicsfile { }
{%
  \c_@@_characteristics_file_string_tl
}
\NewDocumentCommand \macrosfile { }
{%
  \c_@@_macros_file_string_tl
}
\NewDocumentCommand \auxiliarydirectory { }
{%
  \c_@@_auxiliary_directory_string_tl
}
\NewDocumentCommand \glossaryfile { }
{%
  \c_@@_glossary_file_string_tl
}
\NewDocumentCommand \acronymsfile { }
{%
  \c_@@_acronyms_file_string_tl
}
\NewDocumentCommand \symbolsfile { }
{%
  \c_@@_symbols_file_string_tl
}
\NewDocumentCommand \imagesdirectory { }
{%
  \c_@@_images_directory_string_tl
}
\NewDocumentCommand \thesismasterfile { }
{%
  \c_@@_thesis_master_file_string_tl
}
%    \end{macrocode}
%
% \subsection{\Class{gzt}}
%
%    \begin{macrocode}
\tl_const:Nn \c_@@_gzt_class_name_tl {gzt}
\tl_const:Nn \c_@@_gztauthor_class_name_tl {gztarticle}
\tl_const:Nn \c_@@_journal_short_title_string_tl {Gazette}
\tl_const:Nn \c_@@_journal_title_string_tl {
  \c_@@_journal_short_title_string_tl{}~des~Math\'ematiciens%
}
%    \end{macrocode}
%
% \begin{macro}{\gzt}
% \begin{macro}{\gztcl}
%    \begin{macrocode}
% \NewDocumentCommand \gzt { s } {
%   \IfBooleanTF {#1}
%   {
%     \textit{\c_@@_journal_title_string_tl}
%   }
%   {
%     \textit{\c_@@_journal_short_title_string_tl}
%   }
% }
% \NewDocumentCommand \gztcl { }
% {%
%   \Class{\textsl{\texttt{\c_@@_gzt_class_name_tl}}}
% }
\NewDocumentCommand \gztauthor { }
{%
  \textsl{\texttt{\c_@@_gztauthor_class_name_tl}}
}
\NewDocumentCommand \gztauthorcl { }
{%
  \Class+[http://ctan.org/pkg/gzt]{\gztauthor}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{\Class{nwejm}}
%
%    \begin{macrocode}
\tl_const:Nn \c_@@_nwejm_class_name_tl {nwejm}
\tl_const:Nn \c_@@_nwejmauthor_class_name_tl {nwejmart}
%    \end{macrocode}
%
% \begin{macro}{\nwejm}
% \begin{macro}{\nwejmcl}
%    \begin{macrocode}
\ProvideDocumentCommand \nwejm { s } {
  \IfBooleanTF {#1}
  {
    \textit{\c_@@_journal_title_string_tl}
  }
  {
    \textit{\c_@@_journal_short_title_string_tl}
  }
}
\ProvideDocumentCommand \nwejmcl { }
{%
  \Class{\c_@@_nwejm_class_name_tl}
}
\NewDocumentCommand \nwejmauthor { }
{%
  \class[\c_@@_standard_url_tl\c_@@_nwejm_class_name_tl]{\c_@@_nwejmauthor_class_name_tl}
}
\NewDocumentCommand \nwejmauthorcl { }
{%
  \Class[\c_@@_standard_url_tl\c_@@_nwejm_class_name_tl]{\c_@@_nwejmauthor_class_name_tl}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \subsection{\Class{studentreport}}
%
%    \begin{macrocode}
\tl_const:Nn \c_@@_studentreport_class_name_tl {studentreport}
%    \end{macrocode}
%
% \begin{macro}{\studentreportcl}
%    \begin{macrocode}
\ProvideDocumentCommand \studentreportcl { }
{%
  \Class{\c_@@_studentreport_class_name_tl}
}
\NewDocumentCommand \studentreportauthor { }
{%
  \class[\c_@@_standard_url_tl\c_@@_studentreport_class_name_tl]{\c_@@_studentreportauthor_class_name_tl}
}
\NewDocumentCommand \studentreportauthorcl { }
{%
  \Class[\c_@@_standard_url_tl\c_@@_studentreport_class_name_tl]{\c_@@_studentreportauthor_class_name_tl}
}
%    \end{macrocode}
% \end{macro}
%
%    \begin{macrocode}
\lstdefinestyle{pre-dbtex}{%
  escapechar=",%"
  language=[LaTeX]TeX,
  alsolanguage=[extLaTeX]TeX,
  % alsolanguage=[glossaries]TeX,
  % alsolanguage=[biblatex]TeX,
  alsolanguage=[csquotes]TeX,
  % alsolanguage=[tcolorbox]TeX,
  % alsolanguage=[listings]TeX,
  % alsolanguage=[xcolor]TeX,
  % alsolanguage=[hyperref]TeX,
  texcsstyle=*\color{texcs},
  breaklines=true,
  basicstyle=\normalfont\ttfamily,
  commentstyle=\color{comment}\itshape,
  directivestyle={\color{directive}},
  keywordstyle={\color{red}},
  keywordstyle={[1]\color{environment}},
  keywordstyle={[2]\color{key}},
  keywordstyle={[3]\color{value}},
  keywordstyle={[4]\color{keyword4}},
  keywordstyle={[5]\color{keyword5}},
  moredelim=*[s][\color{math}\ttfamily]{\\[}{\\]},
  moredelim=*[s][\color{math}\ttfamily]{$}{$},
  stringstyle=\color{string},
  columns=flexible,
  keepspaces,
  numberstyle=\small,
  inputencoding=utf8/latin1,
  aboveskip=\c_@@_listings_aboveskip_skip,
  belowskip=\c_@@_listings_belowskip_skip
}%
%    \end{macrocode}
%
%    \begin{macrocode}
\tl_gclear:N \g_tmpa_tl
\bool_if:nT {\g_@@_yad_bool} {%
  \lstdefinestyle{dbtex}{%
    style=pre-dbtex,%
    alsolanguage=[yad]TeX,%
    alsolanguage=[colophon]TeX,%
    moretexcs={printbibliography,autocite},%
    morekeywords=[2]{%
      colback,refsegment%
    },%
    morekeywords=[2]{%
      red,white%
    },%
  }%
  \tl_gset:Nx \g_tmpa_tl {\c_@@_yat_class_name_tl}
}
\bool_if:nT {\g_@@_gzt_bool} {%
  \lstdefinestyle{dbtex}{%
    style=pre-dbtex,%
    alsolanguage=[gzt]TeX,%
  }%
  \tl_gset:Nx \g_tmpa_tl {\c_@@_gzt_class_name_tl}
}
\bool_if:nT {\g_@@_nwejm_bool} {%
  \lstdefinestyle{dbtex}{%
    style=pre-dbtex,%
    alsolanguage=[nwejm]TeX,%
  }%
  \tl_gset:Nx \g_tmpa_tl {\c_@@_nwejm_class_name_tl}
}
\bool_if:nT {\g_@@_studentreport_bool} {%
  \lstdefinestyle{dbtex}{%
    style=pre-dbtex,%
    alsolanguage=[studentreport]TeX,%
  }%
  \tl_gset:Nx \g_tmpa_tl {\c_@@_studentreport_class_name_tl}
}
\NewDocumentCommand{\currentclass}{}{\g_tmpa_tl}
\NewExpandableDocumentCommand{\currenturl}{}{\c_@@_standard_url_tl\g_tmpa_tl}
\NewDocumentCommand{\thisclass}{}{\class{\g_tmpa_tl}}
\NewDocumentCommand{\Thisclass}{}{\Class{\g_tmpa_tl}}
%    \end{macrocode}
%
%    \begin{macrocode}
\tcbset{dbtcb/.style={%
    breakable,
    fonttitle=\bfseries,
    enlarge~top~by=1mm,
    separator~sign~dash,
    label~separator=-,
    before~title={%
      \hypersetup{hidelinks}%
      \tcbset{%
        color~definition=white,
        color~hyperlink=white,
      }%
    }%
  }%
}%
%
\tcbset{%
  doc~head={%
    % boxsep=4pt,arc=4pt,boxrule=0.6pt,%
    % frame~style=fill,%
    % colframe=red!50!black,%
    interior~style={%
      fill,%
      color=yellow!10!white,%
    }%
  }%
}
\tcbset{%
  /tcb/doclang/environment~content=contenu~de~l'environnement,
  /tcb/doclang/color=~(couleur),
  /tcb/doclang/colors=Couleurs,
  /tcb/doclang/environments=Environnements,
  /tcb/doclang/keys=Clés,
  /tcb/doclang/values=Valeurs,
  /tcb/doclang/pageshort=p.,
  /tcb/documentation~listing~style=dbtex,
  /tcb/color~command=texcs,
  /tcb/color~environment=environment,
  /tcb/color~key=key,
  /tcb/color~value=value,
  % index~format=pgfchapter,
  index~format=off,
  index~colorize,
  index~annotate=false,
  enhanced,
  listing~style=dbtex,
  every~box/.style={documentation~listing~style=dbtex},
% index~actual={},
% doc~left~indent=-15mm,
% doc~right~indent=-15mm+2em
  codes/.style={%
    listing~only,
    enlarge~top~by=\medskipamount,
    colframe=ExampleFrame,
    colback=ExampleBack,
    fonttitle=\bfseries,
    fontupper=\small,
    split=0.5,
    enhanced,
    breakable,
    listing~style=dbtex,
  }%
}%
\tcbset{samples/.style={%
    codes,
    % listing~options={rangebeginprefix=\\,rangeendsuffix=\}}
  }%
}%
\renewcommand*{\tcbdocnew}[1]{\scriptsize\sffamily\textcolor{green!50!black}{\bfseries
Nouv.~:}~#1}
\renewcommand*{\tcbdocupdated}[1]{\scriptsize\sffamily\textcolor{blue!75!black}{\bfseries
\textsc{m.-à-j.}~:}~#1}
%
\lstset{style=dbtex}
\sys_if_engine_pdftex:TF
{
  \ExplSyntaxOff
  \lstMakeShortInline[style=dbtex]|
  \ExplSyntaxOn
}{
  \lstMakeShortInline[style=dbtex]×
}
%    \end{macrocode}
%
% We PDFdisable some commands in order to avoid troubles in bookmarks.
%    \begin{macrocode}
\pdfstringdefDisableCommands{%
  \let\textcolor\@gobble
  \def\yatcl{yathesis}
  \def\yatCl{classe~yathesis}
  \def\program#1{#1}
}
%    \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
% We switch to a \enquote{normal} category code régime.
%    \begin{macrocode}
\ExplSyntaxOff
%    \end{macrocode}
%
%    \begin{macrocode}
%</package>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*xindy-style>
%    \end{macrocode}
%
%    \begin{macrocode}
;; (define-attributes ("example"))
;; (define-attributes ("definition"))
(define-attributes (("default" "definition" "example")))
(define-attributes ("textsf"))
(markup-locref :open "\hyperpage{" :close "}" :attr "default")
(markup-locref :open "\textbf{\hyperpage{" :close "}}" :attr "definition")
(markup-locref :open "\textit{\hyperpage{" :close "}}" :attr "textit")
(markup-locref :open "\textsf{\hyperpage{" :close "}}" :attr "textsf")
(markup-locref :open "\emph{\hyperpage{" :close "}}" :attr "example")

(markup-crossref-list :class "see" :open "\seelink{" :sep "; " :close "}{}")

(define-crossref-class "hyperindexformat")
(markup-crossref-list :class "hyperindexformat" :open
      "\hyperindexformat{" :sep "; " :close "}{}")

;; (merge-to "definition" "default" :drop)

(markup-locref :open "\hyperpage{" :close "}")
(markup-locref :open "\hyperpage{" :close "}" :attr "hyperpage")


(markup-keyword-list :open "\targetindexentry{" :close "}" )
(markup-keyword-list :open "\targetindexentryi{" :close "}" :depth 1)
(markup-keyword-list :open "\targetindexentryii{" :close "}" :depth 2)

(markup-index :open  "~n
% \bookmarksetup{open}
\begin{theindex}
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{%
    \belowpdfbookmark{#1}{\csuse{DBD@index@symbolic@name}:#1}%
    \par\indexheading{#1}{\csuse{DBD@index@symbolic@name}}\par
    % \nopagebreak
  }
  ~n"
  :close "~n~n\end{theindex}~n"
:tree)
%    \end{macrocode}
%
%    \begin{macrocode}
%</xindy-style>
%    \end{macrocode}
%
%    \begin{macrocode}
%<*xindy-style-chng>
%    \end{macrocode}
%
%    \begin{macrocode}
(define-crossref-class "hyperindexformat")
(markup-crossref-list :class "hyperindexformat" :open
      "\hyperindexformat{" :sep "; " :close "}{}")

(markup-locref :open "\hyperpage{" :close "}")

(markup-locref-list :sep ", ")
(markup-locclass-list :open "\hspace*{\fill}\nobreakspace" :close "" )

(define-attributes (("gobble" "default")))
(markup-locref  :open "\makeatletter\@gobble{" :close "}\makeatother" :attr "gobble")
% (markup-locclass-list :open "" :sep "")

% (markup-keyword-list :open "{\small " :close "}" )
% (markup-keyword-list :open "{\small " :close "}" :depth 1)
% (markup-keyword-list :open "{\small " :close "}" :depth 2)

(markup-index :open  "~n
\clearpage
\phantomsection
\begin{theindex}
  \small
  \providecommand*\lettergroupDefault[1]{}
  \providecommand*\lettergroup[1]{}
  ~n"
  :close "~n~n\end{theindex}~n"
:tree)
%    \end{macrocode}
%
%    \begin{macrocode}
%</xindy-style-chng>
%    \end{macrocode}
%
% \end{implementation}
%
% \PrintChanges
%
% \PrintIndex
\endinput

% Local Variables:
% mode: doctex
% eval: (doctex-mode)
% TeX-engine: xetex
% TeX-command-default: "TeX"
% TeX-master: t
% ispell-local-dictionary: "francais"
% End:
