% \iffalse meta-comment % % File: gzt.dtx Copyright (C) 2014, 2015, 2016, 2017 by % Denis Bitouz'e % % 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'e. % % This work consists of the files gzt.dtx and gzt.ins % and the derived filebase gzt.cls. % %<*internal> \iffalse % %<*readme> # Overview The purpose of the current LaTeX bundle, `gzt`, is to provide two classes and `biblatex styles` for the French journal ["La Gazette des Mathématiciens"](http://smf4.emath.fr/Publications/Gazette/): - `gzt` for the complete issues of the journal, aimed for the Gazette's team, - `gztarticle`, intended for the authors who wish to publish an article in the Gazette. This class goal is to: - faithfully reproduce the layout of the Gazette, thus enabling the authors to be able to work their document in actual conditions, - provide a number of tools (commands and environments) to facilitate the drafting of documents, in particular those containing mathematical formulas. # Copyright and Licence ## Author Denis Bitouzé ## Release 2017/02/15 v0.97 ## Copyright Copyright 2014-2017 Denis Bitouzé ## Licence This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. The latest version of the license is in http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all distributions of LaTeX version 2003/06/01 or later. This work has the LPPL maintenance status "maintained". #Installation - `gzt` is bundled with the main TeX distributions TeX Live (and its variants) and MiKTeX. - `gzt` starts life on [Github](https://github.com/dbitouze/gzt) where you can always find development releases. - The latest official release is put onto [CTAN](http://ctan.org/pkg/gzt) but users can get the latest stable version by updating their TeX distributions (upgrading if necessary for TeX Live). #Help ## Documentation `gzt` is provided with an extensive documentation (in French) in the `doc/latex/gzt/french/` directory in the distribution, also available [on CTAN](http://mirrors.ctan.org/macros/latex/contrib/gzt/doc/gzt-fr.pdf). ## Templates and samples `gzt` comes with a template attached to the the documentation above. ## Questions and answers Users can ask questions about `gzt` e.g. on Q & A sites: - [in French](http://texnique.fr/osqa/tags/gzt/) - [in English](http://tex.stackexchange.com/questions/tagged/gzt) # Debug and feature requests Suggestions and bug reports are welcome. - Go to the Github [issues page](https://github.com/dbitouze/gzt/issues/). - If not already reported, [open an issue](https://github.com/dbitouze/gzt/issues/new/). - Add a [minimal working example](http://www.tex.ac.uk/cgi-bin/texfaq2html?label=minxampl) if possible. This helps a great deal facilitate a swift response. % %<*internal> \fi \def\nameofplainTeX{plain} \ifx\fmtname\nameofplainTeX\else \expandafter\begingroup \fi % %<*install> \input l3docstrip.tex % \input docstrip.tex \Msg{********************************************************} \Msg{* Installation} \Msg{* Class: gzt 2017/02/15 v0.97} \Msg{* for the French journal} \Msg{* "La Gazette des Math'ematiciens" (DB)} \Msg{********************************************************} \keepsilent \askforoverwritefalse \preamble ----------------------------------------------------------------------------- gzt --- SMF bundle of classes for the French journal "La Gazette des Math'ematiciens", version 0.97 E-mail: denis.bitouze@univ-littoral.fr Released under the LaTeX Project Public License v1.3c or later See http://www.latex-project.org/lppl.txt ----------------------------------------------------------------------------- \endpreamble \postamble % Copyright (C) 2014-2017 by Denis Bitouz'e ---------------------------------------------------------------------------- This work may be distributed and/or modified under the conditions of the LaTeX Project Public License, either version 1.3 of this license or (at your option) any later version. The latest version of this license is in http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later. This work has the LPPL maintenance status `maintained'. The Current Maintainer of this work is Denis Bitouz'e. This work consists of the file gzt.dtx and the derived files gzt.cls, gztarticle.cls, gzt.ins, gzt.pdf, and a number of configuration files. \endpostamble % \def\GZT@classname{\jobname} \def\GZT@logo{\GZT@classname-logo} \def\GZT@addons{addons} \usedir{.} \generate{ \nopreamble\nopostamble \file{README.md}{\from{\jobname.dtx}{readme}} }% \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{source/latex/\GZT@classname} \generate{ \file{\GZT@classname.ins}{\from{\jobname.dtx}{install}} \file{\GZT@classname.drv}{\from{\jobname.dtx}{driver}}% \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}} }% \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 % % % \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}% % % \CheckSum{4413} % % \CharacterTable % {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z % Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z % Digits \0\1\2\3\4\5\6\7\8\9 % Exclamation \! Double quote \" Hash (number) \# % Dollar \$ Percent \% Ampersand \& % Acute accent \' Left paren \( Right paren \) % Asterisk \* Plus \+ Comma \, % Minus \- Point \. Solidus \/ % Colon \: Semicolon \; Less than \< % Equals \= Greater than \> Question mark \? % Commercial at \@ Left bracket \[ Backslash \\ % Right bracket \] Circumflex \^ Underscore \_ % Grave accent \` Left brace \{ Vertical bar \| % Right brace \} Tilde \~} % % \StopEventually{} % % \selectlanguage{english} % \chapter{Auxiliary files} % % \section{Gazette's logo} % \label{sec:gzts-logo} % Before the code of the \gztcl{} by itself, we give the begining of the % code of the source file of the Gazette's logo (to be compiled with "xelatex"). % \begin{macrocode} %<*class-logo> % \end{macrocode} % % \begin{macrocode} \documentclass{standalone} \usepackage{fontspec} \usepackage[export]{adjustbox} \usepackage[cmyk]{xcolor} \usepackage{xparse} % \setmainfont{HelveticaNeueLTStd-ThEx} \newfontfamily\des{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 {% \adjustbox{stack=r} {% \addfontfeature{LetterSpace=10} \textcolor{__gzt_generic_light_color}{% \fontsize{21}{0}\selectfont% la\hspace{5mm}% \fontsize{45}{0}\selectfont% Gazette% }% \\[1.7mm]% \fontsize{15}{0}\selectfont% \textcolor{__gzt_generic_light_color}{% \des% \addfontfeature{LetterSpace=6}% des% }% \hspace{2.5mm}% \textcolor{__gzt_generic_dark_color}{% \mathematiciens% \addfontfeature{LetterSpace=6}% Math\'ematiciens% }% }% } % \NewDocumentCommand \frontmatterheadtext {} { \l__gzt_frontmatter_head_text_tl } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \section{(\Pkg{biblatex}) Data model} % Before the code of the \gztcl{} 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}% extras are inherited from French... \DeclareBibliographyStrings{% inherit = {french},% .... as well as all the keys number = {{\no}{\no}}, volume = {{volume}{vol\adddot}}, volumes = {{volumes}{vol\adddot}}, } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*datamodel> % \end{macrocode} % % \subsection{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} % % % % \subsection{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} % % \subsection{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} % % \subsection{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} % % \chapter{Implementation of the \gztcl{}} % % Here comes the code of the \gztcl{}. % \begin{macrocode} %<*class> % \end{macrocode} % % \section{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} % % Selective filtering of error messages and warnings: % \begin{macrocode} \RequirePackage{silence}% \WarningFilter{kpfonts}{With 'easyscsl' option} % \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{http://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} % % \section{\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 \gztcl{} 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} \ExplSyntaxOn % \end{macrocode} % % The \gztcl{} is declared in the \LaTeX3{}'s way. % \begin{macrocode} \ProvidesExplClass % {gzt} % {gztarticle} {2017/02/15} {0.97} { SMF~class~for~the~French~journal^^J "La~Gazette~des~Math'ematiciens". %~(Author~version.) } % \end{macrocode} % % The needed \TeX{} format is specified. % \begin{macrocode} \NeedsTeXFormat{LaTeX2e} % \end{macrocode} % % \section{Class loading} % % \begin{macrocode} \bool_new:N \g_@@_for_authors_bool \bool_new:N \g_@@_cover_bool \bool_new:N \g_@@_coverpage_bool \bool_new:N \g_@@_inside_pages_bool %\bool_gset_true:N \g_@@_for_authors_bool% %\bool_gset_true:N \g_@@_inside_pages_bool% % \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 (most debugging purpose), % \item ... % \end{itemize} % % \begin{macrocode} \tl_gset:Nn \g_@@_frontcover_image_file_tl {\c_@@_issue_frontcover_default_image_file_tl} \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 = {% },% }% % \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} % % \section{Packages loading} % % Many of the \gztcl{} features are provided by third party packages. In this % section, we load them and outline their features interesting from the \gztcl{} % point of view.\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,easyscsl,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[backend=biber,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{mathrsfs} % \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 Tools for drawing Euclidean geometry: % \begin{macrocode} %\RequirePackage{tkz-euclide} % \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} % % \section{Miscellaneous patches} % % We pop some commands from the "\@preamblecmds" list in order to allow % "\DeclareMathOperator" to be used after the preamble (see % \url{http://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} % % \section{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.} % \end{macrocode} % % \section{Counters} % % In this section, we define some counters for future use. % % \begin{macro}{\g_@@_editors_in_chief_int} % \begin{macro}{\g_@@_articles_int} % \begin{macro}{\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} % \end{macro} % \end{macro} % % \section{Constants} % % In this section, we declared some constants for future use. % % \subsection{Integers} % % \subsubsection{Issue numbers} % % \begin{macro}{\c_@@_first_issue_number_int} % \begin{macro}{\c_@@_first_issue_year_int} % \begin{macro}{\c_@@_first_issue_month_int} % \begin{macro}{\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} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Strings and keywords} % % We now declare some private string constants. % % \begin{macro}{\c_@@_journal_short_title_string_tl} % \begin{macro}{\c_@@_journal_title_string_tl} % \begin{macro}{\c_@@_editors_in_chief_string_tl} % \begin{macro}{\c_@@_editors_string_tl} % \begin{macro}{\c_@@_editorial_board_string_tl} % \begin{macro}{\c_@@_editorial_secretariat_string_tl} % \begin{macro}{\c_@@_phone_string_tl} % \begin{macro}{\c_@@_fax_string_tl} % \begin{macro}{\c_@@_informations_string_tl} % \begin{macro}{\c_@@_publishingdirector_string_tl} % \begin{macro}{\c_@@_issn_string_tl} % \begin{macro}{\c_@@_isbn_string_tl} % \begin{macro}{\c_@@_latexclass_string_tl} % \begin{macro}{\c_@@_font_string_tl} % \begin{macro}{\c_@@_configuration_file_string_tl} % \begin{macro}{\c_@@_cover_string_tl} % \begin{macro}{\c_@@_artistic_director_string_tl} % \begin{macro}{\c_@@_editorial_string_tl} % \begin{macro}{\c_@@_toc_string_tl} % \begin{macro}{\c_@@_message_string_tl} % \begin{macro}{\c_@@_president_signatory_string_tl} % \begin{macro}{\c_@@_editorinchief_signatory_string_tl} % \begin{macro}{\c_@@_issue_bib_file_tl} % \begin{macro}{\c_@@_about_frontcover_string_tl} % \begin{macro}{\c_@@_credit_frontcover_string_tl} % \begin{macro}{\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{}~des~Math\'ematiciens% } % \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_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} \tl_const:Nn \c_@@_editorial_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 front cover header text. % \begin{macrocode} \tl_const:Nn \c_@@_frontcover_header_string_tl { \l_@@_uppercased_date_format\displaydate{@@_date} \c_space_tl \textendash{} \c_space_tl \No\int_use:N\g_@@_issue_number_int% } % \end{macrocode} % For the pdftitle text. % \begin{macrocode} \tl_const:Nn \c_@@_pdftitle_string_tl { \c_@@_journal_title_string_tl % \c_space_tl % \textendash{} % \c_space_tl % \l_@@_uppercased_date_format{\displaydate{@@_date}} \c_space_tl \textendash{} \c_space_tl N°\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_@@_issue_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 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~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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \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}{\MakeTextUppercase{\c_@@_smf_short_string_tl}} \c_space_tl \textcolor{@@_date_color}{ \textendash{}\c_space_tl \MakeTextUppercase{\c_@@_journal_short_title_string_tl} % \bool_if:nF { \g_@@_inside_frontcover_bool || \g_@@_backmatter_bool || \g_@@_for_authors_bool } % { % \c_space_tl\textendash{}\c_space_tl % \l_@@_uppercased_date_format\displaydate{@@_date} % \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} \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 { \IfLanguageName{french}{ Compil\'e~le~ }{ Compiled~on~ } } % \end{macrocode} % % % \begin{macro}{smf} % % \begin{macro}{issn} % % \begin{macro}{isbn} % % \begin{macro}{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} % % \end{macro} % % \end{macro} % % \end{macro} % % \subsection{Booleans} % % We now declare the booleans that will be used. % % \begin{macro}{\g_@@_frontcover_bool} % \begin{macro}{\g_@@_inside_frontcover_bool} % \begin{macro}{\g_@@_inside_backcover_bool} % \begin{macro}{\g_@@_frontmatter_bool} % \begin{macro}{\g_@@_rubric_bool} % \begin{macro}{\g_@@_interview_rubric_bool} % \begin{macro}{\g_@@_mainmatter_bool} % \begin{macro}{\g_@@_backmatter_bool} % \begin{macro}{\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 % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \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} % % \subsection{Dimensions} % % \subsubsection{Geometry of the page} % % \begin{macro}{\c_@@_rubrics_abstract_width_dim} % \begin{macro}{\c_@@_rubrics_head_text_abstract_width_dim} % \begin{macro}{\c_@@_rubrics_head_text_no_abstract_width_dim} % \begin{macro}{\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} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\c_@@_offset_dim} % \begin{macro}{\c_@@_paperheight_dim} % \begin{macro}{\c_@@_paperwidth_dim} % \begin{macro}{\c_@@_topmargin_dim} % \begin{macro}{\c_@@_headsep_dim} % \begin{macro}{\c_@@_botmargin_dim} % \begin{macro}{\c_@@_innermargin_dim} % \begin{macro}{\c_@@_outermargin_dim} % \begin{macro}{\c_@@_footskip_dim} % \begin{macro}{\c_@@_header_line_width_dim} % \begin{macro}{\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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{\c_@@_boxed_issue_number_width_dim} % \begin{macro}{\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} % \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_set_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} % \begin{macro}{\g_@@_minitoc_textwidth_dim} % \begin{macro}{\g_@@_minitoc_xshift_dim} % \begin{macro}{\g_@@_minitoc_yshift_dim} % \begin{macro}{\c_@@_minitoc_from_circle_xshift_dim} % \begin{macro}{\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_set:Nn \g_@@_minitoc_circle_diameter_dim {142mm} \dim_set:Nn \g_@@_minitoc_textwidth_dim {65mm} \dim_set:Nn \g_@@_minitoc_xshift_dim {-22mm} \dim_set: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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \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 ,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 ,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 } % \end{macrocode} % % \subsection{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} % % \section{Options} % % In this section, options used by some of the document commands defined by the % class are treated. % % \subsection{Issues options} % % \begin{macro}{\g_@@_issue_number_int} % \begin{macro}{\g_@@_issue_month_int} % \begin{macro}{\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} % \end{macro} % \end{macro} % % \begin{macro}{number} % \begin{macro}{month} % \begin{macro}{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} % \end{macro} % \end{macro} % % \subsection{Journal options} % % \begin{macro}{\l_@@_journal_publisher_tl} % \begin{macro}{\l_@@_journal_address_tl} % \begin{macro}{\l_@@_journal_phone_tl} % \begin{macro}{\l_@@_journal_fax_tl} % \begin{macro}{\l_@@_journal_email_tl} % \begin{macro}{\l_@@_journal_url_tl} % \begin{macro}{\l_@@_journal_issn_tl} % \begin{macro}{\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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}{publisher} % \begin{macro}{address} % \begin{macro}{phone} % \begin{macro}{fax} % \begin{macro}{email} % \begin{macro}{url} % \begin{macro}{issn} % \begin{macro}{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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Titles options} % % \begin{macro}{shorttitle} % \begin{macro}{minishorttitle} % \begin{macro}{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, notintoc .bool_gset:N = \g_@@_title_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} % \end{macro} % \end{macro} % % \subsection{Subtitles options} % % \begin{macro}{shortsubtitle} % \begin{macro}{minishortsubtitle} % \begin{macro}{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, 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} % \end{macro} % \end{macro} % % \subsection{Rubrics options} % % \begin{macrocode} \keys_define:nn { gzt/rubric } { abstract .tl_gset:N = \g_@@_rubric_abstract_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} % \end{macro} % \end{macro} % \end{macro} % % \subsection{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} % % \subsection{Authors options} % % \begin{macro}{affiliation} % \begin{macro}{email} % \begin{macro}{minibio} % \begin{macro}{photo} % \begin{macro}{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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{Interviewee options} % % \begin{macro}{\g_@@_interviewee_minibio_tl} % \begin{macro}{\g_@@_interviewee_photo_tl} % \begin{macro}{\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} % \end{macro} % \end{macro} % % \begin{macro}{minibio} % \begin{macro}{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} % \end{macro} % % \subsection{Book review options} % % \begin{macro}{\g_@@_bookreview_frontcover_tl} % \begin{macro}{\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} % \end{macro} % % \begin{macro}{frontcover} % \begin{macro}{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} % \end{macro} % % \subsection{Book advertisement options} % % \begin{macro}{\g_@@_bookadvertisement_frontcover_tl} % \begin{macro}{\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} % \end{macro} % % \begin{macro}{frontcover} % \begin{macro}{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} % \end{macro} % % \subsection{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 } % Name of choice key { theorem~or~definition~or~proof } % Valid choices { \exp_not:n {#1} } % Invalid choice given } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \section{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} \definecolorset{cmyk}{@@_}{_color}{ generic_dark,1,.60,.10,0; % kind of blue (!) light_generic_dark,1,.35,0,0 % kind of blue (!), light } \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}{@@_light_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_acknowledgments_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} % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \section{Miscellaneous patches} % % We patch the \pkg{biblatex}'s "refsection" environment definition by adding % a flag hat will be used to test wheter we are inside such an environment or % not. % \begin{macrocode} \AtBeginEnvironment{multicols}{ \bool_gset_true:N \g_@@_multicols_bool } \AtEndEnvironment{multicols}{ \bool_gset_false:N \g_@@_multicols_bool } \AtBeginEnvironment{refsection}{ \bool_gset_true:N \g_@@_refsection_bool } \AtEndEnvironment{refsection}{ \bool_gset_false:N \g_@@_refsection_bool } % \end{macrocode} % % \section{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 } \AtEndPreamble{% \hypersetup{% pdftitle=\g_@@_pdftitle_string_tl, pdfauthor=\g_@@_pdfauthor_string_tl% } } % \end{macrocode} % % \section{Database for the articles' authors} % % For this, and thanks to \Pkg{datatool}, we create a database of % \enquote{authors} of articles. % \begin{macrocode} \DTLnewdb{_@@_authors} % \end{macrocode} % % Then we create the internal "\_@@_authors" function that let us populate the % "_@@_authors" database. Each people will be identified by some identifiers: % \begin{itemize} % \item firstname and lastname, that should be at the biblatex name format % (\enquote{lastname, firstname}), % \item affiliation, % \item email, % \item minibio, % \item photo. % \end{itemize} % % \begin{macrocode} \cs_new_protected:Nn \_@@_authors:nnnnnn { \DTLnewrow{_@@_authors}% \DTLnewdbentry{_@@_authors}{first-last-name}{#1}% \DTLnewdbentry{_@@_authors}{affiliation}{#2}% \DTLnewdbentry{_@@_authors}{email}{#3}% \DTLnewdbentry{_@@_authors}{minibio}{#4}% \DTLnewdbentry{_@@_authors}{photo}{#5}% \DTLnewdbentry{_@@_authors}{webpage}{#6}% } % \end{macrocode} % % \begin{macrocode} \cs_new_protected:Nn \_@@_email:n { \href{mailto:#1}{\nolinkurl{#1}}% } % \end{macrocode} % % We create a variant of this control sequence that passes the \emph{values} of the % variables involved (see \url{http://tex.stackexchange.com/a/214284/18401}). % \begin{macrocode} \cs_generate_variant:Nn \_@@_authors:nnnnnn { nVVVVV } % \end{macrocode} % % We create a function that displays the author(s) of an article with % a peticular layout. % \begin{macrocode} \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{http://tex.stackexchange.com/a/214284/18401}). % \begin{macrocode} \cs_generate_variant:Nn \@@_display_author:nnnnn { VVVVV } % \end{macrocode} % % \section{Database for the interviewees} % % For this, and thanks to \Pkg{datatool}, we create a database of % \enquote{interviewees} of articles. % \begin{macrocode} \DTLnewdb{_@@_interviewees} % \end{macrocode} % % Then we create the internal "\_@@_interviewees" function that let us populate the % "_@@_interviewees" database. Each people will be identified by some identifiers: % \begin{itemize} % \item firstname and lastname, that should be at the biblatex name format % (\enquote{lastname, firstname}), % \item minibio, % \item photo. % \end{itemize} % % \begin{macrocode} \cs_new_protected:Nn \_@@_interviewees:nnn { \DTLnewrow{_@@_interviewees}% \DTLnewdbentry{_@@_interviewees}{first-last-name}{#1}% \DTLnewdbentry{_@@_interviewees}{minibio}{#2}% \DTLnewdbentry{_@@_interviewees}{photo}{#3}% } % \end{macrocode} % % We create a variant of this control sequence that passes the \emph{values} of the % variables involved (see \url{http://tex.stackexchange.com/a/214284/18401}). % \begin{macrocode} \cs_generate_variant:Nn \_@@_interviewees:nnn { nVV } % \end{macrocode} % % \section{Functions for specifiying the people involved in the journal} % % For this, and thanks to \Pkg{datatool}, we create a database of % \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{http://tex.stackexchange.com/a/214284/18401}). % \begin{macrocode} \cs_generate_variant:Nn \_@@_people:nnnnnnnn { nVVVVnxV } % \end{macrocode} % % \section{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 #1 } % \end{macrocode} % % \section{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=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) } ] \l_@@_people_affiliation_tl% \newline% \href{mailto:\l_@@_people_email_tl}{\nolinkurl{\l_@@_people_email_tl}}% \DTLiflastrow{% }{% \medskip% } }{ \tl_if_in:NnTF \l_@@_people_role_tl { author } { \footnotesize% % \noindent% \dim_set:Nn \l_@@_minibio_width_dim {\linewidth-1em - \c_@@_authors_photos_box_width_dim} \tl_if_empty:NTF \l_@@_people_photo_tl {% \dim_add:Nn \l_@@_minibio_width_dim {\c_@@_authors_photos_box_width_dim} }{% \begin{adjustbox}{valign=t,minipage=\c_@@_authors_photos_box_width_dim} \includegraphics[width=\c_@@_authors_photos_width_dim]{\l_@@_people_photo_tl} \end{adjustbox}% \quad% } \begin{adjustbox}{valign=t,minipage=\l_@@_minibio_width_dim} \begin{description}[leftmargin=1em,style=nextline] \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} \DTLiflastrow{% }{ \DTLpar% \medskip% } }{ \_@@_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} % % \section{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} % % \section{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}% \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=white,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) $) { \large \color{@@_minitoc_color} \bool_if:NF {\g_@@_frontcover_minitoc_tl} { \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=white,rotate=90,anchor=west] at ([xshift=0.45\c_@@_potential_bindingoffset_dim,yshift=15mm+\c_@@_potential_layoutoffset_dim]current~page.south~west) { \No\int_use:N\g_@@_issue_number_int }; \node[name=@@_binding_w,inner~sep=\c_zero_dim,fill=white,rotate=90] at ([xshift=0.45\c_@@_potential_bindingoffset_dim]current~page.west) { \MakeUppercase{\c_@@_journal_title_string_tl} }; \node[name=@@_binding_nw,inner~sep=\c_zero_dim,fill=white,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}% \vfill% \clearpage% \bool_gset_false:N \g_@@_frontcover_bool } % \end{macrocode} % % \section{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} \begin{description}[leftmargin=1em] \item[\c_@@_editors_in_chief_string_tl] \ \begin{description}[leftmargin=1em,style=nextline] \@@_display_people_by_role:n {editorinchief} \end{description} \bigskip \par \item[\c_@@_editors_string_tl] \ \begin{description}[leftmargin=1em,style=nextline] \@@_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=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} % % \section{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] \file_if_exist:nT { \c_@@_authors_instructions_file_tl } {% % \begin{multicols}{2} % \setlength{\columnsep}{1mm} \file_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} % % \section{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}% \exp_after:wN\newgeometry\exp_after:wN{\c_@@_backcover_geometry_tl}% \file_if_exist:nTF { \c_@@_backcover_page_file_string_tl } {% \file_input:n {\c_@@_backcover_page_file_string_tl} }{% \hbox{} } } % \end{macrocode} % % \section{User level commands} % % Here, we gather all the user level (public) commands. % % \subsection{Populating the people involved in the journal} % % \begin{macro}{\editorinchief} % \begin{macro}{\editor} % \begin{macro}{\president} % \begin{macro}{\classdesigner} % \begin{macro}{\fontdesigner} % \begin{macro}{\classmaintainer} % \begin{macro}{\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} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \subsection{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 \refCom{issuesetup}'s key-value options, issue's month and % year are computed from issue number (which defaults to % "\c_@@_first_issue_month_int"). % % \begin{macro}{\c_@@_issue_age_in_months_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} % \end{macro} % % 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} % % \subsection{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} % % \subsection{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} % % \subsection{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} % % \subsection{Miscellaneous} % % \begin{macro}{\academicsignature} % \begin{macrocode} \NewDocumentCommand \academicsignature { m } { \@@_display_academic_signature:n {#1} } % \end{macrocode} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \section{Definition of the footer of the pages} % % \begin{macro}{@@_date} % \begin{macro}{\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} % \end{macro} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \section{(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} \AtBeginDocument{% % \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} % \begin{macro}{\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_toc_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} % \end{macro} % % \begin{macro}{\subtitle} % \begin{macro}{\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} % \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} % % \section{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 \g_@@_article_acknowledgements_tl% \cs_new_protected:Nn \@@_article_acknowledgements:n { \tl_gset:Nn \g_@@_article_acknowledgements_tl { #1 } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \begin{macro}{\_@@_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_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 \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 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_no_firstinits% \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_set: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 force all the previous floats to be processed before a new article starts % (this is already done in "bibliography_minibiographies_acknowledgments" % environment but is repeated here if what is before provides floats but neither % bibliography, \textsc{cv} nor acknowledgments). % \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 {% \noindent% \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% \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} }% } } } } \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 {% \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}% \_@@_itemized_citeauthor:n {\g_@@_article_bib_key_tl} } \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{http://tex.stackexchange.com/a/31615/18401}). % \begin{macrocode} \bool_if:nF { \g_@@_for_authors_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} \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} % % In case of "forauthors" option, we close the "multicols" environment in case % it isn't closed (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 } %{ % \AtEndDocument{% % \bool_if:NT {\g_@@_multicols_bool} { % \end{multicols}% % } %} %} % \end{macrocode} % % We load the configuration file, 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} \AtEndPreamble{\file_input:n {\c_@@_configuration_file_string_tl}} % \end{macrocode} % % We load the file where acronyms are defined. % \begin{macrocode} \file_if_exist:nT { \c_@@_acronyms_file_string_tl } {% \AtEndPreamble{\loadglsentries{\c_@@_acronyms_file_string_tl}} } % \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{% \color{@@_rubric_in_toc_color}\scshape\fontseries{bx}\selectfont% }% \unexpanded\expandafter{\etocthelinkedname}& % \ifShowPartPageInToc \unexpanded{\bfseries\color{@@_rubric_in_toc_color}}% \unexpanded\expandafter{\etocthelinkedpage}% % \fi \noexpand\\}% \gdef\ExceptFirstPart ##1{##1}% } \newcommand*\PrepareChapter{% \edef\toctablepiece {% \unexpanded{\color{@@_article_in_toc_color}\small}% \unexpanded\expandafter{\etocthelinkedname}& \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} % % \section{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} } \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}% }% }% \begin{adjustbox}{valign=t} \begin{tcolorbox}[% enhanced,% title=\No\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% \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 \RaggedRight } \cs_new_protected:Nn \_@@_after_editorial_presidentmessage: { \justifying \bigskip \par } % \end{macrocode} % % \section{Displaying the editorial} % % We create an internal function that displays the editorial. % \begin{macrocode} \cs_new_protected:Nn \_@@_before_display_editorial: { \_@@_before_editorial_presidentmessage:nn {}{\c_@@_editorial_string_tl} } \cs_new_protected:Nn \_@@_after_display_editorial: { \_@@_after_editorial_presidentmessage: {} \hspace*{\fill}% \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{editorinchief}]{people}{% \l_@@_firstlastname=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: { \_@@_before_display_editorial: {} \file_input:n {\c_@@_editorial_file_string_tl} \_@@_after_display_editorial: {} } \NewDocumentCommand \editorial {} { \bool_if:NF {\g_@@_for_authors_bool} { \_@@_display_editorial: {} } } % \end{macrocode} % % \section{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}{} \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} % % \section{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} % % \section{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} % % \section{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} % % \section{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 of the front cover and the inside front cover. % \end{itemize} % % \begin{macrocode} \AtBeginDocument{% \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} \AtBeginDocument{% \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} { \AfterEndPreamble{\end{document}} }{ \g_@@_display_inside_frontcover_tl } } } } % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \section{Page styles} % % Thanks to \Pkg{titleps} loaded by \pkg{titlesec}'s "pagestyles" option, we define % some page styles. % % \subsection{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 {% \includegraphics{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) {% \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) {% \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][]% { % \NoAutoSpacing% \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)}, % Radius \n1={atan2(\y1,\x1)}, % angles \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} % % \subsection{Front cover page style} % % \begin{macrocode} \newpagestyle{@@_frontcover_ps}[]{% \sethead {}% {% \adjustbox{stack=c}{ {\Large \c_@@_frontcover_header_string_tl }\\[7mm] \adjustbox{scale=2.08}{ \l_@@_frontmatter_head_text_tl }% }% }% {}% % \setfoot% {}% {}% {}% }% % \end{macrocode} % % \subsection{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% []% [% \uppercase{\c_@@_footer_string_tl} ]% []% {}% {% \uppercase{\c_@@_footer_string_tl}% }% {}% }% % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class|class-article> % \end{macrocode} % % \subsection{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]% [% \uppercase{\c_@@_footer_string_tl} ]% [ % \c_@@_footer_size_font_tl \c_@@_compiled_string_tl\today ]% { % \c_@@_footer_size_font_tl \c_@@_compiled_string_tl\today }% {% \uppercase{\c_@@_footer_string_tl}% }% {\c_@@_footer_size_font_tl\thepage}% }% % \end{macrocode} % % \begin{macrocode} % % \end{macrocode} % % \begin{macrocode} %<*class> % \end{macrocode} % % \subsection{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]% [% \uppercase{\c_@@_footer_string_tl} ]% []% {}% {% \uppercase{\c_@@_footer_string_tl}% }% {\c_@@_footer_size_font_tl\thepage}% }% % \end{macrocode} % % \subsection{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]% [% \uppercase{\c_@@_footer_string_tl} ]% []% {}% {% \uppercase{\c_@@_footer_string_tl}% }% {\c_@@_footer_size_font_tl\thepage}% } % \end{macrocode} % % \subsection{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]% [% \uppercase{\c_@@_footer_string_tl} ]% []% {}% {% \uppercase{\c_@@_footer_string_tl}% }% {\c_@@_footer_size_font_tl\thepage}% }% % \end{macrocode} % % \subsection{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% []% [% \uppercase{\c_@@_footer_string_tl} ]% []% {}% {% \uppercase{\c_@@_footer_string_tl}% }% {}% }% % \end{macrocode} % % \subsection{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} \AddEverypageHook{% % \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} % % \subsection{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}\g_@@_rubric_title_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]% [% \uppercase{\c_@@_footer_string_tl} ]% [\c_@@_footer_size_font_tl \c_@@_compiled_string_tl\today]% {\c_@@_footer_size_font_tl \c_@@_compiled_string_tl\today}% {% \uppercase{\c_@@_footer_string_tl}% }% {\c_@@_footer_size_font_tl\thepage}% }{ \setfoot% [\c_@@_footer_size_font_tl\thepage]% [% \uppercase{\c_@@_footer_string_tl} ]% []% {}% {% \uppercase{\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} % \begin{macro}{\printauthorsdetails} % 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 {} { \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 % acknowledgments. % \begin{macrocode} \FloatBarrier% \begin{_@@_minibiographies_acknowledgments_tcbox} \@@_display_people_by_role:n { author-art-\int_use:N \g_@@_articles_int } \tl_if_empty:NF \g_@@_article_acknowledgements_tl {% \par% \bigskip% \begin{adjustbox}{valign=t,minipage=\linewidth} \color{@@_acknowledgements_color}% \g_@@_article_acknowledgements_tl \end{adjustbox} } \end{_@@_minibiographies_acknowledgments_tcbox} \bool_gset_true:N \g_@@_previous_article_with_bibliography_or_minibio_bool % \tl_gclear:N \g_@@_people_affiliation_tl \tl_gclear:N \g_@@_people_email_tl \tl_gclear:N \g_@@_people_minibio_tl \tl_gclear:N \g_@@_people_photo_tl \tl_gclear:N \g_@@_people_webpage_tl \tl_gclear:N \g_@@_article_acknowledgements_tl % \end{macrocode} % % We clear the authors database for this new article (XXX: to be moved to the % authors' minibiographies area). % \begin{macrocode} \DTLgcleardb{_@@_authors} \DTLgcleardb{_@@_interviewees} } % \end{macrocode} % \end{macro} % We define "\printauthorsdetails" as an alias of "\printminibios". % \begin{macrocode} \let\printauthorsdetails\printminibios % \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_acknowledgments" 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 % acknowledgments. % \begin{macrocode} % \afterpage{% \FloatBarrier% % }% \begin{_@@_bibliography_tcbox} \_@@_printbibliography[heading=subbibliography,resetnumbers,#2] \end{_@@_bibliography_tcbox} % \IfBooleanF {#1} { \nopagebreak[0] \printauthorsdetails } } % \end{macrocode} % \end{macro} % % \section{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} % % \section{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. % \begin{macrocode} \NewDocumentCommand \rubric {O{}mm} { \_@@_rubric:nnn {#1}{#2}{#3}% } % \end{macrocode} % \end{macro} % % \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} % \begin{macro}{\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} % \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} % \begin{macro}{\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} % \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~@@_light_generic_dark_color!8}{#1} \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_acknowledgments_tcbox}{ O{} } { _@@_tcb_minibiographies_acknowledgments_style, #1 } % \end{macrocode} % % We provide a public environment "inset" for insets that has the same layout as % minibiographies and acknowledgments. Its layout is based upon \pkg{tcolorbox} % features. % \begin{macrocode} \DeclareTColorBox{inset}{ O{} } { _@@_tcb_minibiographies_acknowledgments_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\fullcite{\g_@@_bookreview_bibkey_tl} \vspace{10mm} \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} \cs_generate_variant:Nn \tl_if_eq:nnT { NnT } \NewDocumentCommand \gztinput { m m } {% \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 "\AtEndDocument" and "\preto\@enddocumenthook" should be used instead % (see \url{http://tex.stackexchange.com/q/240318/18401}). % \begin{macrocode} \bool_if:NF {\g_@@_coverpage_bool} { \bool_if:NF {\g_@@_inside_pages_bool} { \preto\@enddocumenthook{ \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{http://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 } { \AtEndDocument{% \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} \keys_define:nn { gztarticle } { editorial .code:n = {% \AtBeginDocument{% \_@@_before_display_editorial: {}% } \AtEndDocument{% \_@@_after_display_editorial: {}% } },% presidentmessage .code:n = {% \AtBeginDocument{% \_@@_before_display_presidentmessage: {}% } \AtEndDocument{% \_@@_after_display_presidentmessage: {}% } },% }% % \end{macrocode} % % \begin{macrocode} \ProcessKeysOptions { gztarticle } % \end{macrocode} % % \begin{macrocode} \AtEndDocument{% \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} % % \section{Miscellaneous settings} % % We gather here miscellaneous settings. % % \subsection{Related to \Pkg{pgfplots}} % % (French) Numbers format: % \begin{macrocode} \pgfplotsset{% /pgf/number~format/.cd, use~comma, 1000~sep={\,}, min~exponent~for~1000~sep=4 }% % \end{macrocode} % % \subsection{Related to \Pkg{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}% use the new abbreviations % \end{macrocode} % % \subsection{Related to \Pkg{kpfonts}} % % We robustify the "\itshape" redefinition (in case of "easyscsl" option), that % is not robust in \pkg{kpfonts} code % (cf. \url{https://groups.google.com/d/msg/fr.comp.text.tex/hIi97ipK5qA/WJoPwvH-p1UJ}). % \begin{macrocode} \ifkp@easyscsl \DeclareRobustCommand{\itshape}{\not@math@alphabet\itshape\mathit% \ifthenelse{\equal{\f@shape}{\scdefault}}{\fontshape{scsl}}{% \fontshape\itdefault}\selectfont} \fi % \end{macrocode} % % 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} % % \subsection{Related to \Pkg{draftwatermark}} % % \begin{macrocode} \@ifpackageloaded{draftwatermark}{% \SetWatermarkColor{gray!10}% \SetWatermarkFontSize{30mm}% \SetWatermarkText{\MakeUppercase{\c_@@_draftwatermark_string_tl}}% }{% } % \end{macrocode} % % \subsection{Related to \Pkg{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} % % \subsection{Related to \Pkg{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,% 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, title=\c_@@_editorial_board_string_tl }, _@@_tcb_inside_backcover_style/.style={% _@@_tcb_inside_cover_style, enlarge~left~by=\c_@@_inside_cover_offset_dim, title=\file_if_exist:nT { \c_@@_authors_instructions_file_tl } {% \c_@@_authors_instructions_string_tl } } } \tcbset{% _@@_tcb_bibliography_style/.style={% colback=@@_bibliography_minibios_acknowledgments_bg_color, breakable, boxrule=\c_zero_dim, sharp~corners=all,% enhanced } } \tcbset{% _@@_tcb_minibiographies_acknowledgments_style/.style={% colback=@@_bibliography_minibios_acknowledgments_bg_color, breakable, 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} % % \subsection{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} % % \subsection{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{frenchb} % module from \Pkg{babel}) from \enquote{Table} to \enquote{Tableau}. % \begin{macrocode} \addto\captionsfrench{\def\tablename{{\scshape Tableau}}}% % \end{macrocode} % % \section{Miscellaneous (re)definitions} % % We gather here miscellaneous redefinitions. % % \subsection{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} % % \subsection{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 { \MakeUppercase #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_show:N \l_@@_newtheorem_englishtitle_tl % \tl_show:N \l_@@_newtheorem_frenchtitle_tl % \tl_if_eq:NNF { \l_@@_newtheorem_frenchtitle_tl } { \l_@@_newtheorem_englishtitle_tl } % {% % \tl_set:Nf \l_@@_newtheorem_frenchtitle_tl { % \l_@@_newtheorem_englishtitle_tl % } % } % } % \tl_show:N \l_@@_newtheorem_style_tl % \tl_show:N \l_@@_newtheorem_frenchtitle_tl % \tl_show:N \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} % % \subsection{(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} % % \section{Initial configuration file} % Before the code of the \gztcl{} 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 = http://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{http://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{http://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{http://ctan.org/pkg/gzt}. Sa documentation détaillée se trouve à la page \url{http://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{http://smf.emath.fr/content/la-gazette-des-mathematiciens}. % % \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} % % \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]\"" ); } add_cus_dep('idx', 'ind', 0, 'texindy'); sub texindy{ system("texindy -L french \"$_[0].idx\""); } 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} \endinput % \end{macrocode} % % \Finale %%% Local Variables: %%% mode: tex %%% eval: (doctex-mode) %%% ispell-local-dictionary: "english" %%% TeX-command-default: "TeX" %%% TeX-master: t %%% End: