% !TeX encoding = UTF-8
% !TeX spellcheck = fr_CA
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Document principal pour l'exemple d'utilisation de glosmathtools
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% nohyperref pour charger le package hyperref manuellement 
\documentclass[projet,nohyperref,article,english,french]{ulthese}
%% ===================== packages ============================================
\ifxetex\else \usepackage[utf8]{inputenc} \fi
\usepackage{mathtools,siunitx,amsmath,amsfonts}
\usepackage{hyperref} % dernier package chargé sauf glosmathtools
% option "toc" passé à glossaries : ajout nomenclature dans signets du PDF :
\usepackage[qtmarkupright,singlelineskip,toc]{glosmathtools}
%% ===================== preamble ============================================
%% ------------- glosmathtools -----------------------------------------------
\makeglossaries% executé en premier
\setacronymlang{L2}% abbréviation en langue seconde
\setglossarystyle{nomencl-L2L1}% description bilingue
\loadglsentries{sample_glosmathtools_glos} % fichier des définitions
\glssetwidest{LOOP}  % IMPORTANT : entrée la plus large de la nomenclature
\renewcommand*{\glscatnamefmt}[1]{\textbf{#1}} % format des catégories
%% ------------- ulthese ----------------------------------------------------
\titre{Documentation et exemple de \texttt{glosmathtools} dans \texttt{ulthese}}
\soustitre{v1.0.0}
\auteur{Francis Gagnon}
\makeatletter\renewcommand*{\UL@typeofdoc}{}\makeatother
%% ============================================================================

\begin{document}
\selectlanguage{french} % pour babel (pas glosmathtool)
\frontmatter         
\frontispice

\printglossary[title=Nomenclature]

\mainmatter                     

\chapter{Documentation et exemple de \texttt{glosmathtools}}

\section{Compilation}
Le package \texttt{glosmathtools} se base sur \texttt{glossaries} inclus dans MiKTeX et TeX Live. Un peu comme une bibliographie, la compilation du glossaire se fait en exécutant les commandes dans l'ordre suivant :
\begin{enumerate}
	\item \texttt{pdflatex}
	\item \texttt{makeglossaries}
	\item \texttt{pdflatex}
\end{enumerate}
La commande \texttt{makeglossaries} est directement accessible dans les menu de TeXstudio ou avec \texttt{F9}. Pour un autre éditeur, il faut ajouter une commande personnalisée. Par exemple, dans TexMaker, c’est accessible dans le menu \texttt{Utilisateur > Commandes Utilisateur > Éditer Commandes Utilisateur}:
\begin{itemize}
	\item Item menu : \texttt{glossaries} 
	\item Commande : \texttt{makeglossaries \%}
\end{itemize}
Sous Windows avec MiKTeX, il est possible que le script \texttt{makeglossaries} nécessite une installation de Perl (voir \url{https://tinyurl.com/ybnoyqjp}). Une fois Perl installé, il faut exécuter le script \texttt{perltex.exe} disponible dans le répertoire d'installation de MiKTeX.

\section{Options du package}
Les options du package \texttt{glosmathtools} se résument par :
\begin{description}
	\item[qtmarkupright] caractère \texttt{<">} raccourci pour indice sans italique
	\item[singlelineskip] force interligne simple pour la nomenclature
	\item[nodefop] utilisation des opérateurs et accents sans définition
	\item[{[autres options]}] passés au package \texttt{glossaries}
\end{description}
Par exemple, l'option \textbf{toc} du package \texttt{glossaries} peut être ajouté afin d'inclure la nomenclature dans la table des matières.

\section{Utilisation du package}
Par défaut, les symboles mathématiques doivent être utilisés dans le texte pour qu'ils soient ajoutés à la nomenclature, ce qui incite l'auteur à introduire ses variables. Il est tout de même possible de manuellement ajouter un symbole sans y référer avec la macro \texttt{\textbackslash glsadd\{label\}}, ou \texttt{\textbackslash glsaddall}, pour tout ajouter.

\subsection{Symboles, indices et accentuations}
L'insertion d'un symbole mathématique simple avec hyperlien se fait avec la macro \texttt{\textbackslash gls} de \texttt{glossaries} : \gls{k}, \gls{mat.A} et \gls{mat.b}. C'est la même chose pour les abréviations : la \gls{TL}. Les abréviations sont uniquement définies à leur première utilisation : la \gls{TL}.

Les indices doivent être définis avec un label du format \texttt{sub.resteDuLabel}: l'indice \gls{sub.a} désigne l'air. La macro \texttt{\textbackslash glsub} permet d'ajouter un indice à une variable : \glsub{d}{v}, \glsub{z}{v}, \glsub{T}{v}, \glsub{D}{a}, \glsub{rho}{w} et \glsub{mu}{v}. En définissant les symboles mathématiques avec \texttt{\textbackslash newglosentrymath}, toutes les macros peuvent s'utiliser autant en mode \texttt{text} qu'en mode \texttt{math} (avec \texttt{\$\$}). Par contre, il est mieux d'écrire explicitement les symboles dans une équation afin d'alléger le code (pas d'hyperlien):
\begin{equation}
d"v + \glsub{d}{v} = \SI{10.0}{\centi\meter} = 3.937\qtmark
\end{equation}
Le package peut être chargé avec l'option \texttt{qtmarkupright}. Le caractère \texttt{<">} est alors configuré comme raccourci pour l'écriture d'un indice sans italique en mode \texttt{math} (\texttt{<\_>} pour indice italique) \footnote{ La macro \texttt{\textbackslash qtmark} permet d'insérer le caractère \texttt{<">}. En ISO, les indices représentant l'abréviation d'un mot s'écrivent sans italique, et, celles représentant une variable, en italique.}. 

La macro \texttt{\textbackslash glsvi} permet d'ajouter une variable en indice à une autre variable, et \texttt{\textbackslash glsvisub}, une variable indicée à une autre variable : \glsvi{T}{k} et \glsvisub{T}{z}{v}. Finalement, il est possible d'ajouter deux indices séparés par une virgule avec \texttt{\textbackslash glsubs} : \glsubs{D}{w}{a}. En l’occurrence, l'opérateur virgule est ajouté dans la nomenclature, qui doit donc être défini dans le glossaire sous le label \texttt{op.comma}.

Des accents peuvent aussi s'ajouter sur les variables avec la macro \texttt{\textbackslash glsac} : \glsac[dot]{m} et \glsac[bar]{T}. À leur utilisation respective, un opérateur est ajouté dans la nomenclature. Ils doivent donc être définis à leur label respectif. Les accents disponibles sont:
\begin{description} 
\item[dot] $\dot{\bullet}$ (défini au label \texttt{op.dot})
\item[ddot] $\ddot{\bullet}$ (défini au label \texttt{op.ddot})
\item[bar] $\bar{\bullet}$ (défini au label \texttt{op.bar})
\item[hat] $\widehat{\bullet}$ (défini au label \texttt{op.hat})
\item[vec] $\vec{\bullet}$ (défini au label \texttt{op.vec})
\item[tilde] $\widetilde{\bullet}$ (défini au label \texttt{op.tilde})
\end{description}
De plus, un argument optionnel permet d'ajouter des accents à toutes les macros précédentes : \glsub[bar]{T}{v} et \glsubs[dot]{m}{v}{a}. Il y a deux arguments optionnels dans le cas de \texttt{\textbackslash glsvi} et \texttt{\textbackslash glsvisub} : \glsvi[dot]{m}{k}, \glsvi[bar][dot]{T}{m} et \glsvisub[][dot]{T}{m}{w}. Finalement, il est possible d'utiliser les accents sans définition dans la nomenclature avec l'option \texttt{nodefop}.

\subsection{Langue, abréviations et nomenclature}
S'il y a des changements de langues à travers le document, il faut changer de langue pour les acronymes. La clé \texttt{descseclang} doit être préalablement définie dans le glossaire. Par la suite, la macro \texttt{\textbackslash setacronymlang} permet de choisir 4 options de langue: 
\begin{description}
	\item[L1] description langue principale (abréviations) : \setacronymlang{L1}\acrfull{ODE}
	\item[L2] description langue seconde (abréviations) : \setacronymlang{L2}\acrfull{ODE}
	\item[L1L2] description bilingue, langue principale (abréviations, \textit{langue seconde}) : \setacronymlang{L1L2}\acrfull{ODE}
	\item[L2L1] description bilingue, langue seconde (abréviations, \textit{langue principale}) : \setacronymlang{L2L1}\acrfull{ODE}
\end{description}
\setacronymlang{L2}% retour à la langue du document
L'environnement \texttt{acronymlang} fonctionne de manière similaire : \begin{acronymlang}{L2L1}\acrfull{ODE}\end{acronymlang}. La macro \texttt{\textbackslash glslang} affiche l'acronyme dans la langue spécifiée : \glslang[L2L1]{ODE}. Les secondes descriptions sont aussi accessibles avec \texttt{\textbackslash glsdescsec} : une \glsdescsec{ODE}.

Pour la nomenclature (ou liste des symboles), il est important de définir la plus longue entrée avec \texttt{\textbackslash glssetwidest} au préambule.
Comme les abréviations, il est possible de changer sa langue avec 4 options de style pour \texttt{\textbackslash setglossarystyle}:
\begin{description}
	\item[nomencl-L1] (ou \textbf{nomencl}) descriptions langue principale
	\item[nomencl-L2] descriptions langue seconde
	\item[nomencl-L1L2] descriptions bilingues, langue principale (\textit{langue seconde})
	\item[nomencl-L2L1] descriptions bilingues, langue seconde (\textit{langue principale})
\end{description}
L'option \texttt{singlespaceglos} du package permet de forcer un interligne simple pour la nomenclature (nécessite \texttt{ulthese}/\texttt{memoir} ou le package \texttt{setspace}). La macro \texttt{\textbackslash glscatnamefmt} peut être redéfinie au préambule afin de modifier le style de l'en-tête des catégories. L'exemple de la page ii est une nomenclature bilingue \textbf{nomencl-L2L1} en interligne simple.

Si défini, le contenu de la clé \texttt{symbol} est ajouté a la fin de la description (pour les unités ou dimensions). À noter que les symboles mathématiques ne sont pas enregistrés dans cette clé, mais bien dans la clé \texttt{name}.

\end{document}