texlive[57765] Master/texmf-dist: gzt (16feb21)

commits+karl at tug.org commits+karl at tug.org
Tue Feb 16 23:12:38 CET 2021


Revision: 57765
          http://tug.org/svn/texlive?view=revision&revision=57765
Author:   karl
Date:     2021-02-16 23:12:37 +0100 (Tue, 16 Feb 2021)
Log Message:
-----------
gzt (16feb21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib
    trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf
    trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex
    trunk/Master/texmf-dist/doc/latex/gzt/french/latexmkrc
    trunk/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex
    trunk/Master/texmf-dist/source/latex/gzt/gzt.dtx
    trunk/Master/texmf-dist/tex/latex/gzt/gzt.cls
    trunk/Master/texmf-dist/tex/latex/gzt/gzt.dbx
    trunk/Master/texmf-dist/tex/latex/gzt/gzt.lbx
    trunk/Master/texmf-dist/tex/latex/gzt/gztarticle.cls

Modified: trunk/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md	2021-02-16 22:12:37 UTC (rev 57765)
@@ -1,5 +1,22 @@
 # [Unreleased]
 
+# [1.0.1] - 2021-02-14
+
+## Added
+- Option to create moral reports (`gzt` class only).
+- Local (to a given article) table of contents
+
+## Changed
+- The class now relies on the new LaTeX core hooks.
+- Documentation revised.
+- Various improvements.
+
+## Fixed
+- Superflous uppercases removed (cont.).
+- `gztcode` environments partially gobble their content under certain
+  conditions.
+- Various other small bugs.
+
 # [1.0.0] - 2020-03-17
 
 ## Added
@@ -8,7 +25,7 @@
 
 ## Changed
 - Compilation date displayed only if the issue number is not specified
-  (`gztarticle` classonly).
+  (`gztarticle` class only).
 - Prevent column breaks within items of "Comité de rédaction" (at the price of
   unbalanced columns).
 

Modified: trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib
===================================================================
--- trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib	2021-02-16 22:12:37 UTC (rev 57765)
@@ -4,8 +4,8 @@
 @Online{Bitouze,
   Title                    = {Conférence \LaTeX{} \no6},
   Author                   = {Bitouzé, Denis},
-  Date                     = {2016-06-08},
-  Url                      = {http://gte.univ-littoral.fr/members/dbitouze/pub/latex/diapositives-cours-d/conference-n-6/downloadFile/file/en-ligne6.pdf},
+  Date                     = {2020-11-25},
+  Url                      = {https://frama.link/en-ligne6},
   Language                 = {french},
   Organization             = {Université du Littoral Côte d'Opale},
   Subtitle                 = {Bibliographie (biber/biblatex), citations d’extraits},
@@ -14,8 +14,8 @@
 @Online{Bitouze7,
   Title                    = {Conférence \LaTeX{} \no7},
   Author                   = {Bitouzé, Denis},
-  Date                     = {2016-05-23},
-  Url                      = {http://gte.univ-littoral.fr/members/dbitouze/pub/latex/diapositives-cours-d/conference-n-7/downloadFile/file/en-ligne7.pdf},
+  Date                     = {2020-11-25},
+  Url                      = {https://frama.link/en-ligne7},
   Language                 = {french},
   Organization             = {Université du Littoral Côte d'Opale},
   Subtitle                 = {Glossaires et (liste d’)acronymes, index},

Modified: trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex	2021-02-16 22:12:37 UTC (rev 57765)
@@ -1,11 +1,12 @@
 \documentclass{gztarticle}
 %
-\newdate{release-date}{17}{03}{2020}
-\newcommand{\releaseversion}{1.0.0}
-%
-\usepackage{denisbdoc}
+\usepackage[gzt]{denisbdoc}
 \usepackage[firstpage]{draftwatermark}
 %
+\lstset{%
+  alsolanguage=[varioref]TeX,%
+}
+%
 \indexsetup{level=\section*,toclevel=section,noclearpage,firstpagestyle=__gzt_mainmatter_ps}
 \makeindex[columns=3]
 \tcbset{index format=off}
@@ -70,8 +71,6 @@
 }
 \ExplSyntaxOff
 %
-\lstMakeShortInline[style=dbtex]|
-%
 \SetWatermarkColor{gray!10}%
 \SetWatermarkFontSize{30mm}%
 \SetWatermarkText{\MakeUppercase{travail en cours}}%
@@ -78,13 +77,17 @@
 %
 \addbibresource{gzt-fr.bib}
 %
+\input{sections/fixed-footnotes}
+%
+\DTMsavedate{filedate}{\gztfiledate}
+%
 \begin{document}
 \title[short=Documentation de la classe de la \emph{Gazette} destinée aux
 auteurs]{Documentation de la classe \LaTeX{} de la \gzt*{} destinée aux
   auteurs}
-\subtitle[short=Version \releaseversion{}
-(\displaydate{release-date})]{\bigskip\Large Version \releaseversion{} en date du
-  \displaydate{release-date}}%
+\subtitle[short=Version \gztfileversion{}
+(\DTMusedate{filedate})]{\bigskip\Large Version \gztfileversion{} en date du
+  \DTMusedate{filedate}}%
 %
 \author[%
 affiliation={%
@@ -91,9 +94,9 @@
   Université du Littoral Côte d'Opale, Laboratoire de mathématiques pures et
   appliquées%
 },%
-photo=denis,%
-email=denis.bitouze at lmpa.univ-littoral.fr,%
-webpage=http://gte.univ-littoral.fr/members/dbitouze/pub/latex/,%
+photo=./denis,%
+email=denis.bitouze at univ-littoral.fr,%
+webpage=https://gte.univ-littoral.fr/Members/denis-bitouze/pub/latex,%
 ]{Bitouzé, Denis}
 %
 \maketitle*
@@ -100,7 +103,6 @@
 %
 \localtableofcontents
 %
-\input{sections/fixed-footnotes}
 \input{sections/gztarticle}
 \input{sections/packages-charges}
 \input{sections/notations}

Modified: trunk/Master/texmf-dist/doc/latex/gzt/french/latexmkrc
===================================================================
--- trunk/Master/texmf-dist/doc/latex/gzt/french/latexmkrc	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/doc/latex/gzt/french/latexmkrc	2021-02-16 22:12:37 UTC (rev 57765)
@@ -10,10 +10,7 @@
     system( "makeglossaries \"$_[0]\"" );
 }
 
-add_cus_dep('idx', 'ind', 0, 'texindy');
-sub texindy{
-    system("texindy -L french \"$_[0].idx\"");
-}
+$makeindex = 'texindy -L french -C utf8';
 
 push @generated_exts, 'acn', 'acr', 'alg', 'bcf', 'fls', 'gl*', 'sbl*', 'sl*', 'sym*' ;
 

Modified: trunk/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex	2021-02-16 22:12:37 UTC (rev 57765)
@@ -102,7 +102,7 @@
   courant\footnote{En entête.}.
 \end{docKey}
 
-\begin{bodycode}
+\begin{bodycode}[listing options={deletekeywords={[1]{exemple,title,label}}}]
 \title[short=Les travaux de Martin \surname{Hairer}]{Martin \surname{Hairer},
   l'équation de KPZ et les structures de régularité}
 \end{bodycode}
@@ -116,7 +116,7 @@
 \label{sec-auteurs}
 
 Un auteur d'article est spécifié au moyen de la commande \refCom{author}
-suivante. En cas d'auteurs multiples, il  suffit de recourir à plusieurs
+suivante. En cas d'auteurs multiples, il suffit de recourir à plusieurs
 occurrences de cette commande.
 
 \begin{docCommand}{author}{\oarg{options}\brackets{\meta{Nom}, \meta{Prénom}}}
@@ -272,7 +272,7 @@
   qui y figurent sont documentées plus loin.} illustre la plupart des commandes
 et options vues jusqu'ici.
 
-\begin{bodycode}
+\begin{bodycode}[listing options={deletekeywords={[2]{article}}}]
 \title[short=Les travaux de Manjul \surname{Bhargava}]{Manjul \surname{Bhargava},
   anneaux de petit rang et courbes elliptiques}
 %
@@ -423,8 +423,17 @@
 Cette section donne une liste exhaustive des outils (commandes et
 environnements) fournis par la \gztauthorcl.
 
+\subsection{Table des matières locale}
+\label{sec:table-des-matieres}
+
+\begin{docCommand}{gztlocaltableofcontents}{}
+  Cette commande, facultative, permet de faire figurer une table des matières
+  locale à un article.
+\end{docCommand}
+
+Une telle table des matières n'affiche que les sections de l'article.
+
 \subsection{Images, tableaux et cadres}
-\label{sec-images-tableaux}
 
 La \gztauthorcl{} fournit des environnements :
 \begin{itemize}
@@ -448,127 +457,131 @@
 % La \gztauthorcl{} fournit en outre les environnements plus neutres
 % \refEnv{gztframe} et \refEnv{gztframe*} qui permettent de placer du contenu dans
 % des cadres.
+%
+% Tous ces environnements acceptent des options décrites \vref{sec-options-gzt}.
 
-Tous ces environnements acceptent des options décrites \vref{sec-options-gzt}.
+\begin{docEnvironments}[
+  doclang/environment content=image,
+  doc parameter = \oarg{options}
+  ]{
+    {
+      doc name=gztfigure,
+      doclang/environment content=image,
+    },
+    {
+      doc name=gztfigure*,
+      doclang/environment content=image,
+    },
+    {
+      doc name=gzttable,
+      doclang/environment content=tableau,
+    },
+    {
+      doc name=gzttable*,
+      doclang/environment content=tableau,
+    },
+    {
+      doc name=gztframe,
+      doclang/environment content=contenu à encadrer,
+    },
+    {
+      doc name=gztframe*,
+      doclang/environment content=contenu à encadrer,
+    }
+  }
+  Ces environnements insèrent l'\meta{image}, le \meta{tableau} ou le
+  \meta{contenu à encadrer}\footnote{Mais sans être estampillé \enquote{Figure}
+    ou \enquote{Tableau}.} dans un cadre :
+  \begin{description}
+  \item[de largeur :]\leavevmode
+    \begin{description}
+    \item[versions non étoilées :] celle de la ligne courante, donc notamment
+      celle de la ligne d'une colonne en mode bi-colonne ;
+    \item[versions étoilées :] celle de l'empagement, donc
+      à cheval sur les deux colonnes en mode bi-colonne ;
+    \end{description}
+  \item[placé :]\leavevmode
+    \begin{description}
+    \item[versions non étoilées :] là où l'environnement a été
+      utilisé\footnote{Il s'agit d'un environnement \enquote{non flottant}.} ;
+    \item[versions étoilées :] si possible en haut de la page où l'environnement
+      a été utilisé\footnote{Il s'agit d'un environnement \phantom{non}
+        \enquote{flottant}.}.
+    \end{description}
+  \end{description}
+\end{docEnvironments}
 
-\subsubsection{Images}
-\label{sec-images}
+% \begin{docEnvironment}[doclang/environment content=tableau créé avec \docAuxEnvironment{tabular}]{gzttable}{\oarg{option(s)}}
+%   Cet environnement insère le tableau :
+%   \begin{itemize}
+%   \item \emph{à l'emplacement où il est utilisé} ;
+%   \item dans un cadre de largeur la ligne courante, donc notamment de la largeur
+%     de la ligne d'une colonne en mode bi-colonne.
+%   \end{itemize}
+% \end{docEnvironment}
+%
+% \begin{docEnvironment}[doclang/environment content=tableau créé avec \docAuxEnvironment{tabular}]{gzttable*}{\oarg{option(s)}}
+%   Cet environnement insère le tableau :
+%   \begin{itemize}
+%   \item en haut de la page où il a été employé, donc probablement \emph{pas}
+%     à l'emplacement où il est utilisé (il s'agit d'un tableau
+%     \enquote{flottant}) ;
+%   \item dans un cadre de largeur celle de l'empagement, donc à cheval sur les
+%     deux colonnes en mode bi-colonne.
+%   \end{itemize}
+% \end{docEnvironment}
+%
+% \subsubsection{Cadres}
+% \label{sec-cadres}
+%
+% Le contenu
+% % \footnote{Notamment des images et, le cas échéant, des tableaux.}
+% devant être encadré mais sans être estampillé \enquote{Figure} ou
+% \enquote{Tableau} le sera au moyen de l'un des deux environnements
+% \refEnv{gztframe} et \refEnv{gztframe*} suivants.
+%
+% \begin{docEnvironment}[doclang/environment content=contenu à encadrer]{gztframe}{\oarg{option(s)}}
+%   Cet environnement insère le \meta{contenu à encadrer} :
+%   \begin{itemize}
+%   \item \emph{à l'emplacement où il est utilisé} ;
+%   \item dans un cadre
+%     \begin{itemize}
+%     \item de largeur la ligne courante, donc notamment de la largeur de la ligne
+%       d'une colonne en mode bi-colonne ;
+%     \item pourvu d'une zone de titre seulement si un titre est spécifié au moyen de
+%       la clé \refKey{title}.
+%     \end{itemize}
+%   \end{itemize}
+% \end{docEnvironment}
+%
+% \begin{docEnvironment}[doclang/environment content=contenu à encadrer]{gztframe*}{\oarg{option(s)}}
+%   Cet environnement insère le \meta{contenu à encadrer} :
+%   \begin{itemize}
+%   \item en haut de la page où il a été employé, donc probablement \emph{pas}
+%     à l'emplacement où il est utilisé (il s'agit d'un cadre
+%     \enquote{flottant}) ;
+%   \item dans un cadre :
+%     \begin{itemize}
+%     \item de largeur celle de l'empagement, donc à cheval sur les deux colonnes
+%       en mode bi-colonne ;
+%     \item pourvu d'une zone de titre seulement si un titre est spécifié au moyen de
+%       la clé \refKey{title}.
+%     \end{itemize}
+%   \end{itemize}
+% \end{docEnvironment}
+%
+% \subsubsection{Options}
+% \label{sec-options-gzt}
 
-Une image est incluse au moyen :
+Ces environnements admettent en \meta{options} :
 \begin{itemize}
-\item soit de la commande standard \docAuxCommand{includegraphics}\footnote{Il
-    est possible de passer à cette commande toutes ses options définies par le
-    \Package{graphicx}.} ;
-\item soit de code \LaTeX{} de création de dessins\footnote{Cf. par exemple les
-    packages \package{TikZ} et dérivés.} ;
-\end{itemize}
-à insérer dans l'un des deux environnements \refEnv{gztfigure} et
-\refEnv{gztfigure*} suivants.
-
-\begin{docEnvironment}[doclang/environment content=image]{gztfigure}{\oarg{option(s)}}
-  Cet environnement insère l'image :
-  \begin{itemize}
-  \item \emph{à l'emplacement où il est utilisé} ;
-  \item dans un cadre de largeur la ligne courante, donc notamment de la largeur
-    de la ligne d'une colonne en mode bi-colonne.
-  \end{itemize}
-\end{docEnvironment}
-
-\begin{docEnvironment}[doclang/environment content=image]{gztfigure*}{\oarg{option(s)}}
-  Cet environnement insère l'image :
-  \begin{itemize}
-  \item en haut de la page où il a été employé, donc probablement \emph{pas}
-    à l'emplacement où il est utilisé (il s'agit d'une figure
-    \enquote{flottante}) ;
-  \item dans un cadre de largeur celle de l'empagement, donc à cheval sur les
-    deux colonnes en mode bi-colonne.
-  \end{itemize}
-\end{docEnvironment}
-
-\subsubsection{Tableaux}
-\label{sec-tableaux}
-
-Un tableau est créé au moyen de l'environnement standard
-\docAuxEnvironment{tabular}\footnote{Il est recommandé de faire usage du
-  \Package*{booktabs} pour produire des tableaux plus lisibles.} mais celui-ci
-doit être employé dans l'un des deux environnements \refEnv{gzttable} et
-\refEnv{gzttable*} suivants.
-
-\begin{docEnvironment}[doclang/environment content=tableau créé avec \docAuxEnvironment{tabular}]{gzttable}{\oarg{option(s)}}
-  Cet environnement insère le tableau :
-  \begin{itemize}
-  \item \emph{à l'emplacement où il est utilisé} ;
-  \item dans un cadre de largeur la ligne courante, donc notamment de la largeur
-    de la ligne d'une colonne en mode bi-colonne.
-  \end{itemize}
-\end{docEnvironment}
-
-\begin{docEnvironment}[doclang/environment content=tableau créé avec \docAuxEnvironment{tabular}]{gzttable*}{\oarg{option(s)}}
-  Cet environnement insère le tableau :
-  \begin{itemize}
-  \item en haut de la page où il a été employé, donc probablement \emph{pas}
-    à l'emplacement où il est utilisé (il s'agit d'un tableau
-    \enquote{flottant}) ;
-  \item dans un cadre de largeur celle de l'empagement, donc à cheval sur les
-    deux colonnes en mode bi-colonne.
-  \end{itemize}
-\end{docEnvironment}
-
-\subsubsection{Cadres}
-\label{sec-cadres}
-
-Le contenu
-% \footnote{Notamment des images et, le cas échéant, des tableaux.}
-devant être encadré mais sans être estampillé \enquote{Figure} ou
-\enquote{Tableau} le sera au moyen de l'un des deux environnements
-\refEnv{gztframe} et \refEnv{gztframe*} suivants.
-
-\begin{docEnvironment}[doclang/environment content=contenu à encadrer]{gztframe}{\oarg{option(s)}}
-  Cet environnement insère le \meta{contenu à encadrer} :
-  \begin{itemize}
-  \item \emph{à l'emplacement où il est utilisé} ;
-  \item dans un cadre
-    \begin{itemize}
-    \item de largeur la ligne courante, donc notamment de la largeur de la ligne
-      d'une colonne en mode bi-colonne ;
-    \item pourvu d'une zone de titre seulement si un titre est spécifié au moyen de
-      la clé \refKey{title}.
-    \end{itemize}
-  \end{itemize}
-\end{docEnvironment}
-
-\begin{docEnvironment}[doclang/environment content=contenu à encadrer]{gztframe*}{\oarg{option(s)}}
-  Cet environnement insère le \meta{contenu à encadrer} :
-  \begin{itemize}
-  \item en haut de la page où il a été employé, donc probablement \emph{pas}
-    à l'emplacement où il est utilisé (il s'agit d'un cadre
-    \enquote{flottant}) ;
-  \item dans un cadre :
-    \begin{itemize}
-    \item de largeur celle de l'empagement, donc à cheval sur les deux colonnes
-      en mode bi-colonne ;
-    \item pourvu d'une zone de titre seulement si un titre est spécifié au moyen de
-      la clé \refKey{title}.
-    \end{itemize}
-  \end{itemize}
-\end{docEnvironment}
-
-\subsubsection{Options}
-\label{sec-options-gzt}
-
-Les environnements
-\begin{itemize}
-\item \refEnv{gztfigure} et \refEnv{gztfigure*} ;
-\item \refEnv{gzttable} et \refEnv{gzttable*} ;
-\end{itemize}
-admettent en argument optionnel :
-\begin{itemize}
 \item la plupart des (très nombreuses) options de l'environnement
   \docAuxEnvironment{tcolorbox} du \Package*{tcolorbox}. On retiendra notamment
   les options suivantes :
 \begin{docKey}{title}{=\meta{titre}}{pas de valeur par défaut,
     initialement vide}
-  Cette clé permet de spécifier l'éventuel \meta{titre} (ou légende).
+  Cette clé permet de spécifier l'éventuel \meta{titre} (au sens de
+  \enquote{légende} de flottant).
 \end{docKey}
 \begin{docKey}{label}{=\meta{label}}{pas de valeur par défaut, initialement
     vide}
@@ -585,6 +598,24 @@
 \end{docKey}
 \end{itemize}
 
+\begin{dbremark}{Production des images et tableaux}{}
+  \begin{itemize}
+  \item Une \meta{image} est incluse au moyen :
+    \begin{itemize}
+    \item soit de la commande standard
+      \docAuxCommand{includegraphics}\footnote{Il est possible de passer à cette
+        commande toutes ses options définies par le \Package{graphicx}.} ;
+    \item soit de code \LaTeX{} de création de dessins\footnote{Cf. par exemple
+        les packages \package{TikZ} et dérivés (notamment \package{pgfplots}).}.
+    \end{itemize}
+  \item Un \meta{tableau} est créé au moyen de l'environnement standard
+    \docAuxEnvironment{tabular} ou
+    assimilé\footnote{P. ex. \docAuxEnvironment{tabularx} du package
+      éponyme.}. Il est recommandé de faire usage du \Package*{booktabs} pour
+    produire des tableaux plus lisibles.
+  \end{itemize}
+\end{dbremark}
+
 Les exemples suivants illustrent les environnements et options qui viennent
 d'être vus.
 \begin{bodycode}[listing options={deletekeywords={[1]{exemple,title,label}},morekeywords={[2]{title,label}}}]

Modified: trunk/Master/texmf-dist/source/latex/gzt/gzt.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/gzt/gzt.dtx	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/source/latex/gzt/gzt.dtx	2021-02-16 22:12:37 UTC (rev 57765)
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-% File: gzt.dtx Copyright (C) 2014-2020 by
+% File: gzt.dtx Copyright (C) 2014-2021 by
 % Denis Bitouz'e <denis.bitouze at univ-littoral.fr>
 %
 % It may be distributed and/or modified under the conditions of the
@@ -39,21 +39,24 @@
   \expandafter\begingroup
 \fi
 %</internal>
+%<*class|class-article|install>
+\def\gztfileversion{1.0.1}
+\def\gztfiledate{2021-02-14}
+%</class|class-article|install>
 %<*install>
 \input l3docstrip.tex
 % \input docstrip.tex
-\Msg{********************************************************}
+\Msg{**************************************************************}
 \Msg{* Installation}
-\Msg{* Class: gzt 2020-03-17 v1.0.0}
-\Msg{* for the French journal}
-\Msg{* "La Gazette des Math'ematiciens" (DB)}
-\Msg{********************************************************}
+\Msg{* Class: gzt \gztfiledate\space v\gztfileversion}
+\Msg{* for the French journal "La Gazette des Math'ematiciens" (DB)}
+\Msg{**************************************************************}
 \keepsilent
 \askforoverwritefalse
 \preamble
 -----------------------------------------------------------------------------
 gzt --- SMF bundle of classes for the French journal "La Gazette des
-        Math'ematiciens", version 1.0.0
+        Math'ematiciens"
 
 E-mail: denis.bitouze at univ-littoral.fr
 Released under the LaTeX Project Public License v1.3c or later
@@ -61,7 +64,7 @@
 -----------------------------------------------------------------------------
 \endpreamble
 \postamble
-% Copyright (C) 2014-2020 by Denis Bitouz'e <denis.bitouze at univ-littoral.fr>
+% Copyright (C) 2014-2021 by Denis Bitouz'e <denis.bitouze at univ-littoral.fr>
 ----------------------------------------------------------------------------
 This work may be distributed and/or modified under the
 conditions of the LaTeX Project Public License, either version 1.3c
@@ -115,6 +118,11 @@
   \nopreamble\nopostamble
   \file{README.md}{\from{\jobname.dtx}{readme}}
 }%
+\usedir{doc/latex/\GZT at classname}
+\generate{
+  \nopreamble\nopostamble
+  \file{CHANGELOG.md}{\from{\jobname.dtx}{changelog}}
+}%
 \usedir{doc/latex/\GZT at classname/french}
 \generate{
   \nopreamble\nopostamble
@@ -141,6 +149,7 @@
 % \changes{v0.98}{2018/04/07}{Seventh CTAN version. Implementation of special
 % editions.}%
 % \changes{v1.0.0}{2020-03-17}{Eighth CTAN version.}%
+% \changes{v1.0.1}{2021-02-14}{Nineth CTAN version.}%
 %
 % \CheckSum{4413}
 %
@@ -667,8 +676,8 @@
 \ProvidesExplClass
 %<class>  {gzt}
 %<class-article>  {gztarticle}
-  {2020-03-17}
-  {1.0.0}
+  {\gztfiledate}
+  {\gztfileversion}
   {
     SMF~class~for~the~French~journal^^J
     "La~Gazette~des~Math'ematiciens".
@@ -684,6 +693,7 @@
 % \section{Class loading}
 %
 %    \begin{macrocode}
+\bool_new:N \g_@@_moral_report_bool
 \bool_new:N \g_@@_special_edition_bool
 \bool_new:N \g_@@_for_authors_bool
 \bool_new:N \g_@@_for_printer_bool
@@ -696,7 +706,20 @@
 %<class-article>\bool_gset_true:N \g_@@_inside_pages_bool%
 %    \end{macrocode}
 %
+% We define some common code to the "moralreport" global option of "gzt" and
+% "gztarticle".
 %    \begin{macrocode}
+\tl_gset:Nn \g_@@_moral_report_common_option_tl {%
+  \AddToHook{begindocument/before} {%
+    \bool_gset_true:N \g_@@_moral_report_bool
+    \bool_gset_true:N \g_@@_frontcover_without_minitoc_bool
+    \title[short={\bfseries\c_@@_moralreport_rubric_string_tl}]{}
+    \tl_gset:Nn \g_@@_rubric_title_tl {\c_@@_moralreport_rubric_string_tl}
+  }
+}
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %</class|class-article>
 %    \end{macrocode}
 %
@@ -780,9 +803,63 @@
   specialedition / editorial~author .code:n = {%
     \_@@_people:nnnnnnnn {#1}{}{}{}{}{}{editorinchief}{}
   },%
+  moralreport .code:n = {
+    \g_@@_moral_report_common_option_tl
+    \AddToHook{begindocument/before} {%
+      \tl_gset:Nn \g_@@_pdftitle_string_tl {\c_@@_moralreport_rubric_string_tl}
+    }
+  },
 }%
 %    \end{macrocode}
 %
+%    \begin{macrocode}
+%</class>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*class-article>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+\keys_define:nn { gztarticle }
+{
+  editorial .code:n = {%
+    \AddToHook{begindocument}{%
+      \_@@_before_display_editorial:n {}%
+    }
+    \AddToHook{enddocument}{%
+      \_@@_after_display_editorial: {}%
+    }
+  },%
+  presidentmessage .code:n = {%
+    \AddToHook{begindocument}{%
+      \_@@_before_display_presidentmessage: {}%
+    }
+    \AddToHook{enddocument}{%
+      \_@@_after_display_presidentmessage: {}%
+    }
+  },%
+  moralreport .code:n = {
+    \g_@@_moral_report_common_option_tl
+    \keys_set:nn { gztarticle / moralreport } {#1}
+  },
+  moralreport / title .code:n = {%
+    \tl_gset:Nn \g_@@_moral_report_title_tl {#1}
+  },%
+  moralreport / short~title .code:n = {%
+    \tl_gset:Nn \g_@@_moral_report_short_title_tl {#1}
+  },%
+}%
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</class-article>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*class>
+%    \end{macrocode}
+%
 % If we want to disable the inside backcover.
 %    \begin{macrocode}
 % \bool_gset_true:N \g_@@_no_inside_backcover_bool
@@ -1005,7 +1082,7 @@
 %
 % \item Hooks to do actions on every page or on the current page:
 %    \begin{macrocode}
-\RequirePackage{everypage}
+% \RequirePackage{everypage}
 %    \end{macrocode}
 %
 % \item For translating words in \LaTeX{}.
@@ -1370,7 +1447,7 @@
 %    \end{macrocode}
 % For the editorial.
 %    \begin{macrocode}
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \bool_if:NTF {\g_@@_special_edition_bool} {
     \tl_const:Nn \c_@@_editorial_heading_string_tl {Avant-propos}
   }{
@@ -1410,7 +1487,7 @@
 %    \end{macrocode}
 % For the front cover header text.
 %    \begin{macrocode}
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \tl_const:Nn \c_@@_frontcover_header_string_tl {
     \bool_if:NT {\g_@@_special_edition_bool} {
       \text_uppercase:n {\c_@@_long_special_edition_string_tl}
@@ -1436,21 +1513,25 @@
 % For the pdftitle text.
 %    \begin{macrocode}
 \tl_const:Nn \c_@@_pdftitle_string_tl {
-  \c_@@_journal_title_string_tl
-  % \c_space_tl
-  % \textendash{}
-  % \c_space_tl
-  % \l_@@_uppercased_date_format{\displaydate{@@_date}}
-  \c_space_tl
-  \textendash{}
-  \c_space_tl
-  N°
-  \bool_if:NTF {\g_@@_special_edition_bool} {
-    \c_@@_special_edition_string_tl
+  \bool_if:NTF {\g_@@_moral_report_bool} {
+    \c_@@_moralreport_rubric_string_tl
+  }{
+    \c_@@_journal_title_string_tl
+    % \c_space_tl
+    % \textendash{}
+    % \c_space_tl
+    % \l_@@_uppercased_date_format{\displaydate{@@_date}}
     \c_space_tl
-    \g_@@_special_edition_title_tl
-  }{
-    \int_use:N\g_@@_issue_number_int
+    \textendash{}
+    \c_space_tl
+    N°
+    \bool_if:NTF {\g_@@_special_edition_bool} {
+      \c_@@_special_edition_string_tl
+      \c_space_tl
+      \g_@@_special_edition_title_tl
+    }{
+      \int_use:N\g_@@_issue_number_int
+    }
   }
 }
 %    \end{macrocode}
@@ -1620,15 +1701,19 @@
   \c_space_tl
   \textcolor{@@_date_color}{
     \textendash{}\c_space_tl
-    \text_uppercase:n {\c_@@_journal_short_title_string_tl}
-    \bool_if:nF { \g_@@_inside_frontcover_bool || \g_@@_backmatter_bool || {\int_compare_p:nNn {\g_@@_issue_number_int}={0}} }
-    {
-      \c_space_tl\textendash{}\c_space_tl
-      \l_@@_uppercased_date_format\displaydate{@@_date}
-      \bool_if:NF {\g_@@_special_edition_bool} {
-        \c_space_tl
-        \textendash{}\c_space_tl
-        \textcolor{@@_smf_number_color}{\No\int_use:N\g_@@_issue_number_int}
+    \bool_if:NTF {\g_@@_moral_report_bool} {
+      \text_uppercase:n { \c_@@_moralreport_rubric_string_tl }
+    }{
+      \text_uppercase:n {\c_@@_journal_short_title_string_tl}
+      \bool_if:nF { \g_@@_inside_frontcover_bool || \g_@@_backmatter_bool || {\int_compare_p:nNn {\g_@@_issue_number_int}={0}} }
+      {
+        \c_space_tl\textendash{}\c_space_tl
+        \l_@@_uppercased_date_format\displaydate{@@_date}
+        \bool_if:NF {\g_@@_special_edition_bool} {
+          \c_space_tl
+          \textendash{}\c_space_tl
+          \textcolor{@@_smf_number_color}{\No\int_use:N\g_@@_issue_number_int}
+        }
       }
     }
   }
@@ -1652,9 +1737,9 @@
 % For the prefix of the bibliographic key of each article.
 %    \begin{macrocode}
 \bool_if:NTF {\g_@@_special_edition_bool} {
+  \tl_const:Nn \c_@@_issue_bib_key_tl {special-edition}
+}{
   \tl_const:Nn \c_@@_issue_bib_key_tl {\int_use:N \g_@@_issue_number_int}
-}{
-  \tl_const:Nn \c_@@_issue_bib_key_tl {special-edition}
 }
 %    \end{macrocode}
 % For the interview title.
@@ -2778,16 +2863,16 @@
 % a flag that will be used to test wheter we are inside such an environment or
 % not.
 %    \begin{macrocode}
-\AtBeginEnvironment{multicols}{
+\AddToHook{env/multicols/begin}{
   \bool_gset_true:N \g_@@_multicols_bool
 }
-\AtEndEnvironment{multicols}{
+\AddToHook{env/multicols/end}{
   \bool_gset_false:N \g_@@_multicols_bool
 }
-\AtBeginEnvironment{refsection}{
+\AddToHook{env/refsection/begin}{
   \bool_gset_true:N \g_@@_refsection_bool
 }
-\AtEndEnvironment{refsection}{
+\AddToHook{env/refsection/end}{
   \bool_gset_false:N \g_@@_refsection_bool
 }
 %    \end{macrocode}
@@ -2856,7 +2941,7 @@
 \tl_gset:Nn \g_@@_pdfauthor_string_tl {
   \g_@@_smf_string_tl
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \hypersetup{%
     pdftitle=\g_@@_pdftitle_string_tl,
     pdfauthor=\g_@@_pdfauthor_string_tl%
@@ -2864,39 +2949,7 @@
 }
 %    \end{macrocode}
 %
-% \section{Database for the articles' authors}
-%
-% For this, and thanks to \Pkg{datatool}, we create a database of
-% \enquote{authors} of articles.
 %    \begin{macrocode}
-\DTLnewdb{_@@_authors}
-%    \end{macrocode}
-%
-% Then we create the internal "\_@@_authors" function that let us populate the
-% "_@@_authors" database. Each people will be identified by some identifiers:
-% \begin{itemize}
-% \item firstname and lastname, that should be at the biblatex name format
-% (\enquote{lastname, firstname}),
-% \item affiliation,
-% \item email,
-% \item minibio,
-% \item photo.
-% \end{itemize}
-%
-%    \begin{macrocode}
-\cs_new_protected:Nn \_@@_authors:nnnnnn
-  {
-    \DTLnewrow{_@@_authors}%
-    \DTLnewdbentry{_@@_authors}{first-last-name}{#1}%
-    \DTLnewdbentry{_@@_authors}{affiliation}{#2}%
-    \DTLnewdbentry{_@@_authors}{email}{#3}%
-    \DTLnewdbentry{_@@_authors}{minibio}{#4}%
-    \DTLnewdbentry{_@@_authors}{photo}{#5}%
-    \DTLnewdbentry{_@@_authors}{webpage}{#6}%
-  }
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 \cs_new_protected:Nn \_@@_email:n
   {
     \href{mailto:#1}{\nolinkurl{#1}}%
@@ -2903,12 +2956,6 @@
   }
 %    \end{macrocode}
 %
-% We create a variant of this control sequence that passes the \emph{values} of the
-% variables involved (see \url{http://tex.stackexchange.com/a/214284/18401}).
-%    \begin{macrocode}
-\cs_generate_variant:Nn \_@@_authors:nnnnnn { nVVVVV }
-%    \end{macrocode}
-%
 % We create a function that displays the author(s) of an article with
 % a peticular layout.
 %    \begin{macrocode}
@@ -2951,39 +2998,6 @@
 \cs_generate_variant:Nn \@@_display_author:nnnnn { VVVVV }
 %    \end{macrocode}
 %
-% \section{Database for the interviewees}
-%
-% For this, and thanks to \Pkg{datatool}, we create a database of
-% \enquote{interviewees} of articles.
-%    \begin{macrocode}
-\DTLnewdb{_@@_interviewees}
-%    \end{macrocode}
-%
-% Then we create the internal "\_@@_interviewees" function that let us populate the
-% "_@@_interviewees" database. Each people will be identified by some identifiers:
-% \begin{itemize}
-% \item firstname and lastname, that should be at the biblatex name format
-% (\enquote{lastname, firstname}),
-% \item minibio,
-% \item photo.
-% \end{itemize}
-%
-%    \begin{macrocode}
-\cs_new_protected:Nn \_@@_interviewees:nnn
-  {
-    \DTLnewrow{_@@_interviewees}%
-    \DTLnewdbentry{_@@_interviewees}{first-last-name}{#1}%
-    \DTLnewdbentry{_@@_interviewees}{minibio}{#2}%
-    \DTLnewdbentry{_@@_interviewees}{photo}{#3}%
-  }
-%    \end{macrocode}
-%
-% We create a variant of this control sequence that passes the \emph{values} of the
-% variables involved (see \url{http://tex.stackexchange.com/a/214284/18401}).
-%    \begin{macrocode}
-\cs_generate_variant:Nn \_@@_interviewees:nnn { nVV }
-%    \end{macrocode}
-%
 % \section{Functions for specifiying the people involved in the journal}
 %
 % For this, and thanks to \Pkg{datatool}, we create a database of
@@ -3054,7 +3068,9 @@
 \cs_new_protected:Nn \@@_display_academic_signature:n
 {
   \bigskip
+  \begin{_@@_minibiographies_acknowledgements_tcbox}
     #1
+  \end{_@@_minibiographies_acknowledgements_tcbox}
 }
 %    \end{macrocode}
 %
@@ -3066,7 +3082,7 @@
 \cs_new_protected:Nn \@@_display_people_by_role:n
 {
   \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{#1}]{people}{%
-    \l_@@_firstlastname=first-last-name%
+    \l_@@_firstlastname_tl=first-last-name%
     ,\l_@@_people_affiliation_tl=affiliation%
     ,\l_@@_people_email_tl=email%
     ,\l_@@_people_minibio_tl=minibio%
@@ -3088,26 +3104,29 @@
         \newline%
         \href{mailto:\l_@@_people_email_tl}{\nolinkurl{\l_@@_people_email_tl}}%
       }
-      \DTLiflastrow{%
-      }{%
-        \medskip%
-      }
+      \medskip%
     }{
       \tl_if_in:NnTF \l_@@_people_role_tl { author } {
-        \footnotesize%
-        % \noindent%
-        \dim_set:Nn \l_@@_minibio_width_dim {\linewidth-1em - \c_@@_authors_photos_box_width_dim}
-        \tl_if_empty:NTF \l_@@_people_photo_tl
-        {%
-          \dim_add:Nn \l_@@_minibio_width_dim {\c_@@_authors_photos_box_width_dim}
-        }{%
-          \begin{adjustbox}{valign=t,minipage=\c_@@_authors_photos_box_width_dim}
-            \includegraphics[width=\c_@@_authors_photos_width_dim]{\l_@@_people_photo_tl}
-          \end{adjustbox}%
-          \quad%
-        }
-        \begin{adjustbox}{valign=t,minipage=\l_@@_minibio_width_dim}
-          \begin{description}[leftmargin=1em,style=nextline]
+        \tl_if_empty:NF \l_@@_firstlastname_tl {
+          \footnotesize%
+          % \noindent%
+          \DTLiffirstrow{%
+          }{
+            \DTLpar%
+            \medskip%
+          }
+          \dim_set:Nn \l_@@_minibio_width_dim {\linewidth-1em - \c_@@_authors_photos_box_width_dim}
+          \tl_if_empty:NTF \l_@@_people_photo_tl
+          {%
+            \dim_add:Nn \l_@@_minibio_width_dim {\c_@@_authors_photos_box_width_dim}
+          }{%
+            \begin{adjustbox}{valign=t,minipage=\c_@@_authors_photos_box_width_dim}
+              \includegraphics[width=\c_@@_authors_photos_width_dim]{\l_@@_people_photo_tl}
+            \end{adjustbox}%
+            \quad%
+          }
+          \begin{adjustbox}{valign=t,minipage=\l_@@_minibio_width_dim}
+            \begin{description}[leftmargin=1em,style=nextline]
             \item[%
               \textcolor{@@_people_color}{%
                 \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -#1- \exp_not:V\DTLcurrentindex}%
@@ -3138,10 +3157,6 @@
               }
             \end{description}
           \end{adjustbox}
-        \DTLiflastrow{%
-        }{
-          \DTLpar%
-          \medskip%
         }
       }{
         \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -#1-
@@ -3344,7 +3359,7 @@
           \bool_if:NT {\g_@@_credit_frontcover_bool} {
             \c_space_tl(\c_@@_credit_frontcover_string_tl{}~:~%
             \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{frontcovercredit}]{people}{%
-              \l_@@_firstlastname=first-last-name%
+              \l_@@_firstlastname_tl=first-last-name%
               ,\l_@@_people_role_tl=role%
             }{%
               \_@@_citeauthor_no_firstinits:n
@@ -3610,6 +3625,18 @@
 }
 %    \end{macrocode}
 %
+% \subsection{Moral report setup}
+%
+% \begin{macro}{\moralreportsetup}
+%   We define the command that lets the user specify the moral report setup.
+%    \begin{macrocode}
+\NewDocumentCommand \moralreportsetup { m } {
+  \bool_gset_true:N \g_@@_moral_report_bool
+  \bool_gset_true:N \g_@@_frontcover_without_minitoc_bool
+  \keys_set:nn { gzt/moralreport } {#1}
+}
+%    \end{macrocode}
+%
 % \subsection{Journal setup}
 %
 % \begin{macro}{\journalsetup}
@@ -3735,7 +3762,7 @@
 % This can be done only at the beginning of the document, in order to know the
 % characteristics of the current issue.
 %    \begin{macrocode}
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
 %    \end{macrocode}
 %
 % We first create a token list containing the date of the current issue formated
@@ -3894,10 +3921,10 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\tl_new:N \g_@@_article_acknowledgements_tl%
+\tl_new:N \l_@@_article_acknowledgements_tl%
 \cs_new_protected:Nn \@@_article_acknowledgements:n
 {
-  \tl_gset:Nn \g_@@_article_acknowledgements_tl { #1 }
+  \tl_set:Nn \l_@@_article_acknowledgements_tl { #1 }
 }
 %    \end{macrocode}
 %
@@ -4048,6 +4075,30 @@
 %<*class|class-article>
 %    \end{macrocode}
 %
+% We create a command for local (to a given article) tables of contents
+%    \begin{macrocode}
+\cs_new_protected:Nn \_@@_display_localtoc:
+{
+  \etocsettocstyle{\section*{\contentsname}}{}%
+  \etocsetstyle {section}
+  {}
+  {\leavevmode\leftskip 0cm\relax}
+  {\bfseries\normalsize\makebox[.6cm][l]{\etocnumber}%
+    \etocname\nobreak\hfill\nobreak%
+    \makebox[.5cm][r]{%
+      \etocpage%
+    }%
+    \par%
+  }
+  {\medskip}
+  \localtableofcontentswithrelativedepth{+1}
+}
+\NewDocumentCommand \gztlocaltableofcontents {}
+{
+  \_@@_display_localtoc: {}
+}
+%    \end{macrocode}
+%
 % We create two token lists that will contain:
 % \begin{enumerate}
 % \item the unique bibliographic key,
@@ -4544,7 +4595,7 @@
 % We load the file where acronyms are defined.
 %    \begin{macrocode}
 \file_if_exist:nT { \c_@@_acronyms_file_string_tl } {%
-  \AtEndPreamble{\loadglsentries{\c_@@_acronyms_file_string_tl}}
+  \AddToHook{begindocument/before}{\loadglsentries{\c_@@_acronyms_file_string_tl}}
 }
 %    \end{macrocode}
 %
@@ -4563,7 +4614,7 @@
 %    \begin{macrocode}
 \bool_if:nT { \g_@@_for_authors_bool }
 {
-  \AtEndDocument{%
+  \AddToHook{enddocument}{%
     \bool_if:NT {\g_@@_multicols_bool} {
       \end{multicols}%
     }
@@ -4577,7 +4628,7 @@
 % at the end of preamble instead of begin of the document in order some settings
 % needed in preamble are taken in account.
 %    \begin{macrocode}
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \file_if_exist_input:nF {\c_@@_configuration_file_string_tl}
   {
     \msg_error:nn { gzt } { configuration-file-missing }
@@ -4757,7 +4808,7 @@
     \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -editorinchief- 1}
   }{
     \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{editorinchief}]{people}{%
-      \l_@@_firstlastname=first-last-name%
+      \l_@@_firstlastname_tl=first-last-name%
       ,\l_@@_people_role_tl=role%
     }{%
       \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -editorinchief- \exp_not:V\DTLcurrentindex}%
@@ -4775,7 +4826,7 @@
   }
   \_@@_after_display_editorial: {}
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \tl_set_eq:NN \g_@@_editorial_heading_tl \c_@@_editorial_heading_string_tl
   \bool_if:NT {\g_@@_special_edition_bool} {
     \tl_if_empty:NF \g_@@_special_edition_editorial_heading_tl {%
@@ -4985,7 +5036,7 @@
 % \end{itemize}
 %
 %    \begin{macrocode}
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
   \graphicspath{{\c_@@_issue_images_path_string_tl//}{../\c_@@_issue_images_path_string_tl//}}
   % \glsdisablehyper
   \g_@@_mainmatter_switch_tl
@@ -5006,7 +5057,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
   \dim_if_exist:NTF \g_@@_pagegrid_dim {%
     \pagegridsetup{%
       enable,%
@@ -5040,7 +5091,7 @@
     \bool_if:NF {\g_@@_inside_pages_bool} {
       \g_@@_display_frontcover_tl
       \bool_if:NTF {\g_@@_coverpage_bool} {
-        \AfterEndPreamble{\end{document}}
+        \AddToHook{begindocument/end}{\end{document}}
       }{
         \g_@@_display_inside_frontcover_tl
       }
@@ -5603,7 +5654,7 @@
 %
 % We draw a gray background at the bottom of each page, but the first one.
 %    \begin{macrocode}
-\AddEverypageHook{%
+\AddToHook{shipout/background}{
 %<class> \bool_if:nF { \g_@@_frontcover_bool || \g_@@_backcover_bool }{
     \bool_if:NF {\g_@@_advertisement_bool} {
       \tikz[remember~picture,overlay] { \g_@@_background_footer_tl }%
@@ -5697,31 +5748,23 @@
   \FloatBarrier%
   \begin{_@@_minibiographies_acknowledgements_tcbox}
     \@@_display_people_by_role:n { author-art-\int_use:N \g_@@_articles_int }
-    \tl_if_empty:NF \g_@@_article_acknowledgements_tl
+    \DTLsavelastrowcount{\_@@_authors_number}
+    \tl_if_empty:NF \l_@@_article_acknowledgements_tl
     {%
-      \par%
-      \bigskip%
+      \footnotesize
+      \int_compare:nNnT {\_@@_authors_number}>{0}
+      {
+        \par%
+        \bigskip%
+      }
       \begin{adjustbox}{valign=t,minipage=\linewidth}
         \color{@@_acknowledgements_color}%
-        \g_@@_article_acknowledgements_tl
+        \setlength{\parskip}{\c_@@_mainmatter_parskip_skip}
+        \l_@@_article_acknowledgements_tl
       \end{adjustbox}
-  }
+    }
+    \bool_gset_true:N \g_@@_previous_article_with_bibliography_or_minibio_bool
   \end{_@@_minibiographies_acknowledgements_tcbox}
-  \bool_gset_true:N \g_@@_previous_article_with_bibliography_or_minibio_bool
-  %
-  \tl_gclear:N \g_@@_people_affiliation_tl
-  \tl_gclear:N \g_@@_people_email_tl
-  \tl_gclear:N \g_@@_people_minibio_tl
-  \tl_gclear:N \g_@@_people_photo_tl
-  \tl_gclear:N \g_@@_people_webpage_tl
-  \tl_gclear:N \g_@@_article_acknowledgements_tl
-%    \end{macrocode}
-%
-% We clear the authors database for this new article (XXX: to be moved to the
-% authors' minibiographies area).
-%    \begin{macrocode}
-  \DTLgcleardb{_@@_authors}
-  \DTLgcleardb{_@@_interviewees}
 }
 %    \end{macrocode}
 % \end{macro}
@@ -6240,7 +6283,12 @@
   inputencoding=utf8/latin1
 }%
 \DeclareTotalTCBox{\gztverb}{ v }{verbatim,blank,fuzzy~halo=0pt~with~@@_light_generic_dark_color!8}{#1}
-\NewTCBListing{gztcode}{ O{} }{%
+%    \end{macrocode}
+%
+% The optional argument declaration must be prefixed with an "!" (see
+% \url{https://github.com/T-F-S/tcolorbox/issues/43}).
+%    \begin{macrocode}
+\NewTCBListing{gztcode}{ !O{} }{%
   listing~style=@@_lst_style,
   listing~only,
   enlarge~top~by=\medskipamount,
@@ -6420,6 +6468,12 @@
 % "multicols" environments.
 %    \begin{macrocode}
 \NewDocumentCommand \gztinput { m m } {%
+  \tl_gclear:N \g_@@_people_affiliation_tl
+  \tl_gclear:N \g_@@_people_email_tl
+  \tl_gclear:N \g_@@_people_minibio_tl
+  \tl_gclear:N \g_@@_people_photo_tl
+  \tl_gclear:N \g_@@_people_webpage_tl
+  \tl_clear:N \l_@@_article_acknowledgements_tl
   \startcustomization%
   \bool_if:NF {\g_@@_refsection_bool} {
     \begin{refsection}
@@ -6445,12 +6499,13 @@
 % If we don't ask the cover page (only), the inside back cover and back cover
 % pages are automatically included at the end of the document, the former
 % containing some condensed instructions to authors. But, this cannot be done
-% within "\AtEndDocument" and "\preto\@enddocumenthook" should be used instead
-% (see \url{http://tex.stackexchange.com/q/240318/18401}).
+% within "\AddToHook{enddocument}" and "\preto\@enddocumenthook" should be used instead
+% (see \url{http://tex.stackexchange.com/q/240318/18401}). (Update (2021-02-14):
+% we now rely on the new ×\AddToHook{env/document/end}×.)
 %    \begin{macrocode}
 \bool_if:NF {\g_@@_coverpage_bool} {
   \bool_if:NF {\g_@@_inside_pages_bool} {
-    \preto\@enddocumenthook{
+    \AddToHook{enddocument/end}{
       \bool_gset_true:N \g_@@_backmatter_bool
       \g_@@_display_inside_backcover_tl
       \newpage
@@ -6468,7 +6523,7 @@
 \bool_if:NF {\g_@@_coverpage_bool} {
   \bool_if:nF { \g_@@_for_authors_bool } {
     \bool_if:nT { \g_@@_inside_pages_bool } {
-      \AtEndDocument{%
+      \AddToHook{enddocument}{%
         \prg_replicate:nn
         { \int_mod:nn { 4 - \int_mod:nn { \getpagerefnumber{LastPage} } { 4 } } { 4 } }
         { \thispagestyle{@@_blank_pages_ps}\null\clearpage }
@@ -6487,33 +6542,11 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\keys_define:nn { gztarticle }
-{
-  editorial .code:n = {%
-    \AtBeginDocument{%
-      \_@@_before_display_editorial:n {}%
-    }
-    \AtEndDocument{%
-      \_@@_after_display_editorial: {}%
-    }
-  },%
-  presidentmessage .code:n = {%
-    \AtBeginDocument{%
-      \_@@_before_display_presidentmessage: {}%
-    }
-    \AtEndDocument{%
-      \_@@_after_display_presidentmessage: {}%
-    }
-  },%
-}%
-%    \end{macrocode}
-%
-%    \begin{macrocode}
 \ProcessKeysOptions { gztarticle }
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\AtEndDocument{%
+\AddToHook{enddocument}{%
   \bool_if:NT {\g_@@_multicols_bool} {
   \end{multicols}%
   }
@@ -6765,7 +6798,7 @@
     enlarge~left~by=\c_@@_inside_cover_offset_dim,
   }
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \bool_if:NTF {\g_@@_special_edition_bool} {
     \tcbset{
       _@@_tcb_inside_frontcover_style/.append~style={%
@@ -6981,7 +7014,7 @@
   \tl_clear:N \l_@@_newtheorem_frenchtitle_tl
   \tl_clear:N \l_@@_newtheorem_englishtitle_tl
   \tl_set:Nn \l_@@_newtheorem_englishtitle_tl {
-    \text_uppercase:n {#2}
+    \text_titlecase:n {#2}
   }
   \tl_set:Nf \l_@@_newtheorem_frenchtitle_tl {
     \l_@@_newtheorem_englishtitle_tl
@@ -7368,6 +7401,72 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
+%<*changelog>
+%    \end{macrocode}
+# [Unreleased]
+
+# [1.0.1] - 2021-02-14
+
+## Added
+- Option to create moral reports (`gzt` class only).
+- Local (to a given article) table of contents
+
+## Changed
+- The class now relies on the new LaTeX core hooks.
+- Documentation revised.
+- Various improvements.
+
+## Fixed
+- Superflous uppercases removed (cont.).
+- `gztcode` environments partially gobble their content under certain
+  conditions.
+- Various other small bugs.
+
+# [1.0.0] - 2020-03-17
+
+## Added
+- CHANGELOG file (following https://keepachangelog.com/en/1.0.0/).
+- Semantic versionning (following https://semver.org/).
+
+## Changed
+- Compilation date displayed only if the issue number is not specified
+  (`gztarticle` class only).
+- Prevent column breaks within items of "Comité de rédaction" (at the price of
+  unbalanced columns).
+
+## Fixed
+- Track changes in `expl3`.
+- Superflous uppercases removed.
+- Index directive in `latexmk` config file modernized.
+
+# [0.98] - 2018-04-09
+
+## Changed
+- Support for `biblatex` 3.8 changes.
+- Track changes in `expl3`.
+- Special editions implemented.
+
+## Fixed
+- Several bug fixes.
+
+# [0.96] - 2017-04-07
+
+## Changed
+- Figures and tables:
+  - with recurrent label and number but without any caption,
+  - with caption but without any recurrent label nor numbered,
+  implemented.
+- Frames without any label, number nor caption implemented.
+- Track changes in `expl3`.
+
+# [0.9] - 2015-05-02
+
+- Initial CTAN release of the `gzt` bundle.
+%    \begin{macrocode}
+%</changelog>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
 %<*latexmkrc>
 %    \end{macrocode}
 %
@@ -7384,7 +7483,7 @@
     system( "makeglossaries \"$_[0]\"" );
 }
 
-$makeindex = 'texindy -L french;
+$makeindex = 'texindy -L french -C utf8';
 
 push @generated_exts, 'acn', 'acr', 'alg', 'bcf', 'fls', 'gl*', 'sbl*', 'sl*', 'sym*' ;
 
@@ -7405,8 +7504,7 @@
 % \Finale
 
 %%% Local Variables:
-%%% mode: tex
-%%% eval: (doctex-mode)
+%%% mode: doctex
 %%% ispell-local-dictionary: "english"
 %%% TeX-command-default: "TeX"
 %%% TeX-master: t

Modified: trunk/Master/texmf-dist/tex/latex/gzt/gzt.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/gzt/gzt.cls	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/tex/latex/gzt/gzt.cls	2021-02-16 22:12:37 UTC (rev 57765)
@@ -7,12 +7,14 @@
 %% gzt.dtx  (with options: `class')
 %% -----------------------------------------------------------------------------
 %% gzt --- SMF bundle of classes for the French journal "La Gazette des
-%%         Math'ematiciens", version 1.0.0
+%%         Math'ematiciens"
 %% 
 %% E-mail: denis.bitouze at univ-littoral.fr
 %% Released under the LaTeX Project Public License v1.3c or later
 %% See http://www.latex-project.org/lppl.txt
 %% -----------------------------------------------------------------------------
+\def\gztfileversion{1.0.1}
+\def\gztfiledate{2021-02-14}
 \def\sectioncommandslist{}%
 \let\saved at ifdefinable\@ifdefinable%
 \let\saved@@ifdefinable\@@ifdefinable%
@@ -81,13 +83,14 @@
 \ExplSyntaxOn
 \ProvidesExplClass
   {gzt}
-  {2020-03-17}
-  {1.0.0}
+  {\gztfiledate}
+  {\gztfileversion}
   {
     SMF~class~for~the~French~journal^^J
     "La~Gazette~des~Math'ematiciens".
   }
 \NeedsTeXFormat{LaTeX2e}
+\bool_new:N \g__gzt_moral_report_bool
 \bool_new:N \g__gzt_special_edition_bool
 \bool_new:N \g__gzt_for_authors_bool
 \bool_new:N \g__gzt_for_printer_bool
@@ -95,6 +98,14 @@
 \bool_new:N \g__gzt_coverpage_bool
 \bool_new:N \g__gzt_inside_pages_bool
 \bool_new:N \g__gzt_no_inside_backcover_bool
+\tl_gset:Nn \g__gzt_moral_report_common_option_tl {%
+  \AddToHook{begindocument/before} {%
+    \bool_gset_true:N \g__gzt_moral_report_bool
+    \bool_gset_true:N \g__gzt_frontcover_without_minitoc_bool
+    \title[short={\bfseries\c__gzt_moralreport_rubric_string_tl}]{}
+    \tl_gset:Nn \g__gzt_rubric_title_tl {\c__gzt_moralreport_rubric_string_tl}
+  }
+}
 \dim_const:Nn \c__gzt_pagegrid_dim { 1mm}
 \tl_gset:Nn \g__gzt_frontcover_image_file_tl {\c__gzt_issue_frontcover_default_image_file_tl}
 \tl_gset:Nn \g__gzt_special_edition_color_tl {__gzt_default_cover_color}
@@ -156,6 +167,12 @@
   specialedition / editorial~author .code:n = {%
     \__gzt_people:nnnnnnnn {#1}{}{}{}{}{}{editorinchief}{}
   },%
+  moralreport .code:n = {
+    \g__gzt_moral_report_common_option_tl
+    \AddToHook{begindocument/before} {%
+      \tl_gset:Nn \g__gzt_pdftitle_string_tl {\c__gzt_moralreport_rubric_string_tl}
+    }
+  },
 }%
 \ProcessKeysOptions { gzt }
 \PassOptionsToClass{openany,english,french}{book}
@@ -209,7 +226,6 @@
 \RequirePackage{mathtools}
 \RequirePackage{rsfso}
 \RequirePackage{esvect}
-\RequirePackage{everypage}
 \RequirePackage{translator}%
 \RequirePackage{geometry}
 \RequirePackage{babel}%
@@ -294,7 +310,7 @@
 \tl_const:Nn \c__gzt_printer_string_tl {Impression}
 \tl_const:Nn \c__gzt_configuration_file_string_tl {gzt.cfg}
 \tl_const:Nn \c__gzt_artistic_director_string_tl {Conception~graphique}
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \bool_if:NTF {\g__gzt_special_edition_bool} {
     \tl_const:Nn \c__gzt_editorial_heading_string_tl {Avant-propos}
   }{
@@ -310,7 +326,7 @@
 \tl_const:Nn \c__gzt_special_edition_string_tl {\c_space_tl{}sp{\'e}cial}
 \tl_const:Nn \c__gzt_long_special_edition_string_tl {Numéro\c__gzt_special_edition_string_tl}%
 \tl_const:Nn \c__gzt_short_special_edition_string_tl {\No{}\c__gzt_special_edition_string_tl}%
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \tl_const:Nn \c__gzt_frontcover_header_string_tl {
     \bool_if:NT {\g__gzt_special_edition_bool} {
       \text_uppercase:n {\c__gzt_long_special_edition_string_tl}
@@ -330,21 +346,25 @@
 }
 \clist_const:Nn \c__gzt__graphics_extensions_clist {png,PNG,jpg,JPG,jpeg,JPEG,pdf,PDF}
 \tl_const:Nn \c__gzt_pdftitle_string_tl {
-  \c__gzt_journal_title_string_tl
-  % \c_space_tl
-  % \textendash{}
-  % \c_space_tl
-  % \l__gzt_uppercased_date_format{\displaydate{__gzt_date}}
-  \c_space_tl
-  \textendash{}
-  \c_space_tl
-  N°
-  \bool_if:NTF {\g__gzt_special_edition_bool} {
-    \c__gzt_special_edition_string_tl
+  \bool_if:NTF {\g__gzt_moral_report_bool} {
+    \c__gzt_moralreport_rubric_string_tl
+  }{
+    \c__gzt_journal_title_string_tl
+    % \c_space_tl
+    % \textendash{}
+    % \c_space_tl
+    % \l__gzt_uppercased_date_format{\displaydate{__gzt_date}}
     \c_space_tl
-    \g__gzt_special_edition_title_tl
-  }{
-    \int_use:N\g__gzt_issue_number_int
+    \textendash{}
+    \c_space_tl
+    N°
+    \bool_if:NTF {\g__gzt_special_edition_bool} {
+      \c__gzt_special_edition_string_tl
+      \c_space_tl
+      \g__gzt_special_edition_title_tl
+    }{
+      \int_use:N\g__gzt_issue_number_int
+    }
   }
 }
 \tl_const:Nn \c__gzt_frontmatter_directory_string_tl {frontmatter}
@@ -419,15 +439,19 @@
   \c_space_tl
   \textcolor{__gzt_date_color}{
     \textendash{}\c_space_tl
-    \text_uppercase:n {\c__gzt_journal_short_title_string_tl}
-    \bool_if:nF { \g__gzt_inside_frontcover_bool || \g__gzt_backmatter_bool || {\int_compare_p:nNn {\g__gzt_issue_number_int}={0}} }
-    {
-      \c_space_tl\textendash{}\c_space_tl
-      \l__gzt_uppercased_date_format\displaydate{__gzt_date}
-      \bool_if:NF {\g__gzt_special_edition_bool} {
-        \c_space_tl
-        \textendash{}\c_space_tl
-        \textcolor{__gzt_smf_number_color}{\No\int_use:N\g__gzt_issue_number_int}
+    \bool_if:NTF {\g__gzt_moral_report_bool} {
+      \text_uppercase:n { \c__gzt_moralreport_rubric_string_tl }
+    }{
+      \text_uppercase:n {\c__gzt_journal_short_title_string_tl}
+      \bool_if:nF { \g__gzt_inside_frontcover_bool || \g__gzt_backmatter_bool || {\int_compare_p:nNn {\g__gzt_issue_number_int}={0}} }
+      {
+        \c_space_tl\textendash{}\c_space_tl
+        \l__gzt_uppercased_date_format\displaydate{__gzt_date}
+        \bool_if:NF {\g__gzt_special_edition_bool} {
+          \c_space_tl
+          \textendash{}\c_space_tl
+          \textcolor{__gzt_smf_number_color}{\No\int_use:N\g__gzt_issue_number_int}
+        }
       }
     }
   }
@@ -441,9 +465,9 @@
 \tl_const:Nn \c__gzt_issue_bib_file_string_tl {\c_sys_jobname_str\c__gzt_issue_bib_file_suffix_string_tl.bib}
 \tl_const:Nn \c__gzt_issue_bib_path_string_tl {\c__gzt_issue_bib_file_string_tl}
 \bool_if:NTF {\g__gzt_special_edition_bool} {
+  \tl_const:Nn \c__gzt_issue_bib_key_tl {special-edition}
+}{
   \tl_const:Nn \c__gzt_issue_bib_key_tl {\int_use:N \g__gzt_issue_number_int}
-}{
-  \tl_const:Nn \c__gzt_issue_bib_key_tl {special-edition}
 }
 \tl_const:Nn \c__gzt_interview_title_string_tl {En~apart\'e~avec~}
 \tl_const:Nn \c__gzt_aside_string_tl {--}
@@ -961,16 +985,16 @@
 \colorlet{__gzt_book_advertisement_bg_color}{white}
 \colorlet{__gzt_book_advertisement_frame_color}{__gzt_generic_dark_color}
 \colorlet{__gzt_default_cover_color}{white}
-\AtBeginEnvironment{multicols}{
+\AddToHook{env/multicols/begin}{
   \bool_gset_true:N \g__gzt_multicols_bool
 }
-\AtEndEnvironment{multicols}{
+\AddToHook{env/multicols/end}{
   \bool_gset_false:N \g__gzt_multicols_bool
 }
-\AtBeginEnvironment{refsection}{
+\AddToHook{env/refsection/begin}{
   \bool_gset_true:N \g__gzt_refsection_bool
 }
-\AtEndEnvironment{refsection}{
+\AddToHook{env/refsection/end}{
   \bool_gset_false:N \g__gzt_refsection_bool
 }
 \tl_const:Nn \c__gzt_footer_size_font_tl {
@@ -1021,28 +1045,16 @@
 \tl_gset:Nn \g__gzt_pdfauthor_string_tl {
   \g__gzt_smf_string_tl
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \hypersetup{%
     pdftitle=\g__gzt_pdftitle_string_tl,
     pdfauthor=\g__gzt_pdfauthor_string_tl%
   }
 }
-\DTLnewdb{__gzt_authors}
-\cs_new_protected:Nn \__gzt_authors:nnnnnn
-  {
-    \DTLnewrow{__gzt_authors}%
-    \DTLnewdbentry{__gzt_authors}{first-last-name}{#1}%
-    \DTLnewdbentry{__gzt_authors}{affiliation}{#2}%
-    \DTLnewdbentry{__gzt_authors}{email}{#3}%
-    \DTLnewdbentry{__gzt_authors}{minibio}{#4}%
-    \DTLnewdbentry{__gzt_authors}{photo}{#5}%
-    \DTLnewdbentry{__gzt_authors}{webpage}{#6}%
-  }
 \cs_new_protected:Nn \__gzt_email:n
   {
     \href{mailto:#1}{\nolinkurl{#1}}%
   }
-\cs_generate_variant:Nn \__gzt_authors:nnnnnn { nVVVVV }
 \cs_new_protected:Nn \__gzt_display_author:nnnnn
 {
   \begin{tabular}[t]{p{\c__gzt_authors_photos_box_width_dim}p{0.75\linewidth}}
@@ -1075,15 +1087,6 @@
   \end{tabular}
 }
 \cs_generate_variant:Nn \__gzt_display_author:nnnnn { VVVVV }
-\DTLnewdb{__gzt_interviewees}
-\cs_new_protected:Nn \__gzt_interviewees:nnn
-  {
-    \DTLnewrow{__gzt_interviewees}%
-    \DTLnewdbentry{__gzt_interviewees}{first-last-name}{#1}%
-    \DTLnewdbentry{__gzt_interviewees}{minibio}{#2}%
-    \DTLnewdbentry{__gzt_interviewees}{photo}{#3}%
-  }
-\cs_generate_variant:Nn \__gzt_interviewees:nnn { nVV }
 \DTLnewdb{people}
 \tl_new:N \l__gzt_crossref_tl
 \cs_new_protected:Nn \__gzt_people:nnnnnnnn
@@ -1126,12 +1129,14 @@
 \cs_new_protected:Nn \__gzt_display_academic_signature:n
 {
   \bigskip
+  \begin{__gzt_minibiographies_acknowledgements_tcbox}
     #1
+  \end{__gzt_minibiographies_acknowledgements_tcbox}
 }
 \cs_new_protected:Nn \__gzt_display_people_by_role:n
 {
   \DTLforeach*[\DTLiseq{\l__gzt_people_role_tl}{#1}]{people}{%
-    \l__gzt_firstlastname=first-last-name%
+    \l__gzt_firstlastname_tl=first-last-name%
     ,\l__gzt_people_affiliation_tl=affiliation%
     ,\l__gzt_people_email_tl=email%
     ,\l__gzt_people_minibio_tl=minibio%
@@ -1153,26 +1158,29 @@
         \newline%
         \href{mailto:\l__gzt_people_email_tl}{\nolinkurl{\l__gzt_people_email_tl}}%
       }
-      \DTLiflastrow{%
-      }{%
-        \medskip%
-      }
+      \medskip%
     }{
       \tl_if_in:NnTF \l__gzt_people_role_tl { author } {
-        \footnotesize%
-        % \noindent%
-        \dim_set:Nn \l__gzt_minibio_width_dim {\linewidth-1em - \c__gzt_authors_photos_box_width_dim}
-        \tl_if_empty:NTF \l__gzt_people_photo_tl
-        {%
-          \dim_add:Nn \l__gzt_minibio_width_dim {\c__gzt_authors_photos_box_width_dim}
-        }{%
-          \begin{adjustbox}{valign=t,minipage=\c__gzt_authors_photos_box_width_dim}
-            \includegraphics[width=\c__gzt_authors_photos_width_dim]{\l__gzt_people_photo_tl}
-          \end{adjustbox}%
-          \quad%
-        }
-        \begin{adjustbox}{valign=t,minipage=\l__gzt_minibio_width_dim}
-          \begin{description}[leftmargin=1em,style=nextline]
+        \tl_if_empty:NF \l__gzt_firstlastname_tl {
+          \footnotesize%
+          % \noindent%
+          \DTLiffirstrow{%
+          }{
+            \DTLpar%
+            \medskip%
+          }
+          \dim_set:Nn \l__gzt_minibio_width_dim {\linewidth-1em - \c__gzt_authors_photos_box_width_dim}
+          \tl_if_empty:NTF \l__gzt_people_photo_tl
+          {%
+            \dim_add:Nn \l__gzt_minibio_width_dim {\c__gzt_authors_photos_box_width_dim}
+          }{%
+            \begin{adjustbox}{valign=t,minipage=\c__gzt_authors_photos_box_width_dim}
+              \includegraphics[width=\c__gzt_authors_photos_width_dim]{\l__gzt_people_photo_tl}
+            \end{adjustbox}%
+            \quad%
+          }
+          \begin{adjustbox}{valign=t,minipage=\l__gzt_minibio_width_dim}
+            \begin{description}[leftmargin=1em,style=nextline]
             \item[%
               \textcolor{__gzt_people_color}{%
                 \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -#1- \exp_not:V\DTLcurrentindex}%
@@ -1203,10 +1211,6 @@
               }
             \end{description}
           \end{adjustbox}
-        \DTLiflastrow{%
-        }{
-          \DTLpar%
-          \medskip%
         }
       }{
         \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -#1-
@@ -1391,7 +1395,7 @@
           \bool_if:NT {\g__gzt_credit_frontcover_bool} {
             \c_space_tl(\c__gzt_credit_frontcover_string_tl{}~:~%
             \DTLforeach*[\DTLiseq{\l__gzt_people_role_tl}{frontcovercredit}]{people}{%
-              \l__gzt_firstlastname=first-last-name%
+              \l__gzt_firstlastname_tl=first-last-name%
               ,\l__gzt_people_role_tl=role%
             }{%
               \__gzt_citeauthor_no_firstinits:n
@@ -1559,6 +1563,11 @@
   \bool_gset_true:N \g__gzt_frontcover_without_minitoc_bool
   \keys_set:nn { gzt/specialedition } {#1}
 }
+\NewDocumentCommand \moralreportsetup { m } {
+  \bool_gset_true:N \g__gzt_moral_report_bool
+  \bool_gset_true:N \g__gzt_frontcover_without_minitoc_bool
+  \keys_set:nn { gzt/moralreport } {#1}
+}
 \NewDocumentCommand \journalsetup { m } {
   \keys_set:nn { gzt/journalsetup } { #1 }
 }
@@ -1622,7 +1631,7 @@
 \newdateformat{l__gzt_uppercased_date_format}{
   \__gzt_uppercased_monthname_french:n {\THEMONTH}~\THEYEAR
 }
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
 \tl_new:N \g__gzt_bib_issue_date_tl
 \tl_gset:Nn \g__gzt_bib_issue_date_tl {
   \int_use:N \g__gzt_issue_year_int-
@@ -1720,10 +1729,10 @@
   \SetParskip{\c__gzt_mainmatter_parskip_skip}
   \pagestyle{__gzt_mainmatter_ps}%
 }
-\tl_new:N \g__gzt_article_acknowledgements_tl%
+\tl_new:N \l__gzt_article_acknowledgements_tl%
 \cs_new_protected:Nn \__gzt_article_acknowledgements:n
 {
-  \tl_gset:Nn \g__gzt_article_acknowledgements_tl { #1 }
+  \tl_set:Nn \l__gzt_article_acknowledgements_tl { #1 }
 }
 \tl_new:N \g__gzt_about_frontcover_tl%
 \bool_new:N \g__gzt_credit_frontcover_bool%
@@ -1828,6 +1837,26 @@
   }
   \ignorespaces
 }
+\cs_new_protected:Nn \__gzt_display_localtoc:
+{
+  \etocsettocstyle{\section*{\contentsname}}{}%
+  \etocsetstyle {section}
+  {}
+  {\leavevmode\leftskip 0cm\relax}
+  {\bfseries\normalsize\makebox[.6cm][l]{\etocnumber}%
+    \etocname\nobreak\hfill\nobreak%
+    \makebox[.5cm][r]{%
+      \etocpage%
+    }%
+    \par%
+  }
+  {\medskip}
+  \localtableofcontentswithrelativedepth{+1}
+}
+\NewDocumentCommand \gztlocaltableofcontents {}
+{
+  \__gzt_display_localtoc: {}
+}
 \tl_new:N \g__gzt_article_bib_key_tl%
 \tl_new:N \l__gzt_people_first_last_names_tl
 \tl_new:N \g__gzt_authors_first_last_names_tl%
@@ -2179,17 +2208,17 @@
     }
   }
 \file_if_exist:nT { \c__gzt_acronyms_file_string_tl } {%
-  \AtEndPreamble{\loadglsentries{\c__gzt_acronyms_file_string_tl}}
+  \AddToHook{begindocument/before}{\loadglsentries{\c__gzt_acronyms_file_string_tl}}
 }
 \bool_if:nT { \g__gzt_for_authors_bool }
 {
-  \AtEndDocument{%
+  \AddToHook{enddocument}{%
     \bool_if:NT {\g__gzt_multicols_bool} {
       \end{multicols}%
     }
   }
 }
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \file_if_exist_input:nF {\c__gzt_configuration_file_string_tl}
   {
     \msg_error:nn { gzt } { configuration-file-missing }
@@ -2331,7 +2360,7 @@
     \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -editorinchief- 1}
   }{
     \DTLforeach*[\DTLiseq{\l__gzt_people_role_tl}{editorinchief}]{people}{%
-      \l__gzt_firstlastname=first-last-name%
+      \l__gzt_firstlastname_tl=first-last-name%
       ,\l__gzt_people_role_tl=role%
     }{%
       \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -editorinchief- \exp_not:V\DTLcurrentindex}%
@@ -2349,7 +2378,7 @@
   }
   \__gzt_after_display_editorial: {}
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \tl_set_eq:NN \g__gzt_editorial_heading_tl \c__gzt_editorial_heading_string_tl
   \bool_if:NT {\g__gzt_special_edition_bool} {
     \tl_if_empty:NF \g__gzt_special_edition_editorial_heading_tl {%
@@ -2482,7 +2511,7 @@
 {}
 {\c_zero_dim}
 {}
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
   \graphicspath{{\c__gzt_issue_images_path_string_tl//}{../\c__gzt_issue_images_path_string_tl//}}
   % \glsdisablehyper
   \g__gzt_mainmatter_switch_tl
@@ -2492,7 +2521,7 @@
   % \pagestyle{__gzt_mainmatter_ps}%
   \exp_after:wN\newgeometry\exp_after:wN{\c__gzt_main_geometry_tl}%
 }
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
   \dim_if_exist:NTF \g__gzt_pagegrid_dim {%
     \pagegridsetup{%
       enable,%
@@ -2526,7 +2555,7 @@
     \bool_if:NF {\g__gzt_inside_pages_bool} {
       \g__gzt_display_frontcover_tl
       \bool_if:NTF {\g__gzt_coverpage_bool} {
-        \AfterEndPreamble{\end{document}}
+        \AddToHook{begindocument/end}{\end{document}}
       }{
         \g__gzt_display_inside_frontcover_tl
       }
@@ -2900,7 +2929,7 @@
   {}%
   {}%
 }%
-\AddEverypageHook{%
+\AddToHook{shipout/background}{
  \bool_if:nF { \g__gzt_frontcover_bool || \g__gzt_backcover_bool }{
     \bool_if:NF {\g__gzt_advertisement_bool} {
       \tikz[remember~picture,overlay] { \g__gzt_background_footer_tl }%
@@ -2969,26 +2998,23 @@
   \FloatBarrier%
   \begin{__gzt_minibiographies_acknowledgements_tcbox}
     \__gzt_display_people_by_role:n { author-art-\int_use:N \g__gzt_articles_int }
-    \tl_if_empty:NF \g__gzt_article_acknowledgements_tl
+    \DTLsavelastrowcount{\__gzt_authors_number}
+    \tl_if_empty:NF \l__gzt_article_acknowledgements_tl
     {%
-      \par%
-      \bigskip%
+      \footnotesize
+      \int_compare:nNnT {\__gzt_authors_number}>{0}
+      {
+        \par%
+        \bigskip%
+      }
       \begin{adjustbox}{valign=t,minipage=\linewidth}
         \color{__gzt_acknowledgements_color}%
-        \g__gzt_article_acknowledgements_tl
+        \setlength{\parskip}{\c__gzt_mainmatter_parskip_skip}
+        \l__gzt_article_acknowledgements_tl
       \end{adjustbox}
-  }
+    }
+    \bool_gset_true:N \g__gzt_previous_article_with_bibliography_or_minibio_bool
   \end{__gzt_minibiographies_acknowledgements_tcbox}
-  \bool_gset_true:N \g__gzt_previous_article_with_bibliography_or_minibio_bool
-  %
-  \tl_gclear:N \g__gzt_people_affiliation_tl
-  \tl_gclear:N \g__gzt_people_email_tl
-  \tl_gclear:N \g__gzt_people_minibio_tl
-  \tl_gclear:N \g__gzt_people_photo_tl
-  \tl_gclear:N \g__gzt_people_webpage_tl
-  \tl_gclear:N \g__gzt_article_acknowledgements_tl
-  \DTLgcleardb{__gzt_authors}
-  \DTLgcleardb{__gzt_interviewees}
 }
 \let\printauthorsdetails\printminibios
 \cs_set_eq:NN \__gzt_printbibliography \printbibliography
@@ -3344,7 +3370,7 @@
   inputencoding=utf8/latin1
 }%
 \DeclareTotalTCBox{\gztverb}{ v }{verbatim,blank,fuzzy~halo=0pt~with~__gzt_light_generic_dark_color!8}{#1}
-\NewTCBListing{gztcode}{ O{} }{%
+\NewTCBListing{gztcode}{ !O{} }{%
   listing~style=__gzt_lst_style,
   listing~only,
   enlarge~top~by=\medskipamount,
@@ -3487,6 +3513,12 @@
   \bool_gset_true:N \g__gzt_mainmatter_bool
 }
 \NewDocumentCommand \gztinput { m m } {%
+  \tl_gclear:N \g__gzt_people_affiliation_tl
+  \tl_gclear:N \g__gzt_people_email_tl
+  \tl_gclear:N \g__gzt_people_minibio_tl
+  \tl_gclear:N \g__gzt_people_photo_tl
+  \tl_gclear:N \g__gzt_people_webpage_tl
+  \tl_clear:N \l__gzt_article_acknowledgements_tl
   \startcustomization%
   \bool_if:NF {\g__gzt_refsection_bool} {
     \begin{refsection}
@@ -3509,7 +3541,7 @@
 }
 \bool_if:NF {\g__gzt_coverpage_bool} {
   \bool_if:NF {\g__gzt_inside_pages_bool} {
-    \preto\@enddocumenthook{
+    \AddToHook{enddocument/end}{
       \bool_gset_true:N \g__gzt_backmatter_bool
       \g__gzt_display_inside_backcover_tl
       \newpage
@@ -3520,7 +3552,7 @@
 \bool_if:NF {\g__gzt_coverpage_bool} {
   \bool_if:nF { \g__gzt_for_authors_bool } {
     \bool_if:nT { \g__gzt_inside_pages_bool } {
-      \AtEndDocument{%
+      \AddToHook{enddocument}{%
         \prg_replicate:nn
         { \int_mod:nn { 4 - \int_mod:nn { \getpagerefnumber{LastPage} } { 4 } } { 4 } }
         { \thispagestyle{__gzt_blank_pages_ps}\null\clearpage }
@@ -3696,7 +3728,7 @@
     enlarge~left~by=\c__gzt_inside_cover_offset_dim,
   }
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \bool_if:NTF {\g__gzt_special_edition_bool} {
     \tcbset{
       __gzt_tcb_inside_frontcover_style/.append~style={%
@@ -3818,7 +3850,7 @@
   \tl_clear:N \l__gzt_newtheorem_frenchtitle_tl
   \tl_clear:N \l__gzt_newtheorem_englishtitle_tl
   \tl_set:Nn \l__gzt_newtheorem_englishtitle_tl {
-    \text_uppercase:n {#2}
+    \text_titlecase:n {#2}
   }
   \tl_set:Nf \l__gzt_newtheorem_frenchtitle_tl {
     \l__gzt_newtheorem_englishtitle_tl

Modified: trunk/Master/texmf-dist/tex/latex/gzt/gzt.dbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/gzt/gzt.dbx	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/tex/latex/gzt/gzt.dbx	2021-02-16 22:12:37 UTC (rev 57765)
@@ -7,7 +7,7 @@
 %% gzt.dtx  (with options: `datamodel')
 %% -----------------------------------------------------------------------------
 %% gzt --- SMF bundle of classes for the French journal "La Gazette des
-%%         Math'ematiciens", version 1.0.0
+%%         Math'ematiciens"
 %% 
 %% E-mail: denis.bitouze at univ-littoral.fr
 %% Released under the LaTeX Project Public License v1.3c or later

Modified: trunk/Master/texmf-dist/tex/latex/gzt/gzt.lbx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/gzt/gzt.lbx	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/tex/latex/gzt/gzt.lbx	2021-02-16 22:12:37 UTC (rev 57765)
@@ -7,7 +7,7 @@
 %% gzt.dtx  (with options: `languagemodel')
 %% -----------------------------------------------------------------------------
 %% gzt --- SMF bundle of classes for the French journal "La Gazette des
-%%         Math'ematiciens", version 1.0.0
+%%         Math'ematiciens"
 %% 
 %% E-mail: denis.bitouze at univ-littoral.fr
 %% Released under the LaTeX Project Public License v1.3c or later

Modified: trunk/Master/texmf-dist/tex/latex/gzt/gztarticle.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/gzt/gztarticle.cls	2021-02-16 20:44:07 UTC (rev 57764)
+++ trunk/Master/texmf-dist/tex/latex/gzt/gztarticle.cls	2021-02-16 22:12:37 UTC (rev 57765)
@@ -7,12 +7,14 @@
 %% gzt.dtx  (with options: `class-article')
 %% -----------------------------------------------------------------------------
 %% gzt --- SMF bundle of classes for the French journal "La Gazette des
-%%         Math'ematiciens", version 1.0.0
+%%         Math'ematiciens"
 %% 
 %% E-mail: denis.bitouze at univ-littoral.fr
 %% Released under the LaTeX Project Public License v1.3c or later
 %% See http://www.latex-project.org/lppl.txt
 %% -----------------------------------------------------------------------------
+\def\gztfileversion{1.0.1}
+\def\gztfiledate{2021-02-14}
 \RequirePackage{silence}%
 \WarningFilter{kpfonts}{With 'easyscsl' option}
 \RequirePackage{xpatch}%
@@ -61,8 +63,8 @@
 \ExplSyntaxOn
 \ProvidesExplClass
   {gztarticle}
-  {2020-03-17}
-  {1.0.0}
+  {\gztfiledate}
+  {\gztfileversion}
   {
     SMF~class~for~the~French~journal^^J
     "La~Gazette~des~Math'ematiciens".
@@ -69,6 +71,7 @@
 ~(Author~version.)
   }
 \NeedsTeXFormat{LaTeX2e}
+\bool_new:N \g__gzt_moral_report_bool
 \bool_new:N \g__gzt_special_edition_bool
 \bool_new:N \g__gzt_for_authors_bool
 \bool_new:N \g__gzt_for_printer_bool
@@ -78,6 +81,43 @@
 \bool_new:N \g__gzt_no_inside_backcover_bool
 \bool_gset_true:N \g__gzt_for_authors_bool%
 \bool_gset_true:N \g__gzt_inside_pages_bool%
+\tl_gset:Nn \g__gzt_moral_report_common_option_tl {%
+  \AddToHook{begindocument/before} {%
+    \bool_gset_true:N \g__gzt_moral_report_bool
+    \bool_gset_true:N \g__gzt_frontcover_without_minitoc_bool
+    \title[short={\bfseries\c__gzt_moralreport_rubric_string_tl}]{}
+    \tl_gset:Nn \g__gzt_rubric_title_tl {\c__gzt_moralreport_rubric_string_tl}
+  }
+}
+\keys_define:nn { gztarticle }
+{
+  editorial .code:n = {%
+    \AddToHook{begindocument}{%
+      \__gzt_before_display_editorial:n {}%
+    }
+    \AddToHook{enddocument}{%
+      \__gzt_after_display_editorial: {}%
+    }
+  },%
+  presidentmessage .code:n = {%
+    \AddToHook{begindocument}{%
+      \__gzt_before_display_presidentmessage: {}%
+    }
+    \AddToHook{enddocument}{%
+      \__gzt_after_display_presidentmessage: {}%
+    }
+  },%
+  moralreport .code:n = {
+    \g__gzt_moral_report_common_option_tl
+    \keys_set:nn { gztarticle / moralreport } {#1}
+  },
+  moralreport / title .code:n = {%
+    \tl_gset:Nn \g__gzt_moral_report_title_tl {#1}
+  },%
+  moralreport / short~title .code:n = {%
+    \tl_gset:Nn \g__gzt_moral_report_short_title_tl {#1}
+  },%
+}%
 \PassOptionsToClass{openany,english,french}{book}
 \LoadClass { book }
 \PassOptionsToPackage{table,cmyk}{xcolor}%
@@ -124,7 +164,6 @@
 \RequirePackage{mathtools}
 \RequirePackage{rsfso}
 \RequirePackage{esvect}
-\RequirePackage{everypage}
 \RequirePackage{translator}%
 \RequirePackage{geometry}
 \RequirePackage{babel}%
@@ -203,7 +242,7 @@
 \tl_const:Nn \c__gzt_printer_string_tl {Impression}
 \tl_const:Nn \c__gzt_configuration_file_string_tl {gzt.cfg}
 \tl_const:Nn \c__gzt_artistic_director_string_tl {Conception~graphique}
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \bool_if:NTF {\g__gzt_special_edition_bool} {
     \tl_const:Nn \c__gzt_editorial_heading_string_tl {Avant-propos}
   }{
@@ -219,7 +258,7 @@
 \tl_const:Nn \c__gzt_special_edition_string_tl {\c_space_tl{}sp{\'e}cial}
 \tl_const:Nn \c__gzt_long_special_edition_string_tl {Numéro\c__gzt_special_edition_string_tl}%
 \tl_const:Nn \c__gzt_short_special_edition_string_tl {\No{}\c__gzt_special_edition_string_tl}%
-\AtEndPreamble{
+\AddToHook{begindocument/before}{
   \tl_const:Nn \c__gzt_frontcover_header_string_tl {
     \bool_if:NT {\g__gzt_special_edition_bool} {
       \text_uppercase:n {\c__gzt_long_special_edition_string_tl}
@@ -239,21 +278,25 @@
 }
 \clist_const:Nn \c__gzt__graphics_extensions_clist {png,PNG,jpg,JPG,jpeg,JPEG,pdf,PDF}
 \tl_const:Nn \c__gzt_pdftitle_string_tl {
-  \c__gzt_journal_title_string_tl
-  % \c_space_tl
-  % \textendash{}
-  % \c_space_tl
-  % \l__gzt_uppercased_date_format{\displaydate{__gzt_date}}
-  \c_space_tl
-  \textendash{}
-  \c_space_tl
-  N°
-  \bool_if:NTF {\g__gzt_special_edition_bool} {
-    \c__gzt_special_edition_string_tl
+  \bool_if:NTF {\g__gzt_moral_report_bool} {
+    \c__gzt_moralreport_rubric_string_tl
+  }{
+    \c__gzt_journal_title_string_tl
+    % \c_space_tl
+    % \textendash{}
+    % \c_space_tl
+    % \l__gzt_uppercased_date_format{\displaydate{__gzt_date}}
     \c_space_tl
-    \g__gzt_special_edition_title_tl
-  }{
-    \int_use:N\g__gzt_issue_number_int
+    \textendash{}
+    \c_space_tl
+    N°
+    \bool_if:NTF {\g__gzt_special_edition_bool} {
+      \c__gzt_special_edition_string_tl
+      \c_space_tl
+      \g__gzt_special_edition_title_tl
+    }{
+      \int_use:N\g__gzt_issue_number_int
+    }
   }
 }
 \tl_const:Nn \c__gzt_frontmatter_directory_string_tl {frontmatter}
@@ -328,15 +371,19 @@
   \c_space_tl
   \textcolor{__gzt_date_color}{
     \textendash{}\c_space_tl
-    \text_uppercase:n {\c__gzt_journal_short_title_string_tl}
-    \bool_if:nF { \g__gzt_inside_frontcover_bool || \g__gzt_backmatter_bool || {\int_compare_p:nNn {\g__gzt_issue_number_int}={0}} }
-    {
-      \c_space_tl\textendash{}\c_space_tl
-      \l__gzt_uppercased_date_format\displaydate{__gzt_date}
-      \bool_if:NF {\g__gzt_special_edition_bool} {
-        \c_space_tl
-        \textendash{}\c_space_tl
-        \textcolor{__gzt_smf_number_color}{\No\int_use:N\g__gzt_issue_number_int}
+    \bool_if:NTF {\g__gzt_moral_report_bool} {
+      \text_uppercase:n { \c__gzt_moralreport_rubric_string_tl }
+    }{
+      \text_uppercase:n {\c__gzt_journal_short_title_string_tl}
+      \bool_if:nF { \g__gzt_inside_frontcover_bool || \g__gzt_backmatter_bool || {\int_compare_p:nNn {\g__gzt_issue_number_int}={0}} }
+      {
+        \c_space_tl\textendash{}\c_space_tl
+        \l__gzt_uppercased_date_format\displaydate{__gzt_date}
+        \bool_if:NF {\g__gzt_special_edition_bool} {
+          \c_space_tl
+          \textendash{}\c_space_tl
+          \textcolor{__gzt_smf_number_color}{\No\int_use:N\g__gzt_issue_number_int}
+        }
       }
     }
   }
@@ -350,9 +397,9 @@
 \tl_const:Nn \c__gzt_issue_bib_file_string_tl {\c_sys_jobname_str\c__gzt_issue_bib_file_suffix_string_tl.bib}
 \tl_const:Nn \c__gzt_issue_bib_path_string_tl {\c__gzt_issue_bib_file_string_tl}
 \bool_if:NTF {\g__gzt_special_edition_bool} {
+  \tl_const:Nn \c__gzt_issue_bib_key_tl {special-edition}
+}{
   \tl_const:Nn \c__gzt_issue_bib_key_tl {\int_use:N \g__gzt_issue_number_int}
-}{
-  \tl_const:Nn \c__gzt_issue_bib_key_tl {special-edition}
 }
 \tl_const:Nn \c__gzt_interview_title_string_tl {En~apart\'e~avec~}
 \tl_const:Nn \c__gzt_aside_string_tl {--}
@@ -870,16 +917,16 @@
 \colorlet{__gzt_book_advertisement_bg_color}{white}
 \colorlet{__gzt_book_advertisement_frame_color}{__gzt_generic_dark_color}
 \colorlet{__gzt_default_cover_color}{white}
-\AtBeginEnvironment{multicols}{
+\AddToHook{env/multicols/begin}{
   \bool_gset_true:N \g__gzt_multicols_bool
 }
-\AtEndEnvironment{multicols}{
+\AddToHook{env/multicols/end}{
   \bool_gset_false:N \g__gzt_multicols_bool
 }
-\AtBeginEnvironment{refsection}{
+\AddToHook{env/refsection/begin}{
   \bool_gset_true:N \g__gzt_refsection_bool
 }
-\AtEndEnvironment{refsection}{
+\AddToHook{env/refsection/end}{
   \bool_gset_false:N \g__gzt_refsection_bool
 }
 \tl_const:Nn \c__gzt_footer_size_font_tl {
@@ -930,28 +977,16 @@
 \tl_gset:Nn \g__gzt_pdfauthor_string_tl {
   \g__gzt_smf_string_tl
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \hypersetup{%
     pdftitle=\g__gzt_pdftitle_string_tl,
     pdfauthor=\g__gzt_pdfauthor_string_tl%
   }
 }
-\DTLnewdb{__gzt_authors}
-\cs_new_protected:Nn \__gzt_authors:nnnnnn
-  {
-    \DTLnewrow{__gzt_authors}%
-    \DTLnewdbentry{__gzt_authors}{first-last-name}{#1}%
-    \DTLnewdbentry{__gzt_authors}{affiliation}{#2}%
-    \DTLnewdbentry{__gzt_authors}{email}{#3}%
-    \DTLnewdbentry{__gzt_authors}{minibio}{#4}%
-    \DTLnewdbentry{__gzt_authors}{photo}{#5}%
-    \DTLnewdbentry{__gzt_authors}{webpage}{#6}%
-  }
 \cs_new_protected:Nn \__gzt_email:n
   {
     \href{mailto:#1}{\nolinkurl{#1}}%
   }
-\cs_generate_variant:Nn \__gzt_authors:nnnnnn { nVVVVV }
 \cs_new_protected:Nn \__gzt_display_author:nnnnn
 {
   \begin{tabular}[t]{p{\c__gzt_authors_photos_box_width_dim}p{0.75\linewidth}}
@@ -984,15 +1019,6 @@
   \end{tabular}
 }
 \cs_generate_variant:Nn \__gzt_display_author:nnnnn { VVVVV }
-\DTLnewdb{__gzt_interviewees}
-\cs_new_protected:Nn \__gzt_interviewees:nnn
-  {
-    \DTLnewrow{__gzt_interviewees}%
-    \DTLnewdbentry{__gzt_interviewees}{first-last-name}{#1}%
-    \DTLnewdbentry{__gzt_interviewees}{minibio}{#2}%
-    \DTLnewdbentry{__gzt_interviewees}{photo}{#3}%
-  }
-\cs_generate_variant:Nn \__gzt_interviewees:nnn { nVV }
 \DTLnewdb{people}
 \tl_new:N \l__gzt_crossref_tl
 \cs_new_protected:Nn \__gzt_people:nnnnnnnn
@@ -1035,12 +1061,14 @@
 \cs_new_protected:Nn \__gzt_display_academic_signature:n
 {
   \bigskip
+  \begin{__gzt_minibiographies_acknowledgements_tcbox}
     #1
+  \end{__gzt_minibiographies_acknowledgements_tcbox}
 }
 \cs_new_protected:Nn \__gzt_display_people_by_role:n
 {
   \DTLforeach*[\DTLiseq{\l__gzt_people_role_tl}{#1}]{people}{%
-    \l__gzt_firstlastname=first-last-name%
+    \l__gzt_firstlastname_tl=first-last-name%
     ,\l__gzt_people_affiliation_tl=affiliation%
     ,\l__gzt_people_email_tl=email%
     ,\l__gzt_people_minibio_tl=minibio%
@@ -1062,26 +1090,29 @@
         \newline%
         \href{mailto:\l__gzt_people_email_tl}{\nolinkurl{\l__gzt_people_email_tl}}%
       }
-      \DTLiflastrow{%
-      }{%
-        \medskip%
-      }
+      \medskip%
     }{
       \tl_if_in:NnTF \l__gzt_people_role_tl { author } {
-        \footnotesize%
-        % \noindent%
-        \dim_set:Nn \l__gzt_minibio_width_dim {\linewidth-1em - \c__gzt_authors_photos_box_width_dim}
-        \tl_if_empty:NTF \l__gzt_people_photo_tl
-        {%
-          \dim_add:Nn \l__gzt_minibio_width_dim {\c__gzt_authors_photos_box_width_dim}
-        }{%
-          \begin{adjustbox}{valign=t,minipage=\c__gzt_authors_photos_box_width_dim}
-            \includegraphics[width=\c__gzt_authors_photos_width_dim]{\l__gzt_people_photo_tl}
-          \end{adjustbox}%
-          \quad%
-        }
-        \begin{adjustbox}{valign=t,minipage=\l__gzt_minibio_width_dim}
-          \begin{description}[leftmargin=1em,style=nextline]
+        \tl_if_empty:NF \l__gzt_firstlastname_tl {
+          \footnotesize%
+          % \noindent%
+          \DTLiffirstrow{%
+          }{
+            \DTLpar%
+            \medskip%
+          }
+          \dim_set:Nn \l__gzt_minibio_width_dim {\linewidth-1em - \c__gzt_authors_photos_box_width_dim}
+          \tl_if_empty:NTF \l__gzt_people_photo_tl
+          {%
+            \dim_add:Nn \l__gzt_minibio_width_dim {\c__gzt_authors_photos_box_width_dim}
+          }{%
+            \begin{adjustbox}{valign=t,minipage=\c__gzt_authors_photos_box_width_dim}
+              \includegraphics[width=\c__gzt_authors_photos_width_dim]{\l__gzt_people_photo_tl}
+            \end{adjustbox}%
+            \quad%
+          }
+          \begin{adjustbox}{valign=t,minipage=\l__gzt_minibio_width_dim}
+            \begin{description}[leftmargin=1em,style=nextline]
             \item[%
               \textcolor{__gzt_people_color}{%
                 \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -#1- \exp_not:V\DTLcurrentindex}%
@@ -1112,10 +1143,6 @@
               }
             \end{description}
           \end{adjustbox}
-        \DTLiflastrow{%
-        }{
-          \DTLpar%
-          \medskip%
         }
       }{
         \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -#1-
@@ -1300,7 +1327,7 @@
           \bool_if:NT {\g__gzt_credit_frontcover_bool} {
             \c_space_tl(\c__gzt_credit_frontcover_string_tl{}~:~%
             \DTLforeach*[\DTLiseq{\l__gzt_people_role_tl}{frontcovercredit}]{people}{%
-              \l__gzt_firstlastname=first-last-name%
+              \l__gzt_firstlastname_tl=first-last-name%
               ,\l__gzt_people_role_tl=role%
             }{%
               \__gzt_citeauthor_no_firstinits:n
@@ -1468,6 +1495,11 @@
   \bool_gset_true:N \g__gzt_frontcover_without_minitoc_bool
   \keys_set:nn { gzt/specialedition } {#1}
 }
+\NewDocumentCommand \moralreportsetup { m } {
+  \bool_gset_true:N \g__gzt_moral_report_bool
+  \bool_gset_true:N \g__gzt_frontcover_without_minitoc_bool
+  \keys_set:nn { gzt/moralreport } {#1}
+}
 \NewDocumentCommand \journalsetup { m } {
   \keys_set:nn { gzt/journalsetup } { #1 }
 }
@@ -1531,7 +1563,7 @@
 \newdateformat{l__gzt_uppercased_date_format}{
   \__gzt_uppercased_monthname_french:n {\THEMONTH}~\THEYEAR
 }
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
 \tl_new:N \g__gzt_bib_issue_date_tl
 \tl_gset:Nn \g__gzt_bib_issue_date_tl {
   \int_use:N \g__gzt_issue_year_int-
@@ -1629,11 +1661,31 @@
   \SetParskip{\c__gzt_mainmatter_parskip_skip}
   \pagestyle{__gzt_mainmatter_ps}%
 }
-\tl_new:N \g__gzt_article_acknowledgements_tl%
+\tl_new:N \l__gzt_article_acknowledgements_tl%
 \cs_new_protected:Nn \__gzt_article_acknowledgements:n
 {
-  \tl_gset:Nn \g__gzt_article_acknowledgements_tl { #1 }
+  \tl_set:Nn \l__gzt_article_acknowledgements_tl { #1 }
 }
+\cs_new_protected:Nn \__gzt_display_localtoc:
+{
+  \etocsettocstyle{\section*{\contentsname}}{}%
+  \etocsetstyle {section}
+  {}
+  {\leavevmode\leftskip 0cm\relax}
+  {\bfseries\normalsize\makebox[.6cm][l]{\etocnumber}%
+    \etocname\nobreak\hfill\nobreak%
+    \makebox[.5cm][r]{%
+      \etocpage%
+    }%
+    \par%
+  }
+  {\medskip}
+  \localtableofcontentswithrelativedepth{+1}
+}
+\NewDocumentCommand \gztlocaltableofcontents {}
+{
+  \__gzt_display_localtoc: {}
+}
 \tl_new:N \g__gzt_article_bib_key_tl%
 \tl_new:N \l__gzt_people_first_last_names_tl
 \tl_new:N \g__gzt_authors_first_last_names_tl%
@@ -1964,7 +2016,7 @@
     }
   }
 \file_if_exist:nT { \c__gzt_acronyms_file_string_tl } {%
-  \AtEndPreamble{\loadglsentries{\c__gzt_acronyms_file_string_tl}}
+  \AddToHook{begindocument/before}{\loadglsentries{\c__gzt_acronyms_file_string_tl}}
 }
 \tl_new:N \g__gzt_boxed_issue_number_tl%
 \tl_gset:Nn \g__gzt_boxed_issue_number_tl {%
@@ -2056,7 +2108,7 @@
     \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -editorinchief- 1}
   }{
     \DTLforeach*[\DTLiseq{\l__gzt_people_role_tl}{editorinchief}]{people}{%
-      \l__gzt_firstlastname=first-last-name%
+      \l__gzt_firstlastname_tl=first-last-name%
       ,\l__gzt_people_role_tl=role%
     }{%
       \__gzt_citeauthor_no_firstinits:n {\c__gzt_issue_bib_key_tl -editorinchief- \exp_not:V\DTLcurrentindex}%
@@ -2074,7 +2126,7 @@
   }
   \__gzt_after_display_editorial: {}
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \tl_set_eq:NN \g__gzt_editorial_heading_tl \c__gzt_editorial_heading_string_tl
   \bool_if:NT {\g__gzt_special_edition_bool} {
     \tl_if_empty:NF \g__gzt_special_edition_editorial_heading_tl {%
@@ -2156,7 +2208,7 @@
 {}
 {\c_zero_dim}
 {}
-\AtBeginDocument{%
+\AddToHook{begindocument}{%
   \graphicspath{{\c__gzt_issue_images_path_string_tl//}{../\c__gzt_issue_images_path_string_tl//}}
   % \glsdisablehyper
   \g__gzt_mainmatter_switch_tl
@@ -2299,7 +2351,7 @@
   }%
   {\c__gzt_footer_size_font_tl\thepage}%
 }%
-\AddEverypageHook{%
+\AddToHook{shipout/background}{
     \bool_if:NF {\g__gzt_advertisement_bool} {
       \tikz[remember~picture,overlay] { \g__gzt_background_footer_tl }%
     }%
@@ -2366,26 +2418,23 @@
   \FloatBarrier%
   \begin{__gzt_minibiographies_acknowledgements_tcbox}
     \__gzt_display_people_by_role:n { author-art-\int_use:N \g__gzt_articles_int }
-    \tl_if_empty:NF \g__gzt_article_acknowledgements_tl
+    \DTLsavelastrowcount{\__gzt_authors_number}
+    \tl_if_empty:NF \l__gzt_article_acknowledgements_tl
     {%
-      \par%
-      \bigskip%
+      \footnotesize
+      \int_compare:nNnT {\__gzt_authors_number}>{0}
+      {
+        \par%
+        \bigskip%
+      }
       \begin{adjustbox}{valign=t,minipage=\linewidth}
         \color{__gzt_acknowledgements_color}%
-        \g__gzt_article_acknowledgements_tl
+        \setlength{\parskip}{\c__gzt_mainmatter_parskip_skip}
+        \l__gzt_article_acknowledgements_tl
       \end{adjustbox}
-  }
+    }
+    \bool_gset_true:N \g__gzt_previous_article_with_bibliography_or_minibio_bool
   \end{__gzt_minibiographies_acknowledgements_tcbox}
-  \bool_gset_true:N \g__gzt_previous_article_with_bibliography_or_minibio_bool
-  %
-  \tl_gclear:N \g__gzt_people_affiliation_tl
-  \tl_gclear:N \g__gzt_people_email_tl
-  \tl_gclear:N \g__gzt_people_minibio_tl
-  \tl_gclear:N \g__gzt_people_photo_tl
-  \tl_gclear:N \g__gzt_people_webpage_tl
-  \tl_gclear:N \g__gzt_article_acknowledgements_tl
-  \DTLgcleardb{__gzt_authors}
-  \DTLgcleardb{__gzt_interviewees}
 }
 \let\printauthorsdetails\printminibios
 \cs_set_eq:NN \__gzt_printbibliography \printbibliography
@@ -2624,7 +2673,7 @@
   inputencoding=utf8/latin1
 }%
 \DeclareTotalTCBox{\gztverb}{ v }{verbatim,blank,fuzzy~halo=0pt~with~__gzt_light_generic_dark_color!8}{#1}
-\NewTCBListing{gztcode}{ O{} }{%
+\NewTCBListing{gztcode}{ !O{} }{%
   listing~style=__gzt_lst_style,
   listing~only,
   enlarge~top~by=\medskipamount,
@@ -2766,27 +2815,8 @@
   \bool_gset_false:N \g__gzt_advertisement_bool
   \bool_gset_true:N \g__gzt_mainmatter_bool
 }
-\keys_define:nn { gztarticle }
-{
-  editorial .code:n = {%
-    \AtBeginDocument{%
-      \__gzt_before_display_editorial:n {}%
-    }
-    \AtEndDocument{%
-      \__gzt_after_display_editorial: {}%
-    }
-  },%
-  presidentmessage .code:n = {%
-    \AtBeginDocument{%
-      \__gzt_before_display_presidentmessage: {}%
-    }
-    \AtEndDocument{%
-      \__gzt_after_display_presidentmessage: {}%
-    }
-  },%
-}%
 \ProcessKeysOptions { gztarticle }
-\AtEndDocument{%
+\AddToHook{enddocument}{%
   \bool_if:NT {\g__gzt_multicols_bool} {
   \end{multicols}%
   }
@@ -2962,7 +2992,7 @@
     enlarge~left~by=\c__gzt_inside_cover_offset_dim,
   }
 }
-\AtEndPreamble{%
+\AddToHook{begindocument/before}{%
   \bool_if:NTF {\g__gzt_special_edition_bool} {
     \tcbset{
       __gzt_tcb_inside_frontcover_style/.append~style={%
@@ -3084,7 +3114,7 @@
   \tl_clear:N \l__gzt_newtheorem_frenchtitle_tl
   \tl_clear:N \l__gzt_newtheorem_englishtitle_tl
   \tl_set:Nn \l__gzt_newtheorem_englishtitle_tl {
-    \text_uppercase:n {#2}
+    \text_titlecase:n {#2}
   }
   \tl_set:Nf \l__gzt_newtheorem_frenchtitle_tl {
     \l__gzt_newtheorem_englishtitle_tl



More information about the tex-live-commits mailing list.