From 4ffe448c72373378e2a6320248f24d613eefc3bc Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 16 Feb 2021 22:12:37 +0000 Subject: gzt (16feb21) git-svn-id: svn://tug.org/texlive/trunk@57765 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/gzt/CHANGELOG.md | 19 +- Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib | 8 +- Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf | Bin 530283 -> 528662 bytes Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex | 28 +- Master/texmf-dist/doc/latex/gzt/french/latexmkrc | 5 +- .../doc/latex/gzt/french/sections/gztarticle.tex | 267 ++++++----- Master/texmf-dist/source/latex/gzt/gzt.dtx | 504 ++++++++++++--------- Master/texmf-dist/tex/latex/gzt/gzt.cls | 258 ++++++----- Master/texmf-dist/tex/latex/gzt/gzt.dbx | 2 +- Master/texmf-dist/tex/latex/gzt/gzt.lbx | 2 +- Master/texmf-dist/tex/latex/gzt/gztarticle.cls | 284 ++++++------ 11 files changed, 792 insertions(+), 585 deletions(-) (limited to 'Master/texmf-dist') diff --git a/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md b/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md index 9359e8f3766..0f36ea2a830 100644 --- a/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/gzt/CHANGELOG.md @@ -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). diff --git a/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib b/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib index 893e4fb2b83..40b8198d46f 100644 --- a/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib +++ b/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.bib @@ -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}, diff --git a/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf b/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf index 54796958100..9f253543c49 100644 Binary files a/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf and b/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.pdf differ diff --git a/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex b/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex index 0b8aaf38d8e..52839b4fec7 100644 --- a/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex +++ b/Master/texmf-dist/doc/latex/gzt/french/gzt-fr.tex @@ -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,37 +71,38 @@ } \ExplSyntaxOff % -\lstMakeShortInline[style=dbtex]| -% \SetWatermarkColor{gray!10}% \SetWatermarkFontSize{30mm}% \SetWatermarkText{\MakeUppercase{travail en cours}}% % \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={% Université du Littoral Côte d'Opale, Laboratoire de mathématiques pures et appliquées% },% -photo=denis,% -email=denis.bitouze@lmpa.univ-littoral.fr,% -webpage=http://gte.univ-littoral.fr/members/dbitouze/pub/latex/,% +photo=./denis,% +email=denis.bitouze@univ-littoral.fr,% +webpage=https://gte.univ-littoral.fr/Members/denis-bitouze/pub/latex,% ]{Bitouzé, Denis} % \maketitle* % \localtableofcontents % -\input{sections/fixed-footnotes} \input{sections/gztarticle} \input{sections/packages-charges} \input{sections/notations} diff --git a/Master/texmf-dist/doc/latex/gzt/french/latexmkrc b/Master/texmf-dist/doc/latex/gzt/french/latexmkrc index 400046cd557..d324cb3be21 100644 --- a/Master/texmf-dist/doc/latex/gzt/french/latexmkrc +++ b/Master/texmf-dist/doc/latex/gzt/french/latexmkrc @@ -10,10 +10,7 @@ sub makeglossaries{ 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*' ; diff --git a/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex b/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex index ab8e9ffcd12..06bde597b7a 100644 --- a/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex +++ b/Master/texmf-dist/doc/latex/gzt/french/sections/gztarticle.tex @@ -102,7 +102,7 @@ optionnel permettant de spécifier un (sous-)titre court au moyen de la clé 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 @@ optionnel permettant de spécifier un (sous-)titre court au moyen de la clé \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 @@ L'exemple suivant\footnote{Les commandes \refCom{surname} et \refCom{enquote} 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 @@ recueilli les propos peuvent être signalées dans le résumé (cf. environnemen 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 des environnements : % 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}. + +\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} + +% \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} -Tous ces environnements acceptent des options décrites \vref{sec-options-gzt}. - -\subsubsection{Images} -\label{sec-images} - -Une 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.} ; -\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 : +Ces environnements admettent en \meta{options} : \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 @@ admettent en argument optionnel : \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}}}] diff --git a/Master/texmf-dist/source/latex/gzt/gzt.dtx b/Master/texmf-dist/source/latex/gzt/gzt.dtx index d2513ec9fe3..e490957478d 100644 --- a/Master/texmf-dist/source/latex/gzt/gzt.dtx +++ b/Master/texmf-dist/source/latex/gzt/gzt.dtx @@ -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 % % It may be distributed and/or modified under the conditions of the @@ -39,21 +39,24 @@ Gazette des Mathématiciens”](https://smf.emath.fr/les-publications/la-gazette \expandafter\begingroup \fi % +%<*class|class-article|install> +\def\gztfileversion{1.0.1} +\def\gztfiledate{2021-02-14} +% %<*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@univ-littoral.fr Released under the LaTeX Project Public License v1.3c or later @@ -61,7 +64,7 @@ See http://www.latex-project.org/lppl.txt ----------------------------------------------------------------------------- \endpreamble \postamble -% Copyright (C) 2014-2020 by Denis Bitouz'e +% Copyright (C) 2014-2021 by Denis Bitouz'e ---------------------------------------------------------------------------- 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 @@ This work consists of the file gzt.dtx \nopreamble\nopostamble \file{README.md}{\from{\jobname.dtx}{readme}} }% +\usedir{doc/latex/\GZT@classname} +\generate{ + \nopreamble\nopostamble + \file{CHANGELOG.md}{\from{\jobname.dtx}{changelog}} +}% \usedir{doc/latex/\GZT@classname/french} \generate{ \nopreamble\nopostamble @@ -141,6 +149,7 @@ This work consists of the file gzt.dtx % \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 @@ This work consists of the file gzt.dtx \ProvidesExplClass % {gzt} % {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 @@ This work consists of the file gzt.dtx % \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,6 +706,19 @@ This work consists of the file gzt.dtx %\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} % % \end{macrocode} @@ -780,9 +803,63 @@ This work consists of the file gzt.dtx 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} +% +% \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} +% +% \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 @@ This work consists of the file gzt.dtx % % \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 @@ This work consists of the file gzt.dtx % \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 @@ This work consists of the file gzt.dtx % \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 @@ This work consists of the file gzt.dtx % 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 - \c_space_tl - \g_@@_special_edition_title_tl + \bool_if:NTF {\g_@@_moral_report_bool} { + \c_@@_moralreport_rubric_string_tl }{ - \int_use:N\g_@@_issue_number_int + \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 + \c_space_tl + \g_@@_special_edition_title_tl + }{ + \int_use:N\g_@@_issue_number_int + } } } % \end{macrocode} @@ -1620,15 +1701,19 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx % 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 {\int_use:N \g_@@_issue_number_int} -}{ \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} } % \end{macrocode} % For the interview title. @@ -2778,16 +2863,16 @@ This work consists of the file gzt.dtx % 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 @@ This work consists of the file gzt.dtx \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,38 +2949,6 @@ This work consists of the file gzt.dtx } % \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 { @@ -2903,12 +2956,6 @@ This work consists of the file gzt.dtx } % \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 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx \cs_new_protected:Nn \@@_display_academic_signature:n { \bigskip + \begin{_@@_minibiographies_acknowledgements_tcbox} #1 + \end{_@@_minibiographies_acknowledgements_tcbox} } % \end{macrocode} % @@ -3066,7 +3082,7 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx } \end{description} \end{adjustbox} - \DTLiflastrow{% - }{ - \DTLpar% - \medskip% } }{ \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -#1- @@ -3344,7 +3359,7 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx } % \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 work consists of the file gzt.dtx % 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 @@ This work consists of the file gzt.dtx % \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 @@ This work consists of the file gzt.dtx %<*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 @@ This work consists of the file gzt.dtx % 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 @@ This work consists of the file gzt.dtx % \begin{macrocode} \bool_if:nT { \g_@@_for_authors_bool } { - \AtEndDocument{% + \AddToHook{enddocument}{% \bool_if:NT {\g_@@_multicols_bool} { \end{multicols}% } @@ -4577,7 +4628,7 @@ This work consists of the file gzt.dtx % 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 @@ This work consists of the file gzt.dtx \_@@_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 @@ This work consists of the file gzt.dtx } \_@@_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 @@ This work consists of the file gzt.dtx % \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 @@ This work consists of the file gzt.dtx % \end{macrocode} % % \begin{macrocode} -\AtBeginDocument{% +\AddToHook{begindocument}{% \dim_if_exist:NTF \g_@@_pagegrid_dim {% \pagegridsetup{% enable,% @@ -5040,7 +5091,7 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx % % We draw a gray background at the bottom of each page, but the first one. % \begin{macrocode} -\AddEverypageHook{% +\AddToHook{shipout/background}{ % \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 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx 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 @@ This work consists of the file gzt.dtx % "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 @@ This work consists of the file gzt.dtx % 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 @@ This work consists of the file gzt.dtx \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 @@ This work consists of the file gzt.dtx % \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 @@ This work consists of the file gzt.dtx 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 @@ This work consists of the file gzt.dtx \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 @@ class will be replace them by a dummy image (borrowed from the `mwe` package). % \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} +% +% \end{macrocode} +% +% \begin{macrocode} %<*latexmkrc> % \end{macrocode} % @@ -7384,7 +7483,7 @@ sub makeglossaries{ 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 @@ $quote_filenames = 0; % \Finale %%% Local Variables: -%%% mode: tex -%%% eval: (doctex-mode) +%%% mode: doctex %%% ispell-local-dictionary: "english" %%% TeX-command-default: "TeX" %%% TeX-master: t diff --git a/Master/texmf-dist/tex/latex/gzt/gzt.cls b/Master/texmf-dist/tex/latex/gzt/gzt.cls index f0292631f35..7c43454ca06 100644 --- a/Master/texmf-dist/tex/latex/gzt/gzt.cls +++ b/Master/texmf-dist/tex/latex/gzt/gzt.cls @@ -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@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@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 - \c_space_tl - \g__gzt_special_edition_title_tl + \bool_if:NTF {\g__gzt_moral_report_bool} { + \c__gzt_moralreport_rubric_string_tl }{ - \int_use:N\g__gzt_issue_number_int + \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 + \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 {\int_use:N \g__gzt_issue_number_int} -}{ \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_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 diff --git a/Master/texmf-dist/tex/latex/gzt/gzt.dbx b/Master/texmf-dist/tex/latex/gzt/gzt.dbx index 44f875497c3..3850451c9e8 100644 --- a/Master/texmf-dist/tex/latex/gzt/gzt.dbx +++ b/Master/texmf-dist/tex/latex/gzt/gzt.dbx @@ -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@univ-littoral.fr %% Released under the LaTeX Project Public License v1.3c or later diff --git a/Master/texmf-dist/tex/latex/gzt/gzt.lbx b/Master/texmf-dist/tex/latex/gzt/gzt.lbx index d23410ea7fd..4ad100fa06a 100644 --- a/Master/texmf-dist/tex/latex/gzt/gzt.lbx +++ b/Master/texmf-dist/tex/latex/gzt/gzt.lbx @@ -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@univ-littoral.fr %% Released under the LaTeX Project Public License v1.3c or later diff --git a/Master/texmf-dist/tex/latex/gzt/gztarticle.cls b/Master/texmf-dist/tex/latex/gzt/gztarticle.cls index 9ddb63cade8..78173f28dd8 100644 --- a/Master/texmf-dist/tex/latex/gzt/gztarticle.cls +++ b/Master/texmf-dist/tex/latex/gzt/gztarticle.cls @@ -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@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,14 +63,15 @@ \ExplSyntaxOn \ProvidesExplClass {gztarticle} - {2020-03-17} - {1.0.0} + {\gztfiledate} + {\gztfileversion} { SMF~class~for~the~French~journal^^J "La~Gazette~des~Math'ematiciens". ~(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 - \c_space_tl - \g__gzt_special_edition_title_tl + \bool_if:NTF {\g__gzt_moral_report_bool} { + \c__gzt_moralreport_rubric_string_tl }{ - \int_use:N\g__gzt_issue_number_int + \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 + \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 {\int_use:N \g__gzt_issue_number_int} -}{ \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_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,10 +1661,30 @@ \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 @@ -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 -- cgit v1.2.3