% \iffalse meta-comment % % File: gzt.dtx Copyright (C) 2014-2024 by % Denis Bitouzé % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this % license or (at your option) any later version. The latest version % of this license is in the file % % http://www.latex-project.org/lppl.txt % % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Denis Bitouzé. % % This work consists of the files gzt.dtx and gzt.ins % and the derived filebase gzt.cls. % %<*internal> \iffalse % % % \begin{macrocode} %<*readme-pictograms> % \end{macrocode} % % \begin{macrocode} # Pictograms possibly missing The current directory is supposed to contain the (files of the) logos and pictograms that illustrate the Gazette whole issues compiled by the SMF. As non free materials, they are likely to miss here and, in such a case, the `gzt` class will be replace them by a dummy image (borrowed from the `mwe` package). % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*latexmkrc> % \end{macrocode} % % \begin{macrocode} $pdf_mode = 1; $bibtex_use = 1; $bibtex = 'biber %O %B'; add_cus_dep('glo', 'gls', 0, 'makeglossaries'); add_cus_dep('acn', 'acr', 0, 'makeglossaries'); add_cus_dep('slo', 'sls', 0, 'makeglossaries'); sub makeglossaries{ system( "makeglossaries \"$_[0]\"" ); } $makeindex = 'texindy -L french -C utf8'; push @generated_exts, 'acn', 'acr', 'alg', 'bcf', 'fls', 'gl*', 'sbl*', 'sl*', 'sym*' ; $clean_ext .= 'synctex.gz* run.xml tex.bak ind idx out bbl bcf fdb_latexmk run tdo listing *~ lo* unq mw tcbtemp ins drv atfi db* ain' ; $quote_filenames = 0; % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*ctanomat> % \end{macrocode} % This is a description file for ctan-o-mat. % It manages uploads of a package to % CTAN -- the Comprehensive TeX Archive Network. % % The syntax is roughly oriented towards (La)TeX. % Two form of the macros are used. The simple macros take one argument % in braces. Here the argument may not contain embedded macros. % % The second form uses an environment enclosed in \begin{}/\end{}. % In the long text fields logo macros can be used. % % You should enter your values between the begin and the end of the % named type. % ------------------------------------------------------------------------- % This field contains the CTAN id of the package. % The value is optional. % The value is restricted to 32 characters. \pkg{gzt} % ------------------------------------------------------------------------- % This field contains the version of the package. % The value is optional. % The value is restricted to 32 characters. \version{1.1.4 2024-03-09} % ------------------------------------------------------------------------- % This field contains the name of the author(s). % The value is optional. % The value is restricted to 128 characters. \author{Denis Bitouzé} % ------------------------------------------------------------------------- % This field contains the email address of the uploader. % The value is an email address. % The value is restricted to 255 characters. \email{denis.bitouze@univ-littoral.fr} % ------------------------------------------------------------------------- % This field contains the name of the uploader. % The value is restricted to 255 characters. \uploader{Denis Bitouzé} % ------------------------------------------------------------------------- % This field contains the directory on CTAN. % The value is optional. % The value is restricted to 255 characters. \ctanPath{/macros/latex/contrib/gzt} % ------------------------------------------------------------------------- % This field contains the license. % The value is optional. % The value is restricted to 2048 characters. % Multiple values are allowed. \license{lppl1.3c} % ------------------------------------------------------------------------- % This field contains the URL of the home page. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \home{} % ------------------------------------------------------------------------- % This field contains the URL of the bug tracker. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \bugtracker{https://github.com/dbitouze/gzt/issues/} % ------------------------------------------------------------------------- % This field contains the support channel. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \support{} % ------------------------------------------------------------------------- % This field contains the version management. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \repository{https://github.com/dbitouze/gzt/} % ------------------------------------------------------------------------- % This field contains the developer's channel. % The value is optional. % The value is a URL. % The value is restricted to 255 characters. % Multiple values are allowed. \development{https://github.com/dbitouze/gzt/} % ------------------------------------------------------------------------- % This field contains the update indicator; true for update. % The value is optional. % The value is restricted to 8 characters. \update{true} % ------------------------------------------------------------------------- % This field contains the topics id. % The value is optional. % The value is restricted to 1024 characters. % Multiple values are allowed. \topic{} % ------------------------------------------------------------------------- % This field contains the text for the mail announcement. % The value is optional. % The value is restricted to 8192 characters. \begin{announcement} \end{announcement} % ------------------------------------------------------------------------- % This field contains the one-liner for the package. % The value is optional. % The value is restricted to 128 characters. \summary{Bundle of classes for “La Gazette de la Société Mathématique de France”} % ------------------------------------------------------------------------- % This field contains the descriptive abstract for the package. % The value is optional. % The value is restricted to 4096 characters. \begin{description} This bundle provides two classes and `BibLaTeX` styles for the French journal [“La Gazette de la Société Mathématique de France”](https://smf.emath.fr/les-publications/la-gazette): - gzt for the complete issues of the journal, aimed at the Gazette’s team, - gztarticle, intended for authors who wish to publish an article in the Gazette. This class’s goals are to - faithfully reproduce the layout of the Gazette, thus enabling the authors to be able to work their document in actual conditions, and - provide a number of tools (commands and environments) to facilitate the drafting of documents, in particular those containing mathematical formulas. \end{description} % ------------------------------------------------------------------------- % This field contains the note to the CTAN upload managers. % The value is optional. % The value is restricted to 2048 characters. \begin{note} \end{note} % ------------------------------------------------------------------------- % This field contains the archive file. % The value is the file name of the archive to be uploaded. % It may have a relative or absolute directory. \file{../dtx-forge/gzt.zip} % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*changelog> % \end{macrocode} # [Unreleased] # [1.1.4] - 2024-03-09 ## Fixed Some color changing in breakable boxes may not survive the break to the next box. ## Changed - Editorial and President's word now in justified paragraphs. - New ornaments color handling. - Better banner. - `\maketitle` can now hide the blue rule and bullet, the title and the title in the toc. - Extension of `\printbibliography` features to `\bibbycategory`. - Boxed issue number title changed in case of special editions. # [1.1.3] - 2022-06-13 ## Added New options for special special (!) editions # [1.1.2] - 2022-03-18 ## Changed Feminization added in a string. # [1.1.1] - 2021-12-16 ## Fixed All bibliographic numeric labels equal 0 # [1.1.0] - 2021-11-30 ## Added - (Far to perfect) Documentation of the code available as a PDF file. ## Changed - New Gazette's "logo". - Allow acknowledgments despite empty minibios. - `easyscsl` option of `kpfonts` removed as now useless. - Table of contents and president message forced to start on an odd page. - Complete reworked of the `.dtx` source file in order to provide the documented code as a PDF file. ## Fixed - Backcover not properly printed. # [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} % %<*readme> -------:| ----------------------------------------------------------------- gzt:| Bundle of two classes and BibLaTeX styles for the French journal “La Gazette de la Société Mathématique de France” Author:| Denis Bitouzé E-mail:| denis.bitouze@univ-littoral.fr License:| Released under the LaTeX Project Public License v1.3c or later See:| http://www.latex-project.org/lppl.txt This bundle provides two classes and BibLaTeX styles for the French journal [“La Gazette de la Société Mathématique de France”](https://smf.emath.fr/les-publications/la-gazette): - `gzt` for the complete issues of the journal, aimed at the Gazette’s team, - `gztarticle`, intended for authors who wish to publish an article in the Gazette. This class’s goals are to - faithfully reproduce the layout of the Gazette, thus enabling the authors to be able to work their document in actual conditions, and - provide a number of tools (commands and environments) to facilitate the drafting of documents, in particular those containing mathematical formulas. % %<*internal> \fi \def\nameofplainTeX{plain} \ifx\fmtname\nameofplainTeX\else \expandafter\begingroup \fi % %<*class|class-article|install> \def\gztfileversion{1.1.4} \def\gztfiledate{2024-03-09} % %<*install> \input l3docstrip.tex \keepsilent \askforoverwritefalse \preamble -------:| ----------------------------------------------------------------- gzt:| Bundle of two classes and BibLaTeX styles for the French journal [“La Gazette de la Société Mathématique de France” Author:| Denis Bitouzé E-mail:| denis.bitouze@univ-littoral.fr License:| Released under the LaTeX Project Public License v1.3c or later See:| http://www.latex-project.org/lppl.txt \endpreamble \postamble Copyright (C) 2014-2024 by Denis Bitouzé This work may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this license or (at your option) any later version. The latest version of this license is in the file: http://www.latex-project.org/lppl.txt This work is "maintained" (as per LPPL maintenance status) by Denis Bitouzé. This work consists of the file gzt.dtx and a Makefile. Running "make" generates the derived files README, gzt.pdf and gzt.cls. Running "make inst" installs the files in the user's TeX tree. Running "make install" installs the files in the local TeX tree. \endpostamble % \def\GZT@classname{\jobname} \def\GZT@logo{\GZT@classname-logo} \def\GZT@addons{addons} \usedir{tex/latex/\GZT@classname} \generate{ \file{\GZT@classname.cls}{\from{\jobname.dtx}{class}} \file{\GZT@classname article.cls}{\from{\jobname.dtx}{class-article}} \file{\GZT@classname.dbx}{\from{\jobname.dtx}{datamodel}} \file{\GZT@classname.lbx}{\from{\jobname.dtx}{languagemodel}} \nopreamble\nopostamble \file{\GZT@classname.cfg}{\from{\jobname.dtx}{configuration}} } \usedir{tex/latex/\GZT@classname/images} \generate{ \nopreamble\nopostamble \file{README-PICTOGRAMS.md}{\from{\jobname.dtx}{readme-pictograms}} } % %\endbatchfile %<*internal> \usedir{.} \generate{ \nopreamble\nopostamble \file{\GZT@classname.pkg}{\from{\jobname.dtx}{ctanomat}} }% \usedir{source/latex/\GZT@classname} \generate{ \file{\GZT@classname.ins}{\from{\jobname.dtx}{install}} \nopreamble\nopostamble \file{\GZT@logo.tex}{\from{\jobname.dtx}{class-logo}} } \usedir{doc/latex/\GZT@classname} \generate{ \nopreamble\nopostamble \file{README.md}{\from{\jobname.dtx}{readme}} \file{CHANGELOG.md}{\from{\jobname.dtx}{changelog}} } \usedir{doc/latex/\GZT@classname/french} \generate{ \nopreamble\nopostamble \file{latexmkrc}{\from{\jobname.dtx}{latexmkrc}} } % \usedir{doc/latex/\GZT@classname/\GZT@addons/completion} % \generate{ % \nopreamble\nopostamble % \file{\GZT@classname.cwl}{\from{\jobname.dtx}{class-cwl}} % } \ifx\fmtname\nameofplainTeX \expandafter\endbatchfile \else \expandafter\endgroup \fi % % \fi % % \iffalse %<*driver> \ProvidesFile{gzt.dtx} \documentclass[full,english]{l3doc} \usepackage[a4paper,inner=5cm,landscape]{geometry} \usepackage[gzt]{denisbdoc} \usepackage{csquotes} \usepackage{babel} \usepackage{hyperref} % \usepackage[numbered]{hypdoc} \EnableCrossrefs \CodelineIndex \RecordChanges \begin{document} \DocInput{\jobname.dtx} \end{document} % % \fi % % \GetFileInfo{\jobname.dtx} % % \title{\textsf{gzt} --- A bundle of two classes and \Pkg{biblatex} styles % for the French journal\\“La Gazette de la Société Mathématique de % France”\thanks{This file describes version \fileversion, last revised % \filedate.}\\[.25cm]Implementation% % } % \author{Denis Bitouzé\thanks{E-mail: \nolinkurl{denis.bitouze@univ-littoral.fr}}} % \date{Released \filedate} % %\maketitle % % \begin{documentation} % % \end{documentation} % % \begin{implementation} % % \changes{v0.9}{2015/05/02}{First CTAN version} % \changes{v0.95}{2016/04/03}{Second CTAN version} % \changes{v0.95a}{2016/10/24}{Third CTAN version} % \changes{v0.95b}{2016/10/24}{Fourth CTAN version} % \changes{v0.96}{2017/01/01}{Fifth CTAN version} % \changes{v0.97}{2017/02/15}{Sixth CTAN version} % \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.} % \changes{v1.1.0}{2021-11-30}{Tenth CTAN version.} % \changes{v1.1.1}{2021-12-16}{Eleventh CTAN version.} % \changes{v1.1.2}{2022-03-18}{Twelfth CTAN version.} % % \begin{abstract} % This bundle provides two classes and \Pkg{biblatex} styles for the French journal % \href{https://smf.emath.fr/les-publications/la-gazette}{“La Gazette de la % Société Mathématique de France”}: % \begin{itemize} % \item \cls{gzt} for the complete issues of the journal, aimed at the % Gazette’s team, % \item \cls{gztarticle}, intended for authors who wish to publish an article in the % Gazette. This class’s goals are to % \begin{itemize} % \item faithfully reproduce the layout of the Gazette, thus enabling the % authors to be able to work their document in actual conditions, and % \item provide a number of tools (commands and environments) to facilitate % the drafting of documents, in particular those containing mathematical % formulas. % \end{itemize} % \end{itemize} % \end{abstract} % % \StopEventually{\PrintIndex\PrintChanges} % % \section{Auxiliary files} % % \subsection{Gazette's logo} % \label{sec:gzts-logo} % Before the code of the \Class{gzt} by itself, we give the begining of the % code of the source file of the Gazette's logo (to be compiled with ×lualatex×). % \begin{macrocode} %<*class-logo> % \end{macrocode} % % \begin{macrocode} \documentclass[varwidth]{standalone} \usepackage{fontspec} \usepackage[cmyk]{xcolor} \usepackage{xparse} \setmainfont{HelveticaNeueLTStd-ThEx} \newfontfamily\dela{HelveticaNeueLTStd-Th} \newfontfamily\mathematiciens{HelveticaNeueLTStd-Lt} \ExplSyntaxOn \tl_new:N \l__gzt_frontmatter_head_text_tl \tl_set:Nn \l__gzt_frontmatter_head_text_tl { \addfontfeature{LetterSpace=10} \textcolor{__gzt_generic_light_color}{ \fontsize{21}{0}\selectfont la \hspace{3mm} \fontsize{46}{0}\selectfont Gazette } \\[1.7mm] \fontsize{12}{0}\selectfont \mbox{}\hfill% \textcolor{__gzt_generic_light_color}{ \dela de~ la~ } \textcolor{__gzt_generic_dark_color}{ \mathematiciens Société~ Mathématique~ de~ France } } \NewDocumentCommand \frontmatterheadtext {} { \l__gzt_frontmatter_head_text_tl } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \subsection{(\texorpdfstring{\Pkg{biblatex}}{biblatex}) Data model} % Before the code of the \Class{gzt} by itself, we give the (\pkg{biblatex}) % data model that enriches the default one for several purposes: % \begin{itemize} % \item the interviews, % \item the books reviews, % \item the books advertisements, % \item the tributes. % \end{itemize} % % \begin{macrocode} %<*languagemodel> % \end{macrocode} % % \begin{macrocode} \ProvidesFile{gzt.lbx} \InheritBibliographyExtras{french} \DeclareBibliographyStrings{ inherit = {french}, number = {{\no}{\no}}, volume = {{volume}{vol\adddot}}, volumes = {{volumes}{vol\adddot}}, } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*datamodel> % \end{macrocode} % % \subsubsection{For the interviews} % % First, we create the new entry type ×interview× and the new field % ×interviewee×. % \begin{macrocode} % \DeclareDatamodelEntrytypes{interview} \DeclareDatamodelFields[type=list,datatype=name]{interviewee} % \end{macrocode} % % Then, we declare the fields known by the entry type ×interview×: our new field % ×interviewee× and the existing one ×author×. % \begin{macrocode} \DeclareDatamodelEntryfields[interview]{ interviewee, author } % \end{macrocode} % % An finally, we create the bibliography driver for the ×interview× (that seems to % create the corresponding new entry). % \begin{macrocode} \DeclareBibliographyDriver{interview}{% \printnames{author}~ interviewent~ \printnames{interviewee}% \usebibmacro{finentry}% } % \end{macrocode} % % % % \subsubsection{For the tributes} % % % % First, we create the new entry type ×tribute× and the new field % % ×honouree×. % % \begin{macrocode} % % \DeclareDatamodelEntrytypes{tribute} % % \DeclareDatamodelFields[type=list,datatype=name]{honouree} % % \end{macrocode} % % % % Then, we declare the fields known by the entry type ×tribute×: our new field % % ×honouree× and the existing one ×author×. % % \begin{macrocode} % \DeclareDatamodelEntryfields[tribute]{ % honouree, % author % } % % \end{macrocode} % % % % An finally, we create the bibliography driver for the ×tribute× (that seems to % % create the corresponding new entry). % % \begin{macrocode} % \DeclareBibliographyDriver{tribute}{% % \printnames{author}~ rendent~ hommage~ \`a~ \printnames{honouree}% % \usebibmacro{finentry}% % } % % \end{macrocode} % % \subsubsection{For the books reviews} % % First, we create the new bibliography driver ×bookreview× (that seems to % create the corresponding new entry). % \begin{macrocode} \DeclareBibliographyDriver{bookreview}{% \usebibmacro{bibindex}% \usebibmacro{begentry}% \usebibmacro{maintitle+title}% \newline\nopunct\newblock \usebibmacro{author/editor+others/translator+others}% \setunit{\labelnamepunct} \newline\nopunct\newblock \usebibmacro{byauthor}% \newunit\newblock \usebibmacro{byeditor+others}% \newunit\newblock \printfield{edition}% \newunit \iffieldundef{maintitle} {\printfield{volume}% \printfield{part}} {}% \newunit \printfield{volumes}% \newunit\newblock \usebibmacro{series+number}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{publisher+location+date}% \newunit\newblock \usebibmacro{chapter+pages}% \newunit \printfield{pagetotal}% \newunit\newblock \printlist{language}% \newunit\newblock \iftoggle{bbx:isbn} {\printfield{isbn}} {}% \newunit\newblock \usebibmacro{doi+eprint+url}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \newunit\newblock \iftoggle{bbx:related} {\usebibmacro{related:init}% \usebibmacro{related}} {}% \usebibmacro{finentry}} % \end{macrocode} % % Then, we create the new fields ×reviewer× and ×reviewerinstitution× and make % them known by the entry type ×bookreview×. % \begin{macrocode} \DeclareDatamodelFields[type=list,datatype=name]{reviewer} \DeclareDatamodelFields[type=list,datatype=literal]{reviewerinstitution} \DeclareDatamodelEntryfields[bookreview]{ reviewer, reviewerinstitution } % \end{macrocode} % % \subsubsection{For the books advertisements} % % We create some new fields make them known by the entry type % ×bookadvertisement×. % \begin{macrocode} \DeclareDatamodelFields[type=field,datatype=literal]{publicprice} \DeclareDatamodelFields[type=field,datatype=literal]{smfprice} \DeclareDatamodelFields[type=field,datatype=literal]{frenchabstract} \DeclareDatamodelFields[type=field,datatype=literal]{englishabstract} \DeclareDatamodelFields[type=list,datatype=literal]{copublisher} \DeclareDatamodelFields[type=field, datatype=verbatim]{thumbnail} \DeclareDatamodelEntryfields[bookadvertisement]{ publicprice, smfprice, frenchabstract, englishabstract, copublisher, thumbnail } % \end{macrocode} % % Then, we create the new bibliography driver ×bookadvertisement× (that seems to % create the corresponding new entry). % \begin{macrocode} \newcommand*{\insertbibimage}[1]{\includegraphics[width=45mm]{#1}} \DeclareBibliographyDriver{bookadvertisement}{% \begin{tcolorbox}[ lefthand width=47.5mm ,sidebyside ,colback=white ,fontlower=\large ,flushleft lower ,boxrule=0mm ,frame hidden ,leftright skip=0mm ,before skip=0mm ,lower separated=false ] \iffieldundef{thumbnail} {} { \usefield{\insertbibimage}{thumbnail} } \tcblower \xpatchfieldformat{title}{mkbibemph}{textbf}{}{}% \def\abx@str{abx@lstr}% \noindent \usebibmacro{bibindex}% \usebibmacro{begentry}% \textbf{\printfield{series}}% % \usebibmacro{series+number}% \bigskip\newline\nopunct\newblock {% \Large% \printfield{title}% \newunit\newblock }% \iffieldundef{volume} {}% {\textbf{\printfield{volume}}} \iffieldundef{titleaddon} {}% {% \newline\nopunct\newblock \textbf{\printfield{titleaddon}}% } \iffieldundef{subtitle} {}% {% \newline\nopunct\newblock \printfield{subtitle}% } \newline\nopunct\newblock \newline\nopunct\newblock \usebibmacro{author/editor+others/translator+others}% \setunit{\labelnamepunct} \newline\nopunct\newblock \usebibmacro{byauthor}% \newunit\newblock \usebibmacro{byeditor+others}% \newunit\newblock \printfield{edition}% \newunit\newblock \printfield{note}% \newunit\newblock \usebibmacro{publisher+location+date}% \newunit\newblock \usebibmacro{chapter+pages}% \newunit \printfield{pagetotal}% \newunit\newblock \printlist{language}% \iftoggle{bbx:isbn} {% \newline\nopunct\newblock \printfield{isbn} } {}% \newunit\newblock \usebibmacro{doi+eprint+url}% \newunit\newblock \usebibmacro{addendum+pubstate}% \setunit{\bibpagerefpunct}\newblock \usebibmacro{pageref}% \def\abx@str{abx@sstr}% \end{tcolorbox} \iflistundef{copublisher} {}% {% \bigskip % \newline\nopunct\newblock% \normalsize Publi\'e avec le concours de : \printlist{copublisher}% \par } \iffieldundef{frenchabstract} {}% {% \bigskip \printfield{frenchabstract}% \par \medskip % \begin{center} Prix~ public~ :\c_space_tl \EUR{\printfield{publicprice}} \c_space_tl\textendash\c_space_tl Prix~ membre~ \smf{}~ :\c_space_tl \EUR{\printfield{smfprice}} \c_space_tl\textendash\c_space_tl Frais~ de~ port~ non~ compris \end{center} } \iffieldundef{englishabstract} {}% {% \par \bigskip \begin{otherlanguage}{english} \itshape \printfield{englishabstract} % \par \medskip % \begin{center} Public~ price:\c_space_tl \EUR{\printfield{publicprice}} \c_space_tl\textendash\c_space_tl \smf{}~ member~ price:\c_space_tl \EUR{\printfield{smfprice}} \c_space_tl\textendash\c_space_tl Shipping~ costs~ not~ included \end{center} \end{otherlanguage} } \usebibmacro{finentry} } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \section{Implementation of the \Class{gzt}} % % Here comes the code of the \Class{gzt}. % \begin{macrocode} %<*class> % \end{macrocode} % % \subsection{Removability of local customizations} % % We define two... % \begin{macrocode} \def\sectioncommandslist{} \let\saved@ifdefinable\@ifdefinable \let\saved@@ifdefinable\@@ifdefinable \newcommand{\startcustomization}{% % Redefine \@ifdefinable \renewcommand{\@ifdefinable}[2]{% \listadd\sectioncommandslist##1% \saved@ifdefinable{##1}{##2}% }% \renewcommand{\@@ifdefinable}[2]{% \listadd\sectioncommandslist##1% \saved@@ifdefinable{##1}{##2}% }% } \newcommand{\cleancustomization}{% \forlistloop{\undef}{\sectioncommandslist}% \def\sectioncommandslist{}% \let\@ifdefinable\saved@ifdefinable% \let\@@ifdefinable\saved@@ifdefinable% } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % Extending \pkg{etoolbox}'s patching commands: % \begin{macrocode} \RequirePackage{xpatch} % \end{macrocode} % % We alter the behaviour of the internals of ×\usetikzlibrary× so that the % \LaTeXe{} push/pop filename system is used (see % \url{https://tex.stackexchange.com/a/57428/18401}). % \begin{macrocode} \patchcmd {\use@@tikzlibrary} {% \pgfutil@InputIfFileExists{tikzlibrary\pgf@temp.code.tex}{}{ \pgfutil@IfFileExists{pgflibrary\pgf@temp.code.tex}{% \expandafter\usepgflibrary\expandafter{\pgf@temp}% }{% \tikzerror{I did not find the tikz library '\pgf@temp'. I looked for files named tikzlibrary\pgf@temp.code.tex and pgflibrary\pgf@temp.code.tex, but neither could be found in the current texmf trees.} }% }% } {% \@pushfilename \pgfutil@InputIfFileExists{tikzlibrary\pgf@temp.code.tex}{}{ \pgfutil@IfFileExists{pgflibrary\pgf@temp.code.tex}{% \expandafter\usepgflibrary\expandafter{\pgf@temp}% }{ \tikzerror{I did not find the tikz library '\pgf@temp'. I looked for files named tikzlibrary\pgf@temp.code.tex and pgflibrary\pgf@temp.code.tex, but neither could be found in the current texmf trees.} }% }% \@popfilename } {}{} \patchcmd {\tcb@input@library@in} {% \input\tcbpkgprefix#1\relax% } {% \@pushfilename \input\tcbpkgprefix#1\relax% \@popfilename } {}{} % \end{macrocode} % % In order to avoid ×__gzt× in the name of each internal (i.e. private) function % and variable, we make use of the ×@@× place holder provided by the % \Pkg{l3docstrip}. % \begin{macrocode} %<@@=gzt> % \end{macrocode} % % \subsection{\LaTeX3 loading} % % For debugging purpose, \Pkg{expl3} could be loaded with its % \docAuxKey*{check-declarations} option. % \begin{macrocode} % \PassOptionsToPackage{check-declarations}{expl3} % \end{macrocode} % % ^^AIn order to define class options, in key-value form, \Pkg{l3keys2e} is % ^^Aloaded. This have to be done at an early stage because options have to be % ^^Adefined before the (here `book') class loading. % \begin{macrocode} \RequirePackage{l3keys2e} % \end{macrocode} % % This \Class{gzt} will make use of the \pkg{expl3} programming interface % (\LaTeX3). In order to load this package, it is enough to load the % \Pkg{xparse} which is anyway needed to produce document-level commands. % \begin{macrocode} \RequirePackage{xparse} % \end{macrocode} % % The \Class{gzt} is declared in the \LaTeX3{}'s way. % \begin{macrocode} \ProvidesExplClass % {gzt} % {gztarticle} {\gztfiledate} {\gztfileversion} {% SMF class for the French journal^^J “La Gazette de la Société Mathématique de France”. % (Author version.) } % \end{macrocode} % % The needed \TeX{} format is specified. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} % \end{macrocode} % % \subsection{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 \bool_new:N \g_@@_cover_bool \bool_new:N \g_@@_coverpage_bool \bool_new:N \g_@@_inside_pages_bool \bool_new:N \g_@@_invisible_titles_bool \bool_new:N \g_@@_rubrics_in_toc_bool % \bool_new:N \g_@@_no_inside_backcover_bool %\bool_gset_true:N \g_@@_for_authors_bool %\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} % % \begin{macrocode} %<*class> % \end{macrocode} % % \begin{macro}{\c_@@_pagegrid_dim} % We declare the constant dimension of the pagegrid, when enabled. % \begin{macrocode} \dim_const:Nn \c_@@_pagegrid_dim { 1mm} % \end{macrocode} % \end{macro} % % We define some class options: % \begin{itemize} % \item ×pagegrid× in order to draw a grid on each page, in order to check the % layout (mostly for debugging purpose), % \item ... % \end{itemize} % % \begin{macrocode} \tl_gset:Nn \g_@@_frontcover_image_file_tl { \c_@@_issue_frontcover_default_image_file_tl } \tl_gset:Nn \g_@@_special_edition_color_tl { @@_default_cover_color } \clist_new:N \g_@@_special_edition_logos_clist % \keys_define:nn { gzt } { pagegrid .dim_gset:N = \g_@@_pagegrid_dim, pagegrid .default:n = {\c_@@_pagegrid_dim}, forauthors .code:n = { \bool_gset_true:N \g_@@_for_authors_bool \bool_gset_true:N \g_@@_inside_pages_bool }, forprinter .bool_gset:N = \g_@@_for_printer_bool, frontcoverimagefile .tl_gset:N = \g_@@_frontcover_image_file_tl, frontcoverimagefile .default:n = {frontcover}, output .choice:, output / frontcover .code:n = { \bool_gset_true:N \g_@@_for_printer_bool \bool_gset_true:N \g_@@_cover_bool }, output / coverpage .code:n = { \bool_gset_true:N \g_@@_coverpage_bool }, output / insidepages .code:n = { \bool_gset_true:N \g_@@_for_printer_bool \bool_gset_true:N \g_@@_inside_pages_bool }, output / backcover .code:n = { \bool_gset_true:N \g_@@_for_printer_bool }, output / web .code:n = { }, maindarkcolor .code:n = { \AddToHook{begindocument/before}{ \definecolor{@@_generic_dark_color}{cmyk}{#1} } }, specialedition .code:n = { \bool_gset_true:N \g_@@_special_edition_bool \bool_gset_true:N \g_@@_frontcover_without_minitoc_bool \keys_set:nn { gzt / specialedition } {#1} }, specialedition / color .code:n = { \tl_gset:Nn \g_@@_special_edition_color_tl {#1} }, specialedition / ornaments~ color .code:n = { \AddToHook{begindocument/before}{ \definecolor{@@_generic_dark_color}{cmyk}{#1} } }, specialedition / invisible~ titles .bool_gset:N = \g_@@_invisible_titles_bool, specialedition / rubrics~ in~ toc .bool_gset:N = \g_@@_rubrics_in_toc_bool, specialedition / minitoc .code:n = { \bool_gset_false:N \g_@@_frontcover_without_minitoc_bool }, specialedition / logos .code:n = { \clist_gset:Nn \g_@@_special_edition_logos_clist {#1} }, specialedition / backcover~ image .code:n = { \tl_gset:Nn \g_@@_special_edition_backcover_image_tl {#1} }, specialedition / title .code:n = { \tl_gset:Nn \g_@@_special_edition_title_tl {#1} }, specialedition / short~ title .code:n = { \tl_gset:Nn \g_@@_special_edition_short_title_tl {#1} }, specialedition / editorial~ heading .code:n = { \tl_gset:Nn \g_@@_special_edition_editorial_heading_tl {#1} }, 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 % \end{macrocode} % % \begin{macrocode} \ProcessKeysOptions { gzt } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % As subsequent class, the \Cls{book} is loaded, with ×openany×, ×english× and % ×french× options. % \begin{macrocode} \PassOptionsToClass{openany,english,french}{book} \LoadClass { book } \PassOptionsToPackage{table,cmyk}{xcolor} \PassOptionsToPackage{export}{adjustbox} \PassOptionsToPackage{english,french}{translator} \PassOptionsToPackage{english,french}{babel} \PassOptionsToPackage{english,french}{varioref} \PassOptionsToPackage{english,french}{cleveref} % \end{macrocode} % % \subsection{Packages loading} % % Many of the \Class{gzt} features are provided by third party packages. In this % section, we load them and outline their features interesting from the % \Class{gzt} point of view.\footnote{TODO: When possible, the list of loaded % packages should be split into two lists: one of the packages needed just by % \gzt{} (for both its logic and its layout) and one of packages useful for the % end user.} % % \begin{enumerate} % \item Compile \TeX{} pictures stand-alone or as part of a document: % \begin{macrocode} \RequirePackage[group=false]{standalone} % \end{macrocode} % % \item Tools to load and manipulate data: % \begin{macrocode} \RequirePackage{datatool} % \end{macrocode} % % \item In case of \hologo{pdfTeX} engine, we enforce \pkg{fontenc} to be loaded % with its \docAuxKey*{T1} option (usual for French and English documents) and % \pkg{inputenc} to be loaded with its \docAuxKey*{utf8} option. Otherwise % \pkg{fontspec}, convenient for both \hologo{XeLaTeX} and \hologo{LuaLaTeX}, % is loaded, with ligatures à la \TeX{} by default enabled. % \begin{macrocode} \sys_if_engine_pdftex:TF { \RequirePackage[T1]{fontenc} \RequirePackage[utf8]{inputenc} }{ \RequirePackage{fontspec} } % \end{macrocode} % % Load of main font to be used: % \begin{macrocode} \RequirePackage[sfmath,noDcommand]{kpfonts} % \end{macrocode} % % \item Formatting both header and footers (pagestyle), and sections headers: % \begin{macrocode} \RequirePackage[pagestyles]{titlesec} % \end{macrocode} % % \item Multicolumn output: % \begin{macrocode} \RequirePackage{multicol} % \end{macrocode} % % \item Graphics inclusion: % \begin{macrocode} \RequirePackage{graphicx} % \end{macrocode} % % \item Establish input relative to a directory: % \begin{macrocode} %\RequirePackage{import} % \end{macrocode} % % \item Allow tables to flow over page boundaries: % \begin{macrocode} \RequirePackage{longtable} % \end{macrocode} % % \item Put a grey textual watermark on document pages (loaded only if % ×forauthors× \gzt{}'s option is on): % \begin{macrocode} %\bool_if:nT { \g_@@_for_authors_bool } { % \RequirePackage{draftwatermark}[2006/06/30] %} % \end{macrocode} % % \item Graphics package-alike macros for \enquote{general} boxes: % \begin{macrocode} \RequirePackage{adjustbox} % \end{macrocode} % % \item Packages and image files for MWEs (used in case of missing pictograms): % \begin{macrocode} \RequirePackage{mwe} % \end{macrocode} % % \item A new reference scheme for \LaTeX{}, giving the total number of pages in % the document: % \begin{macrocode} \RequirePackage{zref-totpages} % \end{macrocode} % % \item Reference last page number (which is generally different from the total % number of pages in the document): % \begin{macrocode} %\RequirePackage{lastpage} % \end{macrocode} % % \item A new reference scheme for \LaTeX{}, providing the facilities of the % \package{xr} and \package{xr-hyper} packages: % \begin{macrocode} \RequirePackage{zref-xr} % \end{macrocode} % % \item Alternative versions of ×ragged×-type commands: % \begin{macrocode} \RequirePackage{ragged2e} % \end{macrocode} % % \item Define commands that appear not to eat spaces: % \begin{macrocode} \RequirePackage{xspace} % \end{macrocode} % % \item ...: % \begin{macrocode} \RequirePackage{textcase} % \end{macrocode} % % \item For typesetting epigraphs: % \begin{macrocode} \RequirePackage{epigraph} % \end{macrocode} % % \item Context sensitive quotation facilities: % \begin{macrocode} \RequirePackage[autostyle]{csquotes} % \end{macrocode} % % \item Programmable bibliographies and citations: % \begin{macrocode} \RequirePackage[ datamodel=gzt, defernumbers=true, autolang=other ]{biblatex} \@ifpackagelater{biblatex}{2016/01/01}{ \ExecuteBibliographyOptions{giveninits} }{ \ExecuteBibliographyOptions{firstinits} } % \end{macrocode} % % \item Extended implementation of the \LaTeX{} array and % tabular-environments: % \begin{macrocode} \RequirePackage{array} % \end{macrocode} % % \item Publication quality tables in \LaTeX{}: % \begin{macrocode} \RequirePackage{booktabs} % \end{macrocode} % % \item Tabulars with adjustable-width columns: % \begin{macrocode} \RequirePackage{tabularx} % \end{macrocode} % % % \item Set of tools for authors to typeset quantities in a consistent way % % (automated processing of numbers and units, and control of tabular alignment % % of numbers): % % \begin{macrocode} % \RequirePackage{siunitx} % % \end{macrocode} % % \item Modify skips between paragraphs: % \begin{macrocode} \RequirePackage{nccparskip} % \end{macrocode} % % \item Construction for table cells that span more than one row of the table: % \begin{macrocode} \RequirePackage{multirow} % \end{macrocode} % % \item Intelligent page references: % \begin{macrocode} \RequirePackage{varioref} % \end{macrocode} % % \item Extension to \Pkg{amsmath}: correct various bugs/defeciencies in amsmath % and useful tools for mathematical typesetting\footnote{The \Pkg{mathtools} % loads \pkg{amsmath}, hence it's not necessary to load the latter.}: % \begin{macrocode} \RequirePackage{mathtools} % \end{macrocode} % % \item Support for using RSFS fonts in maths: % \begin{macrocode} \RequirePackage{rsfso} % \end{macrocode} % % \item Vector arrows: % \begin{macrocode} \RequirePackage{esvect} % \end{macrocode} % % \item Hooks to do actions on every page or on the current page: % \begin{macrocode} % \RequirePackage{everypage} % \end{macrocode} % % \item For translating words in \LaTeX{}. % \begin{macrocode} \RequirePackage{translator} % \end{macrocode} % % \item Flexible and easy interface to page dimensions: % \begin{macrocode} \RequirePackage{geometry} % \end{macrocode} % % \item Bilingual (French and English) documents, with French as default % language: % \begin{macrocode} \RequirePackage{babel} % \end{macrocode} % % \item METAFONT and macros for Euro sign: % \begin{macrocode} \RequirePackage{eurosym} % \end{macrocode} % % Expandable checks for the current language: % \begin{macrocode} \RequirePackage{iflang}[2007/11/11] % \end{macrocode} % % \item Tagging tables of contents: % \begin{macrocode} %\RequirePackage{tableof} % \end{macrocode} % % \item Completely customisable TOCs: % \begin{macrocode} \RequirePackage{etoc} % \end{macrocode} % % \item Subliminal refinements towards typographical perfection: % \begin{macrocode} \RequirePackage[babel=true]{microtype} % \end{macrocode} % % \item Current date and time formatting: % \begin{macrocode} \RequirePackage[nodayofweek]{datetime} % \end{macrocode} % % \item Customization of lists: % \begin{macrocode} \RequirePackage[inline]{enumitem} % \end{macrocode} % % \item Execute command after the next page break: % \begin{macrocode} \RequirePackage{afterpage} % \end{macrocode} % % \item Extension of \LaTeX{}'s color facilities: % \begin{macrocode} \RequirePackage{xcolor} % \end{macrocode} % % \item We need to avoid some macros from few of the following packages to be % added to ×\@preamblecmds×: % \begin{macrocode} %\cs_set_eq:NN \_@@_orig_preamblecmds \@preamblecmds % \end{macrocode} % % Create PostScript and PDF graphics in \TeX: % \begin{macrocode} \RequirePackage{tikz} % \end{macrocode} % % Create normal/logarithmic plots in two and three dimensions: % \begin{macrocode} \RequirePackage{pgfplots} % \end{macrocode} % % \item Environments for colored and framed text boxes, e.g. theorems: % \begin{macrocode} \RequirePackage{tcolorbox} % \end{macrocode} % % \item A single TikZ node for the whole page: % \begin{macrocode} \RequirePackage{tikzpagenodes} % \end{macrocode} % % \item Print page grid in background: % \begin{macrocode} %\RequirePackage[foreground]{pagegrid} % \end{macrocode} % % \item Typesetting theorems (AMS style): % \begin{macrocode} \RequirePackage{amsthm} % \end{macrocode} % % \item Extensions to theorem environments: % \begin{macrocode} \RequirePackage{thmtools} % \end{macrocode} % % We restore ×\@preamblecmds× as it was before: % \begin{macrocode} %\cs_set_eq:NN \@preamblecmds \_@@_orig_preamblecmds % \end{macrocode} % % \item Control float placement: % \begin{macrocode} \RequirePackage{placeins} % \end{macrocode} % % \item Hypertext marks: % \begin{macrocode} \RequirePackage[hidelinks,hypertexnames=false]{hyperref} % \end{macrocode} % % \item A new bookmark (outline) organization for \Pkg{hyperref}: % \begin{macrocode} \RequirePackage[numbered]{bookmark} % \end{macrocode} % % \item Create glossaries and lists of acronyms: % \begin{macrocode} \RequirePackage[nowarn]{glossaries} % \end{macrocode} % % \item Intelligent cross-referencing: % \begin{macrocode} \RequirePackage{cleveref} % \end{macrocode} % \end{enumerate} % % Setings of the glossaries and acronyms. % \begin{macrocode} \makeglossaries \setglossarystyle{indexhypergroup} \setacronymstyle{long-sc-short} % \end{macrocode} % % In case of \hologo{pdfTeX} engine, the document is by default in sans serif % and makes use of the \pkg{lmodern} for the \enquote{ttfamily} font. % % \begin{macrocode} \sys_if_engine_pdftex:T { \renewcommand\familydefault{\sfdefault} \renewcommand{\ttdefault}{lmtt} } % \end{macrocode} % % \subsection{Miscellaneous patches} % % We pop some commands from the ×\@preamblecmds× list in order to allow % ×\DeclareMathOperator× to be used after the preamble (see % \url{https://tex.stackexchange.com/q/223421/18401}). % \begin{macrocode} \tl_remove_all:Nn \@preamblecmds { \do \DeclareMathOperator } \tl_remove_all:Nn \@preamblecmds { \do \newacronym } \tl_remove_all:Nn \@preamblecmds { \do \@declmathop } \tl_remove_all:Nn \@preamblecmds { \do \usetikzlibrary } % \end{macrocode} % % \subsection{Messages} % % In this section, some messages are declared for future use. % \begin{macrocode} \msg_new:nnnn{gzt}{issue-number-needed}{Option~ `#1'~ needed!} {Please~ specify~ `#1=', ~ otherwise~ `'~ will~ be~ set~ to ~ `\int_use:N\c_@@_first_issue_number_int'.} \msg_new:nnnn{gzt}{unknown-choice}{Choice~ `#3'~ invalid!} {Please~ specify~ #1=#2.} %\msg_new:nnnn{gzt}{configuration-file-missing}{File~ `\c_@@_configuration_file_string_tl'~ missing!} % {The~ whole~ issue~ may~ not~ be~ conform~ if~ `\c_@@_configuration_file_string_tl'~ is~ missing.} %\msg_new:nnnn{gzt}{editorial-file-missing}{File~ `\c_@@_editorial_file_string_tl'~ missing!} % {The~ whole~ issue~ requires~ the~ `\c_@@_editorial_file_string_tl'~ file.} % \end{macrocode} % % \subsection{Counters} % % In this section, we define some counters for future use. % % \begin{macro}{\g_@@_editors_in_chief_int,\g_@@_articles_int,\g_@@_questions_answers_int} % % The integer ×\g_@@_editors_in_chief_int× will count the number of editors in % chief in order to use singular or plural form of the corresponding string % \enquote{Rédacteur(s) en chef}. % \begin{macrocode} \int_new:N \g_@@_editors_in_chief_int % \end{macrocode} % % The integer ×\g_@@_item_in_rubric_int× will count the number of item in % a rubric in order to give a specific behavior of the first of them. % \begin{macrocode} \int_new:N \g_@@_item_in_rubric_int % \end{macrocode} % % The integer ×\g_@@_articles_int× will count the number of articles in order to % provide for each of them a unique bibliographic key. % \begin{macrocode} \int_new:N \g_@@_articles_int % \end{macrocode} % % The integer ×\g_@@_question_int× will count the number of questions % (and hence of answers) in order to provide distinguish between the first and % the subsequent questions/answers of an interview, the former being likely to % be typeset differently (e.g. the names of the interviewer and the interviewee % may appear only in the first question/answer). % \begin{macrocode} \int_new:N \g_@@_question_int % \end{macrocode} % \end{macro} % % \subsection{Constants} % % In this section, we declared some constants for future use. % % \subsubsection{Integers} % % \paragraph{Issue numbers} % % \begin{macro}{\c_@@_first_issue_number_int,\c_@@_first_issue_year_int,\c_@@_first_issue_month_int,\c_@@_interval_in_months_int} % The first issue number, month and year, and the interval (in months) between % two consecutive issues, are declared. % \begin{macrocode} \int_const:Nn \c_@@_first_issue_number_int { 143 } \int_const:Nn \c_@@_first_issue_year_int { 2015 } \int_const:Nn \c_@@_first_issue_month_int { 1 } \int_const:Nn \c_@@_interval_in_months_int { 3 } % \end{macrocode} % \end{macro} % % \subsubsection{Strings and keywords} % % We now declare some private string constants. % % \begin{macro}{\c_@@_journal_short_title_string_tl,\c_@@_journal_title_string_tl,\c_@@_editors_in_chief_string_tl,\c_@@_editors_string_tl,\c_@@_editorial_board_string_tl,\c_@@_editorial_secretariat_string_tl,\c_@@_phone_string_tl,\c_@@_fax_string_tl,\c_@@_informations_string_tl,\c_@@_publishingdirector_string_tl,\c_@@_issn_string_tl,\c_@@_isbn_string_tl,\c_@@_latexclass_string_tl,\c_@@_font_string_tl,\c_@@_configuration_file_string_tl,\c_@@_cover_string_tl,\c_@@_artistic_director_string_tl,\c_@@_editorial_heading_string_tl,\c_@@_toc_string_tl,\c_@@_message_string_tl,\c_@@_president_signatory_string_tl,\c_@@_editorinchief_signatory_string_tl,\c_@@_issue_bib_file_tl,\c_@@_about_frontcover_string_tl,\c_@@_credit_frontcover_string_tl,\c_@@_authors_instructions_string_tl} % For the journal's short and long titles. % \begin{macrocode} \tl_const:Nn \c_@@_journal_short_title_string_tl {Gazette} \tl_const:Nn \c_@@_journal_title_string_tl { \c_@@_journal_short_title_string_tl{}~ de~ la~ Soci\'et\'e~ Math\'ematique~ de~ France } % \end{macrocode} % % For the names of the underlying classes. % \begin{macrocode} \tl_const:Nn \c_@@_class_name_tl {gzt} \tl_const:Nn \c_@@_article_class_name_tl {gztarticle} % \end{macrocode} % % For the editor(s) in chief. % \begin{macrocode} \tl_const:Nn \c_@@_editors_in_chief_string_tl { \int_compare:nNnTF { \g_@@_editors_in_chief_int } > { 1 } { \c_@@_editorsinchief_string_tl } { \c_@@_editorinchief_string_tl } } % \end{macrocode} % For the editor in chief. % \begin{macrocode} \tl_const:Nn \c_@@_editorinchief_string_tl {R\'edacteur~ en~ chef } % \end{macrocode} % For the editors in chief (plural form of the previous one). % \begin{macrocode} \tl_const:Nn \c_@@_editorsinchief_string_tl {R\'edacteurs~ en~ chef } % \end{macrocode} % For the editors. % \begin{macrocode} \tl_const:Nn \c_@@_editors_string_tl {R\'edacteurs } % \end{macrocode} % For the editorial board. % \begin{macrocode} \tl_const:Nn \c_@@_editorial_board_string_tl {Comit\'e~ de~ r\'edaction} % \end{macrocode} % For the editorial board of special edition. % \begin{macrocode} \tl_const:Nn \c_@@_special_edition_editorial_board_string_tl { Num\'ero~ sp\'ecial~ de~ la~ Gazette~ de~ la~ Soci\'et\'e~ Math\'ematique~ de~ France~ sous~ la~ direction~ de~ : } % \end{macrocode} % For the editorial_secretariat. % \begin{macrocode} \tl_const:Nn \c_@@_editorial_secretariat_string_tl {Secr\'etariat~ de~ r\'edaction} % \end{macrocode} % For the phone. % \begin{macrocode} \tl_const:Nn \c_@@_phone_string_tl {T\'el.} % \end{macrocode} % For the fax. % \begin{macrocode} \tl_const:Nn \c_@@_fax_string_tl {Fax} % \end{macrocode} % For the informations. % \begin{macrocode} \tl_const:Nn \c_@@_informations_string_tl {Renseignements} % \end{macrocode} % For the publishing director. % \begin{macrocode} \tl_const:Nn \c_@@_publishingdirector_string_tl {Directeur~ de~ la~ publication} % \end{macrocode} % For the \textsc{issn}. % \begin{macrocode} \tl_const:Nn \c_@@_issn_string_tl {\textsc{issn}} % \end{macrocode} % For the \textsc{isbn}. % \begin{macrocode} \tl_const:Nn \c_@@_isbn_string_tl {\textsc{isbn}} % \end{macrocode} % For "\LaTeX Class". % \begin{macrocode} \tl_const:Nn \c_@@_latexclass_string_tl {Classe~ \LaTeX{}} % \end{macrocode} % For "Impression". % \begin{macrocode} \tl_const:Nn \c_@@_printer_string_tl {Impression} % \end{macrocode} % For configuration file. % \begin{macrocode} \tl_const:Nn \c_@@_configuration_file_string_tl {gzt.cfg} % \end{macrocode} % For the artistic director. % \begin{macrocode} \tl_const:Nn \c_@@_artistic_director_string_tl {Conception~ graphique} % \end{macrocode} % For the editorial. % \begin{macrocode} \AddToHook{begindocument/before}{ \bool_if:NTF {\g_@@_special_edition_bool} { \tl_const:Nn \c_@@_editorial_heading_string_tl {Avant-propos} }{ \tl_const:Nn \c_@@_editorial_heading_string_tl {\'Editorial} } } % \end{macrocode} % For the editor in chief. % \begin{macrocode} \tl_const:Nn \c_@@_editorinchief_signatory_string_tl { \c_@@_editorinchief_string_tl~ de~ la~ \c_@@_journal_title_string_tl } % \end{macrocode} % For the table of contents. % \begin{macrocode} \tl_const:Nn \c_@@_toc_string_tl {Sommaire} % \end{macrocode} % For the president message. % \begin{macrocode} \tl_const:Nn \c_@@_president_message_string_tl {Mot~ du~ pr\'esident} % \end{macrocode} % For the president. % \begin{macrocode} \tl_const:Nn \c_@@_president_signatory_string_tl {pr\'esident~ de~ la~ \g_@@_smf_short_string_tl} % \end{macrocode} % For the date of the editor in chief's message. % \begin{macrocode} \tl_const:Nn \c_@@_editorinchief_message_date_string_tl {Le~ \displaydate{@@_editorinchief_message_date}} % \end{macrocode} % For the date of the president's message. % \begin{macrocode} \tl_const:Nn \c_@@_president_message_date_string_tl {Le~ } % \end{macrocode} % For the special editions. % \begin{macrocode} \tl_const:Nn \c_@@_special_edition_string_tl {\c_space_tl{}sp{\'e}cial} \tl_const:Nn \c_@@_long_special_edition_string_tl {Numéro\c_@@_special_edition_string_tl} \tl_const:Nn \c_@@_short_special_edition_string_tl {\No{}\c_@@_special_edition_string_tl} % \end{macrocode} % For the front cover header text. % \begin{macrocode} \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} \medskip \par \normalsize } \l_@@_uppercased_date_format\displaydate{@@_date} \bool_if:NF {\g_@@_special_edition_bool} { \c_space_tl \textendash{} \c_space_tl \No \int_use:N\g_@@_issue_number_int } } } % \end{macrocode} % For the graphics extensions. % \begin{macrocode} \clist_const:Nn \c_@@_graphics_extensions_clist {png,PNG,jpg,JPG,jpeg,JPEG,pdf,PDF} % \end{macrocode} % For the pdftitle text. % \begin{macrocode} \tl_const:Nn \c_@@_pdftitle_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 \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} % For the name of the directory containing the editorial and the president message. % \begin{macrocode} \tl_const:Nn \c_@@_frontmatter_directory_string_tl {frontmatter} % \end{macrocode} % For the name of the directory containing the 3rd and 4th cover pages. % \begin{macrocode} \tl_const:Nn \c_@@_backmatter_directory_string_tl {backmatter} % \end{macrocode} % For the name of the file containing the editorial. % \begin{macrocode} \tl_const:Nn \c_@@_editorial_file_string_tl {\c_@@_frontmatter_directory_string_tl/editorial} % \end{macrocode} % For the name of the file containing the president message. % \begin{macrocode} \tl_const:Nn \c_@@_president_message_file_string_tl {\c_@@_frontmatter_directory_string_tl/presidentmessage} % \end{macrocode} % For the path to the current issue's directory. % \begin{macrocode} \tl_const:Nn \c_@@_issue_path_string_tl {\int_use:N \g_@@_issue_number_int} % \end{macrocode} % For the name and path of the images directory. % \begin{macrocode} \tl_const:Nn \c_@@_images_directory_string_tl {images} \tl_const:Nn \c_@@_issue_images_path_string_tl { \c_@@_images_directory_string_tl} % \end{macrocode} % For the name of the file containing the image of the current issue's front cover. % \begin{macrocode} \tl_const:Nn \c_@@_issue_frontcover_default_image_file_tl {frontcover} % \end{macrocode} % For the name of the file containing the text of the current issue's back cover. % \begin{macrocode} \tl_const:Nn \c_@@_issue_backcover_text_file_string_tl {backcover} \tl_const:Nn \c_@@_backcover_page_file_string_tl { \c_@@_backmatter_directory_string_tl/\c_@@_issue_backcover_text_file_string_tl } % \end{macrocode} % For the name of the file containing the text of the special issue's abstract back cover. % \begin{macrocode} \tl_const:Nn \c_@@_special_edition_backcover_text_file_string_tl {abstract_backcover} \tl_const:Nn \c_@@_special_edition_backcover_page_file_string_tl { \c_@@_backmatter_directory_string_tl/\c_@@_special_edition_backcover_text_file_string_tl } % \end{macrocode} % For the name of the file of the special issue's picture back cover. % \begin{macrocode} \tl_const:Nn \c_@@_special_edition_backcover_picture_string_tl {picture_backcover} \tl_const:Nn \c_@@_special_edition_backcover_page_picture_string_tl { \c_@@_backmatter_directory_string_tl/\c_@@_special_edition_backcover_picture_string_tl } % \end{macrocode} % For the name of the file containing the acronyms. % \begin{macrocode} \tl_const:Nn \c_@@_acronyms_file_string_tl {\c_@@_class_name_tl acronyms} % \end{macrocode} % For authors' instructions file. % \begin{macrocode} \tl_const:Nn \c_@@_authors_instructions_file_extension_tl {ain} \tl_const:Nn \c_@@_authors_instructions_file_tl {\c_sys_jobname_str.\c_@@_authors_instructions_file_extension_tl} % \end{macrocode} % For the few words about the front cover. % \begin{macrocode} \tl_const:Nn \c_@@_about_frontcover_string_tl {\`A~ propos~ de~ la~ couverture.} % \end{macrocode} % For the credit of the front cover. % \begin{macrocode} \tl_const:Nn \c_@@_credit_frontcover_string_tl {cr\'edit} % \end{macrocode} % For the authors instructions. % \begin{macrocode} \tl_const:Nn \c_@@_authors_instructions_string_tl {Instructions~ aux~ autrices~ et~ auteurs} % \end{macrocode} % For the preliminary versions sent to authors for checking. % \begin{macrocode} \tl_const:Nn \c_@@_preliminary_version_string_tl { Ce~ document~ est~ une~ {\'e}preuve~ vous~ permettant~ de~ contr{\^o}ler~ l'int{\'e}grit{\'e}~ du~ texte~ d'origine~ (et~ de~ la~ bibliographie~ s'il~ y~ en~ a~ une)~ de~ votre~ article~ {\`a}~ para{\^\i}tre~ dans~ le~ prochain~ num{\'e}ro~ de~ la~ \gzt*{}.~ La~ mise~ en~ page~ actuelle~ n'est~ pas~ d{\'e}finitive\,:~ votre~ article~ pourra~ en~ particulier~ ne~ pas~ d{\'e}buter~ en~ haut~ d'une~ page. } % \end{macrocode} % For the string that preceeds the title in the \enquote{Tell me} rubric. % \begin{macrocode} \tl_const:Nn \c_@@_tellme_extra_title_string_tl {...\c_space_tl} % \end{macrocode} % For the separator between a rubric and an article's title in the minitoc. % \begin{macrocode} \tl_const:Nn \c_@@_minitoc_rubric_title_separator_string_tl {\c_space_tl\textendash} % \end{macrocode} % Names of the pictogram files. % \begin{macrocode} \tl_const:Nn \c_@@_mathematics_pictogram_file_name_tl {picto-mathematics} \tl_const:Nn \c_@@_dossier_pictogram_file_name_tl {picto-dossier} \tl_const:Nn \c_@@_community_pictogram_file_name_tl {picto-hands} \tl_const:Nn \c_@@_interview_pictogram_file_name_tl {picto-interview} \tl_const:Nn \c_@@_teaching_pictogram_file_name_tl {picto-teaching} \tl_const:Nn \c_@@_parity_pictogram_file_name_tl {picto-parity} \tl_const:Nn \c_@@_tellme_pictogram_file_name_tl {picto-tellme} \tl_const:Nn \c_@@_information_pictogram_file_name_tl {picto-information} \tl_const:Nn \c_@@_rearviewmirror_pictogram_file_name_tl {picto-rearviewmirror} \tl_const:Nn \c_@@_tribute_pictogram_file_name_tl {picto-tribute} \tl_const:Nn \c_@@_books_pictogram_file_name_tl {picto-books} \tl_const:Nn \c_@@_forum_pictogram_file_name_tl {picto-forum} % \end{macrocode} % For the miscellaneous rubrics. % \begin{macrocode} \tl_const:Nn \c_@@_mathematics_rubric_string_tl {Math\'ematiques} \tl_const:Nn \c_@@_dossier_rubric_string_tl {Dossier} \tl_const:Nn \c_@@_community_rubric_string_tl {Vie~ de~ la~ communaut\'e} \tl_const:Nn \c_@@_interview_rubric_string_tl {Entretien} \tl_const:Nn \c_@@_teaching_rubric_string_tl {Diffusion~ des~ savoirs} \tl_const:Nn \c_@@_parity_rubric_string_tl {Parit\'e} \tl_const:Nn \c_@@_tellme_rubric_string_tl {Raconte-moi} \tl_const:Nn \c_@@_information_rubric_string_tl {Information} \tl_const:Nn \c_@@_rearviewmirror_rubric_string_tl {R\'etroviseur} \tl_const:Nn \c_@@_tribute_rubric_string_tl {Carnet} % \tl_const:Nn \c_@@_books_rubric_string_tl {Recension} \tl_const:Nn \c_@@_books_rubric_string_tl {Livres} \tl_const:Nn \c_@@_latex_rubric_string_tl {Astuces~ \LaTeX{}} \tl_const:Nn \c_@@_forum_rubric_string_tl {Tribune~ libre} \tl_const:Nn \c_@@_published_with_help_of_string_tl {Publi\'e~ avec~ le~ concours~ de~ :} \tl_const:Nn \c_@@_advertisement_directory_string_tl {advertisement/} \tl_const:Nn \c_@@_advertisement_string_tl {Publicit\'e} \tl_const:Nn \c_@@_moralreport_rubric_string_tl {Rapport~ moral} % \end{macrocode} % \end{macro} % % For the long and short forms of \textsc{smf}. % \begin{macrocode} \tl_const:Nn \c_@@_smf_short_string_tl {\textsc{smf}} \tl_const:Nn \c_@@_smf_short_pdf_string_tl {SMF} \tl_const:Nn \c_@@_smf_string_tl {Soci\'et\'e~ Math\'ematique~ de~ France} % \end{macrocode} % For the long and short forms of \enquote{c'est-à-dire} and % \enquote{C'est-à-dire} (\enquote{that is} and \enquote{That is}). % \begin{macrocode} \tl_const:Nn \c_@@_cad_short_string_tl {c.-\`a-d.} \tl_const:Nn \c_@@_cad_string_tl {c'est-\`a-dire} \tl_const:Nn \c_@@_Cad_short_string_tl {C.-\`a-d.} \tl_const:Nn \c_@@_Cad_string_tl {C'est-\`a-dire} % \end{macrocode} % For the footer text. % \begin{macrocode} \tl_const:Nn \c_@@_footer_string_tl { \c_@@_footer_size_font_tl \textcolor{@@_smf_number_color}{\text_uppercase:n {\c_@@_smf_short_string_tl}} \c_space_tl \textcolor{@@_date_color}{ \textendash{}\c_space_tl \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} } } } } } % \end{macrocode} % For the name of the file containing the \textsc{smf} logo. % \begin{macrocode} \file_if_exist:nTF { logo_SMF.pdf }{ \tl_const:Nn \c_@@_smf_logo_file_string_tl {logo_SMF} }{ \tl_const:Nn \c_@@_smf_logo_file_string_tl {example-image} } % \end{macrocode} % For the name of the file containing the bibliography of the current issue. % \begin{macrocode} % \tl_const:Nn \c_@@_issue_bib_file_string_tl {issue-\c_sys_jobname_str.bib} \tl_const:Nn \c_@@_issue_bib_file_suffix_string_tl {@@} \tl_const:Nn \c_@@_issue_bib_file_string_tl {\c_sys_jobname_str\c_@@_issue_bib_file_suffix_string_tl.bib} \tl_const:Nn \c_@@_issue_bib_path_string_tl {\c_@@_issue_bib_file_string_tl} % \end{macrocode} % 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} } % \end{macrocode} % For the interview title. % \begin{macrocode} \tl_const:Nn \c_@@_interview_title_string_tl {En~ apart\'e~ avec~ } % \end{macrocode} % For the asides opening and eventuelly closing punctuation marks. % \begin{macrocode} \tl_const:Nn \c_@@_aside_string_tl {--} % \end{macrocode} % For the draft watermark. % \begin{macrocode} \tl_const:Nn \c_@@_draftwatermark_string_tl {draft} % \end{macrocode} % For the text accompagnying the date displayed in the footer of the authors' versions. % \begin{macrocode} \tl_const:Nn \c_@@_compiled_string_tl { \int_compare:nNnT {\g_@@_issue_number_int}={0} { \c_@@_footer_size_font_tl \IfLanguageName{french}{ Compil\'e~ le~ }{ Compiled~ on~ } \today } } % \end{macrocode} % % % \begin{macro}{smf,issn,isbn,cv} % % \begin{macrocode} % \newacronym{smf}{smf}{\c_@@_smf_string_tl} % \newacronym{issn}{issn}{International Standard Serial Number} % \newacronym{isbn}{isbn}{International Standard Book Number} % \newacronym{cv}{cv}{curriculum vit\ae} % \end{macrocode} % % \end{macro} % % \subsubsection{Booleans} % % We now declare the booleans that will be used. % % \begin{macro}{\g_@@_frontcover_bool,\g_@@_inside_frontcover_bool,\g_@@_inside_backcover_bool,\g_@@_frontmatter_bool,\g_@@_rubric_bool,\g_@@_interview_rubric_bool,\g_@@_mainmatter_bool,\g_@@_backmatter_bool,\g_@@_backcover_bool} % The following booleans will be used to test wheter we are respectively in the % front cover, in the inside front cover, in the frontmatter, in (first page % of) a rubric, in the mainmatter. % \begin{macrocode} \bool_new:N \g_@@_frontcover_bool \bool_new:N \g_@@_inside_frontcover_bool \bool_new:N \g_@@_inside_backcover_bool \bool_new:N \g_@@_frontmatter_bool \bool_new:N \g_@@_rubric_bool \bool_new:N \g_@@_interview_rubric_bool \bool_new:N \g_@@_tellme_rubric_bool \bool_new:N \g_@@_rearviewmirror_rubric_bool \bool_new:N \g_@@_books_rubric_bool \bool_new:N \g_@@_mainmatter_bool \bool_new:N \g_@@_backmatter_bool \bool_new:N \g_@@_backcover_bool \bool_new:N \g_@@_frontcover_without_minitoc_bool % \end{macrocode} % \end{macro} % % \begin{macro}{\g_@@_previous_article_with_bibliography_or_minibio_bool} % The following boolean will be used to test, for a given (not first) article % of a rubric, whether the previous article ends with a bibliography or % a minibio, in order to adjust the vertical space before its \enquote{bullet % and rule}. % \begin{macrocode} \bool_new:N \g_@@_previous_article_with_bibliography_or_minibio_bool % \end{macrocode} % \end{macro} % % \begin{macro}{\g_@@_advertisement_bool} % The following boolean will be used to test wheter we are inside % an advertisement page. % \begin{macrocode} \bool_new:N \g_@@_advertisement_bool % \end{macrocode} % \end{macro} % % \begin{macro}{\g_@@_multicols_bool} % The following boolean will be used to test wheter we are inside % a \pkg{multicol}'s ×multicols× environment. % \begin{macrocode} \bool_new:N \g_@@_multicols_bool % \end{macrocode} % \end{macro} % % \begin{macro}{\g_@@_refsection_bool} % The following boolean will be used to test wheter we are inside % a \pkg{biblatex}'s ×refsection× environment. % \begin{macrocode} \bool_new:N \g_@@_refsection_bool % \end{macrocode} % \end{macro} % % \subsubsection{Dimensions} % % \paragraph{Geometry of the page} % % \begin{macro}{\c_@@_rubrics_abstract_width_dim,\c_@@_rubrics_head_text_abstract_width_dim,\c_@@_rubrics_head_text_no_abstract_width_dim,\l_@@_rubrics_head_text_width_dim} % We declare the constant (default) dimensions of the boxes containing the % abstract and head text rubrics. % \begin{macrocode} \dim_const:Nn \c_@@_rubrics_abstract_width_dim { 85mm} \dim_const:Nn \c_@@_rubrics_head_text_abstract_width_dim { 50mm} \dim_const:Nn \c_@@_rubrics_head_text_no_abstract_width_dim { \c_@@_rubrics_abstract_width_dim + \c_@@_rubrics_head_text_abstract_width_dim} \dim_new:N \l_@@_rubrics_head_text_width_dim % \end{macrocode} % \end{macro} % % \begin{macro}{\c_@@_offset_dim,\c_@@_paperheight_dim,\c_@@_paperwidth_dim,\c_@@_topmargin_dim,\c_@@_headsep_dim,\c_@@_botmargin_dim,\c_@@_innermargin_dim,\c_@@_outermargin_dim,\c_@@_footskip_dim,\c_@@_header_line_width_dim,\c_@@_header_line_yshift_dim} % We first declare the default page layout constant dimensions. % \begin{macrocode} \dim_const:Nn \c_@@_layoutheight_dim { 270mm} \dim_const:Nn \c_@@_layoutwidth_dim { 210mm} % \end{macrocode} % % We define a \enquote{printer} layout offset dimension % ×\c_@@_printer_layoutoffset_dim×, fixed by the printer to be \SI{5}{\mm}. % \begin{macrocode} \dim_const:Nn \c_@@_printer_layoutoffset_dim { 5mm} % \end{macrocode} % % We define a \enquote{potential} layout offset dimension which is non-zero (and % the equal to \enquote{printer} layout offset dimension) iff the output is % prepared for the printer (×\g_@@_for_printer_bool× flag equals true). % \begin{macrocode} \bool_if:NTF {\g_@@_for_printer_bool} { \dim_const:Nn \c_@@_potential_layoutoffset_dim { \c_@@_printer_layoutoffset_dim} }{ \dim_const:Nn \c_@@_potential_layoutoffset_dim {\c_zero_dim} } % \end{macrocode} % % We define a \enquote{printer} binding dimension % ×\c_@@_printer_bindingoffset_dim×, fixed by the printer to have different % values depending on some total pages thresholds. If the binding dimension is % denoted by $b$ (and expressed in millimeters) and the total page number of the % document\footnote{Except cover pages, that is the \enquote{real} total page % number minus $4$.} is denoted by $N$, the thresholds are as follows: % \begin{equation}\label{binding} % b= % \begin{cases} % 0 & \text{ si } N < 68 \\ % 3 & \text{ si } 68\leq N<80 \\ % 3.5 & \text{ si } 80\leq N<88 \\ % 3.9 & \text{ si } 88\leq N<96 \\ % 4.1 & \text{ si } 96\leq N<104 \\ % 4.5 & \text{ si } 104\leq N<120 \\ % 5 & \text{ si } N\geq 120 % \end{cases} % \end{equation} % % We define the thresholds: % \begin{macrocode} \int_const:Nn \c_@@_thresold_a_int {68} \int_const:Nn \c_@@_thresold_b_int {80} \int_const:Nn \c_@@_thresold_c_int {88} \int_const:Nn \c_@@_thresold_d_int {96} \int_const:Nn \c_@@_thresold_e_int {104} \int_const:Nn \c_@@_thresold_f_int {120} % \end{macrocode} % and the corresponding binding dimensions: % \begin{macrocode} \dim_const:Nn \c_@@_bindingoffset_a_dim {3mm} \dim_const:Nn \c_@@_bindingoffset_b_dim {3.5mm} \dim_const:Nn \c_@@_bindingoffset_c_dim {3.9mm} \dim_const:Nn \c_@@_bindingoffset_d_dim {4.1mm} \dim_const:Nn \c_@@_bindingoffset_e_dim {4.5mm} \dim_const:Nn \c_@@_bindingoffset_f_dim {5mm} % \end{macrocode} % % In order to know the total pages number of the document (store in % ×\g_@@_total_page_number_int×), we need first to specify the % \enquote{external} document whom \File{.aux} will be read. % \begin{macrocode} \int_new:N \g_@@_total_pages_number_int \int_new:N \g_@@_total_inside_pages_number_int \zexternaldocument[self]{\jobname} % \end{macrocode} % % We extract the total pages number thanks to ×\zref@extractdefault× from % \Package{zref-totpages}. % \begin{macrocode} \int_gset:Nn \g_@@_total_pages_number_int { \zref@extractdefault{selfLastPage}{abspage}{0} } \int_gset:Nn \g_@@_total_inside_pages_number_int { \g_@@_total_pages_number_int - 4 } % \end{macrocode} % % The \enquote{printer} binding dimension is now store in % ×\c_@@_printer_bindingoffset_dim× following \vref{binding}. % % \begin{macrocode} \int_compare:nNnTF {\g_@@_total_inside_pages_number_int}<{\c_@@_thresold_a_int} { \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_zero_dim } }{ \int_compare:nNnTF {\g_@@_total_inside_pages_number_int}<{\c_@@_thresold_b_int} { \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_@@_bindingoffset_a_dim } }{ \int_compare:nNnTF {\g_@@_total_inside_pages_number_int}<{\c_@@_thresold_c_int} { \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_@@_bindingoffset_b_dim } }{ \int_compare:nNnTF {\g_@@_total_inside_pages_number_int}<{\c_@@_thresold_d_int} { \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_@@_bindingoffset_c_dim } }{ \int_compare:nNnTF {\g_@@_total_inside_pages_number_int}<{\c_@@_thresold_e_int} { \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_@@_bindingoffset_d_dim } }{ \int_compare:nNnTF {\g_@@_total_inside_pages_number_int}<{\c_@@_thresold_f_int} { \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_@@_bindingoffset_e_dim } }{ \dim_const:Nn \c_@@_printer_bindingoffset_dim { \c_@@_bindingoffset_f_dim } } } } } } } % \end{macrocode} % % The binding offset is applied iff the front cover is required (×frontcover× % option), which implies the output is prepared for the printer, with non-zero % offset (×\g_@@_for_printer_bool× flag equals true). % \begin{macrocode} \bool_if:NTF {\g_@@_cover_bool} { \dim_const:Nn \c_@@_potential_bindingoffset_dim { \c_@@_printer_bindingoffset_dim } }{ \dim_const:Nn \c_@@_potential_bindingoffset_dim {\c_zero_dim} } % \end{macrocode} % % The paper height is rather simple: it is always the layout height dimension % plus 2 times (top and bottom) the layout offset dimension (which turns to be % non-zero iff the output is prepared for the printer). % \begin{macrocode} \dim_const:Nn \c_@@_paperheight_dim { \c_@@_layoutheight_dim+2\c_@@_potential_layoutoffset_dim} % \end{macrocode} % % The paper width is more complicated: it is the layout width dimension plus: % \begin{itemize} % \item the \enquote{potential} binding offset (which turns to be non-zero iff % only the cover page is output), % \item the layout offset dimension (which turns to be non-zero iff the output % is prepared for the printer): % \begin{description} % \item[if for the cover pages] just 1 time, % \item[if for the other pages] 2 times. % \end{description} % \end{itemize} % \begin{macrocode} \bool_if:NTF {\g_@@_cover_bool} { \dim_const:Nn \c_@@_paperwidth_dim { \c_@@_layoutwidth_dim + \c_@@_potential_layoutoffset_dim +\c_@@_potential_bindingoffset_dim } }{ \dim_const:Nn \c_@@_paperwidth_dim { \c_@@_layoutwidth_dim + 2 \c_@@_potential_layoutoffset_dim +\c_@@_potential_bindingoffset_dim } } % \end{macrocode} % % The image width is the layout width plus the (non-zero) printer layout offset % dimension: % \begin{macrocode} \dim_const:Nn \c_@@_frontcover_image_width_dim { \c_@@_layoutwidth_dim + \c_@@_printer_layoutoffset_dim } \dim_const:Nn \c_@@_topmargin_dim { 31mm} \dim_const:Nn \c_@@_topmargin_frontcover_dim { \c_@@_topmargin_dim + 30mm } \dim_const:Nn \c_@@_topmargin_inside_cover_dim { \c_@@_topmargin_dim +10mm } \dim_const:Nn \c_@@_topmargin_front_matter_dim { \c_@@_topmargin_inside_cover_dim } % \dim_const:Nn \c_@@_topmargin_backcover_dim { % \c_@@_topmargin_frontcover_dim % } \dim_const:Nn \c_@@_headsep_dim { 24mm} \dim_const:Nn \c_@@_headsep_frontcover_dim { \c_@@_headsep_dim +31mm % -\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_headsep_inside_frontcover_dim { \c_@@_headsep_dim +7mm } \dim_const:Nn \c_@@_headsep_front_matter_dim { \c_@@_headsep_inside_frontcover_dim } \dim_const:Nn \c_@@_headheight_dim { \c_zero_dim } \dim_const:Nn \c_@@_botmargin_dim { 30mm} \dim_const:Nn \c_@@_footskip_dim { 26mm} % \end{macrocode} % % Inner margins of the initial issue (\#~ 143) were too small. We make them % definitively bigger as of \SI{5}{\milli\meter} (×\c_@@_extra_margin_dim×) and % make the outer margins smaller of the same dimension. % \begin{macrocode} \dim_const:Nn \c_@@_extra_margin_dim { 5mm } \dim_const:Nn \c_@@_innermargin_dim { 15mm - \c_@@_potential_bindingoffset_dim + \c_@@_extra_margin_dim} \dim_const:Nn \c_@@_outermargin_dim { 30mm - \c_@@_extra_margin_dim } \dim_const:Nn \c_@@_inside_cover_box_width_dim { 165mm } \dim_const:Nn \c_@@_innermargin_inside_cover_dim { (\c_@@_layoutwidth_dim - \c_@@_inside_cover_box_width_dim)/2 - \c_@@_potential_bindingoffset_dim % + \c_@@_adjustmargin_dim } \dim_const:Nn \c_@@_outermargin_inside_cover_dim { (\c_@@_layoutwidth_dim - \c_@@_inside_cover_box_width_dim)/2 % - \c_@@_adjustmargin_dim } \dim_const:Nn \c_@@_innermargin_backcover_dim { 10mm } \dim_const:Nn \c_@@_outermargin_backcover_dim { \c_@@_innermargin_backcover_dim } \dim_const:Nn \c_@@_topmargin_backcover_dim { \c_@@_innermargin_backcover_dim } \dim_const:Nn \c_@@_bottommargin_backcover_dim { \c_@@_innermargin_backcover_dim } \dim_const:Nn \c_@@_frontcover_image_height_dim { 160mm} \dim_const:Nn \c_@@_radius_arc_dim { 85mm } \dim_const:Nn \c_@@_frontmatter_headtext_xshift_dim { 19mm } \dim_const:Nn \c_@@_frontmatter_headtext_o_xshift_dim { -\c_@@_frontmatter_headtext_xshift_dim -\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_frontmatter_headtext_e_xshift_dim { \c_@@_frontmatter_headtext_xshift_dim +\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_frontmatter_headtext_yshift_dim { -6.5mm-\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_header_line_width_dim { 0.25mm} \dim_const:Nn \c_@@_header_line_yshift_dim { -1mm-\c_@@_header_line_width_dim} \dim_const:Nn \c_@@_footer_background_height_dim { 10mm + \c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_front_matter_extra_innermargin_dim { 28mm } \dim_const:Nn \c_@@_front_matter_extra_outermargin_dim { 7mm } \dim_const:Nn \c_@@_inside_cover_offset_dim { \c_zero_dim } % \dim_const:Nn \c_@@_inside_cover_offset_dim { 7.5mm } \dim_const:Nn \c_@@_pictogram_width_dim { 23mm } \dim_const:Nn \c_@@_header_xshift_dim { \c_@@_pictogram_width_dim-6mm } \dim_const:Nn \c_@@_header_yshift_dim { 5mm } \dim_const:Nn \c_@@_xshift_arccircle_A_dim { \c_@@_rubrics_abstract_width_dim+\c_@@_innermargin_dim+10mm+\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_yshift_arccircle_A_dim { -22mm-\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_xshift_arccircle_B_dim { (\c_@@_rubrics_abstract_width_dim+\c_@@_innermargin_dim)/2 % \c_@@_innermargin_dim+(\c_@@_rubrics_abstract_width_dim/2) % \c_@@_xshift_arccircle_A_dim/2 } \dim_const:Nn \c_@@_yshift_arccircle_B_dim { -\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_xshift_arccircle_C_dim { \c_@@_potential_layoutoffset_dim-5mm } \dim_const:Nn \c_@@_yshift_arccircle_C_dim { -19.75mm-\c_@@_potential_layoutoffset_dim } \dim_const:Nn \c_@@_book_review_frontcover_extend_dim { 12mm } \dim_const:Nn \c_@@_tcb_left_dim { 4mm } \dim_const:Nn \c_@@_tcb_boxsep_dim { 1mm } \dim_const:Nn \c_@@_tikz_dot_diameter_dim { 0.33mm } \dim_const:Nn \c_@@_tikz_dot_spacing_dim { 1.05mm } \dim_const:Nn \c_@@_rubric_extra_xoffset_dim { -\c_@@_innermargin_dim/2 } \dim_const:Nn \c_@@_rubric_xoffset_dim { 14.5mm } % \end{macrocode} % \end{macro} % % \begin{macro}{\c_@@_boxed_issue_number_width_dim,\c_@@_boxed_issue_number_height_dim} % We declare the constant dimensions of the box containing the issue number. % \begin{macrocode} \dim_const:Nn \c_@@_boxed_issue_number_width_dim { 30mm} \dim_const:Nn \c_@@_boxed_issue_number_height_dim { 8mm} % \end{macrocode} % \end{macro} % % \begin{macro}{\l_@@_thumbnail_width_dim} % We declare the width of the possible thumbnail glued to the box containing % the issue number. % \begin{macrocode} \dim_new:N \l_@@_thumbnail_width_dim \dim_set:Nn \l_@@_thumbnail_width_dim {30mm} % \end{macrocode} % \end{macro} % % \begin{macro}{\g_@@_abstract_box_width_dim} % \begin{macrocode} \dim_new:N \g_@@_abstract_box_width_dim % \end{macrocode} % \end{macro} % % \begin{macro}{\c_@@_original_parindent_dim} % \begin{macrocode} \dim_new:N \c_@@_original_parindent_dim \dim_gset_eq:NN \c_@@_original_parindent_dim \parindent % \end{macrocode} % \end{macro} % % \begin{macro}{\l_@@_between_rubric_head_text_and_abstract_dim} % \begin{macrocode} \dim_new:N \l_@@_between_rubric_head_text_and_abstract_dim % \end{macrocode} % \end{macro} % % \begin{macro}{\g_@@_minitoc_circle_diameter_dim,\g_@@_minitoc_textwidth_dim,\g_@@_minitoc_xshift_dim,\g_@@_minitoc_yshift_dim,\c_@@_minitoc_from_circle_xshift_dim,\c_@@_minitoc_from_circle_yshift_dim} % \begin{macrocode} \dim_new:N \g_@@_minitoc_circle_diameter_dim \dim_new:N \g_@@_minitoc_textwidth_dim \dim_new:N \g_@@_minitoc_xshift_dim \dim_new:N \g_@@_minitoc_yshift_dim \dim_gset:Nn \g_@@_minitoc_circle_diameter_dim {142mm} \dim_gset:Nn \g_@@_minitoc_textwidth_dim {65mm} \dim_gset:Nn \g_@@_minitoc_xshift_dim {-22mm} \dim_gset:Nn \g_@@_minitoc_yshift_dim {30mm} \dim_const:Nn \c_@@_minitoc_from_circle_xshift_dim {-15mm} \dim_const:Nn \c_@@_minitoc_from_circle_yshift_dim {-\c_@@_minitoc_from_circle_xshift_dim} % \end{macrocode} % \end{macro} % % \begin{macro}{\c_@@_footer_height_font_dim} % We declare the height of the font displayed in the footer. % \begin{macrocode} \dim_const:Nn \c_@@_footer_height_font_dim {3mm} % \end{macrocode} % \end{macro} % % \begin{macro}{\c_@@_minitoc_list_labelsep_dim} % \begin{macrocode} \dim_const:Nn \c_@@_minitoc_list_labelsep_dim {1em} % \end{macrocode} % \end{macro} % % \begin{macro}{\c_@@_authors_photos_width_dim} % \begin{macrocode} \dim_const:Nn \c_@@_authors_photos_width_dim {16mm} \dim_const:Nn \c_@@_authors_photos_box_width_dim {\c_@@_authors_photos_width_dim + 2mm} \dim_new:N \l_@@_minibio_width_dim % \end{macrocode} % \end{macro} % % We set the default geometry of the page. % \begin{macrocode} \geometry{ papersize={\c_@@_paperwidth_dim,\c_@@_paperheight_dim} } % \end{macrocode} % % We create a constant token list that contains the geometry of the front cover. % \begin{macrocode} \bool_if:NTF {\g_@@_cover_bool} { \tl_const:Nn \c_@@_frontcover_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutvoffset=\c_@@_potential_layoutoffset_dim ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_frontcover_dim ,headsep=\c_@@_headsep_frontcover_dim ,headheight=\c_@@_headheight_dim % ,bottom=\c_zero_dim ,bottom=11mm ,footskip=\c_zero_dim ,outer=\c_zero_dim ,inner=\c_@@_potential_layoutoffset_dim ,nomarginpar } }{ \tl_const:Nn \c_@@_frontcover_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutoffset=\c_@@_potential_layoutoffset_dim ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_frontcover_dim ,headsep=\c_@@_headsep_frontcover_dim ,headheight=\c_@@_headheight_dim % ,bottom=\c_zero_dim ,bottom=11mm ,footskip=\c_zero_dim ,hmargin=\c_@@_potential_layoutoffset_dim ,nomarginpar } } % \end{macrocode} % % We create a constant token list that contains the geometry of the inside front % and back covers. % \begin{macrocode} \bool_if:NTF {\g_@@_cover_bool} { \tl_const:Nn \c_@@_inside_cover_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutvoffset=\c_@@_potential_layoutoffset_dim ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_inside_cover_dim ,headheight=\c_@@_headheight_dim ,headsep=\c_@@_headsep_inside_frontcover_dim ,bottom=\c_@@_botmargin_dim ,footskip=\c_@@_footskip_dim ,inner=\c_@@_innermargin_inside_cover_dim-\c_@@_potential_layoutoffset_dim ,outer=\c_@@_outermargin_inside_cover_dim+\c_@@_potential_layoutoffset_dim ,nomarginpar } }{ \tl_const:Nn \c_@@_inside_cover_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutoffset=\c_@@_potential_layoutoffset_dim ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_inside_cover_dim ,headheight=\c_@@_headheight_dim ,headsep=\c_@@_headsep_inside_frontcover_dim ,bottom=\c_@@_botmargin_dim ,footskip=\c_@@_footskip_dim ,inner=\c_@@_innermargin_inside_cover_dim ,outer=\c_@@_outermargin_inside_cover_dim ,nomarginpar } } % \end{macrocode} % % We create a constant token list that contains the geometry of the front matter. % \begin{macrocode} \tl_const:Nn \c_@@_front_matter_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutoffset=\c_@@_potential_layoutoffset_dim % ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_front_matter_dim ,headheight=\c_@@_headheight_dim ,headsep=\c_@@_headsep_front_matter_dim ,bottom=\c_@@_botmargin_dim ,footskip=\c_@@_footskip_dim ,inner=\c_@@_innermargin_dim+\c_@@_front_matter_extra_innermargin_dim ,outer=\c_@@_outermargin_dim+\c_@@_front_matter_extra_outermargin_dim ,nomarginpar } % \end{macrocode} % % We create a constant token list that contains the geometry of the main pages. % \begin{macrocode} \tl_const:Nn \c_@@_main_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutoffset=\c_@@_potential_layoutoffset_dim % ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_dim-15mm ,headheight=\c_@@_headheight_dim ,headsep=\c_@@_headsep_dim-18mm ,bottom=\c_@@_botmargin_dim ,footskip=\c_@@_footskip_dim ,inner=\c_@@_innermargin_dim ,outer=\c_@@_outermargin_dim } % \end{macrocode} % % We create a constant token list that contains the geometry of the back cover. % \begin{macrocode} \tl_const:Nn \c_@@_backcover_geometry_tl { ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} ,layoutoffset=\c_@@_potential_layoutoffset_dim % ,bindingoffset=\c_@@_potential_bindingoffset_dim ,top=\c_@@_topmargin_backcover_dim % ,top=\c_@@_topmargin_dim-15mm % ,headheight=\c_@@_headheight_dim % ,headsep=\c_@@_headsep_dim-18mm ,bottom=\c_@@_bottommargin_backcover_dim % ,footskip=\c_@@_footskip_dim ,inner=\c_@@_innermargin_backcover_dim ,outer=\c_@@_outermargin_backcover_dim ,nomarginpar ,hcentering ,twoside=false } % \end{macrocode} % % \subsubsection{Skips} % % \begin{macrocode} \skip_const:Nn \c_@@_editorial_presidentmessage_parskip_skip { 12pt plus 2pt minus .8pt } \skip_const:Nn \c_@@_mainmatter_parskip_skip { 2pt plus .5pt minus .2pt } % \end{macrocode} % % \subsection{Options} % % In this section, options used by some of the document commands defined by the % class are treated. % % \subsubsection{Issues options} % % \begin{macro}{\g_@@_issue_number_int,\g_@@_issue_month_int,\g_@@_issue_year_int} % Some variables which are involved in options are created. % \begin{macrocode} \int_new:N \g_@@_issue_number_int \int_new:N \g_@@_issue_month_int \int_new:N \g_@@_issue_year_int \tl_new:N \g_@@_frontcover_image_options_tl % \end{macrocode} % \end{macro} % % \begin{macro}{number,month,year} % The keys options are created. % \begin{macrocode} \keys_define:nn { gzt/issuesetup } { number .int_gset:N = \g_@@_issue_number_int, month .int_gset:N = \g_@@_issue_month_int, year .int_gset:N = \g_@@_issue_year_int, % \end{macrocode} % % All these options, when used, must receive a value. % \begin{macrocode} number .value_required:n = true, month .value_required:n = true, year .value_required:n = true, % \end{macrocode} % % If ×number× option is not used, its initial value is set to $0$. % number. % \begin{macrocode} number .initial:n = 0, % \end{macrocode} % % The options of the front cover image could be set within ×\issuesetup×'s % argument. % \begin{macrocode} frontcoverimageoptions .tl_gset:N = \g_@@_frontcover_image_options_tl } % \end{macrocode} % \end{macro} % % \subsubsection{Journal options} % % \begin{macro}{\l_@@_journal_publisher_tl,\l_@@_journal_address_tl,\l_@@_journal_phone_tl,\l_@@_journal_fax_tl,\l_@@_journal_email_tl,\l_@@_journal_url_tl,\l_@@_journal_issn_tl,\l_@@_journal_isbn_tl} % Some variables which are involved in options are created. % \begin{macrocode} \tl_new:N \l_@@_journal_publisher_tl \tl_new:N \l_@@_journal_address_tl \tl_new:N \l_@@_journal_phone_tl \tl_new:N \l_@@_journal_fax_tl \tl_new:N \l_@@_journal_email_tl \tl_new:N \l_@@_journal_url_tl \tl_new:N \l_@@_journal_issn_tl \tl_new:N \l_@@_journal_isbn_tl % \end{macrocode} % \end{macro} % % \begin{macro}{publisher,address,phone,fax,email,url,issn,isbn} % The keys options are created. % \begin{macrocode} \keys_define:nn { gzt/journalsetup } { publisher .tl_set:N = \l_@@_journal_publisher_tl, address .tl_set:N = \l_@@_journal_address_tl, phone .tl_set:N = \l_@@_journal_phone_tl, fax .tl_set:N = \l_@@_journal_fax_tl, email .tl_set:N = \l_@@_journal_email_tl, url .tl_set:N = \l_@@_journal_url_tl, issn .tl_set:N = \l_@@_journal_issn_tl, isbn .tl_set:N = \l_@@_journal_isbn_tl, % \end{macrocode} % % All these options, when used, must receive a value. % \begin{macrocode} publisher .value_required:n = true, address .value_required:n = true, phone .value_required:n = true, fax .value_required:n = true, email .value_required:n = true, url .value_required:n = true, issn .value_required:n = true, isbn .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Titles options} % % \begin{macro}{shorttitle,minishorttitle,notintoc} % Some keys options for article's title are created: % \begin{itemize} % \item ×shorttitle× for the possible alternative title to appear in the table % of contents and in the headers, % \item ×minishorttitle× for the possible alternative title to appear in the % mini table of contents of the front cover, % \item ×notintoc×, a flag that, if true, prevents the title to appear in the % table of contents. % \end{itemize} % % \begin{macrocode} \keys_define:nn { gzt/title } { short .tl_gset:N = \g_@@_short_title_tl, minishort .tl_gset:N = \g_@@_mini_short_title_tl, notinarticle .bool_gset:N = \g_@@_title_not_in_article_bool, notintoc .bool_gset:N = \g_@@_title_not_in_toc_bool, without~ rule .bool_gset:N = \g_@@_title_without_rule_bool, % \end{macrocode} % % The following options, when used, must receive a value. % \begin{macrocode} short .value_required:n = true, minishort .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Subtitles options} % % \begin{macro}{shortsubtitle,minishortsubtitle,notintoc} % Some keys options for article's title are created: % \begin{itemize} % \item ×shorttitle× for the possible alternative title to appear in the table % of contents and in the headers, % \item ×minishorttitle× for the possible alternative title to appear in the % mini table of contents of the front cover, % \item ×notintoc×, a flag that, if true, prevents the title to appear in the % table of contents. % \end{itemize} % % \begin{macrocode} \keys_define:nn { gzt/subtitle } { short .tl_gset:N = \g_@@_short_subtitle_tl, minishort .tl_gset:N = \g_@@_mini_short_subtitle_tl, notinarticle .bool_gset:N = \g_@@_subtitle_not_in_article_bool, notintoc .bool_gset:N = \g_@@_subtitle_not_in_toc_bool, % \end{macrocode} % % The following options, when used, must receive a value. % \begin{macrocode} short .value_required:n = true, minishort .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Rubrics options} % % \begin{macrocode} \keys_define:nn { gzt/rubric } { abstract .tl_gset:N = \g_@@_rubric_abstract_tl, header .tl_gset:N = \g_@@_rubric_header_tl, title .tl_gset:N = \g_@@_rubric_title_tl, pictogram .tl_gset:N = \g_@@_rubric_pictofile_tl, % \end{macrocode} % % The following options, when used, must receive a value. % \begin{macrocode} abstract .value_required:n = true, title .value_required:n = true, pictogram .value_required:n = true, } % \end{macrocode} % % \subsubsection{Minitoc options} % % \begin{macro}{list} % A ×list× (boolean) key option for ×minitoc× environment is created: if true, % ×minitoc× should contains ×\item× just as a list and the resulting list will be % typeset in a special way. % % \begin{macrocode} \keys_define:nn { gzt/minitoc } { list .bool_gset:N = \g_@@_minitoc_list_bool, help .bool_gset:N = \g_@@_minitoc_help_bool, diameter .dim_gset:N = \g_@@_minitoc_circle_diameter_dim, textwidth .dim_gset:N = \g_@@_minitoc_textwidth_dim, xshift .dim_gset:N = \g_@@_minitoc_xshift_dim, yshift .dim_gset:N = \g_@@_minitoc_yshift_dim, % \end{macrocode} % % The following options, when used, must receive a value. % \begin{macrocode} diameter .value_required:n = true, textwidth .value_required:n = true, xshift .value_required:n = true, yshift .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Authors options} % % \begin{macro}{affiliation,email,minibio,photo,webpage} % The keys options are created. % \begin{macrocode} \keys_define:nn { gzt/authors } { affiliation .tl_gset:N = \g_@@_people_affiliation_tl, email .tl_gset:N = \g_@@_people_email_tl, minibio .tl_gset:N = \g_@@_people_minibio_tl, photo .tl_gset:N = \g_@@_people_photo_tl, webpage .tl_gset:N = \g_@@_people_webpage_tl, % \end{macrocode} % % All these options, when used, must receive a value. % \begin{macrocode} affiliation .value_required:n = true, email .value_required:n = true, minibio .value_required:n = true, photo .value_required:n = true, webpage .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Interviewee options} % % \begin{macro}{\g_@@_interviewee_minibio_tl,\g_@@_interviewee_photo_tl,\g_@@_interviewee_first_last_name_tl} % Some variables which are involved in options are created. % \begin{macrocode} \tl_new:N \g_@@_interviewee_minibio_tl \tl_new:N \g_@@_interviewee_photo_tl \tl_new:N \g_@@_interviewee_first_last_name_tl % \end{macrocode} % \end{macro} % % \begin{macro}{minibio,photo} % The keys options are created. % \begin{macrocode} \keys_define:nn { gzt/interviewees } { minibio .tl_gset:N = \g_@@_interviewee_minibio_tl, photo .tl_gset:N = \g_@@_interviewee_photo_tl, % \end{macrocode} % % All these options, when used, must receive a value. % \begin{macrocode} minibio .value_required:n = true, photo .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Book review options} % % \begin{macro}{\g_@@_bookreview_frontcover_tl,\g_@@_bookreview_bibkey_tl} % Some variables which are involved in books reviews are created. % \begin{macrocode} \tl_new:N \g_@@_bookreview_frontcover_tl \tl_new:N \g_@@_bookreview_bibkey_tl % \end{macrocode} % \end{macro} % % \begin{macro}{frontcover,bibkey} % The keys options are created. % \begin{macrocode} \keys_define:nn { gzt/bookreview } { frontcover .tl_gset:N = \g_@@_bookreview_frontcover_tl, bibkey .tl_gset:N = \g_@@_bookreview_bibkey_tl, % \end{macrocode} % % All these options, when used, must receive a value. % \begin{macrocode} frontcover .value_required:n = true, bibkey .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{Book advertisement options} % % \begin{macro}{\g_@@_bookadvertisement_frontcover_tl,\g_@@_bookadvertisement_bibkey_tl} % Some variables which are involved in books advertisements are created. % \begin{macrocode} \tl_new:N \g_@@_bookadvertisement_frontcover_tl \tl_new:N \g_@@_bookadvertisement_bibkey_tl % \end{macrocode} % \end{macro} % % \begin{macro}{frontcover,bibkey} % The keys options are created. % \begin{macrocode} \keys_define:nn { gzt/bookadvertisement } { frontcover .tl_gset:N = \g_@@_bookadvertisement_frontcover_tl, bibkey .tl_gset:N = \g_@@_bookadvertisement_bibkey_tl, % \end{macrocode} % % All these options, when used, must receive a value. % \begin{macrocode} frontcover .value_required:n = true, bibkey .value_required:n = true, } % \end{macrocode} % \end{macro} % % \subsubsection{New theorem options} % % \begin{macrocode} \tl_new:N \l_@@_newtheorem_style_tl \keys_define:nn { gzt/newtheorem } { frenchtitle .tl_set:N = \l_@@_newtheorem_frenchtitle_tl, englishtitle .tl_set:N = \l_@@_newtheorem_englishtitle_tl, frenchtitle .value_required:n = true, englishtitle .value_required:n = true, style .choice:, style / theorem .code:n = {\tl_set:Nn \l_@@_newtheorem_style_tl {theorem}}, style / definition .code:n = {\tl_set:Nn \l_@@_newtheorem_style_tl {definition}}, style / proof .code:n = {\tl_set:Nn \l_@@_newtheorem_style_tl {proof}}, style / unknown .code:n = \msg_error:nnxxx { gzt } { unknown-choice } { style } { theorem~ or~ definition~ or~ proof } { \exp_not:n {#1} } } % \end{macrocode} % % \subsection{Colors} % % In this section, we define the colors that will be used by the class and by % the source file of the logo. % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article|class-logo> % \end{macrocode} % % \begin{macrocode} \definecolor{@@_generic_dark_color}{cmyk}{1,.60,.10,0} % \AddToHook{begindocument}{ \colorlet{@@_generic_light_color}{black!50} \colorlet{@@_dark_generic_light_color}{black!60} \colorlet{@@_description_label_light_color}{@@_dark_generic_light_color} \colorlet{@@_minitoc_color}{@@_generic_light_color} \colorlet{@@_cover_itemize_label_color}{@@_generic_dark_color} \colorlet{@@_default_text_color}{black} \colorlet{@@_head_text_color}{black!65} \colorlet{@@_rubric_head_text_color}{@@_head_text_color} \colorlet{@@_bibliography_minibios_acknowledgements_bg_color}{black!10} \colorlet{@@_headrule_color}{@@_generic_light_color!65} \colorlet{@@_circlerule_color}{@@_generic_dark_color!65} \colorlet{@@_frontmatter_text_color}{black!75} \colorlet{@@_people_color}{@@_generic_dark_color} \colorlet{@@_arrayrule_color}{@@_generic_dark_color} \colorlet{@@_acknowledgements_color}{@@_generic_dark_color} \colorlet{@@_question_color}{@@_generic_dark_color} \colorlet{@@_boxed_issue_number_bg_color}{@@_generic_dark_color} \colorlet{@@_rule_in_toc_color}{@@_generic_dark_color} \colorlet{@@_rubric_in_toc_color}{@@_generic_dark_color} \colorlet{@@_article_in_toc_color}{@@_frontmatter_text_color} \colorlet{@@_rubric_title_color}{@@_generic_light_color} \colorlet{@@_article_title_color}{@@_generic_dark_color} \colorlet{@@_section_color}{@@_generic_dark_color} \colorlet{@@_subsection_color}{@@_generic_dark_color!90} \colorlet{@@_subsubsection_color}{@@_generic_dark_color!80} \colorlet{@@_rubric_abstract_color}{@@_generic_dark_color} \colorlet{@@_article_abstract_color}{@@_generic_light_color} \colorlet{@@_dotfill_color}{@@_generic_dark_color} \colorlet{@@_about_frontcover_title_color}{@@_generic_dark_color} \colorlet{@@_reflected_text_color}{@@_generic_dark_color} \colorlet{@@_inside_frontcover_frame_bg_color}{@@_generic_dark_color!8} \colorlet{@@_inside_frontcover_frame_title_color}{@@_generic_dark_color} \colorlet{@@_footer_bg_color}{black!10} \colorlet{@@_float_title_color}{@@_generic_dark_color} \colorlet{@@_float_title_bg_color}{@@_generic_dark_color!10} \colorlet{@@_float_frame_color}{@@_generic_dark_color!20} \colorlet{@@_chapter_color}{@@_generic_dark_color} \colorlet{@@_smf_number_color}{@@_generic_dark_color} \colorlet{@@_date_color}{@@_generic_light_color} \colorlet{@@_table_head_color}{@@_generic_dark_color!25} \colorlet{@@_book_review_frame_bg_color}{@@_generic_dark_color!8} \colorlet{@@_book_advertisement_bg_color}{white} \colorlet{@@_book_advertisement_frame_color}{@@_generic_dark_color} \colorlet{@@_default_cover_color}{white} } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsection{Miscellaneous patches} % % We patch the \pkg{biblatex}'s ×refsection× environment definition by adding % a flag that will be used to test wheter we are inside such an environment or % not. % \begin{macrocode} \AddToHook{env/multicols/begin}{ \bool_gset_true:N \g_@@_multicols_bool } \AddToHook{env/multicols/end}{ \bool_gset_false:N \g_@@_multicols_bool } \AddToHook{env/refsection/begin}{ \bool_gset_true:N \g_@@_refsection_bool } \AddToHook{env/refsection/end}{ \bool_gset_false:N \g_@@_refsection_bool } % \end{macrocode} % % \subsection{Miscellaneous token lists} % % We define a token list that will display the font of footer at the right size. % \begin{macrocode} \tl_const:Nn \c_@@_footer_size_font_tl { \fontsize{\c_@@_footer_height_font_dim}{\c_zero_dim}\selectfont } % \end{macrocode} % % We define some token lists for the long and short forms of \textsc{smf}. % \begin{macrocode} \tl_new:N \g_@@_smf_short_string_tl \tl_new:N \g_@@_smf_string_tl \tl_gset:Nn \g_@@_smf_short_string_tl { % \cs_if_exist:cTF {texorpdfstring} % { \texorpdfstring{\c_@@_smf_short_string_tl}{\c_@@_smf_short_pdf_string_tl} % }{ % \c_@@_smf_short_pdf_string_tl % } } \tl_gset:Nn \g_@@_smf_string_tl { % \cs_if_exist:cTF {texorpdfstring} % { % \texorpdfstring{Soci\'et\'e~ Math\'ematique~ de~ France}{\c_@@_smf_string_tl} \c_@@_smf_string_tl % }{ % \acrlong*{smf} % } } % \end{macrocode} % % We define some token lists for the long and short forms of \gzt. % \begin{macrocode} \tl_new:N \l_@@_gzt_short_string_tl \tl_new:N \l_@@_gzt_string_tl \tl_set:Nn \l_@@_gzt_short_string_tl { \cs_if_exist:cTF {texorpdfstring} { \texorpdfstring{\emph{\c_@@_journal_short_title_string_tl}}{\c_@@_journal_short_title_string_tl} }{ \emph{\c_@@_journal_short_title_string_tl} } } \tl_set:Nn \l_@@_gzt_string_tl { \cs_if_exist:cTF {texorpdfstring} { \texorpdfstring{\emph{\c_@@_journal_title_string_tl}}{\c_@@_journal_title_string_tl} }{ \emph{\c_@@_journal_title_string_tl} } } % \end{macrocode} % % We fix some strings for the PDF's metadata. % \begin{macrocode} \tl_new:N \g_@@_pdftitle_string_tl \tl_new:N \g_@@_pdfauthor_string_tl \tl_gset:Nn \g_@@_pdftitle_string_tl { \c_@@_pdftitle_string_tl } \tl_gset:Nn \g_@@_pdfauthor_string_tl { \g_@@_smf_string_tl } \AddToHook{begindocument/before}{ \hypersetup{ pdftitle=\g_@@_pdftitle_string_tl, pdfauthor=\g_@@_pdfauthor_string_tl } } % \end{macrocode} % % \begin{macrocode} \cs_new_protected:Nn \_@@_email:n { \href{mailto:#1}{\nolinkurl{#1}} } % \end{macrocode} % % We create a function that displays the author(s) of an article with % a peticular layout. % \begin{macrocode} \cs_new_protected:Nn \@@_display_author:nnnnn { \begin{tabular}[t]{p{\c_@@_authors_photos_box_width_dim}p{0.75\linewidth}} \tl_if_empty:nF {#5} { \begin{adjustbox}{valign=t} \includegraphics[width=\c_@@_authors_photos_width_dim]{#5} \end{adjustbox} } & \begin{description}[leftmargin=1em,style=nextline,nosep] \item[\textcolor{@@_people_color}{\DeclareNameAlias{labelname}{default}\citeauthor{#1}}] \tl_if_empty:nF {#2} { #2 \par \smallskip } \tl_if_empty:nF {#3} { \href{mailto:#3}{\nolinkurl{#3}} \par \smallskip } \tl_if_empty:nF {#4} { #4 } \end{description} \end{tabular} } % \end{macrocode} % % We create a variant of this control sequence that passes the \emph{values} of the % variables involved (see \url{https://tex.stackexchange.com/a/214284/18401}). % \begin{macrocode} \cs_generate_variant:Nn \@@_display_author:nnnnn { VVVVV } % \end{macrocode} % % \subsection{Functions for specifiying the people involved in the journal} % % For this, and thanks to \Pkg{datatool}, we create a database of % \enquote{people} involved in the journal. % \begin{macrocode} \DTLnewdb{people} % \end{macrocode} % % Then we create the internal ×\_@@_people× function that let us populate the % ×_@@_people× database. Each people will be identified by some identifiers: % speciality (optional), firstname, lastname, affiliation, email, role. % \begin{macrocode} \tl_new:N \l_@@_crossref_tl \cs_new_protected:Nn \_@@_people:nnnnnnnn { \DTLnewrow{people} \DTLnewdbentry{people}{first-last-name}{#1} \DTLnewdbentry{people}{affiliation}{#2} \DTLnewdbentry{people}{email}{#3} \DTLnewdbentry{people}{minibio}{#4} \DTLnewdbentry{people}{photo}{#5} \DTLnewdbentry{people}{speciality}{#6} \DTLnewdbentry{people}{role}{#7} \DTLnewdbentry{people}{webpage}{#8} % \end{macrocode} % % \begin{macrocode} \int_if_exist:cF {g_@@_#7_int} { \int_new:c {g_@@_#7_int} } \int_incr:c {g_@@_#7_int} \tl_if_in:nnTF { #7 } { author } { \tl_set:Nn \l_@@_crossref_tl {\c_@@_issue_bib_key_tl -art-\int_use:N \g_@@_articles_int} } { \tl_set:Nn \l_@@_crossref_tl {\c_@@_issue_bib_key_tl} } \tl_set:Nn \l_@@_people_first_last_name_tl {#1} \iow_now:Nx \g_@@_bib_out_iow { @article{ \c_@@_issue_bib_key_tl -#7- \int_use:c {g_@@_#7_int}, \iow_newline: author={\exp_not:V\l_@@_people_first_last_name_tl}, \iow_newline: options={skipbib}, \iow_newline: crossref = {\l_@@_crossref_tl} \iow_newline: } \iow_newline: } } % \end{macrocode} % % We create a variant of this control sequence that passes the \emph{values} of % the variables involved (see % \url{https://tex.stackexchange.com/a/214284/18401}). % \begin{macrocode} \cs_generate_variant:Nn \_@@_people:nnnnnnnn { nVVVVnxV } % \end{macrocode} % % \subsection{Functions for displaying \enquote{academic} signatures of articles % without \enquote{real} author(s)} % % We create a function that displays an \enquote{academic} signature for articles % without \enquote{real} author(s). % \begin{macrocode} \cs_new_protected:Nn \@@_display_academic_signature:n { \bigskip \begin{_@@_minibiographies_acknowledgements_tcbox} #1 \end{_@@_minibiographies_acknowledgements_tcbox} } % \end{macrocode} % % \subsection{Functions for displaying people involved in the journal by role} % % We create the function that displays firstname and lastname of people involved % in the journal by role. % \begin{macrocode} \cs_new_protected:Nn \@@_display_people_by_role:n { \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{#1}]{people}{ \l_@@_firstlastname_tl=first-last-name ,\l_@@_people_affiliation_tl=affiliation ,\l_@@_people_email_tl=email ,\l_@@_people_minibio_tl=minibio ,\l_@@_people_photo_tl=photo ,\l_@@_people_speciality=speciality ,\l_@@_people_role_tl=role ,\l_@@_people_webpage_tl=webpage }{ \tl_if_in:NnTF \l_@@_people_role_tl { editor } { \item[ \textcolor{@@_people_color}{ \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -#1- \exp_not:V\DTLcurrentindex} } \tl_if_in:NnF \l_@@_people_speciality { NoValue } { ~ (\l_@@_people_speciality) } ] \leavevmode \vbox_top:n { \l_@@_people_affiliation_tl \newline \href{mailto:\l_@@_people_email_tl}{\nolinkurl{\l_@@_people_email_tl}} } \medskip }{ \tl_if_in:NnTF \l_@@_people_role_tl { author } { \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} } ] \tl_if_empty:NF \l_@@_people_affiliation_tl { \mbox{} \par \vspace{-2ex} \l_@@_people_affiliation_tl } \tl_if_empty:NF \l_@@_people_email_tl { \par \href{mailto:\l_@@_people_email_tl}{\nolinkurl{\l_@@_people_email_tl}} } \tl_if_empty:NF \l_@@_people_webpage_tl { \par \url{\l_@@_people_webpage_tl} } \tl_if_empty:NF \l_@@_people_minibio_tl { \par \smallskip \l_@@_people_minibio_tl } \end{description} \end{adjustbox} } }{ \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -#1- \exp_not:V\DTLcurrentindex} \tl_if_empty:NF \l_@@_people_email_tl { \c_space_tl(\href{mailto:\l_@@_people_email_tl}{\nolinkurl{\l_@@_people_email_tl}}) } } } } } % \end{macrocode} % % \subsection{Function for displaying a reflected text} % % We create the function that displays a reflected text. % \begin{macrocode} \cs_new_protected:Nn \@@_reflected_text:n { \begin{tikzpicture} \tikzset{@@_reflect_node/.style={ anchor=base, inner~ sep=0, line~ width=0, font=\Huge, color=@@_reflected_text_color } } \node[@@_reflect_node]{#1}; \node[scope~ fading=south,opacity=0.2,yscale=-1,@@_reflect_node]{#1}; \end{tikzpicture} } % \end{macrocode} % % \subsection{Displaying the front cover} % % We create the variable that displays the front cover. % \begin{macrocode} \tl_new:N \g_@@_display_frontcover_tl \tl_gset:Nn \g_@@_display_frontcover_tl { \bool_gset_true:N \g_@@_frontcover_bool \pagenumbering{roman} \pagestyle{@@_frontcover_ps} \pagecolor{\g_@@_special_edition_color_tl} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_frontcover_geometry_tl} \noindent \bool_if:NTF {\g_@@_cover_bool} { \hspace*{-\c_@@_potential_layoutoffset_dim} }{ \hspace*{-2\c_@@_potential_layoutoffset_dim} } \exp_after:wN\includegraphics\exp_after:wN[\g_@@_frontcover_image_options_tl]{\g_@@_frontcover_image_file_tl} \begin{tikzpicture}[remember~ picture, overlay] \coordinate (@@_circle_minitoc_center) at ( [xshift=\g_@@_minitoc_xshift_dim-\c_@@_potential_layoutoffset_dim, yshift=\g_@@_minitoc_yshift_dim+\c_@@_potential_layoutoffset_dim] current~ page.south~ east ) ; \node[ name=@@_circle_minitoc, shape=circle, inner~ sep=\c_zero_dim, fill=\g_@@_special_edition_color_tl, text~ width=\g_@@_minitoc_circle_diameter_dim ] at (@@_circle_minitoc_center) {}; \node[text~ width=\g_@@_minitoc_textwidth_dim,anchor=north~ west] at ( [xshift=\c_@@_minitoc_from_circle_xshift_dim, yshift=\c_@@_minitoc_from_circle_yshift_dim] $ (@@_circle_minitoc.north)!.5!(@@_circle_minitoc.west) $ ) { \bool_if:NF {\g_@@_frontcover_without_minitoc_bool} { \large \color{@@_minitoc_color} \g_@@_frontcover_minitoc_tl } }; \bool_if:NT {\g_@@_minitoc_help_bool} { \fill[red] (@@_circle_minitoc_center) circle (2pt); } \end{tikzpicture} \bool_if:NT {\g_@@_cover_bool} { \small \begin{tikzpicture}[remember~ picture, overlay] \node[ name=@@_binding_sw, inner~ sep=\c_zero_dim, fill=\g_@@_special_edition_color_tl, rotate=90,anchor=west ] at ( [xshift=0.45\c_@@_potential_bindingoffset_dim, yshift=15mm+\c_@@_potential_layoutoffset_dim] current~ page.south~ west) { \No \bool_if:NTF {\g_@@_special_edition_bool} { \c_@@_special_edition_string_tl }{ \int_use:N\g_@@_issue_number_int } }; \node[name=@@_binding_w,inner~ sep=\c_zero_dim,fill=\g_@@_special_edition_color_tl,rotate=90] at ([xshift=0.45\c_@@_potential_bindingoffset_dim]current~ page.west) { \bool_if:NTF {\g_@@_special_edition_bool} { \tl_if_exist:NTF \g_@@_special_edition_short_title_tl { \g_@@_special_edition_short_title_tl }{ \g_@@_special_edition_title_tl } }{ \text_uppercase:n {\c_@@_journal_title_string_tl} } }; \node[name=@@_binding_nw,inner~ sep=\c_zero_dim,fill=\g_@@_special_edition_color_tl,rotate=90,anchor=east] at ( [ xshift=0.45\c_@@_potential_bindingoffset_dim ,yshift=-15mm-\c_@@_potential_layoutoffset_dim] current~ page.north~ west ){ \l_@@_uppercased_date_format\displaydate{@@_date} }; \end{tikzpicture} } \vfill \noindent \hspace*{10mm} \hspace*{-\c_@@_potential_layoutoffset_dim} \includegraphics[height=22.5mm]{\c_@@_smf_logo_file_string_tl} \bool_if:NT {\g_@@_special_edition_bool} { \hfill \includegraphics[scale=1.2]{gzt-logo} \hspace*{10mm} } % \vfill \clearpage \bool_gset_false:N \g_@@_frontcover_bool \nopagecolor } % \end{macrocode} % % \subsection{Displaying the inside front cover} % % We create the variable that displays the inside front cover. % \begin{macrocode} \tl_new:N \g_@@_display_inside_frontcover_tl \tl_gset:Nn \g_@@_display_inside_frontcover_tl { \bool_gset_true:N \g_@@_inside_frontcover_bool \pagestyle{@@_inside_frontcover_ps} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_inside_cover_geometry_tl} \small \setlength{\columnseprule}{2pt} \renewcommand{\columnseprulecolor}{\color{white}} \begin{_@@_inside_cover_tcb}[_@@_tcb_inside_frontcover_style] \begin{multicols}{2} \setlength{\columnsep}{1mm} \bool_if:NTF {\g_@@_special_edition_bool} { \begin{description}[leftmargin=1em,style=nextline,labelindent=\c_zero_dim] \@@_display_people_by_role:n {editor} \end{description} }{ \begin{description}[leftmargin=1em] \item[\c_@@_editors_in_chief_string_tl] \ \begin{description}[leftmargin=1em,style=nextline,labelindent=\c_zero_dim] \@@_display_people_by_role:n {editorinchief} \end{description} \bigskip \par \item[\c_@@_editors_string_tl] \ \begin{description}[leftmargin=1em,style=nextline,labelindent=\c_zero_dim] \@@_display_people_by_role:n {editor} \end{description} \end{description} } \end{multicols} \setlength{\columnseprule}{1pt} \tcblower \begin{tabular}{ @{}m{.75\c_@@_inside_cover_box_width_dim}@{}m{.2\c_@@_inside_cover_box_width_dim-2\tabcolsep}@{} } \begin{description}[leftmargin=1em] \item[\c_@@_editorial_secretariat_string_tl{}~ :] \ \par \l_@@_journal_publisher_tl % \par \c_space_tl\textendash{}\c_space_tl \@@_display_people_by_role:n { secretary }\par \l_@@_journal_address_tl\par \c_@@_phone_string_tl{}~ :~ \l_@@_journal_phone_tl{} \c_space_tl\textendash{}\c_space_tl \c_@@_fax_string_tl{}~ :~ \l_@@_journal_fax_tl\par \href{mailto:\l_@@_journal_email_tl}{\nolinkurl{\l_@@_journal_email_tl}} % \newline \c_space_tl\textendash{}\c_space_tl \url{\l_@@_journal_url_tl} \item[\c_@@_publishingdirector_string_tl{}~ :] \@@_display_people_by_role:n { president } \item[\c_@@_issn_string_tl{}~ :] \l_@@_journal_issn_tl \tl_if_empty:NF \l_@@_journal_isbn_tl { \item[\c_@@_isbn_string_tl{}~ :] \l_@@_journal_isbn_tl } \bool_if:NT {\g_@@_no_inside_backcover_bool} { \item[\c_@@_latexclass_string_tl{}~ :] \@@_display_people_by_role:n { classdesigner } \item[\c_@@_artistic_director_string_tl{}~ :] \@@_display_people_by_role:n { graphicdesigner } \item[\c_@@_printer_string_tl{}~ :] \g_@@_printer_text_tl } \end{description} \bool_if:NT {\g_@@_no_inside_backcover_bool} { \g_@@_font_designer_text_tl } & \hspace*{\fill} \includegraphics[height=20mm]{\c_@@_smf_logo_file_string_tl} \end{tabular} % \\ % \c_@@_font_string_tl \bigskip \tl_if_empty:NF \g_@@_about_frontcover_tl { \\ \begin{adjustbox}{ valign=t, minipage=.75\c_@@_inside_cover_box_width_dim+.2\c_@@_inside_cover_box_width_dim-2\tabcolsep } \begin{description}[leftmargin=1em,font=\color{@@_about_frontcover_title_color}] \item[\g_@@_about_frontcover_string_tl] \g_@@_about_frontcover_tl \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_tl=first-last-name ,\l_@@_people_role_tl=role }{ \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -frontcovercredit- \exp_not:V\DTLcurrentindex} } ). } \end{description} \end{adjustbox} } \end{_@@_inside_cover_tcb} \clearpage \pagenumbering{arabic} \bool_gset_false:N \g_@@_inside_frontcover_bool } % \end{macrocode} % % \subsection{Displaying the inside back cover} % % We create the variable that displays the inside back cover. % \begin{macrocode} \tl_new:N \g_@@_display_inside_backcover_tl \tl_gset:Nn \g_@@_display_inside_backcover_tl { \bool_gset_true:N \g_@@_inside_backcover_bool \cleardoublepage \pagestyle{@@_inside_backcover_ps} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_inside_cover_geometry_tl} \bool_if:NTF {\g_@@_no_inside_backcover_bool} { \hbox{} }{ \small \begin{_@@_inside_cover_tcb}[_@@_tcb_inside_backcover_style] \bool_if:NF {\g_@@_special_edition_bool} { % \begin{multicols}{2} % \setlength{\columnsep}{1mm} \file_if_exist_input:n {\c_@@_authors_instructions_file_tl} % \end{multicols} % \setlength{\columnseprule}{1pt} \tcblower } \begin{description}[leftmargin=1em] \item[\c_@@_latexclass_string_tl{}~ :] \@@_display_people_by_role:n { classdesigner } \item[\c_@@_artistic_director_string_tl{}~ :] \@@_display_people_by_role:n { graphicdesigner } \item[\c_@@_printer_string_tl{}~ :] \g_@@_printer_text_tl \end{description} \g_@@_font_designer_text_tl \end{_@@_inside_cover_tcb} } \bool_gset_false:N \g_@@_inside_backcover_bool } % \end{macrocode} % % \subsection{Displaying the back cover} % % We create the variable that displays the back cover. % \begin{macrocode} \tl_new:N \g_@@_display_backcover_tl \tl_gset:Nn \g_@@_display_backcover_tl { \bool_gset_true:N \g_@@_backcover_bool \pagestyle{@@_backcover_ps} \pagecolor{\g_@@_special_edition_color_tl} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_backcover_geometry_tl} \bool_if:NTF {\g_@@_special_edition_bool} { \mbox{} \vfill \clist_map_inline:Nn \c_@@_graphics_extensions_clist{ \file_if_exist:nT {\c_@@_issue_images_path_string_tl/\g_@@_special_edition_backcover_image_tl.#1} { \begin{center} \includegraphics[width=.25\linewidth]{\g_@@_special_edition_backcover_image_tl} \end{center} \bigskip \clist_map_break: } } \group_begin: \leftskip.125\linewidth \rightskip\leftskip \file_if_exist_input:nF {\c_@@_special_edition_backcover_page_file_string_tl} { \c_empty_box } \par \group_end: \vfill \clist_if_empty:NF \g_@@_special_edition_logos_clist { \vfill \noindent \clist_map_inline:Nn \g_@@_special_edition_logos_clist { \hfill \includegraphics[height=2cm]{#1} \hfill } \mbox{} } }{ \file_if_exist_input:nF {\c_@@_backcover_page_file_string_tl} { \hbox{} } } } % \end{macrocode} % % \subsection{User level commands} % % Here, we gather all the user level (public) commands. % % \subsubsection{Populating the people involved in the journal} % % \begin{macro}{\editorinchief,\editor,\president,\classdesigner,\fontdesigner,\classmaintainer,\graphicdesigner} % We define some document-level commands that let the user specify % respectively the editor(s) in chief, the editors, the (\textsc{smf}) % president, the class designer and maintainer(s), and the graphic designer. % % For the editor(s) in chief, we increment the ×\g_@@_editors_in_chief_int× % counter in order to use singular or plural form of the corresponding string % \enquote{Rédacteur(s) en chef}. % \begin{macrocode} \NewDocumentCommand \editorinchief {ommm} { \int_incr:N \g_@@_editors_in_chief_int \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{editorinchief}{} } \NewDocumentCommand \editor {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{editor}{} } \NewDocumentCommand \president {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{president}{} } \NewDocumentCommand \classdesigner {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{classdesigner}{} } \NewDocumentCommand \classmaintainer {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{classmaintainer}{} } \NewDocumentCommand \fontdesigner {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{fontdesigner}{} } \NewDocumentCommand \graphicdesigner {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{graphicdesigner}{} } \NewDocumentCommand \secretary {ommm} { \_@@_people:nnnnnnnn {#2}{#3}{#4}{}{}{#1}{secretary}{} } % \NewDocumentCommand \frontcovercredit {om} % { % \_@@_people:nnnnnnnn {#2}{}{}{}{}{#1}{frontcovercredit}{} % } % \end{macrocode} % \end{macro} % % \subsubsection{Issue setup} % % \begin{macro}{\issuesetup} % We define the command that lets the user specify the issue setup. % \begin{macrocode} \NewDocumentCommand \issuesetup { m } { % \end{macrocode} % % Its keys are set (only ×number×, ×month× and ×year× are relevant here). % \begin{macrocode} \keys_set:nn { gzt/issuesetup } {frontcoverimageoptions={width=\c_@@_frontcover_image_width_dim},#1} % \end{macrocode} % % We use here the fact that, if the ×number×, ×month× or ×year× options are not % used, their corresponding ×\g_@@_issue_number_int×, ×\g_@@_issue_month_int× or % ×\g_@@_issue_year_int× variables are equal to $0$ ($<1$). % % First, if ×number× is not used, its ×\g_@@_issue_number_int× variable is set % to ×\c_@@_first_issue_number_int×\footnote{The number of the first Gazette's % issue using the present class.} and a warning is emitted. % \begin{macrocode} \int_compare:nNnT {\g_@@_issue_number_int}<{1} { \int_set:Nn \g_@@_issue_number_int { \c_@@_first_issue_number_int } \msg_warning:nnn{gzt}{issue-number-needed}{number} } % \end{macrocode} % % If not specified as ×\issuesetup×'s key-value options, issue's month and % year are computed from issue number (which defaults to % ×\c_@@_first_issue_month_int×). % % First, if ×month× or ×year× option is not used (one of the previous % variables is $0$ hence their product is $0$ ($<1$)), we compute the issue % age in months, useful for both month and year computation. % \begin{macrocode} \int_compare:nNnT {\g_@@_issue_month_int * \g_@@_issue_year_int}<{1} { \int_new:N \g_@@_issue_age_in_months_int \int_gset:Nn \g_@@_issue_age_in_months_int { \c_@@_first_issue_month_int + \c_@@_interval_in_months_int * ( \int_use:N \g_@@_issue_number_int - \c_@@_first_issue_number_int ) } } % \end{macrocode} % % If the ×month× is not used, we replace ×\g_@@_issue_month_int× ($=0$) by its % computed value from the issue number. % \begin{macrocode} \int_compare:nNnT {\g_@@_issue_month_int}<{1} { \int_gset:Nn \g_@@_issue_month_int { \int_mod:nn { \g_@@_issue_age_in_months_int } { 12 } } } % \end{macrocode} % % If the ×year× is not used, we replace ×\g_@@_issue_year_int× ($=0$) by its % computed value from the issue number. % \begin{macrocode} \int_compare:nNnT {\g_@@_issue_year_int}<{1} { \int_new:N \g_@@_issue_age_in_years_int \int_gset:Nn \g_@@_issue_age_in_years_int { \int_div_truncate:nn { \g_@@_issue_age_in_months_int } { 12 } } \int_gset:Nn \g_@@_issue_year_int { \g_@@_issue_age_in_years_int + \c_@@_first_issue_year_int } } } % \end{macrocode} % \end{macro} % % \subsubsection{Special edition setup} % % \begin{macro}{\specialeditionsetup} % We define the command that lets the user specify the special edition setup. % \begin{macrocode} \NewDocumentCommand \specialeditionsetup { m } { \bool_gset_true:N \g_@@_special_edition_bool \bool_gset_true:N \g_@@_frontcover_without_minitoc_bool \keys_set:nn { gzt/specialedition } {#1} } % \end{macrocode} % \end{macro} % % \subsubsection{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} % \end{macro} % % \subsubsection{Journal setup} % % \begin{macro}{\journalsetup} % We define the command that lets the user specify the % journal setup. This setup is likely to be rarely changed. % \begin{macrocode} \NewDocumentCommand \journalsetup { m } { % \end{macrocode} % % Its keys are set (only ×publisher×, ×address×, ×phone×, ×fax×, ×email×, ×url× % and ×issn× are relevant here). % \begin{macrocode} \keys_set:nn { gzt/journalsetup } { #1 } } % \end{macrocode} % \end{macro} % % \subsubsection{Date of the president's message} % % \begin{macro}{\date} % We redefine the ×\date× for the date of the president's message. It takes % 3 arguments, each of them being a number: the day, the month and the year. % \begin{macrocode} \RenewDocumentCommand \date { mmm } { \newdate{@@_president_message_date}{#1}{#2}{#3} } % \end{macrocode} % \end{macro} % % \subsubsection{Interviews} % % \begin{macro}{\interviewee} % \begin{macrocode} % \NewDocumentCommand\interviewer { o m } { % } \NewDocumentCommand \interviewee { om } { \tl_if_empty:nT \g_@@_title_tl { \tl_gset:Nn \g_@@_title_tl { \c_@@_interview_title_string_tl \DeclareNameAlias{labelname}{default}\citeauthor{\c_@@_issue_bib_key_tl -art-\int_use:N \g_@@_articles_int} } } \IfNoValueF {#1} { \keys_set:nn { gzt/interviewees } { #1 } } \tl_set:Nn \l_@@_people_first_last_name_tl {#2} \_@@_people:nVVVVnxV {#2} {\g_@@_people_affiliation_tl} {\g_@@_people_email_tl} {\g_@@_people_minibio_tl} {\g_@@_people_photo_tl} {} {interviewee-art-\int_use:N \g_@@_articles_int} {} % \maketitle } % \end{macrocode} % \end{macro} % % \subsubsection{Miscellaneous} % % \begin{macro}{\academicsignature} % \begin{macrocode} \NewDocumentCommand \academicsignature { m } { \@@_display_academic_signature:n {#1} } % \end{macrocode} % \end{macro} % % \subsection{Definition of the footer of the pages} % % \begin{macro}{@@_date,\l_@@_uppercased_date_format} % Thanks to \Pkg{datetime}, we create the new date ×@@_date× and define the % date format to be used in the journal. As this date has to be displayed % uppercased, we first define a function that displays uppercased months. % \begin{macrocode} \cs_new_protected:Nn \_@@_uppercased_monthname_french:n { \@orgargctr=#1\relax \ifcase\@orgargctr \PackageError{datetime}{Invalid~ month~ number~ \the\@orgargctr}{ Month~ numbers~ should~ go~ from~ 1~ (janvier)~ to~ 12~ (decembre)} \or JANVIER \or F\'EVRIER \or MARS \or AVRIL \or MAI \or JUIN \or JUILLET \or AO\^UT \or SEPTEMBRE \or OCTOBRE \or NOVEMBRE \or D\'ECEMBRE \else \PackageError{datetime}{Invalid~ month~ number~ \the\@orgargctr}{ Month~ numbers~ should~ go~ from~ 1~ (janvier)~ to~ 12~ (decembre)} \fi } \newdate{@@_date} {1} {\int_use:N \g_@@_issue_month_int} {\int_use:N \g_@@_issue_year_int} \newdateformat{l_@@_uppercased_date_format}{ \_@@_uppercased_monthname_french:n {\THEMONTH}~ \THEYEAR } % \end{macrocode} % \end{macro} % % \subsection{(Re)Definition of document commands that identify the article} % % The names of the authors of the different articles will appear at several % places, and notably in the table of contents where first and middle names have to % be rendered as initials. Because automatically rendering initials is a complex task % already provided by \Pkg{biblatex}, we will create a \file{.bib} file % containing ×article× entries for each article of the \gzt{} journal. % % This can be done only at the beginning of the document, in order to know the % characteristics of the current issue. % \begin{macrocode} \AddToHook{begindocument}{ % \end{macrocode} % % We first create a token list containing the date of the current issue formated % as required by \pkg{biblatex} (the month issue needs a leading zero if it is % $<10$). % \begin{macrocode} \tl_new:N \g_@@_bib_issue_date_tl \tl_gset:Nn \g_@@_bib_issue_date_tl { \int_use:N \g_@@_issue_year_int- \int_compare:nNnT {\g_@@_issue_month_int}<{10} { 0 } \int_use:N \g_@@_issue_month_int } % \end{macrocode} % % We will populate the bibiliographic file of the current issue with the current % issue (as ×@periodical× entry type). % \begin{macrocode} \iow_now:Nx \g_@@_bib_out_iow { @periodical{\c_@@_issue_bib_key_tl,\iow_newline: issuetitle = {\exp_not:f\c_@@_journal_title_string_tl},\iow_newline: date = {\g_@@_bib_issue_date_tl},\iow_newline: number = \int_use:N \g_@@_issue_number_int,\iow_newline: % issn = {\l_@@_journal_issn_tl},\iow_newline: options = {skipbib}\iow_newline: } \iow_newline: } } % \end{macrocode} % % \begin{macro}{\title,\g_@@_title_tl} % The command for article's title is redefined: the full \enquote{article's % title} is store in ×\g_@@_title_tl× for later use. % \begin{macrocode} \tl_new:N \g_@@_title_tl \RenewDocumentCommand \title { o m } { % \end{macrocode} % We increment the ×\g_@@_articles_int× integer that counts the number of % articles in order to provide for each of them a unique bibliographic key. % \begin{macrocode} \int_gincr:N \g_@@_articles_int \tl_gclear:N \g_@@_short_title_tl \tl_gclear:N \g_@@_short_subtitle_tl \bool_gset_false:N \g_@@_title_not_in_article_bool \bool_gset_false:N \g_@@_title_not_in_toc_bool \bool_gset_false:N \g_@@_title_without_rule_bool \IfNoValueF {#1} { \keys_set:nn { gzt/title } { #1 } } \tl_gset:Nn \g_@@_title_tl {#2} \bool_if:nT \g_@@_tellme_rubric_bool { \tl_put_left:Nx \g_@@_title_tl {\c_@@_tellme_extra_title_string_tl} } \tl_if_empty:NT \g_@@_short_title_tl { \tl_gset_eq:NN \g_@@_short_title_tl \g_@@_title_tl } } % \end{macrocode} % \end{macro} % % \begin{macro}{\subtitle,\g_@@_subtitle_tl} % The command for article's subtitle is redefined: the full and short % \enquote{article's subtitles} are store in ×\g_@@_subtitle_tl× and % ×\g_@@_short_subtitle_tl× for later use. % \begin{macrocode} \tl_new:N \g_@@_subtitle_tl \NewDocumentCommand \subtitle { o m } { \bool_gset_false:N \g_@@_subtitle_not_in_toc_bool \IfNoValueF {#1} { \keys_set:nn { gzt/subtitle } { #1 } } \tl_gset:Nn \g_@@_subtitle_tl {#2} \tl_if_empty:NT \g_@@_short_subtitle_tl { \tl_gset_eq:NN \g_@@_short_subtitle_tl \g_@@_subtitle_tl } } % \end{macrocode} % \end{macro} % % \begin{macro}{\author} % The command for article's author (including its affiliation) is redefined. % \begin{macrocode} \RenewDocumentCommand \author { o m } { \IfNoValueF {#1} { \keys_set:nn { gzt/authors } { #1 } } \tl_gset:Nn \l_@@_people_first_last_name_tl {#2} \_@@_people:nVVVVnxV {#2} {\g_@@_people_affiliation_tl} {\g_@@_people_email_tl} {\g_@@_people_minibio_tl} {\g_@@_people_photo_tl} {} {author-art-\int_use:N \g_@@_articles_int} {\g_@@_people_webpage_tl} } % \end{macrocode} % \end{macro} % % We create a stream in order to write a bibliographic file % \begin{macrocode} \iow_new:N \g_@@_bib_out_iow \ior_new:N \g_@@_bib_out_ior \tl_new:N \g_@@_bib_out_tl \file_if_exist:nTF { \c_@@_issue_bib_path_string_tl } { \ior_open:Nn \g_@@_bib_out_ior { \c_@@_issue_bib_path_string_tl } \ior_str_map_inline:Nn \g_@@_bib_out_ior { \tl_gput_right:Nn \g_@@_bib_out_tl {#1 \par } } \ior_close:N \g_@@_bib_out_ior }{ \typeout{no file! rerun} } \iow_open:Nn \g_@@_bib_out_iow { \c_@@_issue_bib_path_string_tl } % \end{macrocode} % % \begin{environment}{abstract} % The environment for article's abstract or, more precisely, for its lead % paragraph (\enquote{chapô} in French typography) is (re)defined. % \begin{macrocode} \tl_new:N \g_@@_abstract_body_tl \NewDocumentEnvironment{abstract}{} {\CollectAbstract} {\endCollectAbstract} \NewEnviron{CollectAbstract} { \tl_gset_eq:NN \g_@@_abstract_body_tl \BODY } % \end{macrocode} % \end{environment} % % \subsection{Definition of a private main matter switch} % % A private ×\_@@_mainmatter_switch_tl× switch is defined in order to automatically insert % some settings. % \begin{macrocode} \tl_new:N \g_@@_mainmatter_switch_tl \tl_gset:Nn \g_@@_mainmatter_switch_tl { \bool_gset_false:N \g_@@_frontmatter_bool \bool_gset_true:N \g_@@_mainmatter_bool \SetParskip{\c_@@_mainmatter_parskip_skip} \pagestyle{@@_mainmatter_ps} } % \end{macrocode} % % \begin{macrocode} \tl_new:N \l_@@_article_acknowledgements_tl \cs_new_protected:Nn \@@_article_acknowledgements:n { \tl_set:Nn \l_@@_article_acknowledgements_tl { #1 } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \begin{macro}{\g_@@_about_frontcover} % We define the internal function than let us tell a few words about the front % cover. % \begin{macrocode} \tl_new:N \g_@@_about_frontcover_tl \bool_new:N \g_@@_credit_frontcover_bool \tl_new:N \g_@@_about_frontcover_string_tl \cs_new_protected:Nn \_@@_about_frontcover:nnn { \tl_if_empty:nF {#1}{ \bool_gset_true:N \g_@@_credit_frontcover_bool \_@@_people:nnnnnnnn {#1}{}{}{}{}{}{frontcovercredit}{} } \tl_gset:Nn \g_@@_about_frontcover_string_tl { #2 } \tl_gset:Nn \g_@@_about_frontcover_tl { #3 } } % \end{macrocode} % \end{macro} % % \begin{macro}{\_@@_rubric} % We define the internal function than defines and sets the layouts of rubrics. % \begin{macrocode} % \tl_new:N \g_@@_rubric_title_tl % \tl_new:N \g_@@_rubric_pictofile_tl % \tl_new:N \g_@@_rubric_abstract_tl \tl_new:N \g_@@_rubric_abstract_box_tl \tl_new:N \l_@@_rubric_head_text_box_tl % \cs_new_protected:Nn \_@@_rubric:nnn { \newpage \tl_gclear:N \g_@@_rubric_abstract_tl \tl_gclear:N \g_@@_rubric_header_tl \tl_gset:Nn \g_@@_rubric_title_tl {#2} \file_if_exist:nTF { #3.pdf }{ \tl_gset:Nn \g_@@_rubric_pictofile_tl {#3} }{ \tl_gset:Nn \g_@@_rubric_pictofile_tl {example-image} } \IfNoValueF {#1} { \keys_set:nn { gzt/rubric } { #1 } } \g_@@_mainmatter_switch_tl \bool_gset_true:N \g_@@_mainmatter_bool \clearpage % \end{macrocode} % % We reinitialize the items counter in this new rubric. % \begin{macrocode} \bool_gset_true:N \g_@@_rubric_bool \bool_gset_false:N \g_@@_interview_rubric_bool \bool_gset_false:N \g_@@_tellme_rubric_bool \bool_gset_false:N \g_@@_rearviewmirror_rubric_bool \bool_gset_false:N \g_@@_books_rubric_bool \bool_gset_false:N \g_@@_previous_article_with_bibliography_or_minibio_bool \bool_if:nF { \g_@@_for_authors_bool } { \int_zero:N \g_@@_item_in_rubric_int \phantomsection \par \bool_if:nF {\g_@@_special_edition_bool && !\g_@@_rubrics_in_toc_bool} { \addcontentsline{toc}{part}{\g_@@_rubric_title_tl} } \thispagestyle{@@_rubric_ps} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_main_geometry_tl} \tl_if_empty:NTF \g_@@_rubric_abstract_tl { \dim_set:Nn \l_@@_rubrics_head_text_width_dim { \c_@@_rubrics_head_text_no_abstract_width_dim } } { \dim_set:Nn \l_@@_rubrics_head_text_width_dim { \c_@@_rubrics_head_text_abstract_width_dim } \tl_gset:Nn \g_@@_rubric_abstract_box_tl { \begin{adjustbox}{valign=t,minipage=\c_@@_rubrics_abstract_width_dim} \raggedright \large \color{@@_rubric_abstract_color} \g_@@_rubric_abstract_tl \end{adjustbox} } } \tl_set:Nn \l_@@_rubric_head_text_box_tl { \begin{adjustbox}{valign=t,minipage=\l_@@_rubrics_head_text_width_dim} \mbox{} \checkoddpage \ifoddpage \raggedleft \else \raggedright \fi \color{@@_rubric_title_color} \fontsize{20}{20}\fontseries{bx}\fontshape{sc}\selectfont \g_@@_rubric_title_tl \end{adjustbox} } \noindent \mbox{} \checkoddpage \ifoddpage \hspace*{\c_@@_rubric_extra_xoffset_dim} \tl_if_empty:NF \g_@@_rubric_abstract_tl { \g_@@_rubric_abstract_box_tl } \hfill \l_@@_rubric_head_text_box_tl \hspace*{\c_@@_rubric_xoffset_dim} \else \hspace*{\c_@@_rubric_xoffset_dim} \l_@@_rubric_head_text_box_tl \tl_if_empty:NF \g_@@_rubric_abstract_tl { \hfill \g_@@_rubric_abstract_box_tl \hspace*{\c_@@_rubric_extra_xoffset_dim} } \fi } \afterpage{ \bool_gset_false:N \g_@@_rubric_bool } % \end{macrocode} % We suppress any spurious space in case of lack of ×%× at the end of the % public macros built on ×\_@@_rubric×: % \begin{macrocode} \ignorespaces % \end{macrocode} % End of the definition of the private command ×\_@@_rubric×: % \begin{macrocode} } % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*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, % \item the ×author× value of the bibliographic entry, % \end{enumerate} % of the current article. % \begin{macrocode} \tl_new:N \g_@@_article_bib_key_tl \tl_new:N \l_@@_people_first_last_names_tl \tl_new:N \g_@@_authors_first_last_names_tl \tl_new:N \l_@@_interviewees_first_last_names_tl \tl_new:N \g_@@_citeauthor_tl \tl_new:N \g_@@_citeinterviewee_tl % \tl_new:N \g_@@_blx_given_first_inits_tl \@ifpackagelater{biblatex}{2016/01/01}{ \tl_gset:Nn \g_@@_blx_given_first_inits_false_tl { \togglefalse{abx@bool@giveninits} } }{ \tl_set:Nn \g_@@_blx_given_first_inits_false_tl { \togglefalse{blx@firstinits} } } % \cs_new_protected:Nn \_@@_citeauthor_no_firstinits:n { \tl_gset:Nn \g_@@_citeauthor_tl { \DeclareNameAlias{labelname}{default} \group_begin: \g_@@_blx_given_first_inits_false_tl \citeauthor{#1} \group_end: } \cs_if_exist:cTF {texorpdfstring} { \texorpdfstring{\g_@@_citeauthor_tl}{} }{ \g_@@_citeauthor_tl } } % \@ifpackageloaded{hyperref}{ % \tl_gset:No \g_@@_citeauthor_tl { % \texorpdfstring{\citeauthor{\g_@@_article_bib_key_tl}}{} % } % }{ % \tl_gset:Nn \g_@@_citeauthor_tl { % \citeauthor{\g_@@_article_bib_key_tl} % } % } % \@ifpackageloaded{hyperref}{ % \tl_gset:No \g_@@_citeinterviewee_tl { % \texorpdfstring{\citeauthor{\g_@@_article_bib_key_tl}}{} % } % }{ % \tl_gset:Nn \g_@@_citeinterviewee_tl { % \citeinterviewee{\g_@@_article_bib_key_tl} % } % } % \end{macrocode} % % In the following ×\maketitle× document level macro, we will need to display % the list the authors of the current article, not as a comma separated list % (default ×\citeauthor× \pkg{biblatex}'s macro behavior), but as an itemized % list. For this, we create the ×\_@@_itemized_citeauthor× internal function % that will make use of ×\citeauthor× where ×\multinamedelim× and % ×\finalnamedelim× will be patched into ×\item×. As we don't want to globally % alter the behavior of these macros, we first store their original meanings in % some private control sequence: % \begin{macrocode} \cs_set_eq:NN \_@@_orig_multinamedelim \multinamedelim \cs_set_eq:NN \_@@_orig_finalnamedelim \finalnamedelim \cs_new_protected:Nn \_@@_itemized_citeauthor:n { \cs_set_eq:NN \multinamedelim \item \cs_set_eq:NN \finalnamedelim \multinamedelim \AtNextCitekey{\defcounter{maxnames}{100}} \begin{itemize}[label=\textbullet,noitemsep] \item \citeauthor{#1} \end{itemize} \cs_set_eq:NN \multinamedelim \_@@_orig_multinamedelim \cs_set_eq:NN \finalnamedelim \_@@_orig_finalnamedelim } % \end{macrocode} % % We declare two token list which will used in the next (re)definition. % \begin{macrocode} \tl_new:N \l_@@_bullet_and_rule_tl \tl_new:N \l_@@_authors_box_tl \tl_new:N \l_@@_abstract_box_tl \tl_new:N \l_@@_bullet_and_rule_odd_tl \tl_new:N \l_@@_bullet_and_rule_even_tl \tl_new:N \l_@@_title_box_tl % % \end{macrocode} % % \begin{macro}{\maketitle} % The command that \enquote{makes} the title is redefined. % \begin{macrocode} \RenewDocumentCommand \maketitle { s } { % \end{macrocode} % % % We add to this command some options that let us specify: % % \begin{itemize} % % \item whether the blue rule and bullet is displayed or not at the beginning of % % the article, % % \item whether the title is visible or not at the beginning of the article, % % \item whether the title is visible or not in the ToC. % % \end{itemize} % % \begin{macrocode} % \IfNoValueF {#1} % { % \keys_set:nn { gzt/maketitle } { #1 } % } % % \end{macrocode} % % We force all the previous floats to be processed before a new article starts % (this is already done in ×bibliography_minibiographies_acknowledgements× % environment but is repeated here if what is before provides floats but neither % bibliography, \textsc{cv} nor acknowledgements). % \begin{macrocode} \FloatBarrier % \end{macrocode} % % We increment the item number in the current rubric. % \begin{macrocode} \int_gincr:N \g_@@_item_in_rubric_int % \end{macrocode} % % We restore the original length for ×\parindent× that has been set to zero in % a possible previous \enquote{Interview} rubric. % \begin{macrocode} \dim_set_eq:NN \parindent \c_@@_original_parindent_dim % \end{macrocode} % % We reset all acronyms entries. % \begin{macrocode} \glsresetall % \end{macrocode} % % We reset to zero some counters at each new article. % \begin{macrocode} \setcounter{section}{0} \setcounter{figure}{0} \setcounter{table}{0} \setcounter{footnote}{0} % \setcounter{equation}{0} % \setcounter{theorem}{0} % \setcounter{theoreme}{0} \setcounter{corollary}{0} % \setcounter{corollaire}{0} \setcounter{conjecture}{0} \setcounter{proposition}{0} \setcounter{lemma}{0} % \setcounter{lemme}{0} \setcounter{axiom}{0} % \setcounter{axiome}{0} % \setcounter{definition}{0} \setcounter{remark}{0} % \setcounter{remarque}{0} \setcounter{example}{0} % \setcounter{exemple}{0} \setcounter{notation}{0} % \end{macrocode} % % We store the unique bibliographic key of the current article in the % ×\g_@@_article_bib_key_tl× token list. % \begin{macrocode} \tl_gset:Nn \g_@@_article_bib_key_tl { \c_@@_issue_bib_key_tl -art- \int_use:N \g_@@_articles_int } % \end{macrocode} % % We will populate the bibiliographic file of the current issue with the current % article (title, author(s) and a fixed part giving by the issue number, journal % title and date). % % Then, we iterate through each row of the authors database in order to get % a token list containing the (list of the) author(s) of the current article % formated as required by \pkg{biblatex} (\enquote{Last1, First1 [and Last2, % First2 [and ...]]}). % \begin{macrocode} \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{author-art-\int_use:N \g_@@_articles_int}]{people}{ \l_@@_people_first_last_name_tl=first-last-name ,\l_@@_people_role_tl=role }{ \tl_if_in:NnT \l_@@_people_role_tl { author } { \DTLiffirstrow{ \tl_put_right:Nx \l_@@_people_first_last_names_tl {\exp_not:V\l_@@_people_first_last_name_tl} }{ \tl_put_right:Nx \l_@@_people_first_last_names_tl {~ and~ \exp_not:V\l_@@_people_first_last_name_tl} } } } \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{interviewee-art-\int_use:N \g_@@_articles_int}]{people}{ \l_@@_people_first_last_name_tl=first-last-name ,\l_@@_people_role_tl=role }{ \tl_if_in:NnT \l_@@_people_role_tl { interviewee } { \DTLiffirstrow{ \tl_put_right:Nx \l_@@_people_first_last_names_tl {\exp_not:V\l_@@_people_first_last_name_tl} }{ \tl_put_right:Nx \l_@@_people_first_last_names_tl {~ and~ \exp_not:V\l_@@_people_first_last_name_tl} } } } % \end{macrocode} % % We now populate the bibiliographic file. % \begin{macrocode} \tl_if_empty:NF \g_@@_title_tl { \iow_now:Nx \g_@@_bib_out_iow { @article{ \g_@@_article_bib_key_tl, \iow_newline: title={\exp_not:V\g_@@_title_tl}, \iow_newline: \tl_if_empty:NF \g_@@_subtitle_tl { subtitle={\exp_not:V\g_@@_subtitle_tl}, \iow_newline: } \tl_if_eq:NNF { \g_@@_short_title_tl } { \g_@@_title_tl } { shorttitle={\exp_not:V\g_@@_short_title_tl}, \iow_newline: } \tl_if_empty:NF \l_@@_people_first_last_names_tl { author={\exp_not:V\l_@@_people_first_last_names_tl}, \iow_newline: } options={skipbib}, \iow_newline: crossref = {\c_@@_issue_bib_key_tl} } \iow_newline: } } % \tl_set:Nn \l_@@_bullet_and_rule_odd_tl { \begin{tikzpicture}[remember~ picture,overlay] \draw[fill=@@_circlerule_color,draw=@@_circlerule_color,line~ width=0.7mm] ( [xshift=-\c_@@_innermargin_dim-\c_@@_potential_layoutoffset_dim]0,0 -| current~ page.west ) -- (\linewidth,0); \fill[@@_circlerule_color] (\linewidth-2\pgflinewidth,0) circle [radius=2.75mm]; \end{tikzpicture} } \tl_set:Nn \l_@@_bullet_and_rule_even_tl { \begin{tikzpicture}[remember~ picture,overlay] \draw[fill=@@_circlerule_color,draw=@@_circlerule_color,line~ width=0.7mm] (0,0 -| current~ page.east) -- (0,0); \fill[@@_circlerule_color] (0,0) circle [radius=2.75mm]; \end{tikzpicture} } \tl_set:Nn \l_@@_title_box_tl { \bool_if:NF {\g_@@_invisible_titles_bool} { \noindent % \bool_show:N \g_@@_title_not_in_article_bool \hspace*{18mm} \begin{adjustbox}{minipage=\linewidth-18mm,valign=t} \raggedright \color{@@_article_title_color} \fontsize{20}{25}\selectfont \bfseries \g_@@_title_tl \tl_if_empty:NF \g_@@_subtitle_tl { \par \g_@@_subtitle_tl } \phantomsection \par } \end{adjustbox} } \dim_gset:Nn \g_@@_abstract_box_width_dim {0.75\linewidth} % \bool_if:nT { \tl_if_empty_p:N \l_@@_people_first_last_names_tl } % { % \dim_gset:Nn \g_@@_abstract_box_width_dim {\linewidth} % } \tl_set:Nn \l_@@_abstract_box_tl { \begin{adjustbox}{minipage=\g_@@_abstract_box_width_dim,max~ width=\g_@@_abstract_box_width_dim,valign=t} \mbox{} \tl_if_exist:NT \g_@@_abstract_body_tl { \raggedright \bfseries \color{@@_article_abstract_color} \g_@@_abstract_body_tl } \end{adjustbox} } \tl_set:Nn \l_@@_authors_box_tl { \bool_if:NF {\g_@@_invisible_titles_bool} { \begin{adjustbox}{minipage=0.3\linewidth,min~ width=0.3\linewidth,valign=t} } \bool_if:nTF { \tl_if_empty_p:N \l_@@_people_first_last_names_tl || \g_@@_interview_rubric_bool } { \mbox{} } { \color{@@_people_color} \bool_if:NF {\g_@@_invisible_titles_bool} { \_@@_itemized_citeauthor:n {\g_@@_article_bib_key_tl} } } \bool_if:NF {\g_@@_invisible_titles_bool} { \end{adjustbox} } } \bool_if:nTF { \int_compare_p:nNn { \g_@@_item_in_rubric_int } = { 1 } } { \mbox{} \par \bool_if:nTF { \tl_if_empty_p:N \g_@@_rubric_abstract_tl }{ \xleaders\vbox { \bigskip } \vskip\bigskipamount }{ \xleaders\vbox { \smallskip } \vskip\smallskipamount } } { \bool_if:NTF {\g_@@_previous_article_with_bibliography_or_minibio_bool} { \xleaders\vbox { \mbox{} \par \medskip } \vskip\medskipamount } { \xleaders\vbox { \mbox{} \par \smallskip } \vskip\smallskipamount } } \bool_gset_false:N \g_@@_previous_article_with_bibliography_or_minibio_bool % \end{macrocode} % % \begin{macrocode} %\hypersetup{pdftitle=\g_@@_short_title_tl,pdfauthor=\l_@@_people_first_last_names_tl} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % We fix some of the PDF's metadata . % \begin{macrocode} \bool_if:NT {\g_@@_for_authors_bool} { \hypersetup{ pdftitle=\g_@@_short_title_tl, pdfauthor=\l_@@_people_first_last_names_tl } } % \end{macrocode} % % Here, we put the \pkg{TikZ}'s picture of the \enquote{bullet and rule} % (contained in the ×\l_@@_bullet_and_rule_tl× token list) in a ×\vbox× that % follows a ×\cleaders× that makes the whole vanishes at pages boundaries % (cf. \url{https://tex.stackexchange.com/a/31615/18401}). % \begin{macrocode} \bool_if:nF { \g_@@_for_authors_bool } { \bool_if:NF {\g_@@_title_without_rule_bool} { % \xleaders\vbox { % \bigskip % } % \vskip\bigskipamount \noindent \checkoddpage \ifoddpage \l_@@_bullet_and_rule_odd_tl \else \l_@@_bullet_and_rule_even_tl \fi \bigskip } } \par \nopagebreak[4] % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \begin{macrocode} \nocite {\g__gzt_article_bib_key_tl} \bool_if:NTF {\g_@@_title_not_in_toc_bool} { \bookmark[page=\thepage,level=chapter]{\g_@@_short_title_tl} }{ \addcontentsline{toc}{chapter}{ \tl_if_empty:NTF \g_@@_short_title_tl { \g_@@_title_tl }{ \g_@@_short_title_tl } \bool_if:NF {\g_@@_subtitle_not_in_toc_bool} { \bool_if:nF { \tl_if_empty_p:N \g_@@_short_subtitle_tl || \g_@@_interview_rubric_bool || \g_@@_rearviewmirror_rubric_bool }{ \c_space_tl\textendash{}\c_space_tl\g_@@_short_subtitle_tl } } \bool_if:nF { \tl_if_empty_p:N \l_@@_people_first_last_names_tl || \g_@@_interview_rubric_bool || \g_@@_rearviewmirror_rubric_bool }{ \textsl{ \cs_if_exist:cTF {texorpdfstring} { \texorpdfstring{ \c_space_tl\textendash{}\c_space_tl\citeauthor{\g_@@_article_bib_key_tl} }{} }{ \c_space_tl\textendash{}\c_space_tl\citeauthor{\g_@@_article_bib_key_tl} } } } } } \bool_if:NF {\g_@@_title_not_in_article_bool} { \l_@@_title_box_tl \normalsize \nopagebreak[3] \bool_if:nF { \tl_if_empty_p:N \g_@@_abstract_body_tl && ( \tl_if_empty_p:N \l_@@_people_first_last_names_tl || \g_@@_interview_rubric_bool || \g_@@_rearviewmirror_rubric_bool ) }{ \par \bigskip \bigskip \large \mbox{} \checkoddpage \ifoddpage \l_@@_abstract_box_tl \hspace*{11mm} \l_@@_authors_box_tl \else \hspace*{-.85\c_@@_outermargin_dim} \l_@@_authors_box_tl \hspace*{11mm} \l_@@_abstract_box_tl \fi } } \tl_gclear:N \g_@@_title_tl \tl_gclear:N \g_@@_subtitle_tl \tl_gclear:N \g_@@_abstract_body_tl \normalsize \bigskip \tl_if_empty:NF \g_@@_abstract_body_tl % { % \tl_if_empty:NF \l_@@_people_first_last_names_tl % { % \bigskip % } % } { \bigskip } \bool_if:nT \g_@@_interview_rubric_bool { % \end{macrocode} % % We set ×\parindent× to zero in \enquote{Interview} rubric. % \begin{macrocode} \dim_zero:N \parindent % \tl_if_empty:NF \l_@@_people_photo_tl % { % \begin{adjustbox}{center} % \includegraphics[height=50mm]{\l_@@_people_photo_tl} % \end{adjustbox} % } } \color{@@_default_text_color} \IfBooleanF {#1} { \bool_if:nF { \g_@@_multicols_bool || \g_@@_rearviewmirror_rubric_bool } { \begin{multicols}{2} } } } % \end{macrocode} % \end{macro} % % We load the file where acronyms are defined. % \begin{macrocode} \file_if_exist:nT { \c_@@_acronyms_file_string_tl } { \AddToHook{begindocument/before}{\loadglsentries{\c_@@_acronyms_file_string_tl}} } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % In case of ×forauthors× option, we close the ×multicols× environment in case % it isn't (which happens if neither ×\printbibliography× nor % ×\printauthorsdetails× is used). This should fix issue % \url{https://github.com/dbitouze/gzt/issues/36}. % \begin{macrocode} \bool_if:nT { \g_@@_for_authors_bool } { \AddToHook{enddocument}{ \bool_if:NT {\g_@@_multicols_bool} { \end{multicols} } } } % \end{macrocode} % % We load the configuration file (only for the issue's class), which has to be % located in the \TeX{} search path: at least one such a file is provided by the % class and located in the same directory as the class file. This file is loaded % at the end of preamble instead of begin of the document in order some settings % needed in preamble are taken in account. % \begin{macrocode} \AddToHook{begindocument/before}{ \file_if_exist_input:nF {\c_@@_configuration_file_string_tl} { \msg_error:nn { gzt } { configuration-file-missing } } } % \end{macrocode} % % We make use of \pkg{etoc} to perform the special layout of the table of % contents. For convenience, it is included in a (long)table (from % \Pkg{longtable}) and the following code mainly comes from the \pkg{etoc}'s % documentation. % \begin{macrocode} \@ifpackageloaded{etoc}{ \newif\ifShowPartPageInToc % used before \part{Livres} % cf etoc manual section Typesetting the TOC as a table % we use ×\unexpanded× rather than more cumbersome but Knuthian ×\toks× registers \newtoks\toctabletok \newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands only once #2 #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} \newcommand*\PreparePart{ \edef\toctablepiece { \ExceptFirstPart {\noexpand\\[-1.5mm]} \unexpanded{ \protect\leavevmode\color{@@_rubric_in_toc_color}% \scshape\fontseries{bx}\selectfont } \unexpanded\expandafter{\etocthelinkedname}& % \ifShowPartPageInToc \unexpanded{\bfseries% \protect\leavevmode\color{@@_rubric_in_toc_color}% } \unexpanded\expandafter{\etocthelinkedpage} % \fi \noexpand\\} \gdef\ExceptFirstPart ##1{##1} } \newcommand*\PrepareChapter{ \edef\toctablepiece {\begingroup \unexpanded{\small\color{@@_article_in_toc_color}} \unexpanded\expandafter{\etocthelinkedname}\endgroup& \unexpanded{\color{@@_article_in_toc_color}\small} \unexpanded\expandafter{\etocthelinkedpage} \noexpand\\[1mm]} } \etocsetstyle{part}{}{} {\PreparePart \appendtotok\toctabletok\toctablepiece} {} \etocsetstyle{chapter}{}{} {\PrepareChapter \appendtotok\toctabletok\toctablepiece} {} \etocsettocstyle { \setlength\LTleft{\c_zero_dim} \setlength\LTright{\c_zero_dim} \gdef\ExceptFirstPart ##1{} \toctabletok {\hypersetup{hidelinks} \begin{longtable}{ @{\extracolsep{\fill}}p{115mm}@{\quad}!{\color{@@_rule_in_toc_color}\vrule width 0.2mm}@{}r@{}} } } {\global\toctabletok\expandafter{ \the\toctabletok\end{longtable} } } }{} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsection{Special tools common to the editorial, the table of contents and the % president message} % % We create an internal function that displays the box containing the issue % number, with possible image on its left, followed below by an arbitrary text % with a reflection effect. % \begin{macrocode} \tl_new:N \g_@@_boxed_issue_number_tl \tl_gset:Nn \g_@@_boxed_issue_number_tl { \tcbox{\Large\No\g_@@_issue_number_int} } \tl_new:N \l_@@_boxed_issue_number_title_tl \cs_new_protected:Nn \@@_boxed_issue_number:nn { \noindent \raisebox{\baselineskip}{ \tl_if_empty:nF {#1} { \makebox[\c_zero_dim][r]{ % \hspace*{\l_@@_thumbnail_width_dim} \begin{adjustbox}{valign=t} \includegraphics[width=\l_@@_thumbnail_width_dim]{#1} \end{adjustbox} } } \bool_if:NTF {\g_@@_special_edition_bool} { \tl_set:Nn \l_@@_boxed_issue_number_title_tl {\c_@@_short_special_edition_string_tl} }{ \tl_set:Nn \l_@@_boxed_issue_number_title_tl {\No\int_use:N\g_@@_issue_number_int} } \begin{adjustbox}{valign=t} \begin{tcolorbox}[ enhanced, title=\l_@@_boxed_issue_number_title_tl,%\int_use:N \g_@@_issue_number_int, fonttitle=\Large, colback=white, sharp~ corners=all, height=33mm, boxrule=\c_zero_dim, % frame~ hidden, attach~ boxed~ title~ to~ top~ left, tikznode~ boxed~ title={minimum~ width=\c_@@_boxed_issue_number_width_dim}, boxed~ title~ style={ size=minimal, height=\c_@@_boxed_issue_number_height_dim, center~ upper, before={}, colback=@@_boxed_issue_number_bg_color, sharp~ corners=all, frame~ hidden, valign=center, } ] \@@_reflected_text:n { #2 } \end{tcolorbox} \end{adjustbox} } \par } % \end{macrocode} % % \begin{macrocode} \cs_new_protected:Nn \_@@_before_frontmatter_stuff: { \bool_gset_true:N \g_@@_frontmatter_bool \cleardoublepage \pagestyle{@@_frontmatter_ps} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_front_matter_geometry_tl} } \cs_new_protected:Nn \_@@_after_frontmatter_stuff: { \color{@@_default_text_color} \normalsize \clearpage \bool_gset_false:N \g_@@_frontmatter_bool } % \end{macrocode} % % \begin{macrocode} \cs_new_protected:Nn \_@@_before_editorial_presidentmessage:nn { \_@@_before_frontmatter_stuff: {} \@@_boxed_issue_number:nn {#1}{#2} \color{@@_frontmatter_text_color} \fontsize{11}{13.6}\selectfont } \cs_new_protected:Nn \_@@_after_editorial_presidentmessage: { \justifying \bigskip \par } % \end{macrocode} % % \subsection{Displaying the editorial} % % We create an internal function that displays the editorial. % \begin{macrocode} \cs_new_protected:Nn \_@@_before_display_editorial:n { \_@@_before_editorial_presidentmessage:nn {}{#1} } \cs_new_protected:Nn \_@@_after_display_editorial: { \_@@_after_editorial_presidentmessage: {} \hspace*{\fill} \bool_if:NTF {\g_@@_special_edition_bool} { \AtNextCitekey{\defcounter{maxnames}{100}} \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -editorinchief- 1} }{ \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{editorinchief}]{people}{ \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} } } \_@@_after_frontmatter_stuff: {} } \cs_new_protected:Nn \_@@_display_editorial:n { \_@@_before_display_editorial:n {#1} \file_if_exist_input:nF {\c_@@_editorial_file_string_tl} { \msg_error:nn { gzt } { editorial-file-missing } } \_@@_after_display_editorial: {} } \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 { \tl_set_eq:NN \g_@@_editorial_heading_tl \g_@@_special_edition_editorial_heading_tl } } \NewDocumentCommand \editorial { O{\g_@@_editorial_heading_tl} } { \bool_if:NF {\g_@@_for_authors_bool} { \_@@_display_editorial:n {#1} } } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \subsection{Displaying the table of contents} % % We create an internal function that displays the table of contents. % \begin{macrocode} \cs_new_protected:Nn \_@@_display_toc: { \_@@_before_frontmatter_stuff: {} \@@_boxed_issue_number:nn {\g_@@_frontcover_image_file_tl}{\c_@@_toc_string_tl} \phantomsection \hypertarget{@@_toc}{} \bool_if:NTF {\g_@@_special_edition_bool} { \bookmark[dest=@@_toc,level=chapter]{\c_@@_toc_string_tl} }{ \bookmark[dest=@@_toc,level=part]{\c_@@_toc_string_tl} } \etocsettocdepth.toc{chapter} \tableofcontents \the\toctabletok \_@@_after_frontmatter_stuff: {} } \NewDocumentCommand \gzttableofcontents {} { \bool_if:NF {\g_@@_for_authors_bool} { \_@@_display_toc: {} } } % \end{macrocode} % % \subsection{Displaying the mini table of contents of the front cover} % % We create an internal function that displays the president's message. % \begin{macrocode} \tl_new:N \g_@@_frontcover_minitoc_tl \tl_new:N \l_@@_minitoc_label_tl \cs_new_protected:Nn \_@@_frontcover_minitoc:n { \tl_gset:Nn \g_@@_frontcover_minitoc_tl {#1} } \NewDocumentCommand \minitoc { O{} m } { \keys_set:nn { gzt/minitoc } { #1 } \_@@_frontcover_minitoc:n {#2} } % \newlist{@@_minitoc_list}{itemize}{1} \setlist[@@_minitoc_list]{itemsep=2ex,label=\textcolor{@@_cover_itemize_label_color}\textbullet} % \NewDocumentEnvironment{minitoclist}{} { \cs_set_eq:NN \_@@_orig_item \item \RenewDocumentCommand \item { s O{} }{ \tl_set:Nn \l_@@_minitoc_label_tl {##2} \_@@_orig_item\textbf{##2} \IfBooleanT {##1} { \c_@@_minitoc_rubric_title_separator_string_tl } } \begin{@@_minitoc_list} }{ \end{@@_minitoc_list} \cs_set_eq:NN \item \_@@_orig_item } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsection{Displaying the president's message} % % We create an internal function that displays the president's message. % \begin{macrocode} \cs_new_protected:Nn \_@@_before_display_presidentmessage: { \_@@_before_editorial_presidentmessage:nn {\c_@@_smf_logo_file_string_tl}{\c_@@_president_message_string_tl} \phantomsection \par \addcontentsline{toc}{part}{\g_@@_smf_short_string_tl} \addcontentsline{toc}{chapter}{\c_@@_president_message_string_tl} } \cs_new_protected:Nn \_@@_after_display_presidentmessage: { \_@@_after_editorial_presidentmessage: {} \hspace*{\fill} \c_@@_president_message_date_string_tl \displaydate{@@_president_message_date} \\[1.5mm] \hspace*{\fill} \@@_display_people_by_role:n { president } ,\c_space_tl \c_@@_president_signatory_string_tl \_@@_after_frontmatter_stuff: {} } \cs_new_protected:Nn \_@@_display_president_message: { \_@@_before_display_presidentmessage: {} \file_input:n {\c_@@_president_message_file_string_tl} \_@@_after_display_presidentmessage: {} } \NewDocumentCommand \presidentmessage {} { \bool_if:NF {\g_@@_for_authors_bool} { \_@@_display_president_message: {} } } % \end{macrocode} % % \subsection{Chapter, sections, etc. customization} % % Thanks to \Pkg{titlesec}, the chapter, section, subsection and subsubsection % formats are customized. % % \begin{description} % \item[Chapter] has a \enquote{block} shape, is typeset in huge and bold face, % without any number, with a null distance between the (missing) number and % the title, with a title in enforced lower case but small caps. % \begin{macrocode} \titleformat{\chapter} [block] {\Huge\bfseries} {} {\c_zero_dim} {\scshape} % \end{macrocode} % % \item[Section] has a \enquote{frame} shape, is typeset in bold face, left % justified and in color, with number typeset in huge, with a negative % distance between the number and the title, with a title in 12.5pt. % \begin{macrocode} \titleformat{\section} { \raggedright \bfseries \color{@@_section_color} } {\fontsize{20}{15}\selectfont\thesection.\enspace} {-3pt} {\fontsize{13}{15}\selectfont} % \end{macrocode} % % \item[Subsection:] % \begin{macrocode} \titleformat{\subsection} % [frame] { \fontsize{11}{16}\selectfont \bfseries \color{@@_subsection_color} } {\thesubsection\ \textendash{}\ } {\c_zero_dim} {} % \end{macrocode} % % \item[Subsubsection:] % \begin{macrocode} \titleformat{\subsubsection} % [frame] { \fontsize{11}{16}\selectfont \bfseries \color{@@_subsubsection_color} } {} {\c_zero_dim} {} % \end{macrocode} % \end{description} % % \subsection{First pages} % % At begin of the document, we automatically : % \begin{itemize} % \item set the graphic path, % \item set the page grid if the corresponding option has been passed, % \item display the front cover and the inside front cover. % \end{itemize} % % \begin{macrocode} \AddToHook{begindocument}{ \graphicspath{{\c_@@_issue_images_path_string_tl//}{../\c_@@_issue_images_path_string_tl//}} % \glsdisablehyper \g_@@_mainmatter_switch_tl % \bool_gset_false:N \g_@@_frontmatter_bool % \bool_gset_true:N \g_@@_mainmatter_bool % \SetParskip{\c_@@_mainmatter_parskip_skip} % \pagestyle{@@_mainmatter_ps} \exp_after:wN\newgeometry\exp_after:wN{\c_@@_main_geometry_tl} } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \begin{macrocode} \AddToHook{begindocument}{ \dim_if_exist:NTF \g_@@_pagegrid_dim { \pagegridsetup{ enable, step=\g_@@_pagegrid_dim } }{ \pagegridsetup{ disable } } % \bool_if:NTF {\g_@@_for_authors_bool} { % \thispagestyle{empty} % \includegraphics{gzt-logo} % \hfill % \includegraphics[height=22.5mm]{\c_@@_smf_logo_file_string_tl} % \par % \vfill % \begin{adjustbox}{valign=c,minipage=\linewidth} % \Large % \c_@@_preliminary_version_string_tl % \end{adjustbox} % \vfill % \newpage % }{ % \bool_if:NF {\g_@@_inside_pages_bool} { % \g_@@_display_frontcover_tl % \g_@@_display_inside_frontcover_tl % } % } \bool_if:NF {\g_@@_for_authors_bool} { \bool_if:NF {\g_@@_inside_pages_bool} { \g_@@_display_frontcover_tl \bool_if:NTF {\g_@@_coverpage_bool} { \AddToHook{begindocument/end}{\end{document}} }{ \g_@@_display_inside_frontcover_tl } } } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsection{Page styles} % % Thanks to \Pkg{titleps} loaded by \pkg{titlesec}'s ×pagestyles× option, we define % some page styles. % % \subsubsection{Common tools} % % Here, we define some tools shared by sevral pages styles. % % The background footer: % \begin{macrocode} \tl_new:N \g_@@_background_footer_tl \tl_gset:Nn \g_@@_background_footer_tl { \draw [@@_footer_bg_color,fill] (current~ page.south~ west) rectangle ([yshift=\c_@@_footer_background_height_dim]current~ page.south~ east) ; } % \end{macrocode} % % The frontmatter head text: % \begin{macrocode} \tl_new:N \l_@@_frontmatter_head_text_tl \tl_set:Nn \l_@@_frontmatter_head_text_tl { \bool_if:NTF {\g_@@_special_edition_bool} { \g_@@_special_edition_title_tl }{ \includegraphics[scale=1]{gzt-logo} } } % \end{macrocode} % % The rubric head text: % \begin{macrocode} % \tl_new:N \l_@@_rubric_head_text_tl % \tl_set:Nn \l_@@_rubric_head_text_tl { % \color{@@_rubric_head_text_color} % \fontsize{20}{20}\fontseries{bx}\fontshape{sc}\selectfont % \g_@@_rubric_title_tl % } % \end{macrocode} % % The frontmatter page head rule: % \begin{macrocode} \tl_new:N \g_@@_frontmatter_page_headrule_tl \tl_gset:Nn \g_@@_frontmatter_page_headrule_tl { \draw [@@_headrule_color,line~ width=\c_@@_header_line_width_dim] ([yshift=\c_@@_header_line_yshift_dim]current~ page~ header~ area.south~ west -| current~ page.north~ west) -- ([yshift=\c_@@_header_line_yshift_dim]current~ page~ header~ area.south~ east -| current~ page.north~ east) ; } % \end{macrocode} % % The frontmatter page head text: % \begin{macrocode} \tl_new:N \g_@@_frontmatter_headtext_tl \tl_gset:Nn \g_@@_frontmatter_headtext_tl { \mbox{} \checkoddpage \ifoddpage \node[ anchor=north~ east, align=center, fill=white, inner~ xsep=3.5mm, outer~ sep=\c_zero_dim, ] at ([ xshift=\c_@@_frontmatter_headtext_o_xshift_dim, yshift=\c_@@_frontmatter_headtext_yshift_dim ]current~ page.north~ east) { \Large \bool_if:NT {\g_@@_special_edition_bool} { \c_@@_short_special_edition_string_tl \c_space_tl } \l_@@_frontmatter_head_text_tl } ; \else \node[ anchor=north~ west, align=center, fill=white, inner~ xsep=3.5mm, outer~ sep=\c_zero_dim, ] at ([ xshift=\c_@@_frontmatter_headtext_e_xshift_dim, yshift=\c_@@_frontmatter_headtext_yshift_dim ]current~ page.north~ west) { \Large \bool_if:NT {\g_@@_special_edition_bool} { \c_@@_short_special_edition_string_tl \c_space_tl } \l_@@_frontmatter_head_text_tl } ; \fi } % \end{macrocode} % % The mainmatter odd page head rule: % \begin{macrocode} \tl_new:N \g_@@_mainmatter_oddpage_headrule_tl \tl_gset:Nn \g_@@_mainmatter_oddpage_headrule_tl { \draw [@@_headrule_color,line~ width=\c_@@_header_line_width_dim] ([yshift=\c_@@_header_line_yshift_dim]current~ page~ header~ area.south~ east) -- ([yshift=\c_@@_header_line_yshift_dim]current~ page~ header~ area.south~ west -| current~ page.north~ west) ; } % \end{macrocode} % % The mainmatter even page head rule: % \begin{macrocode} \tl_new:N \g_@@_mainmatter_evenpage_headrule_tl \tl_gset:Nn \g_@@_mainmatter_evenpage_headrule_tl { \draw [@@_headrule_color,line~ width=\c_@@_header_line_width_dim] ([yshift=\c_@@_header_line_yshift_dim]current~ page~ header~ area.south~ west) -- ([yshift=\c_@@_header_line_yshift_dim]current~ page~ header~ area.south~ east -| current~ page.north~ east) ; } % \end{macrocode} % % We momentarily switch to a \enquote{normal} category code régime in which the % colon (:) is treated as \enquote{letter}, which is necessary where (here % \pkg{TikZ} and \pkg{tcolorbox}) code makes use of colon. % \begin{macrocode} \ExplSyntaxOff \tcbuselibrary{breakable,skins,hooks,xparse,theorems,listingsutf8} \usetikzlibrary{babel,fadings,positioning,calc} % \end{macrocode} % % We create a \enquote{minus} version of each of the previous styles for floats % with number (and keywords) but without any caption: in such cases, the number % should not be followed by any separator. % \begin{macrocode} \tcbset{ new/blend into/tables-/.style={ use counter*=table, /tcb/code={\appto\tcb@new@colopt{,before title={\fnum@table}}}}, new/blend into/figures-/.style={ use counter*=figure, /tcb/code={\appto\tcb@new@colopt{,before title={\fnum@figure}}}}, } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \begin{macrocode} \newcommand\gzt@arcthroughthreepoints[4][] { \coordinate (middle1) at ($(#2)!.5!(#3)$); \coordinate (middle2) at ($(#3)!.5!(#4)$); \coordinate (aux1) at ($(middle1)!1!90:(#3)$); \coordinate (aux2) at ($(middle2)!1!90:(#4)$); \coordinate (center) at ($(intersection of middle1--aux1 and middle2--aux2)$); \filldraw[fill=white,draw=@@_headrule_color,line width=0.25mm,#1] let \p1=($(#2)-(center)$), \p2=($(#4)-(center)$), \n0={veclen(\p1)}, \n1={atan2(\y1,\x1)}, \n2={atan2(\y2,\x2)}, \n3={\n2>\n1?\n2:\n2+360} in (#2) arc(\n1:\n3:\n0); % \foreach \p in {#2,#3,#4,center} % \fill[red] (\p) circle(2pt); } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \begin{macrocode} \ExplSyntaxOn % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % The rubric page head rule: % \begin{macrocode} \tl_new:N \g_@@_rubric_page_head_tl \tl_gset:Nn \g_@@_rubric_page_head_tl { \bool_if:nF { \g_@@_for_authors_bool } { \tikz[remember~ picture,overlay] { \path (current~ page.north~ west |- current~ page~ header~ area.south~ west) coordinate (_@@_pwest); \path (current~ page.north~ east |- current~ page~ header~ area.south~ east) coordinate (_@@_peast); \draw [@@_headrule_color,line~ width=\c_@@_header_line_width_dim] ([yshift=\c_@@_header_line_yshift_dim]_@@_pwest) -- ([yshift=\c_@@_header_line_yshift_dim]_@@_peast) ; \tl_if_empty:NF \g_@@_rubric_abstract_tl { \mbox{} \checkoddpage \ifoddpage \coordinate (@@_A) at ( [ xshift=\c_@@_xshift_arccircle_A_dim, yshift=\c_@@_yshift_arccircle_A_dim ] current~ page.north~ west ); \coordinate (@@_B) at ( [ xshift=\c_@@_xshift_arccircle_B_dim, yshift=\c_@@_yshift_arccircle_B_dim ] current~ page.north~ west ); \coordinate (@@_C) at ( [ xshift=\c_@@_xshift_arccircle_C_dim, yshift=\c_@@_yshift_arccircle_C_dim ] current~ page.north~ west ); \gzt@arcthroughthreepoints{@@_A}{@@_B}{@@_C}; \else \coordinate (@@_A) at ( [ xshift=-\c_@@_xshift_arccircle_A_dim, yshift=\c_@@_yshift_arccircle_A_dim ] current~ page.north~ east ); \coordinate (@@_B) at ( [ xshift=-\c_@@_xshift_arccircle_B_dim, yshift=\c_@@_yshift_arccircle_B_dim ] current~ page.north~ east ); \coordinate (@@_C) at ( [ xshift=-\c_@@_xshift_arccircle_C_dim, yshift=\c_@@_yshift_arccircle_C_dim ] current~ page.north~ east ); \gzt@arcthroughthreepoints{@@_C}{@@_B}{@@_A}; \fi } } } } % \end{macrocode} % % \subsubsection{Front cover page style} % % \begin{macrocode} \newpagestyle{@@_frontcover_ps}[]{ \sethead {} { \adjustbox{stack=c}{ {\Large \c_@@_frontcover_header_string_tl }\\[7mm] \adjustbox{scale=2.08}{ \huge \bool_if:NT {\g_@@_special_edition_bool} { \color{@@_generic_dark_color} } \l_@@_frontmatter_head_text_tl } } } {} \setfoot {} {} {} } % \end{macrocode} % % \subsubsection{Inside front cover page style} % % \begin{macrocode} \newpagestyle{@@_inside_frontcover_ps}[]{ \sethead [ \tikz[remember~ picture,overlay] { \g_@@_frontmatter_page_headrule_tl \g_@@_frontmatter_headtext_tl } ] [] [] {} { \tikz[remember~ picture,overlay] { \g_@@_frontmatter_page_headrule_tl \g_@@_frontmatter_headtext_tl } } {} \setfoot [] [ \c_@@_footer_string_tl ] [] {} { \c_@@_footer_string_tl } {} } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsubsection{Front matter page style} % % \begin{macrocode} \newpagestyle{@@_frontmatter_ps}[]{ \widenhead*{\c_@@_front_matter_extra_innermargin_dim}{\c_@@_front_matter_extra_outermargin_dim} \sethead [ \tikz[remember~ picture,overlay] { \g_@@_frontmatter_page_headrule_tl \g_@@_frontmatter_headtext_tl } ] [] [] {} { \tikz[remember~ picture,overlay] { \g_@@_frontmatter_page_headrule_tl \g_@@_frontmatter_headtext_tl } } {} \setfoot [\c_@@_footer_size_font_tl\thepage] [ \c_@@_footer_string_tl ] [ %\c_@@_compiled_string_tl ] { %\c_@@_compiled_string_tl } { \c_@@_footer_string_tl } {\c_@@_footer_size_font_tl\thepage} } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \subsubsection{Rubric first page style} % % \begin{macrocode} \newpagestyle{@@_rubric_ps}[]{ \widenhead{\c_zero_dim}{\c_zero_dim} \sethead [ ] [ ] [ \g_@@_rubric_page_head_tl \bool_if:nF { \g_@@_for_authors_bool } { \adjustbox{raise={\c_@@_header_yshift_dim}{\height},lap=-\c_@@_header_xshift_dim-\linewidth}{ \includegraphics[width=\c_@@_pictogram_width_dim]{\g_@@_rubric_pictofile_tl} } } ] { \g_@@_rubric_page_head_tl } {} { \bool_if:nF { \g_@@_for_authors_bool } { \adjustbox{raise={\c_@@_header_yshift_dim}{\height},lap=\c_@@_header_xshift_dim}{ \includegraphics[width=\c_@@_pictogram_width_dim]{\g_@@_rubric_pictofile_tl} } } } \setfoot [\c_@@_footer_size_font_tl\thepage] [ \c_@@_footer_string_tl ] [] {} { \c_@@_footer_string_tl } {\c_@@_footer_size_font_tl\thepage} } % \end{macrocode} % % \subsubsection{Advertisement page style} % % \begin{macrocode} \newpagestyle{@@_advertisement_ps}[]{ \widenhead{\c_zero_dim}{\c_zero_dim} \sethead [ \tikz[remember~ picture,overlay] {\g_@@_mainmatter_evenpage_headrule_tl} ] [ \adjustbox{raise={\c_@@_header_yshift_dim}{\height}}{ \large\bfseries\scshape\color{@@_head_text_color}\c_@@_advertisement_string_tl } ] [] {} { \adjustbox{raise={\c_@@_header_yshift_dim}{\height}}{ \large\bfseries\scshape\color{@@_head_text_color}\c_@@_advertisement_string_tl } } { \tikz[remember~ picture,overlay] {\g_@@_mainmatter_oddpage_headrule_tl} } \setfoot [\c_@@_footer_size_font_tl\thepage] [ \c_@@_footer_string_tl ] [] {} { \c_@@_footer_string_tl } {\c_@@_footer_size_font_tl\thepage} } % \end{macrocode} % % \subsubsection{For blank pages added in order to ensure document total page % numbers is a multiple of four} % % \begin{macrocode} \newpagestyle{@@_blank_pages_ps}[]{ \sethead {} {} {} \setfoot [\c_@@_footer_size_font_tl\thepage] [ \c_@@_footer_string_tl ] [] {} { \c_@@_footer_string_tl } {\c_@@_footer_size_font_tl\thepage} } % \end{macrocode} % % \subsubsection{Inside back cover page style} % % \begin{macrocode} \newpagestyle{@@_inside_backcover_ps}[]{ \sethead [ \tikz[remember~ picture,overlay] { \g_@@_frontmatter_page_headrule_tl \g_@@_frontmatter_headtext_tl } ] [] [] {} { \tikz[remember~ picture,overlay] { \g_@@_frontmatter_page_headrule_tl \g_@@_frontmatter_headtext_tl } } {} \setfoot [] [ \c_@@_footer_string_tl ] [] {} { \c_@@_footer_string_tl } {} } % \end{macrocode} % % \subsubsection{Back cover page style} % % \begin{macrocode} \newpagestyle{@@_backcover_ps}[]{ \sethead {} {} {} \setfoot {} {} {} } % \end{macrocode} % % We define crop marks. % \begin{macrocode} % \bool_if:NT {\g_@@_for_printer_bool} { % \AddEverypageHook{ % \tikz[remember~ picture,overlay] { % \draw ([yshift=\c_@@_potential_layoutoffset_dim]current~ page.south~ west) -- +(0.25,0); % \draw ([xshift=\c_@@_potential_layoutoffset_dim]current~ page.south~ west) -- +(0,0.25); % %% lower right % \draw ([yshift=\c_@@_potential_layoutoffset_dim]current~ page.south~ east) -- +(-0.25,0); % \draw % ( % [xshift=-\c_@@_potential_layoutoffset_dim-\c_@@_potential_bindingoffset_dim] % current~ page.south~ east % ) -- +(0,0.25); % %% upper left % \draw ([yshift=-\c_@@_potential_layoutoffset_dim]current~ page.north~ west) -- +(0.25,0); % \draw ([xshift=\c_@@_potential_layoutoffset_dim]current~ page.north~ west) -- +(0,-0.25); % %% upper right % \draw ([yshift=-\c_@@_potential_layoutoffset_dim]current~ page.north~ east) -- +(-0.25,0); % \draw % ( % [xshift=-\c_@@_potential_layoutoffset_dim-\c_@@_potential_bindingoffset_dim] % current~ page.north~ east) -- +(0,-0.25 % ); % } % } % } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % We draw a gray background at the bottom of each page, but the first one. % \begin{macrocode} \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 } } % } } % \end{macrocode} % % \subsubsection{Main matter page style} % % \begin{macrocode} \newpagestyle{@@_mainmatter_ps}[]{ \widenhead{\c_zero_dim}{\c_zero_dim} \sethead [ \tikz[remember~ picture,overlay] {\g_@@_mainmatter_evenpage_headrule_tl} ] [ \adjustbox{raise={\c_@@_header_yshift_dim}{\height}}{ \large\bfseries\scshape\color{@@_head_text_color} \tl_if_empty:NTF \g_@@_rubric_header_tl { \g_@@_rubric_title_tl }{ \g_@@_rubric_header_tl } } ] [] {} { \bool_if:nF { \g_@@_rearviewmirror_rubric_bool || \g_@@_books_rubric_bool }{ \adjustbox{raise={\c_@@_header_yshift_dim}{\height}}{ \bfseries\color{@@_head_text_color}\g_@@_short_title_tl } } } { \tikz[remember~ picture,overlay] {\g_@@_mainmatter_oddpage_headrule_tl} } \bool_if:nTF { \g_@@_for_authors_bool } { \setfoot [\c_@@_footer_size_font_tl\thepage] [ \c_@@_footer_string_tl ] [\c_@@_compiled_string_tl] {\c_@@_compiled_string_tl} { \c_@@_footer_string_tl } {\c_@@_footer_size_font_tl\thepage} }{ \setfoot [\c_@@_footer_size_font_tl\thepage] [ \c_@@_footer_string_tl ] [] {} { \c_@@_footer_string_tl } {\c_@@_footer_size_font_tl\thepage} } } % \end{macrocode} % % We define a public macro for possible acknowledgements to be used by author(s) % of articles. % \begin{macrocode} \NewDocumentCommand \acknowledgements { +m } { \@@_article_acknowledgements:n {#1} } % \end{macrocode} % % \begin{macro}{\printminibios} % We define the public command which displays % \begin{itemize} % \item the affiliation(s), email(s) and minibiographie(s) of the authors, % \item the acknowledgements if not empty. % \end{itemize} % \begin{macrocode} \NewDocumentCommand \printminibios { s } { \bool_if:NT {\g_@@_multicols_bool} { \end{multicols} } % \end{macrocode} % We force all the previous floats to be processed no later on the page % following the beginning of the bibliography, \textsc{cv} or % acknowledgements. % \begin{macrocode} \FloatBarrier \nopagebreak[0] \IfBooleanTF {#1} { \tl_if_empty:NF \l_@@_article_acknowledgements_tl { \begin{_@@_minibiographies_acknowledgements_tcbox} } }{ \begin{_@@_minibiographies_acknowledgements_tcbox} \@@_display_people_by_role:n { author-art-\int_use:N \g_@@_articles_int } } \DTLsavelastrowcount{\_@@_authors_number} \tl_if_empty:NF \l_@@_article_acknowledgements_tl { \footnotesize \int_compare:nNnT {\_@@_authors_number}>{0} { \par \bigskip } \begin{adjustbox}{valign=t,minipage=\linewidth} \color{@@_acknowledgements_color} \setlength{\parskip}{\c_@@_mainmatter_parskip_skip} \l_@@_article_acknowledgements_tl \end{adjustbox} } \bool_gset_true:N \g_@@_previous_article_with_bibliography_or_minibio_bool \IfBooleanTF {#1} { \tl_if_empty:NF \l_@@_article_acknowledgements_tl { \end{_@@_minibiographies_acknowledgements_tcbox} } }{ \end{_@@_minibiographies_acknowledgements_tcbox} } } % \end{macrocode} % \end{macro} % % \begin{macro}{\printbibliography} % The command for bibliography printing production is redefined in order to let % it silently: % \begin{itemize} % \item beforehand quit the multicolumn environment and enter in the % ×_@@_bibliography_tcbox× environment (which gives a special layout to % bibliographies, \textsc{cv} and acknowledgements), % \item afterwards quit the ×bibliography_minibiographies_acknowledgements× environment and enter in % the multicolumn environment. % \end{itemize} % \begin{macrocode} \cs_set_eq:NN \_@@_printbibliography \printbibliography \RenewDocumentCommand \printbibliography { s O{} } { \bool_if:NT {\g_@@_multicols_bool} { \end{multicols} } % \end{macrocode} % We force all the previous floats to be processed no later on the page % following the beginning of the bibliography, \textsc{cv} or % acknowledgements. % \begin{macrocode} % \afterpage{ \FloatBarrier % } \begin{_@@_bibliography_tcbox} \_@@_printbibliography[heading=subbibliography,resetnumbers,#2] \end{_@@_bibliography_tcbox} \nopagebreak[0] \IfBooleanTF {#1} { \printminibios* }{ \printminibios } } \cs_set_eq:NN \_@@_bibbycategory \bibbycategory \RenewDocumentCommand \bibbycategory { s O{} } { \bool_if:NT {\g_@@_multicols_bool} { \end{multicols} } % \end{macrocode} % We force all the previous floats to be processed no later on the page % following the beginning of the bibliography, \textsc{cv} or % acknowledgements. % \begin{macrocode} % \afterpage{ \FloatBarrier % } \begin{_@@_bibliography_tcbox} \defbibheading{bibliography}{% \section*{Références}} \printbibheading \_@@_bibbycategory[#2] \end{_@@_bibliography_tcbox} \nopagebreak[0] \IfBooleanTF {#1} { \printminibios* }{ \printminibios } } % \end{macrocode} % \end{macro} % % \subsection{Miscellaneous private commands specific to the journal} % % We create miscellaneous private commands specific to the journal. % % Command for centuries. % \begin{macrocode} \deftranslation[to=French]{_@@_century}{si\`ecle} \deftranslation[to=English]{_@@_century}{century} \deftranslation[to=French]{_@@_first}{\ier} \deftranslation[to=English]{_@@_first}{\up{st}\xspace} \deftranslation[to=French]{_@@_nth}{\ieme} \deftranslation[to=English]{_@@_nth}{\up{th}\xspace} \deftranslation[to=French]{_@@_bc}{avant~ J.-C} \deftranslation[to=English]{_@@_bc}{BC} \cs_new_protected:Nn \_@@_century:n { \textsc{ \int_to_roman:n {\int_abs:n {#1}} } \int_compare:nNnTF { \int_abs:n {#1} } > { 1 }{\translate{_@@_nth}}{\translate{_@@_first}} } \cs_new_protected:Nn \_@@_century_suffix:n { \translate{_@@_century} \int_compare:nNnT { #1 } < { 0 }{ \c_space_tl \translate{_@@_bc} % \end{macrocode} % In case of French language, we add a period just after \enquote{avant~ J.-C}, % but only if the character following the ×\century× macro is not a period % itself. % \begin{macrocode} \IfLanguageName {french}{ \@ifnextchar. { }{ .\xspace } } }{ } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \subsection{Miscellaneous public commands specific to the journal} % % We create miscellaneous public commands specific to the journal. % % \begin{macro}{\advertisement} % For a (not full page) advertisement. % \begin{macrocode} \cs_new_protected:Nn \_@@_advertisement:nn { \vfill \begin{center} \dim_set:Nn \fboxsep {\c_zero_dim} \fbox{ \includegraphics[max~ size={\linewidth}{\textheight},#1]{#2} } \end{center} \vfill } \NewDocumentCommand \advertisement { O{} m } { \_@@_advertisement:nn {#1}{#2} } % \end{macro} % % \begin{macro}{\fullpageadvertisement} % For a full page advertisement. % \begin{macrocode} \cs_new_protected:Nn \_@@_fullpageadvertisement:nn { \newpage \thispagestyle{@@_advertisement_ps} \begin{minipage}[c][\textheight][c]{\textwidth} \centering\includegraphics[max~ size={\linewidth}{\textheight},#1]{#2} \end{minipage} } \NewDocumentCommand \fullpageadvertisement { O{} m } { \_@@_fullpageadvertisement:nn {#1}{#2} } % \end{macro} % % \begin{macro}{\aboutfrontcover} % For a few words about the front cover. % \begin{macrocode} \NewDocumentCommand \aboutfrontcover { O{} O{\c_@@_about_frontcover_string_tl} m } { \_@@_about_frontcover:nnn {#1}{#2}{#3} } % \end{macrocode} % \end{macro} % % \begin{macrocode} \cs_new_protected:Nn \_@@_prepare_rubric:nnn { \newpage \tl_gclear:N \g_@@_rubric_abstract_tl \tl_gset:Nn \g_@@_rubric_title_tl {#2} \tl_gset:Nn \g_@@_rubric_pictofile_tl {#3} \IfNoValueF {#1} { \keys_set:nn { gzt/rubric } { #1 } } \_@@_rubric:nnn {\g_@@_rubric_abstract_tl}{\g_@@_rubric_title_tl}{\g_@@_rubric_pictofile_tl} } % \end{macrocode} % % \begin{macro}{\rubric} % For a \enquote{free} rubric. In case of special edition, we set the rubric % title first as empty and then as the special edition's title plus a constant % string. Otherwise, this title is freely set. % \begin{macrocode} \NewDocumentCommand \rubric {O{}mm} { \bool_if:NTF {\g_@@_special_edition_bool} { \_@@_rubric:nnn {#1}{#2}{#3} \tl_gset:Nn \g_@@_rubric_title_tl { \c_@@_short_special_edition_string_tl \c_space_tl \g_@@_special_edition_title_tl } }{ \_@@_rubric:nnn {#1}{#2}{#3} } } % \end{macrocode} % \end{macro} % % \begin{macro}{\mathematics,\dossier,\community,\interview,\teaching,\parity,\tellme,\information,\rearviewmirror,\tribute,\books,\latextips,\forum,\moralreport} % \begin{macrocode} \NewDocumentCommand \mathematics {O{}} { \_@@_rubric:nnn {#1}{\c_@@_mathematics_rubric_string_tl}{\c_@@_mathematics_pictogram_file_name_tl} } \NewDocumentCommand \dossier {O{}} { \_@@_rubric:nnn {#1}{\c_@@_dossier_rubric_string_tl}{\c_@@_dossier_pictogram_file_name_tl} } \NewDocumentCommand \community {O{}} { \_@@_rubric:nnn {#1}{\c_@@_community_rubric_string_tl}{\c_@@_hands_pictogram_file_name_tl} } \NewDocumentCommand \interview {O{}} { \_@@_rubric:nnn {#1}{\c_@@_interview_rubric_string_tl}{\c_@@_interview_pictogram_file_name_tl} \bool_gset_true:N \g_@@_interview_rubric_bool } \NewDocumentCommand \teaching {O{}} { \_@@_rubric:nnn {#1}{\c_@@_teaching_rubric_string_tl}{\c_@@_teaching_pictogram_file_name_tl} } \NewDocumentCommand \parity {O{}} { \_@@_rubric:nnn {#1}{\c_@@_parity_rubric_string_tl}{\c_@@_parity_pictogram_file_name_tl} } \NewDocumentCommand \tellme {O{}} { \_@@_rubric:nnn {#1}{\c_@@_tellme_rubric_string_tl}{\c_@@_tellme_pictogram_file_name_tl} \bool_gset_true:N \g_@@_tellme_rubric_bool } \NewDocumentCommand \information {O{}} { \_@@_rubric:nnn {#1}{\c_@@_information_rubric_string_tl}{\c_@@_information_pictogram_file_name_tl} } \NewDocumentCommand \rearviewmirror {O{}} { \_@@_rubric:nnn {#1}{\c_@@_rearviewmirror_rubric_string_tl}{\c_@@_rearviewmirror_pictogram_file_name_tl} \bool_gset_true:N \g_@@_rearviewmirror_rubric_bool } \NewDocumentCommand \tribute {O{}} { \_@@_rubric:nnn {#1}{\c_@@_tribute_rubric_string_tl}{\c_@@_tribute_pictogram_file_name_tl} } \NewDocumentCommand \books {O{}} { \_@@_rubric:nnn {#1}{\c_@@_books_rubric_string_tl}{\c_@@_books_pictogram_file_name_tl} \bool_gset_true:N \g_@@_books_rubric_bool \vspace{1.5\c_@@_book_review_frontcover_extend_dim} } \NewDocumentCommand \latextips {O{}} { \_@@_rubric:nnn {#1}{\c_@@_latex_rubric_string_tl}{} } \NewDocumentCommand \forum {O{}} { \_@@_rubric:nnn {#1}{\c_@@_forum_rubric_string_tl}{\c_@@_forum_pictogram_file_name_tl} } \NewDocumentCommand \moralreport {O{}} { \_@@_rubric:nnn {#1}{\c_@@_moralreport_rubric_string_tl}{\c_@@_smf_logo_file_string_tl} } % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \begin{macro}{\email} % \begin{macrocode} \DeclareCiteCommand{\citeinterviewee}{}{ \printnames{interviewee} } {}{} \DeclareCiteCommand{\citereviewer}{}{ \g_@@_blx_given_first_inits_false_tl \printnames{reviewer} } {}{} \DeclareCiteCommand{\citereviewerinstitution}{}{ \printlist{reviewerinstitution} } {}{} \DeclareCiteCommand{\_@@_cite_public_price}{}{ \printfield{publicprice} } {}{} \DeclareCiteCommand{\_@@_cite_smf_price}{}{ \printfield{smfprice} } {}{} \DeclareCiteCommand{\citecopublisher}{}{ \printlist{copublisher} } {}{} \DeclareCiteCommand{\citefrenchabstract}{}{ \printfield{frenchabstract} } {}{} \DeclareCiteCommand{\_@@_cite_englishabstract}{}{ \printfield{englishabstract} } {}{} % \end{macrocode} % \end{macro} % % \begin{macro}{\email} % For typesetting an email. % \begin{macrocode} \NewDocumentCommand \email {m} { \_@@_email:n {#1} } % \end{macro} % % \begin{macro}{\question} % We define a private function for the questions/answers of interviews. % \begin{macrocode} \cs_new_protected:Nn \_@@_question:n { \int_incr:N \g_@@_question_int { \par \bigskip \color{@@_question_color} #1 \par } } \NewDocumentCommand \question {m} { \_@@_question:n {#1} } % \end{macrocode} % \end{macro} % % \begin{macro}{\smf} % \begin{macrocode} \NewDocumentCommand \smf { s } { \IfBooleanTF {#1} { \g_@@_smf_string_tl } { \g_@@_smf_short_string_tl } \xspace } % \end{macrocode} % \end{macro} % % \begin{macro}{\surname} % \begin{macrocode} \DeclareExpandableDocumentCommand \surname { m } { \textsc{#1} } % \end{macrocode} % \end{macro} % % \begin{macro}{\cad,\Cad} % \begin{macrocode} \NewDocumentCommand \cad { s } { \IfBooleanTF {#1} { \c_@@_cad_string_tl } { \c_@@_cad_short_string_tl } \xspace } \NewDocumentCommand \Cad { s } { \IfBooleanTF {#1} { \c_@@_Cad_string_tl } { \c_@@_Cad_short_string_tl } \xspace } % \end{macrocode} % \end{macro} % % \begin{macro}{\gzt} % \begin{macrocode} \NewDocumentCommand \gzt { s } { \IfBooleanTF {#1} { \l_@@_gzt_string_tl } { \l_@@_gzt_short_string_tl } \xspace } % \end{macrocode} % \end{macro} % % \begin{macro}{\gztcl,\gztarticle} % \begin{macrocode} \NewDocumentCommand \gztcl {} { \textsl{\texttt{\c_@@_class_name_tl}} \xspace } \NewDocumentCommand \gztarticlecl {} { \textsl{\texttt{\c_@@_article_class_name_tl}} \xspace } % \end{macrocode} % \end{macro} % % \begin{macro}{\century} % \begin{macrocode} \NewDocumentCommand \century { s m } { \_@@_century:n {#2} \IfBooleanTF {#1} { \int_compare:nNnT { #2 } < { 0 }{ \_@@_century_suffix:n {#2} } } { \_@@_century_suffix:n {#2} } } % \end{macrocode} % \end{macro} % % \begin{macro}{\aside} % \begin{macrocode} \NewDocumentCommand \aside { s m } { \IfBooleanTF {#1} { \c_@@_aside_string_tl{}~ #2 } { \c_@@_aside_string_tl{}~ #2~ \c_@@_aside_string_tl } } % \end{macrocode} % \end{macro} % % \begin{macrocode} \tl_new:N \g_@@_font_designer_text_tl \cs_new_protected:Nn \@@_font_designer_text:n { \tl_gset:Nn \g_@@_font_designer_text_tl { #1 } } \NewDocumentCommand \fontdesignertext {m} { \_@@_font_designer_text:n {#1} } % \end{macrocode} % % \begin{macrocode} \tl_new:N \g_@@_printer_text_tl \cs_new_protected:Nn \@@_printer_text:n { \tl_gset:Nn \g_@@_printer_text_tl { #1 } } \NewDocumentCommand \printertext {m} { \_@@_printer_text:n {#1} } % \end{macrocode} % % Command for epigraphs. % \begin{macrocode} \renewcommand{\textflush}{flushepinormal} \cs_set_eq:NN \_@@_orig_epigraph \epigraph \cs_new_protected:Nn \_@@_epigraph:nn { \bool_if:nTF { \tl_if_empty_p:n {#2} } { \setlength{\epigraphrule}{\c_zero_dim} } { \setlength{\epigraphrule}{.4\p@} } \_@@_orig_epigraph{ \emph{ \enquote{ #1 } } } { #2 } } \RenewDocumentCommand \epigraph { m m } { \_@@_epigraph:nn {#1}{#2} } % \end{macrocode} % % \begin{macrocode} \NewDocumentEnvironment{authorsinstructions}{} { \begingroup \tcbverbatimwrite{\c_@@_authors_instructions_file_tl} } { \endtcbverbatimwrite \endgroup } % \end{macrocode} % % We provide some public commands and environments to be used for displaying % (mainly \LaTeX{}) code. % \begin{macrocode} \lstdefinestyle{@@_lst_style}{ escapechar=+, language=[LaTeX]TeX, texcsstyle=*\bfseries, breaklines=true, basicstyle=\normalfont\ttfamily, columns=flexible, inputencoding=utf8/latin1 } \DeclareTotalTCBox{\gztverb}{ v }{verbatim,blank,fuzzy~ halo=0pt~ with~ @@_generic_dark_color!8}{#1} % \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, breakable, #1 } % \end{macrocode} % % We provide public environments ×gztfigure× and ×gzttable× (and friends) for % the usual floats. Their layout is based upon \pkg{tcolorbox} features. % \begin{macrocode} \DeclareTColorBox[blend~ into=figures]{gztfigure}{ O{} } { ,width=\linewidth ,blend~ before~ title=dash ,_@@_tcb_floats_style ,#1 ,code={\ifdefempty{\kvtcb@title}{\tcbset{_@@_tcb_notitle}}{}} } \DeclareTColorBox[blend~ into=figures]{gztfigure*}{ O{} } { ,float* ,blend~ before~ title=dash ,width=\textwidth ,_@@_tcb_floats_style ,#1 ,code={\ifdefempty{\kvtcb@title}{\tcbset{_@@_tcb_notitle}}{}} } \DeclareTColorBox[blend~ into=tables]{gzttable}{ O{} } { ,width=\linewidth ,blend~ before~ title=dash ,_@@_tcb_floats_style ,#1 ,code={\ifdefempty{\kvtcb@title}{\tcbset{_@@_tcb_notitle}}{}} } \DeclareTColorBox[blend~ into=tables]{gzttable*}{ O{} } { ,float* ,blend~ before~ title=dash ,width=\textwidth ,_@@_tcb_floats_style ,#1 ,code={\ifdefempty{\kvtcb@title}{\tcbset{_@@_tcb_notitle}}{}} } \DeclareTColorBox{gztframe}{ O{} } { ,width=\linewidth ,_@@_tcb_floats_style ,#1 } \DeclareTColorBox{gztframe*}{ O{} } { ,float* ,width=\textwidth ,_@@_tcb_floats_style ,#1 } % \DeclareTColorBox{gztscan}{ O{} } { #1 ,width=\textwidth ,_@@_tcb_floats_style ,size=tight } \DeclareTColorBox{_@@_book_review}{ O{} } { overlay~ unbroken~ and~ first={ \node at (frame.north~ west) { { \makebox[\c_zero_dim][l]{ \adjustbox{raise={-2\height+\c_@@_book_review_frontcover_extend_dim}{\c_zero_dim}}{ \includegraphics[width=20mm]{\g_@@_bookreview_frontcover_tl} } } } }; }, _@@_tcb_book_review_box_style, #1 } \DeclareTColorBox{_@@_bibliography_tcbox}{ O{} } { _@@_tcb_bibliography_style, #1 } \DeclareTColorBox{_@@_minibiographies_acknowledgements_tcbox}{ O{} } { _@@_tcb_minibiographies_acknowledgements_style, #1 } % \end{macrocode} % % We provide a public environment ×inset× for insets that has the same layout as % minibiographies and acknowledgements. Its layout is based upon \pkg{tcolorbox} % features. % \begin{macrocode} \DeclareTColorBox{inset}{ O{} } { _@@_tcb_minibiographies_acknowledgements_style, #1 } % \end{macrocode} % % We create a ×bookreview× environment for the book reviews. % \begin{macrocode} \NewDocumentEnvironment{bookreview}{ O{} m } { \keys_set:nn { gzt/bookreview } { #2 } \begin{_@@_book_review}[#1] \xpatchfieldformat{title}{mkbibemph}{textbf}{}{} \xpretonameformat{author}{\color{@@_people_color}}{}{} \g_@@_blx_given_first_inits_false_tl \noindent \parbox[][21.5mm][l]{\linewidth}{\fullcite{\g_@@_bookreview_bibkey_tl}} \tcblower }{ \begin{flushright} % \g_@@_reviewer_tl \bigskip \citereviewer{\g_@@_bookreview_bibkey_tl}\\ \citereviewerinstitution{\g_@@_bookreview_bibkey_tl} \end{flushright} % \vspace*{10mm} \mbox{} \end{_@@_book_review} } % \end{macrocode} % % \begin{macrocode} \DeclareTColorBox{_@@_book_advertisement}{ O{} } { _@@_tcb_book_advertisement_box_style, #1 } \DeclareTColorBox{_@@_inside_cover_tcb}{ O{} } { #1 } % \end{macrocode} % % We create a ×bookadvertisement× environment for the book advertisements. % \begin{macrocode} \NewDocumentCommand \bookadvertisement {O{} m} { \newpage{} \mbox{} \vfill \begin{_@@_book_advertisement}[#1] \fullcite{#2} \par \bigskip \tcblower \includegraphics[height=22.5mm]{\c_@@_smf_logo_file_string_tl} \par{} \smallskip \url{\l_@@_journal_url_tl} \end{_@@_book_advertisement} \vfill \newpage \bool_gset_false:N \g_@@_advertisement_bool \bool_gset_true:N \g_@@_mainmatter_bool } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % We create a variant of the ×\input× macro which cleans the local % customizations if any and, if necessary open and close the ×refsection× and % ×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} } \bool_if:NF { \g_@@_backcover_bool } { \tl_if_in:NnT { \c_@@_advertisement_directory_string_tl } { #1 } { \newpage \thispagestyle{@@_advertisement_ps} } } \inputfrom{#1}{#2} \bool_if:NT {\g_@@_multicols_bool} { \end{multicols} } \bool_if:NT {\g_@@_refsection_bool} { \end{refsection} } \cleancustomization } % \end{macrocode} % % 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 ×\AddToHook{enddocument}× and ×\preto\@enddocumenthook× should be used % instead (see \url{https://tex.stackexchange.com/q/240318/18401}). (Update % (2021-02-14): we now rely on the new ×\AddToHook{env/document/end}×.) (Update % (2021-12-16): we have to be more carefull with the hooks, see % \url{https://github.com/plk/biblatex/issues/1197}.) % \begin{macrocode} \DeclareHookRule{enddocument}{citations}{before}{biblatex} \bool_if:NF {\g_@@_coverpage_bool} { \bool_if:NF {\g_@@_inside_pages_bool} { \AddToHook{enddocument}[citations]{ \bool_gset_true:N \g_@@_backmatter_bool \g_@@_display_inside_backcover_tl \newpage \g_@@_display_backcover_tl } } } % \end{macrocode} % % If we don't ask the cover page (only), the document total page numbers should % be a multiple of four and we add the necessary and sufficient number of blank % pages if it isn't the case (code borrowed from % \url{https://tex.stackexchange.com/a/83498/18401}). % \begin{macrocode} \bool_if:NF {\g_@@_coverpage_bool} { \bool_if:nF { \g_@@_for_authors_bool } { \bool_if:nT { \g_@@_inside_pages_bool } { \AddToHook{enddocument}{ \prg_replicate:nn { \int_mod:nn { 4 - \int_mod:nn { \getpagerefnumber{LastPage} } { 4 } } { 4 } } { \thispagestyle{@@_blank_pages_ps}\null\clearpage } } } } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class-article> % \end{macrocode} % % \begin{macrocode} \ProcessKeysOptions { gztarticle } % \end{macrocode} % % \begin{macrocode} \AddToHook{enddocument}{ \bool_if:NT {\g_@@_multicols_bool} { \end{multicols} } \bool_if:NT {\g_@@_refsection_bool} { \end{refsection} } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsection{Miscellaneous settings} % % We gather here miscellaneous settings. % % \subsubsection{Related to \texorpdfstring{\Pkg{pgfplots}}{pgfplots}} % % (French) Numbers format: % \begin{macrocode} \pgfplotsset{ /pgf/number~ format/.cd, use~ comma, 1000~ sep={\,}, min~ exponent~ for~ 1000~ sep=4 } % \end{macrocode} % % \subsubsection{Related to \texorpdfstring{\Pkg{biblatex}}{biblatex}} % % \begin{macrocode} \defbibheading{bibassection}[\bibname]{\section*{#1}} \renewcommand{\bibfont}{\normalfont\footnotesize} % \end{macrocode} % % As bibiliographic resource, we add the file of the current issue. % \begin{macrocode} \exp_after:wN\addbibresource\exp_after:wN{\c_@@_issue_bib_path_string_tl} % \end{macrocode} % % We create a name format that prints the initial(s) of the first name(s) before % last name of a cited author. % \begin{macrocode} \@ifpackagelater{biblatex}{2016/01/01}{ \DeclareNameFormat{giveninits-last}{ \nameparts{#1} \usebibmacro{name:given-family} {\namepartfamily} {\namepartgiveni} {\namepartprefix} {\namepartsuffix} \usebibmacro{name:andothers} } }{ \DeclareNameFormat{giveninits-last}{ \usebibmacro{name:first-last}{#1}{#4}{#5}{#7} \usebibmacro{name:andothers} } } \DeclareNameAlias{labelname}{giveninits-last} % \end{macrocode} % % We ensure the space between initial(s) and last name is unbreakable. % \begin{macrocode} \renewcommand*\bibnamedelimc{\addnbspace} \renewcommand*\bibnamedelimd{\addnbspace} % \end{macrocode} % % \begin{macrocode} \renewbibmacro{in:}{ \ifentrytype{article}{}{\printtext{\bibstring{in}\intitlepunct}}} \renewbibmacro*{journal}{ \iffieldundef{shortjournal} { \iffieldundef{journaltitle} {} { \printtext[journaltitle] { \printfield[titlecase]{journaltitle} \setunit{\subtitlepunct} \printfield[titlecase]{journalsubtitle} } } } {\printtext[journaltitle]{\printfield[titlecase]{shortjournal}}} } \renewbibmacro*{volume+number+eid}{ \printfield{volume} \setunit{\addcomma\c_space_tl} \printfield{number} \setunit{\addcomma\c_space_tl} \printfield{eid}} \DeclareFieldFormat[article]{volume}{\mkbibbold{#1}} \DeclareFieldFormat[book]{volume}{\mkbibbold{#1}} \DeclareFieldFormat[article]{number}{\bibstring{number}#1} \DeclareLanguageMapping{french}{gzt} % \end{macrocode} % % \subsubsection{Related to \texorpdfstring{\Pkg{kpfonts}}{kpfonts}} % % We replace the \pkg{kpfonts}' \enquote{mathfrak} by the one from % \enquote{eufrak}, as the former doesn't provide Euler Fraktur digits. % \begin{macrocode} \DeclareMathAlphabet\mathfrak{U}{euf}{m}{n} \SetMathAlphabet\mathfrak{bold}{U}{euf}{b}{n} % \end{macrocode} % % \subsubsection{Related to \texorpdfstring{\Pkg{draftwatermark}}{draftwatermark}} % % \begin{macrocode} \@ifpackageloaded{draftwatermark}{ \SetWatermarkColor{gray!10} \SetWatermarkFontSize{30mm} \SetWatermarkText{\text_uppercase:n{\c_@@_draftwatermark_string_tl}} }{ } % \end{macrocode} % % \subsubsection{Related to \texorpdfstring{\Pkg{TikZ}}{TikZ}} % % \begin{macrocode} \tikzset{ _@@_dots/.style={ line~ width=\c_@@_tikz_dot_diameter_dim, line~ cap=round, dash~ pattern=on~ 0pt~ off~ \c_@@_tikz_dot_spacing_dim }, _@@_tcb_segmentation_style/.style={ _@@_dots, draw=@@_dotfill_color, shorten~ >=~ \c_@@_tcb_left_dim+\c_@@_tcb_boxsep_dim, shorten~ <=~ \c_@@_tcb_left_dim+\c_@@_tcb_boxsep_dim, } } % \end{macrocode} % % \subsubsection{Related to \texorpdfstring{\Pkg{tcolorbox}}{tcolorbox}} % % We set some styles for % \begin{itemize} % \item the two public environments ×gztfigure(*)× and ×gzttable(*)× for the % usual floats, % \item the book reviews, % \item the book advertisements, % \item the inside frontcover, % \end{itemize} % whom layout is based upon \pkg{tcolorbox} features. % \begin{macrocode} \tcbset{ copyright/.style={ overlay={ \node[rotate=90,anchor=south~ west,font=\tiny] at (frame.south~ east) { \begin{minipage}[t]{\tcbtextheight} \copyright{}~ #1 \end{minipage} }; } } } \tcbset{ _@@_tcb_floats_style/.style={ enhanced ,every~ float=\centering ,coltitle=@@_generic_dark_color ,colbacktitle=@@_float_title_bg_color ,colback=white ,colframe=@@_float_frame_color ,center~ upper ,sharp~ corners=all ,boxrule=0.3mm } } \tcbset{ _@@_tcb_notitle/.style={ blend~ before~ title~ code={##1} ,title={\c_space_tl} } } \tcbset{ _@@_tcb_book_review_box_style/.style={ enhanced, colback=@@_book_review_frame_bg_color, breakable, use~ color~ stack, % height=50mm, boxrule=\c_zero_dim, sharp~ corners=all, skin=enhancedlast, leftupper=25mm, enlarge~ bottom~ finally~ by=-1mm, middle=4mm, segmentation~ style={_@@_tcb_segmentation_style} } } \tcbset{ _@@_tcb_book_advertisement_box_style/.style={ enhanced, colframe=@@_book_advertisement_frame_color, colback=@@_book_advertisement_bg_color, center~ lower, sharp~ corners=all, % skin=enhancedlast, % middle=4mm, lower~ separated=false, % segmentation~ style={_@@_tcb_segmentation_style} } } \tcbset{ _@@_tcb_inside_cover_style/.style={ % split=0.6, colback=@@_inside_frontcover_frame_bg_color, colbacktitle=@@_inside_frontcover_frame_bg_color, sharp~ corners=all, center~ title, coltitle=@@_inside_frontcover_frame_title_color, fonttitle=\bfseries\large, boxrule=\c_zero_dim, toptitle=3mm, bottomtitle=4mm, frame~ hidden, enhanced, height=\c_@@_layoutheight_dim-\c_@@_topmargin_inside_cover_dim-\c_@@_botmargin_dim, width=\c_@@_inside_cover_box_width_dim, middle=4mm, segmentation~ style={_@@_tcb_segmentation_style} }, _@@_tcb_inside_frontcover_style/.style={ _@@_tcb_inside_cover_style, enlarge~ left~ by=-\c_@@_inside_cover_offset_dim, }, _@@_tcb_inside_backcover_style/.style={ _@@_tcb_inside_cover_style, enlarge~ left~ by=\c_@@_inside_cover_offset_dim, } } \AddToHook{begindocument/before}{ \bool_if:NTF {\g_@@_special_edition_bool} { \tcbset{ _@@_tcb_inside_frontcover_style/.append~ style={ title=\c_@@_special_edition_editorial_board_string_tl }, _@@_tcb_inside_backcover_style/.append~ style={ notitle }, } }{ \tcbset{ _@@_tcb_inside_frontcover_style/.append~ style={ title=\c_@@_editorial_board_string_tl }, _@@_tcb_inside_backcover_style/.append~ style={ title=\file_if_exist:nT { \c_@@_authors_instructions_file_tl } { \c_@@_authors_instructions_string_tl } }, } } } \tcbset{ _@@_tcb_bibliography_style/.style={ colback=@@_bibliography_minibios_acknowledgements_bg_color, breakable, use~ color~ stack, boxrule=\c_zero_dim, sharp~ corners=all, enhanced } } \tcbset{ _@@_tcb_minibiographies_acknowledgements_style/.style={ colback=@@_bibliography_minibios_acknowledgements_bg_color, breakable, use~ color~ stack, boxrule=\c_zero_dim, extras~ unbroken~ and~ last={drop~ lifted~ shadow}, sharp~ corners=all, skin=enhancedlast, height~ fixed~ for=middle, } } \tcbset{ enlargepage~ flexible=\baselineskip, left=\c_@@_tcb_left_dim, boxsep=\c_@@_tcb_boxsep_dim, } % \end{macrocode} % % \subsubsection{Lists} % % We now set the lists layout in order to benefit from \Pkg{enumitem}'s features % and preserve the layout from \pkg{frenchb}. % \begin{macrocode} \setlist[1]{labelindent=\parindent} \setlist[itemize]{label=\textendash{}, nosep} \setlist{ labelwidth=\widthof{\textendash}, itemsep=0.4ex plus 0.2ex minus 0.2ex, parsep=0.4ex plus 0.2ex minus 0.2ex, topsep=0.8ex plus 0.4ex minus 0.4ex, partopsep=0.4ex plus 0.2ex minus 0.2ex, leftmargin=! } % \end{macrocode} % % \begin{macrocode} \setlist[description]{ font= \bool_if:nTF { \g_@@_books_rubric_bool || \g_@@_inside_frontcover_bool || \g_@@_inside_backcover_bool } { \color{black} }{ \color{@@_description_label_light_color} } \bfseries } % \end{macrocode} % % \subsubsection{Miscellaneous} % % We fix the \pkg{csquotes}' quotes for PDF strings. % \begin{macrocode} \DeclarePlainStyle{«~ }{~ »}{`}{'} % \end{macrocode} % % We change the default settings of the floats placement. % \begin{macrocode} \setcounter{topnumber}{3} \renewcommand{\topfraction}{0.8} % \end{macrocode} % % We change the default vertical space between text and footnotes. % \begin{macrocode} \addtolength{\skip\footins}{.25\baselineskip} % \end{macrocode} % % We change the default horizontal space between columns in multicolumn mode. % \begin{macrocode} \setlength{\columnsep}{7mm} % \end{macrocode} % % We change the way the section counter is displayed (the chapter should not appear). % \begin{macrocode} \renewcommand{\thesection}{\arabic{section}} % \end{macrocode} % % In case \Pkg{siunitx} is loaded, we make it follow the French rules. % \begin{macrocode} \@ifpackageloaded{siunitx}{ \sisetup{locale=FR} } % \end{macrocode} % % We change the color of the table rules. % \begin{macrocode} \arrayrulecolor{@@_arrayrule_color} % \end{macrocode} % % We change the floating table name (as translated by the \pkg{french-babel} % module from \Pkg{babel}) from \enquote{Table} to \enquote{Tableau}. % \begin{macrocode} \addto\captionsfrench{\def\tablename{{\scshape Tableau}}} % \end{macrocode} % % \subsection{Miscellaneous (re)definitions} % % We gather here miscellaneous redefinitions. % % \subsubsection{Vectors} % % Vectors, even written with ×\vec×, are typeset with \pkg{esvect}'s ×\vv×: % \begin{macrocode} \RenewDocumentCommand \vec { m } { \vv{#1} } % \end{macrocode} % % \begin{macro}{\usetikzlibrary} % The ×\usetikzlibrary× switch is redefined in order to get rid of the bug % reported here: \url{https://sourceforge.net/p/pgf/bugs/353/}. % \begin{macrocode} \cs_set_eq:NN \_@@_orig_usetikzlibrary \usetikzlibrary \RenewDocumentCommand \usetikzlibrary { m } { \shorthandoff{:} \_@@_orig_usetikzlibrary{#1} \shorthandon{:} % \begingroup % \NoAutoSpacing % \_@@_orig_usetikzlibrary{#1} % \endgroup } % \end{macrocode} % \end{macro} % % \subsubsection{Usual theorems and the like} % % Some usual theorems and the like are defined, thanks to \Pkg{thmtools}. First, % we define a private function ×\_@@_new_theorem× that defines: % \begin{enumerate} % \item a new (private, \pkg{thmtools}) theorem with 4 arguments: % \begin{enumerate} % \item possible additional options to the style ×_@@_tcb_alltheorems_style× % defined earlier for all \enquote{theorems}, % \item name of the (private) \pkg{thmtools} theorem, % \item French title for this theorem, % \item English title for this theorem. % \end{enumerate} % \item a public environment based on this private theorem with a the usual % syntax of \pkg{amsthm} theorems, except it has an optional argument for % possible additional options to the default styles (×theorem× or % ×definition×). % \end{enumerate} % % \begin{macro}{\_@@_bilingual} % \begin{macrocode} \cs_new_protected:Nn \_@@_bilingual:nnn { \deftranslation[to=French]{#1}{#2} \deftranslation[to=English]{#1}{#3} } % \end{macrocode} % \end{macro} % % \begin{macrocode} \cs_new_protected:Nn \_@@_new_theorem:nnnn { % \_@@_bilingual:nnn {#2}{#3}{#4} \deftranslation[to=French]{#2}{#3} \deftranslation[to=English]{#2}{#4} \declaretheorem[ #1, name=\translate{#2} ]{#2} \declaretheorem[ #1, name=\translate{#2}, numbered=no ]{#2*} } \cs_generate_variant:Nn \_@@_new_theorem:nnnn { nnVV } \declaretheoremstyle[spaceabove=3pt,notefont=\bfseries,bodyfont=\itshape]{theorem} \declaretheoremstyle[spaceabove=3pt,notefont=\bfseries,bodyfont=\normalfont]{definition} \declaretheoremstyle[spaceabove=3pt,bodyfont=\normalfont, qed=\ensuremath{\qedsymbol},headfont=\normalfont\itshape,numbered=no]{proof} % \end{macrocode} % % Then, we define a public command, similar to ×\newtheorem×, based on % ×\_@@_new_theorem×, that lets the user define his own theorems: % \begin{macrocode} \RenewDocumentCommand \newtheorem { O{} m } { \tl_clear:N \l_@@_newtheorem_style_tl \tl_clear:N \l_@@_newtheorem_frenchtitle_tl \tl_clear:N \l_@@_newtheorem_englishtitle_tl \tl_set:Nn \l_@@_newtheorem_englishtitle_tl { \text_titlecase:n {#2} } \tl_set:Nf \l_@@_newtheorem_frenchtitle_tl { \l_@@_newtheorem_englishtitle_tl } \tl_set:Nn \l_@@_newtheorem_style_tl { theorem } \IfNoValueF {#1} { \keys_set:nn { gzt/newtheorem } { #1 } } % \tl_if_eq:VVF { \l_@@_newtheorem_englishtitle_tl } { \MakeUppercase #2 } % { % \tl_if_eq:NNF { \l_@@_newtheorem_frenchtitle_tl } { \l_@@_newtheorem_englishtitle_tl } % { % \tl_set:Nf \l_@@_newtheorem_frenchtitle_tl { % \l_@@_newtheorem_englishtitle_tl % } % } % } \_@@_new_theorem:nnVV {style=\l_@@_newtheorem_style_tl} {#2} {\l_@@_newtheorem_frenchtitle_tl} {\l_@@_newtheorem_englishtitle_tl} } % \end{macrocode} % % Finally, we define some usual theorems: % \begin{macrocode} \newtheorem[frenchtitle=Th\'eor\`eme]{theorem} % \newtheorem[frenchtitle=Th\'eor\`eme,englishtitle=Theorem]{theoreme} \newtheorem[frenchtitle=Corollaire]{corollary} % \newtheorem[englishtitle=corollary]{corollaire} \newtheorem{conjecture} \newtheorem{proposition} \newtheorem[frenchtitle=Lemme]{lemma} % \newtheorem[englishtitle=Lemma]{lemme} \newtheorem[frenchtitle=Axiome]{axiom} % \newtheorem[englishtitle=Axiom]{axiome} % \newtheorem[style=definition,frenchtitle=D\'efinition]{definition} \newtheorem[style=definition,frenchtitle=Remarque]{remark} \newtheorem[style=definition,frenchtitle=Exemple]{example} \newtheorem[style=definition]{notation} % \let\proof\relax \newtheorem[style=proof,frenchtitle=Preuve]{proof} % \cs_new_protected:Nn \_@@_clone_theorem:nn { \NewDocumentEnvironment{#1}{} { \begin{#2} } { \end{#2} } \NewDocumentEnvironment{#1*}{} { \begin{#2*} } { \end{#2*} } } \_@@_clone_theorem:nn {theoreme} {theorem} \_@@_clone_theorem:nn {corollaire}{corollary} \_@@_clone_theorem:nn {lemme}{lemma} \_@@_clone_theorem:nn {axiome}{axiom} \_@@_clone_theorem:nn {remarque}{remark} \_@@_clone_theorem:nn {exemple}{example} \_@@_clone_theorem:nn {preuve}{proof} % \end{macrocode} % % \subsubsection{(Reciprocal) Trigonometric and hyperbolic functions} % % Reciprocal trigonometric functions, even written with usual ×\arccos×, % ×\arcsin×, ×\arctan×, etc. are typeset with an uppercase \enquote{A}: % \begin{macrocode} \DeclareMathOperator{\cotan}{cotan} \DeclareMathOperator{\Arccos}{Arccos} \DeclareMathOperator{\Arcsin}{Arcsin} \DeclareMathOperator{\Arctan}{Arctan} \DeclareMathOperator{\Argch}{Argch} \DeclareMathOperator{\Argsh}{Argsh} \DeclareMathOperator{\Argth}{Argth} \cs_set_eq:NN \_@@_orig_arccos \arccos \cs_set_eq:NN \_@@_orig_arcsin \arcsin \cs_set_eq:NN \_@@_orig_arctan \arctan \RenewDocumentCommand \arccos {} { \IfLanguageName {french}{\Arccos}{\_@@_orig_arccos} } \RenewDocumentCommand \arcsin {} { \IfLanguageName {french}{\Arcsin}{\_@@_orig_arcsin} } \RenewDocumentCommand \arctan {} { \IfLanguageName {french}{\Arctan}{\_@@_orig_arctan} } \DeclareMathOperator{\ch}{ch} \DeclareMathOperator{\sh}{sh} \cs_set_eq:NN \_@@_orig_tanh \tanh \RenewDocumentCommand \tanh {} { \IfLanguageName {french}{\operatorname{th}}{\_@@_orig_tanh} } \cs_set_eq:NN \_@@_orig_log \log \cs_set_eq:NN \_@@_orig_lg \lg \RenewDocumentCommand \log { s } { \IfBooleanTF {#1} { \_@@_orig_log } { \ln } } \RenewDocumentCommand \lg { s } { \IfBooleanTF {#1} { \_@@_orig_lg } { \ln } } \cs_set_eq:NN \_@@_orig_leq \leq \cs_set_eq:NN \_@@_orig_geq \geq \RenewDocumentCommand \le {} { \IfLanguageName {french}{\leqslant}{\_@@_orig_leq} } \RenewDocumentCommand \leq {} { \IfLanguageName {french}{\leqslant}{\_@@_orig_leq} } \RenewDocumentCommand \ge {} { \IfLanguageName {french}{\geqslant}{\_@@_orig_geq} } \RenewDocumentCommand \geq {} { \IfLanguageName {french}{\geqslant}{\_@@_orig_geq} } \NewDocumentCommand \N {} {\mathbb{N}} \NewDocumentCommand \Z {} {\mathbb{Z}} \NewDocumentCommand \D {} {\mathbb{D}} \NewDocumentCommand \Q {} {\mathbb{Q}} \NewDocumentCommand \R {} {\mathbb{R}} \NewDocumentCommand \C {} {\mathbb{C}} \NewDocumentCommand \K {} {\mathbb{K}} % \end{macrocode} % % We define a token list variable that contains the color of the description % labels because it won't be constant but will be: % \begin{itemize} % \item black in the front matter and in the books rubric % \end{itemize} % % We now leave the \LaTeX3{} programming environment. % \begin{macrocode} % \ExplSyntaxOff % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \subsection{Initial configuration file} % Before the code of the \Class{gzt} by itself, we give the initial configuration % file. % % \begin{macrocode} %<*configuration> % \end{macrocode} % % \begin{macrocode} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Journal data %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \journalsetup{ publisher = \smf, address = Institut Henri Poincar\'e\newline 11 rue Pierre et Marie Curie\newline 75231 Paris cedex 05, phone = 01 44 27 67 96, fax = 01 40 46 90 96, email = gazette@dma.ens.fr, url = https://smf.emath.fr, issn = 0224-8999 } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% SMF President %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \president{Seuret, Stéphane}{}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Editor in chief %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \editorinchief{Adamczewski, Boris}{Institut de Mathématiques de Marseille}{boris.adamczewski@math.cnrs.fr} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Editors %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \editor{Colin, Vincent}{Université de Nantes}{vincent.colin@math.univ-nantes.fr} \editor{Ehrhardt, Caroline}{Université Vincennes Saint-Denis}{caroline.ehrhardt@inrp.fr} \editor{Gayet, Damien}{Institut Fourier, Grenoble}{damien.gayet@ujf-grenoble.fr} \editor{Gouëzel, Sébastien}{Université Rennes 1}{sebastien.gouezel@univ-rennes1.fr} \editor{Helffer, Bernard}{Université Paris-Sud}{bernard.helffer@math.u-psud.fr} \editor{Loidreau, Pierre}{Université Rennes 1}{pierre.loidreau@univ-rennes1.fr} \editor{Planchon, Fabrice}{Université de Nice}{fab@unice.fr} \editor{Queffélec, Martine}{Université Lille 1}{Martine.Queffelec@univ-lille1.fr} \editor{Seuret, Stéphane}{Université Paris Est Créteil}{seuret@u-pec.fr} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Graphic designer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \graphicdesigner{Lozanne, Nathalie}{}{n.lozanne@free.fr} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Secretary %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \secretary{Ropartz, Claire}{}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% LaTeX class designer (and maintainer(s)) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \classdesigner{Bitouzé, Denis}{Université du Littoral Côte d'Opale}{denis.bitouze@univ-littoral.fr} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Font designer text %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fontdesignertext{% Nous utilisons la police \href{https://ctan.org/pkg/kpfonts}{Kp-Fonts} créée par Christophe \textsc{Caignaert}.% } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Printer text %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \printertext{Jouve \aside*{1 rue du docteur Sauvé 53100 Mayenne}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Authors instructions %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \begin{authorsinstructions} \begin{description} \item[Objectifs de la \gzt*{}.] Bulletin interne de la \smf{}, la \gzt{} est un support privilégié d'expression au sein de la communauté mathématique. À ce titre, elle informe de l'actualité des mathématiques, de leur enseignement, de leur histoire, de leur relations avec d'autres sciences (physique, informatique, biologie, etc.). On y trouve donc des articles scientifiques de présentation, ainsi que des récensions de parutions mathématiques récentes. Elle contient aussi des informations sur tout ce qui concerne la vie professionnelle d'un mathématicien (recrutements, conditions de travail, publications scientifiques, etc.) et aussi des témoignages ou des tribunes libres. La \gzt{} paraît à raison de quatre numéros par an avec, optionnellement, un numéro spécial consacré à un sujet particulier de mathématiques ou bien à un grand mathématicien. Elle est envoyée gratuitement à chaque adhérent. Les numéros actuel et anciens sont disponibles en ligne (\url{https://smf4.emath.fr/Publications/Gazette/}). \item[Soumission d'article.] Les articles doivent être envoyés au secrétariat, de préférence par courrier électronique (\email{gazette@dma.ens.fr}), pour être examinés par le comité de rédaction. Si un article est accepté, son fichier source doit alors être fourni, de préférence sous forme d'un fichier \TeX{} ou, à l'extrême rigueur, LibreOffice, OpenOffice ou Word\textregistered{} ; une saisie de manuscrits est cependant possible pour des textes courts. Les fichiers \TeX{} doivent : \begin{itemize} \item de préférence recourir au format \LaTeXe{} : éviter les commandes des autres formats (tels que plain \TeX{}) ; \item être si possible \enquote{encodés} en \texttt{UTF-8} ; \item être le plus \enquote{pur} possible : éviter les macros \enquote{exotiques} ainsi que les insertions manuelles d'espacements horizontaux ou verticaux (\gztverb{\hspace}, \gztverb{\hskip}, \gztverb{\vspace}, \gztverb{\vskip}, \gztverb{\enlargethispage}, etc.). \end{itemize} Les illustrations qui ne sont pas directement codées en \TeX{} doivent être fournies aux formats \texttt{.pdf} (à privilégier) ou, avec un bonne définition (300~\textsc{dpi} minimum), \texttt{.png} ou \texttt{.jpg}. Le format \texttt{.eps}, quoique indirectement supporté, est déconseillé. Pour faciliter la composition de textes destinés à la \gzt{}, la \smf{} propose la classe \LaTeX{} \gztarticlecl{} fournie par les distributions \TeX{} courantes (\TeX{} Live et Mac\TeX{} \aside{à partir de leur version 2015} ainsi que MiK\TeX{}), et sinon téléchargeable depuis la page \url{https://ctan.org/pkg/gzt}. Sa documentation détaillée se trouve à la page \url{https://mirrors.ctan.org/macros/latex/contrib/gzt/doc/gzt-fr.pdf}. On prendra garde au fait que l'usage de cette classe nécessite une distribution \TeX{} à jour. Pour plus de détails, consulter la page \url{https://smf.emath.fr/les-publications/la-gazette}. % % \item[Rubrique \enquote{Mathématiques}] La \gzt{} publie des articles de % mathématiques et d'interactions ou applications des mathématiques, % chargés % de présenter un résultat, exposer une notion ou de commenter une % actualité. % % Ils s'adressent à un public étendu. Les textes privilégiés sont courts, % pédagogiques et illustrés par des exemples. % % La bibliographie ne vise pas à l'exhaustivité et se concentre sur les % textes % introductifs et de référence. % % Les articles d'histoire des mathématiques ou contenant des vues % historiques % ou épistémologiques sont également bienvenus et doivent être conçus dans % le % même esprit. % % \item[Rubrique \enquote{Livres}] La rubrique \enquote{Livres} publie des % recensions s'attachant à présenter des ouvrages de mathématiques et des % ouvrages sur les mathématiques (leur histoire, leur philosophie, et plus % généralement tout ce qui a trait aux mathématiques et aux % mathématiciens). % % Quelques recommendations : % \begin{itemize} % \item Commencez la recension en donnant quelques informations sur le % livre % (titre, nom l'auteur, collection à laquelle il appartient, nom de % l'éditeur, ville de la maison d'édition, année de la publication, % nombre % de pages, \textsc{isbn} et prix en euros ou en dollars). % \item Précisez à quel public (de quel niveau) s'adresse le livre. % \item Vous êtes libre de dire ce que vous pensez (dans les limites de la % politesse et de la correction). Le comité de rédaction se réserve la % décision finale de publication après relecture de votre recension. % \item Les recensions doivent être brèves (une ou deux pages, trois au % maximum) et synthétiser l'apport original d'un ouvrage. Dans le cas % des % ouvrages de mathématiques, elles n'ont pas pour objectif de rendre % compte % d'une théorie et d'en donner un exposé ; la recension proprement dite % peut % toutefois être précédée, à titre d'introduction à l'analyse de % l'ouvrage, % d'un bref exposé panoramique et historique des idées générales du % domaine. % \item N'insérez pas de bibliographie. % \item Signez de vos nom et prénom et indiquez les noms de % l'établissement et % de la ville où vous exercez. % \end{itemize} \end{description} \end{authorsinstructions} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Font designer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fontdesigner{Caignaert, Christophe}{}{} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% Réglages divers %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \pgfplotsset{compat=1.12} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % We now give the rest of the code of the source file of the Gazette's logo. % \begin{macrocode} %<*class-logo> % \end{macrocode} % % \begin{macrocode} \ExplSyntaxOff \begin{document} \frontmatterheadtext \end{document} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \end{implementation} % % \PrintIndex \endinput % %%% Local Variables: %%% mode: doctex %%% TeX-command-default: "TeX" %%% TeX-master: t %%% End: