diff options
author | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2019-09-02 13:46:59 +0900 |
commit | e0c6872cf40896c7be36b11dcc744620f10adf1d (patch) | |
tree | 60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/gzt |
Initial commit
Diffstat (limited to 'macros/latex/contrib/gzt')
-rw-r--r-- | macros/latex/contrib/gzt/README.md | 81 | ||||
-rw-r--r-- | macros/latex/contrib/gzt/doc/README-TRANSLATION.md | 4 | ||||
-rw-r--r-- | macros/latex/contrib/gzt/doc/gzt-fr.pdf | bin | 0 -> 524933 bytes | |||
-rw-r--r-- | macros/latex/contrib/gzt/source/gzt.dtx | 7479 |
4 files changed, 7564 insertions, 0 deletions
diff --git a/macros/latex/contrib/gzt/README.md b/macros/latex/contrib/gzt/README.md new file mode 100644 index 0000000000..ce09c745a2 --- /dev/null +++ b/macros/latex/contrib/gzt/README.md @@ -0,0 +1,81 @@ +# 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 + +2018/04/07 v0.98 + +## Copyright + +Copyright 2014-2018 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 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. diff --git a/macros/latex/contrib/gzt/doc/README-TRANSLATION.md b/macros/latex/contrib/gzt/doc/README-TRANSLATION.md new file mode 100644 index 0000000000..b8709820a3 --- /dev/null +++ b/macros/latex/contrib/gzt/doc/README-TRANSLATION.md @@ -0,0 +1,4 @@ +# Contributions welcome! + +Currently, the `gzt` documentation is not translated in English. In case you're +interested, please contact the maintainer: `denis.bitouze@univ-littoral.fr` diff --git a/macros/latex/contrib/gzt/doc/gzt-fr.pdf b/macros/latex/contrib/gzt/doc/gzt-fr.pdf Binary files differnew file mode 100644 index 0000000000..d651976a7b --- /dev/null +++ b/macros/latex/contrib/gzt/doc/gzt-fr.pdf diff --git a/macros/latex/contrib/gzt/source/gzt.dtx b/macros/latex/contrib/gzt/source/gzt.dtx new file mode 100644 index 0000000000..45df0e4da4 --- /dev/null +++ b/macros/latex/contrib/gzt/source/gzt.dtx @@ -0,0 +1,7479 @@ +% \iffalse meta-comment +% +% File: gzt.dtx Copyright (C) 2014-2018 by +% Denis Bitouz'e <denis.bitouze@univ-littoral.fr> +% +% 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 +%</internal> +%<*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 + +2018/04/07 v0.98 + +## Copyright + +Copyright 2014-2018 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 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. +%</readme> +%<*internal> +\fi +\def\nameofplainTeX{plain} +\ifx\fmtname\nameofplainTeX\else + \expandafter\begingroup +\fi +%</internal> +%<*install> +\input l3docstrip.tex +% \input docstrip.tex +\Msg{********************************************************} +\Msg{* Installation} +\Msg{* Class: gzt 2018/04/07 v0.98} +\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.98 + +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 <denis.bitouze@univ-littoral.fr> +---------------------------------------------------------------------------- +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{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}} +}% +%</install> +%<install>\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 +%</internal> +% +% \changes{v0.9}{2015/05/02}{First CTAN version}% +% \changes{v0.95}{2016/04/03}{Second CTAN version}% +% \changes{v0.95a}{2016/10/24}{Third CTAN version}% +% \changes{v0.95b}{2016/10/24}{Fourth CTAN version}% +% \changes{v0.96}{2017/01/01}{Fifth CTAN version}% +% \changes{v0.97}{2017/02/15}{Sixth CTAN version}% +% \changes{v0.98}{2018/04/07}{Seventh CTAN version. Implementation of special +% editions.}% +% +% \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} +%</class-logo> +% \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} +%</languagemodel> +% \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} +%</datamodel> +% \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} +%</class> +% \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 +%<class> {gzt} +%<class-article> {gztarticle} + {2018/04/07} + {0.98} + { + SMF~class~for~the~French~journal^^J + "La~Gazette~des~Math'ematiciens". +%<class-article>~(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_@@_special_edition_bool +\bool_new:N \g_@@_for_authors_bool +\bool_new:N \g_@@_for_printer_bool +\bool_new:N \g_@@_cover_bool +\bool_new:N \g_@@_coverpage_bool +\bool_new:N \g_@@_inside_pages_bool +% +\bool_new:N \g_@@_no_inside_backcover_bool +%<class-article>\bool_gset_true:N \g_@@_for_authors_bool% +%<class-article>\bool_gset_true:N \g_@@_inside_pages_bool% +% \end{macrocode} +% +% \begin{macrocode} +%</class|class-article> +% \end{macrocode} +% +% \begin{macrocode} +%<*class> +% \end{macrocode} +% +% \begin{macro}{\c_@@_pagegrid_dim} +% We declare the constant dimension of the pagegrid, when enabled. +% \begin{macrocode} +\dim_const:Nn \c_@@_pagegrid_dim { 1mm} +% \end{macrocode} +% \end{macro} +% +% We define some class options: +% \begin{itemize} +% \item "pagegrid" in order to draw a grid on each page, in order to check the +% layout (mostly for debugging purpose), +% \item ... +% \end{itemize} +% +% \begin{macrocode} +\tl_gset:Nn \g_@@_frontcover_image_file_tl {\c_@@_issue_frontcover_default_image_file_tl} +\tl_gset:Nn \g_@@_special_edition_color_tl {@@_default_cover_color} +\clist_new:N \g_@@_special_edition_logos_clist +% +\keys_define:nn { gzt } +{ + pagegrid .dim_gset:N = \g_@@_pagegrid_dim, + pagegrid .default:n = {\c_@@_pagegrid_dim}, + forauthors .code:n = {% + \bool_gset_true:N \g_@@_for_authors_bool% + \bool_gset_true:N \g_@@_inside_pages_bool% + },% + forprinter .bool_gset:N = \g_@@_for_printer_bool, + frontcoverimagefile .tl_gset:N = \g_@@_frontcover_image_file_tl, + frontcoverimagefile .default:n = {frontcover}, + output .choice:, + output / frontcover .code:n = {% + \bool_gset_true:N \g_@@_for_printer_bool% + \bool_gset_true:N \g_@@_cover_bool% + },% + output / coverpage .code:n = {% + \bool_gset_true:N \g_@@_coverpage_bool% + },% + output / insidepages .code:n = {% + \bool_gset_true:N \g_@@_for_printer_bool% + \bool_gset_true:N \g_@@_inside_pages_bool% + },% + output / backcover .code:n = {% + \bool_gset_true:N \g_@@_for_printer_bool% + },% + output / web .code:n = {% + },% + specialedition .code:n = { + \bool_gset_true:N \g_@@_special_edition_bool + \bool_gset_true:N \g_@@_frontcover_without_minitoc_bool + \keys_set:nn { gzt / specialedition } {#1} + }, + specialedition / color .code:n = {% + \tl_gset:Nn \g_@@_special_edition_color_tl {#1} + },% + specialedition / minitoc .code:n = {% + \bool_gset_false:N \g_@@_frontcover_without_minitoc_bool + },% + specialedition / logos .code:n = {% + \clist_gset:Nn \g_@@_special_edition_logos_clist {#1} + },% + specialedition / backcover~image .code:n = {% + \tl_gset:Nn \g_@@_special_edition_backcover_image_tl {#1} + },% + specialedition / title .code:n = {% + \tl_gset:Nn \g_@@_special_edition_title_tl {#1} + },% + specialedition / short~title .code:n = {% + \tl_gset:Nn \g_@@_special_edition_short_title_tl {#1} + },% + specialedition / editorial~heading .code:n = {% + \tl_gset:Nn \g_@@_special_edition_editorial_heading_tl {#1} + },% + specialedition / editorial~author .code:n = {% + \_@@_people:nnnnnnnn {#1}{}{}{}{}{}{editorinchief}{} + },% +}% +% \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} +%</class> +% \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} +%<class>\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} +%<class>\bool_if:nT { \g_@@_for_authors_bool } { +%<class> \RequirePackage{draftwatermark}[2006/06/30]% +%<class>} +% \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} +%<class>\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{rsfso} +% \end{macrocode} +% +% \item Vector arrows: +% \begin{macrocode} +\RequirePackage{esvect} +% \end{macrocode} +% +% \item Hooks to do actions on every page or on the current page: +% \begin{macrocode} +\RequirePackage{everypage} +% \end{macrocode} +% +% \item For translating words in \LaTeX{}. +% \begin{macrocode} +\RequirePackage{translator}% +% \end{macrocode} +% +% \item Flexible and easy interface to page dimensions: +% \begin{macrocode} +\RequirePackage{geometry} +% \end{macrocode} +% +% \item Bilingual (French and English) documents, with French as default +% language: +% \begin{macrocode} +\RequirePackage{babel}% +% \end{macrocode} +% +% \item METAFONT and macros for Euro sign: +% \begin{macrocode} +\RequirePackage{eurosym}% +% \end{macrocode} +% +% Expandable checks for the current language: +% \begin{macrocode} +\RequirePackage{iflang}[2007/11/11]% +% \end{macrocode} +% +% \item Tagging tables of contents: +% \begin{macrocode} +%<class>\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} +%<class|class-article>\cs_set_eq:NN \_@@_orig_preamblecmds \@preamblecmds +% \end{macrocode} +% +% Create PostScript and PDF graphics in \TeX: +% \begin{macrocode} +\RequirePackage{tikz} +% \end{macrocode} +% +% Create normal/logarithmic plots in two and three dimensions: +% \begin{macrocode} +\RequirePackage{pgfplots} +% \end{macrocode} +% +% \item Environments for colored and framed text boxes, e.g. theorems: +% \begin{macrocode} +\RequirePackage{tcolorbox} +% \end{macrocode} +% +% \item A single TikZ node for the whole page: +% \begin{macrocode} +\RequirePackage{tikzpagenodes} +% \end{macrocode} +% +% \item Print page grid in background: +% \begin{macrocode} +%<class>\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} +%<class|class-article>\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=<number>', + ~otherwise~`<number>'~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.} +%<class>\msg_new:nnnn{gzt}{configuration-file-missing}{File~`\c_@@_configuration_file_string_tl'~missing!} +%<class> {The~ whole~ issue~ may~ not~ be~ conform~ if~ `\c_@@_configuration_file_string_tl'~ is~ missing.} +%<class>\msg_new:nnnn{gzt}{editorial-file-missing}{File~`\c_@@_editorial_file_string_tl'~missing!} +%<class> {The~ whole~ issue~ requires~ the~ `\c_@@_editorial_file_string_tl'~ file.} +% \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_heading_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 board of special_edition. +% \begin{macrocode} +\tl_const:Nn \c_@@_special_edition_editorial_board_string_tl {Num\'ero~sp\'ecial~de~la~Gazette~des~Math\'ematiciens~sous~la~direction~de~:} +% \end{macrocode} +% For the editorial_secretariat. +% \begin{macrocode} +\tl_const:Nn \c_@@_editorial_secretariat_string_tl {Secr\'etariat~de~r\'edaction} +% \end{macrocode} +% For the phone. +% \begin{macrocode} +\tl_const:Nn \c_@@_phone_string_tl {T\'el.} +% \end{macrocode} +% For the fax. +% \begin{macrocode} +\tl_const:Nn \c_@@_fax_string_tl {Fax} +% \end{macrocode} +% For the informations. +% \begin{macrocode} +\tl_const:Nn \c_@@_informations_string_tl {Renseignements} +% \end{macrocode} +% For the publishing director. +% \begin{macrocode} +\tl_const:Nn \c_@@_publishingdirector_string_tl {Directeur~de~la~publication} +% \end{macrocode} +% For the \textsc{issn}. +% \begin{macrocode} +\tl_const:Nn \c_@@_issn_string_tl {\textsc{issn}} +% \end{macrocode} +% For the \textsc{isbn}. +% \begin{macrocode} +\tl_const:Nn \c_@@_isbn_string_tl {\textsc{isbn}} +% \end{macrocode} +% For "\LaTeX Class". +% \begin{macrocode} +\tl_const:Nn \c_@@_latexclass_string_tl {Classe~\LaTeX{}} +% \end{macrocode} +% For "Impression". +% \begin{macrocode} +\tl_const:Nn \c_@@_printer_string_tl {Impression} +% \end{macrocode} +% For configuration file. +% \begin{macrocode} +\tl_const:Nn \c_@@_configuration_file_string_tl {gzt.cfg} +% \end{macrocode} +% For the artistic director. +% \begin{macrocode} +\tl_const:Nn \c_@@_artistic_director_string_tl {Conception~graphique} +% \end{macrocode} +% For the editorial. +% \begin{macrocode} +\AtEndPreamble{ + \bool_if:NTF {\g_@@_special_edition_bool} { + \tl_const:Nn \c_@@_editorial_heading_string_tl {Avant-propos} + }{ + \tl_const:Nn \c_@@_editorial_heading_string_tl {\'Editorial} + } +} +% \end{macrocode} +% For the editor in chief. +% \begin{macrocode} +\tl_const:Nn \c_@@_editorinchief_signatory_string_tl {\c_@@_editorinchief_string_tl~de~la~\c_@@_journal_title_string_tl} +% \end{macrocode} +% For the table of contents. +% \begin{macrocode} +\tl_const:Nn \c_@@_toc_string_tl {Sommaire} +% \end{macrocode} +% For the president message. +% \begin{macrocode} +\tl_const:Nn \c_@@_president_message_string_tl {Mot~du~pr\'esident} +% \end{macrocode} +% For the president. +% \begin{macrocode} +\tl_const:Nn \c_@@_president_signatory_string_tl {pr\'esident~de~la~\g_@@_smf_short_string_tl} +% \end{macrocode} +% For the date of the editor in chief's message. +% \begin{macrocode} +\tl_const:Nn \c_@@_editorinchief_message_date_string_tl {Le~\displaydate{@@_editorinchief_message_date}} +% \end{macrocode} +% For the date of the president's message. +% \begin{macrocode} +\tl_const:Nn \c_@@_president_message_date_string_tl {Le~} +% \end{macrocode} +% For the special editions. +% \begin{macrocode} +\tl_const:Nn \c_@@_special_edition_string_tl {\c_space_tl{}sp{\'e}cial} +\tl_const:Nn \c_@@_long_special_edition_string_tl {Numéro\c_@@_special_edition_string_tl}% +\tl_const:Nn \c_@@_short_special_edition_string_tl {\No{}\c_@@_special_edition_string_tl}% +% \end{macrocode} +% For the front cover header text. +% \begin{macrocode} +\AtEndPreamble{ + \tl_const:Nn \c_@@_frontcover_header_string_tl { + \bool_if:NT {\g_@@_special_edition_bool} { + \tl_upper_case:n {\c_@@_long_special_edition_string_tl} + \medskip + \par + \normalsize + } + \l_@@_uppercased_date_format\displaydate{@@_date} + \bool_if:NF {\g_@@_special_edition_bool} { + \c_space_tl + \textendash{} + \c_space_tl + \No + \int_use:N\g_@@_issue_number_int% + } + } +} +% \end{macrocode} +% For the graphics extensions. +% \begin{macrocode} +\clist_const:Nn \c_@@__graphics_extensions_clist {png,PNG,jpg,JPG,jpeg,JPEG,pdf,PDF} +% \end{macrocode} +% For the pdftitle text. +% \begin{macrocode} +\tl_const:Nn \c_@@_pdftitle_string_tl { + \c_@@_journal_title_string_tl + % \c_space_tl + % \textendash{} + % \c_space_tl + % \l_@@_uppercased_date_format{\displaydate{@@_date}} + \c_space_tl + \textendash{} + \c_space_tl + N° + \bool_if:NTF {\g_@@_special_edition_bool} { + \c_@@_special_edition_string_tl + \c_space_tl + \g_@@_special_edition_title_tl + }{ + \int_use:N\g_@@_issue_number_int + } +} +% \end{macrocode} +% For the name of the directory containing the editorial and the president message. +% \begin{macrocode} +\tl_const:Nn \c_@@_frontmatter_directory_string_tl {frontmatter} +% \end{macrocode} +% For the name of the directory containing the 3rd and 4th cover pages. +% \begin{macrocode} +\tl_const:Nn \c_@@_backmatter_directory_string_tl {backmatter} +% \end{macrocode} +% For the name of the file containing the editorial. +% \begin{macrocode} +\tl_const:Nn \c_@@_editorial_file_string_tl {\c_@@_frontmatter_directory_string_tl/editorial} +% \end{macrocode} +% For the name of the file containing the president message. +% \begin{macrocode} +\tl_const:Nn \c_@@_president_message_file_string_tl {\c_@@_frontmatter_directory_string_tl/presidentmessage} +% \end{macrocode} +% For the path to the current issue's directory. +% \begin{macrocode} +\tl_const:Nn \c_@@_issue_path_string_tl {\int_use:N \g_@@_issue_number_int} +% \end{macrocode} +% For the name and path of the images directory. +% \begin{macrocode} +\tl_const:Nn \c_@@_images_directory_string_tl {images} +\tl_const:Nn \c_@@_issue_images_path_string_tl {% \c_@@_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 text of the special issue's abstract back cover. +% \begin{macrocode} +\tl_const:Nn \c_@@_special_edition_backcover_text_file_string_tl {abstract_backcover} +\tl_const:Nn \c_@@_special_edition_backcover_page_file_string_tl {\c_@@_backmatter_directory_string_tl/\c_@@_special_edition_backcover_text_file_string_tl} +% \end{macrocode} +% For the name of the file of the special issue's picture back cover. +% \begin{macrocode} +\tl_const:Nn \c_@@_special_edition_backcover_picture_string_tl {picture_backcover} +\tl_const:Nn \c_@@_special_edition_backcover_page_picture_string_tl {\c_@@_backmatter_directory_string_tl/\c_@@_special_edition_backcover_picture_string_tl} +% \end{macrocode} +% For the name of the file containing the acronyms. +% \begin{macrocode} +\tl_const:Nn \c_@@_acronyms_file_string_tl {\c_@@_class_name_tl acronyms} +% \end{macrocode} +% For authors' instructions file. +% \begin{macrocode} +\tl_const:Nn \c_@@_authors_instructions_file_extension_tl {ain} +\tl_const:Nn \c_@@_authors_instructions_file_tl {\c_sys_jobname_str.\c_@@_authors_instructions_file_extension_tl} +% \end{macrocode} +% For the few words about the front cover. +% \begin{macrocode} +\tl_const:Nn \c_@@_about_frontcover_string_tl {\`A~propos~de~la~couverture.} +% \end{macrocode} +% For the credit of the front cover. +% \begin{macrocode} +\tl_const:Nn \c_@@_credit_frontcover_string_tl {cr\'edit} +% \end{macrocode} +% For the authors instructions. +% \begin{macrocode} +\tl_const:Nn \c_@@_authors_instructions_string_tl {Instructions~aux~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} +%<class> \bool_if:nF { \g_@@_inside_frontcover_bool || \g_@@_backmatter_bool || \g_@@_for_authors_bool } +%<class> { +%<class> \c_space_tl\textendash{}\c_space_tl +%<class> \l_@@_uppercased_date_format\displaydate{@@_date} +%<class> \bool_if:NF {\g_@@_special_edition_bool} { +%<class> \c_space_tl +%<class> \textendash{}\c_space_tl +%<class> \textcolor{@@_smf_number_color}{\No\int_use:N\g_@@_issue_number_int} +%<class> } +%<class> } + } +} +% \end{macrocode} +% For the name of the file containing the \textsc{smf} logo. +% \begin{macrocode} + \file_if_exist:nTF { logo_SMF.pdf }{% + \tl_const:Nn \c_@@_smf_logo_file_string_tl {logo_SMF} + }{ + \tl_const:Nn \c_@@_smf_logo_file_string_tl {example-image} + } +% \end{macrocode} +% For the name of the file containing the bibliography of the current issue. +% \begin{macrocode} +% \tl_const:Nn \c_@@_issue_bib_file_string_tl {issue-\c_sys_jobname_str.bib} +\tl_const:Nn \c_@@_issue_bib_file_suffix_string_tl {@@} +\tl_const:Nn \c_@@_issue_bib_file_string_tl {\c_sys_jobname_str\c_@@_issue_bib_file_suffix_string_tl.bib} +\tl_const:Nn \c_@@_issue_bib_path_string_tl {\c_@@_issue_bib_file_string_tl} +% \end{macrocode} +% For the prefix of the bibliographic key of each article. +% \begin{macrocode} +\bool_if:NTF {\g_@@_special_edition_bool} { + \tl_const:Nn \c_@@_issue_bib_key_tl {\int_use:N \g_@@_issue_number_int} +}{ + \tl_const:Nn \c_@@_issue_bib_key_tl {special-edition} +} +% \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 +\bool_new:N \g_@@_frontcover_without_minitoc_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 + ,bottom=11mm + ,footskip=\c_zero_dim + ,outer=\c_zero_dim + ,inner=\c_@@_potential_layoutoffset_dim + ,nomarginpar% + }% +}{ + \tl_const:Nn \c_@@_frontcover_geometry_tl {% + ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} + ,layoutoffset=\c_@@_potential_layoutoffset_dim + ,bindingoffset=\c_@@_potential_bindingoffset_dim + ,top=\c_@@_topmargin_frontcover_dim + ,headsep=\c_@@_headsep_frontcover_dim + ,headheight=\c_@@_headheight_dim + % ,bottom=\c_zero_dim + ,bottom=11mm + ,footskip=\c_zero_dim + ,hmargin=\c_@@_potential_layoutoffset_dim + ,nomarginpar% + }% +} +% \end{macrocode} +% +% We create a constant token list that contains the geometry of the inside front +% and back covers. +% \begin{macrocode} +\bool_if:NTF {\g_@@_cover_bool} { + \tl_const:Nn \c_@@_inside_cover_geometry_tl {% + ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} + ,layoutvoffset=\c_@@_potential_layoutoffset_dim + ,bindingoffset=\c_@@_potential_bindingoffset_dim + ,top=\c_@@_topmargin_inside_cover_dim + ,headheight=\c_@@_headheight_dim + ,headsep=\c_@@_headsep_inside_frontcover_dim + ,bottom=\c_@@_botmargin_dim + ,footskip=\c_@@_footskip_dim + ,inner=\c_@@_innermargin_inside_cover_dim-\c_@@_potential_layoutoffset_dim + ,outer=\c_@@_outermargin_inside_cover_dim+\c_@@_potential_layoutoffset_dim + ,nomarginpar% + }% +}{ + \tl_const:Nn \c_@@_inside_cover_geometry_tl {% + ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} + ,layoutoffset=\c_@@_potential_layoutoffset_dim + ,bindingoffset=\c_@@_potential_bindingoffset_dim + ,top=\c_@@_topmargin_inside_cover_dim + ,headheight=\c_@@_headheight_dim + ,headsep=\c_@@_headsep_inside_frontcover_dim + ,bottom=\c_@@_botmargin_dim + ,footskip=\c_@@_footskip_dim + ,inner=\c_@@_innermargin_inside_cover_dim + ,outer=\c_@@_outermargin_inside_cover_dim + ,nomarginpar% + }% +} +% \end{macrocode} +% +% We create a constant token list that contains the geometry of the front matter. +% \begin{macrocode} +\tl_const:Nn \c_@@_front_matter_geometry_tl {% + ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} + ,layoutoffset=\c_@@_potential_layoutoffset_dim + % ,bindingoffset=\c_@@_potential_bindingoffset_dim + ,top=\c_@@_topmargin_front_matter_dim% + ,headheight=\c_@@_headheight_dim + ,headsep=\c_@@_headsep_front_matter_dim + ,bottom=\c_@@_botmargin_dim + ,footskip=\c_@@_footskip_dim% + ,inner=\c_@@_innermargin_dim+\c_@@_front_matter_extra_innermargin_dim% + ,outer=\c_@@_outermargin_dim+\c_@@_front_matter_extra_outermargin_dim% + ,nomarginpar% +}% +% \end{macrocode} +% +% We create a constant token list that contains the geometry of the main pages. +% \begin{macrocode} +\tl_const:Nn \c_@@_main_geometry_tl {% + ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} + ,layoutoffset=\c_@@_potential_layoutoffset_dim + % ,bindingoffset=\c_@@_potential_bindingoffset_dim + ,top=\c_@@_topmargin_dim-15mm% + ,headheight=\c_@@_headheight_dim + ,headsep=\c_@@_headsep_dim-18mm + ,bottom=\c_@@_botmargin_dim + ,footskip=\c_@@_footskip_dim + ,inner=\c_@@_innermargin_dim + ,outer=\c_@@_outermargin_dim +}% +% \end{macrocode} +% +% We create a constant token list that contains the geometry of the back cover. +% \begin{macrocode} +\tl_const:Nn \c_@@_backcover_geometry_tl {% + ,layoutsize={\c_@@_layoutwidth_dim,\c_@@_layoutheight_dim} + ,layoutoffset=\c_@@_potential_layoutoffset_dim + % ,bindingoffset=\c_@@_potential_bindingoffset_dim + ,top=\c_@@_topmargin_backcover_dim% + % ,top=\c_@@_topmargin_dim-15mm% + % ,headheight=\c_@@_headheight_dim + % ,headsep=\c_@@_headsep_dim-18mm + ,bottom=\c_@@_bottommargin_backcover_dim + % ,footskip=\c_@@_footskip_dim + ,inner=\c_@@_innermargin_backcover_dim + ,outer=\c_@@_outermargin_backcover_dim + ,nomarginpar + ,hcentering + ,twoside=false +} +% \end{macrocode} +% +% \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} +%</class|class-article> +% \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_acknowledgements_bg_color}{black!10} +\colorlet{@@_headrule_color}{@@_generic_light_color!65} +\colorlet{@@_circlerule_color}{@@_generic_dark_color!65} +\colorlet{@@_frontmatter_text_color}{black!75} +\colorlet{@@_people_color}{@@_generic_dark_color} +\colorlet{@@_arrayrule_color}{@@_generic_dark_color} +\colorlet{@@_acknowledgements_color}{@@_generic_dark_color} +\colorlet{@@_question_color}{@@_generic_dark_color} +\colorlet{@@_boxed_issue_number_bg_color}{@@_generic_dark_color} +\colorlet{@@_rule_in_toc_color}{@@_generic_dark_color} +\colorlet{@@_rubric_in_toc_color}{@@_generic_dark_color} +\colorlet{@@_article_in_toc_color}{@@_frontmatter_text_color} +\colorlet{@@_rubric_title_color}{@@_generic_light_color} +\colorlet{@@_article_title_color}{@@_generic_dark_color} +\colorlet{@@_section_color}{@@_generic_dark_color} +\colorlet{@@_subsection_color}{@@_generic_dark_color!90} +\colorlet{@@_subsubsection_color}{@@_generic_dark_color!80} +\colorlet{@@_rubric_abstract_color}{@@_generic_dark_color} +\colorlet{@@_article_abstract_color}{@@_generic_light_color} +\colorlet{@@_dotfill_color}{@@_generic_dark_color} +\colorlet{@@_about_frontcover_title_color}{@@_generic_dark_color} +\colorlet{@@_reflected_text_color}{@@_generic_dark_color} +\colorlet{@@_inside_frontcover_frame_bg_color}{@@_generic_dark_color!8} +\colorlet{@@_inside_frontcover_frame_title_color}{@@_generic_dark_color} +\colorlet{@@_footer_bg_color}{black!10} +\colorlet{@@_float_title_color}{@@_generic_dark_color} +\colorlet{@@_float_title_bg_color}{@@_generic_dark_color!10} +\colorlet{@@_float_frame_color}{@@_generic_dark_color!20} +\colorlet{@@_chapter_color}{@@_generic_dark_color} +\colorlet{@@_smf_number_color}{@@_generic_dark_color} +\colorlet{@@_date_color}{@@_generic_light_color} +\colorlet{@@_table_head_color}{@@_generic_dark_color!25} +\colorlet{@@_book_review_frame_bg_color}{@@_generic_dark_color!8} +\colorlet{@@_book_advertisement_bg_color}{white} +\colorlet{@@_book_advertisement_frame_color}{@@_generic_dark_color} +\colorlet{@@_default_cover_color}{white} +% \end{macrocode} +% +% \begin{macrocode} +%</class|class-article|class-logo> +% \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 that 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}% + \pagecolor{\g_@@_special_edition_color_tl} + \exp_after:wN\newgeometry\exp_after:wN{\c_@@_frontcover_geometry_tl}% + \noindent% + \bool_if:NTF {\g_@@_cover_bool} { + \hspace*{-\c_@@_potential_layoutoffset_dim} + }{ + \hspace*{-2\c_@@_potential_layoutoffset_dim} + } + \exp_after:wN\includegraphics\exp_after:wN[\g_@@_frontcover_image_options_tl]{\g_@@_frontcover_image_file_tl} + \begin{tikzpicture}[remember~picture, overlay] + \coordinate (@@_circle_minitoc_center) at + ([xshift=\g_@@_minitoc_xshift_dim-\c_@@_potential_layoutoffset_dim,yshift=\g_@@_minitoc_yshift_dim+\c_@@_potential_layoutoffset_dim]current~page.south~east) ; + \node[name=@@_circle_minitoc,shape=circle,inner~sep=\c_zero_dim,fill=\g_@@_special_edition_color_tl,text~width=\g_@@_minitoc_circle_diameter_dim] at + (@@_circle_minitoc_center) {}; + \node[text~width=\g_@@_minitoc_textwidth_dim,anchor=north~west] at + ([xshift=\c_@@_minitoc_from_circle_xshift_dim,yshift=\c_@@_minitoc_from_circle_yshift_dim]$ (@@_circle_minitoc.north)!.5!(@@_circle_minitoc.west) $) + { + \bool_if:NF {\g_@@_frontcover_without_minitoc_bool} { + \large + \color{@@_minitoc_color} + \g_@@_frontcover_minitoc_tl + } + }; + \bool_if:NT {\g_@@_minitoc_help_bool} { + \fill[red] (@@_circle_minitoc_center) circle (2pt); + } + \end{tikzpicture} + \bool_if:NT {\g_@@_cover_bool} { + \small + \begin{tikzpicture}[remember~picture, overlay] + \node[name=@@_binding_sw,inner~sep=\c_zero_dim,fill=\g_@@_special_edition_color_tl,rotate=90,anchor=west] at + ([xshift=0.45\c_@@_potential_bindingoffset_dim,yshift=15mm+\c_@@_potential_layoutoffset_dim]current~page.south~west) { + \No + \bool_if:NTF {\g_@@_special_edition_bool} { + \c_@@_special_edition_string_tl + }{ + \int_use:N\g_@@_issue_number_int + } + }; + \node[name=@@_binding_w,inner~sep=\c_zero_dim,fill=\g_@@_special_edition_color_tl,rotate=90] at + ([xshift=0.45\c_@@_potential_bindingoffset_dim]current~page.west) { + \bool_if:NTF {\g_@@_special_edition_bool} { + \tl_if_exist:NTF \g_@@_special_edition_short_title_tl {% + \g_@@_special_edition_short_title_tl + }{ + \g_@@_special_edition_title_tl + } + }{ + \MakeUppercase {\c_@@_journal_title_string_tl} + } + }; + \node[name=@@_binding_nw,inner~sep=\c_zero_dim,fill=\g_@@_special_edition_color_tl,rotate=90,anchor=east] at + ([xshift=0.45\c_@@_potential_bindingoffset_dim,yshift=-15mm-\c_@@_potential_layoutoffset_dim]current~page.north~west) { + \l_@@_uppercased_date_format\displaydate{@@_date} + }; + \end{tikzpicture} + } + \vfill% + \noindent% + \hspace*{10mm}% + \hspace*{-\c_@@_potential_layoutoffset_dim} + \includegraphics[height=22.5mm]{\c_@@_smf_logo_file_string_tl}% + \bool_if:NT {\g_@@_special_edition_bool} { + \hfill + \includegraphics[scale=1.2]{gzt-logo} + \hspace*{10mm} + } + % \vfill% + \clearpage% + \bool_gset_false:N \g_@@_frontcover_bool + \nopagecolor +} +% \end{macrocode} +% +% \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} + \bool_if:NTF {\g_@@_special_edition_bool} { + \begin{description}[leftmargin=1em,style=nextline] + \@@_display_people_by_role:n {editor} + \end{description} + }{% + \begin{description}[leftmargin=1em] + \item[\c_@@_editors_in_chief_string_tl] \ + \begin{description}[leftmargin=1em,style=nextline] + \@@_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] + \bool_if:NF {\g_@@_special_edition_bool} { + % \begin{multicols}{2} + % \setlength{\columnsep}{1mm} + \file_if_exist_input:n {\c_@@_authors_instructions_file_tl} + % \end{multicols} + % \setlength{\columnseprule}{1pt} + \tcblower + } + \begin{description}[leftmargin=1em] + \item[\c_@@_latexclass_string_tl{}~:] + \@@_display_people_by_role:n { classdesigner } + \item[\c_@@_artistic_director_string_tl{}~:] + \@@_display_people_by_role:n { graphicdesigner } + \item[\c_@@_printer_string_tl{}~:] \g_@@_printer_text_tl + \end{description} + \g_@@_font_designer_text_tl + \end{_@@_inside_cover_tcb} + } + \bool_gset_false:N \g_@@_inside_backcover_bool +} +% \end{macrocode} +% +% \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}% + \pagecolor{\g_@@_special_edition_color_tl} + \exp_after:wN\newgeometry\exp_after:wN{\c_@@_backcover_geometry_tl}% + \bool_if:NTF {\g_@@_special_edition_bool} { + \mbox{} + \vfill + \clist_map_inline:Nn \c_@@__graphics_extensions_clist{ + \file_if_exist:nT {\c_@@_issue_images_path_string_tl/\g_@@_special_edition_backcover_image_tl.#1} { + \begin{center} + \includegraphics[width=.25\linewidth]{\g_@@_special_edition_backcover_image_tl} + \end{center} + \bigskip + \clist_map_break: + } + } + \group_begin: + \leftskip.125\linewidth + \rightskip\leftskip + \file_if_exist_input:nF {\c_@@_special_edition_backcover_page_file_string_tl} + {% + \c_empty_box + } + \par + \group_end: + \vfill + \clist_if_empty:NF \g_@@_special_edition_logos_clist { + \vfill + \noindent + \clist_map_inline:Nn \g_@@_special_edition_logos_clist { + \hfill + \includegraphics[height=2cm]{#1} + \hfill + } + \mbox{} + } + }{ + \file_if_exist_input:nF {\c_@@_backcover_page_file_string_tl} + {% + \hbox{} + } + } +} +% \end{macrocode} +% +% \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). + \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{Special edition setup} +% +% \begin{macro}{\specialeditionsetup} +% We define the command that lets the user specify the special edition setup. +% \begin{macrocode} +\NewDocumentCommand \specialeditionsetup { m } { + \bool_gset_true:N \g_@@_special_edition_bool + \bool_gset_true:N \g_@@_frontcover_without_minitoc_bool + \keys_set:nn { gzt/specialedition } {#1} +} +% \end{macrocode} +% +% \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} +%</class|class-article> +% \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} +%</class> +% \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} +%</class|class-article> +% \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 + \bool_if:NF {\g_@@_special_edition_bool} { + \addcontentsline{toc}{part}{\g_@@_rubric_title_tl} + } + \thispagestyle{@@_rubric_ps} + \exp_after:wN\newgeometry\exp_after:wN{\c_@@_main_geometry_tl}% + \tl_if_empty:NTF \g_@@_rubric_abstract_tl + { + \dim_set:Nn \l_@@_rubrics_head_text_width_dim { \c_@@_rubrics_head_text_no_abstract_width_dim } + } + { + \dim_set:Nn \l_@@_rubrics_head_text_width_dim { \c_@@_rubrics_head_text_abstract_width_dim } + \tl_gset:Nn \g_@@_rubric_abstract_box_tl { + \begin{adjustbox}{valign=t,minipage=\c_@@_rubrics_abstract_width_dim} + \raggedright% + \large% + \color{@@_rubric_abstract_color}% + \g_@@_rubric_abstract_tl% + \end{adjustbox} + } + } + \tl_set:Nn \l_@@_rubric_head_text_box_tl { + \begin{adjustbox}{valign=t,minipage=\l_@@_rubrics_head_text_width_dim} + \mbox{}% + \checkoddpage% + \ifoddpage% + \raggedleft% + \else + \raggedright% + \fi% + \color{@@_rubric_title_color}% + \fontsize{20}{20}\fontseries{bx}\fontshape{sc}\selectfont% + \g_@@_rubric_title_tl% + \end{adjustbox} + } + \noindent% + \mbox{}% + \checkoddpage% + \ifoddpage% + \hspace*{\c_@@_rubric_extra_xoffset_dim} + \tl_if_empty:NF \g_@@_rubric_abstract_tl + { + \g_@@_rubric_abstract_box_tl + } + \hfill% + \l_@@_rubric_head_text_box_tl + \hspace*{\c_@@_rubric_xoffset_dim}% + \else% + \hspace*{\c_@@_rubric_xoffset_dim}% + \l_@@_rubric_head_text_box_tl + \tl_if_empty:NF \g_@@_rubric_abstract_tl + { + \hfill% + \g_@@_rubric_abstract_box_tl + \hspace*{\c_@@_rubric_extra_xoffset_dim} + } + \fi% + } + \afterpage{% + \bool_gset_false:N \g_@@_rubric_bool% + } +% \end{macrocode} +% We suppress any spurious space in case of lack of "%" at the end of the +% public macros built on "\_@@_rubric": +% \begin{macrocode} + \ignorespaces +% \end{macrocode} +% End of the definition of the private command "\_@@_rubric": +% \begin{macrocode} +} +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</class> +% \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_acknowledgements" +% environment but is repeated here if what is before provides floats but neither +% bibliography, \textsc{cv} nor acknowledgements). +% \begin{macrocode} + \FloatBarrier% +% \end{macrocode} +% +% We increment the item number in the current rubric. +% \begin{macrocode} +\int_gincr:N \g_@@_item_in_rubric_int +% \end{macrocode} +% +% We restore the original length for "\parindent" that has been set to zero in +% a possible previous \enquote{Interview} rubric. +% \begin{macrocode} +\dim_set_eq:NN \parindent \c_@@_original_parindent_dim +% \end{macrocode} +% +% We reset all acronyms entries. +% \begin{macrocode} +\glsresetall +% \end{macrocode} +% +% We reset to zero some counters at each new article. +% \begin{macrocode} +\setcounter{section}{0} +\setcounter{figure}{0} +\setcounter{table}{0} +\setcounter{footnote}{0} +% +\setcounter{equation}{0} +% +\setcounter{theorem}{0} +% \setcounter{theoreme}{0} +\setcounter{corollary}{0} +% \setcounter{corollaire}{0} +\setcounter{conjecture}{0} +\setcounter{proposition}{0} +\setcounter{lemma}{0} +% \setcounter{lemme}{0} +\setcounter{axiom}{0} +% \setcounter{axiome}{0} +% +\setcounter{definition}{0} +\setcounter{remark}{0} +% \setcounter{remarque}{0} +\setcounter{example}{0} +% \setcounter{exemple}{0} +\setcounter{notation}{0} +% \end{macrocode} +% +% We store the unique bibliographic key of the current article in the +% "\g_@@_article_bib_key_tl" token list. +% \begin{macrocode} +\tl_gset:Nn \g_@@_article_bib_key_tl {% + \c_@@_issue_bib_key_tl + -art- + \int_use:N \g_@@_articles_int +} +% \end{macrocode} +% +% We will populate the bibiliographic file of the current issue with the current +% article (title, author(s) and a fixed part giving by the issue number, journal +% title and date). +% +% Then, we iterate through each row of the authors database in order to get +% a token list containing the (list of the) author(s) of the current article +% formated as required by \pkg{biblatex} (\enquote{Last1, First1 [and Last2, +% First2 [and ...]]}). +% \begin{macrocode} +\DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{author-art-\int_use:N \g_@@_articles_int}]{people}{% + \l_@@_people_first_last_name_tl=first-last-name% + ,\l_@@_people_role_tl=role% +}{% + \tl_if_in:NnT \l_@@_people_role_tl { author } { + \DTLiffirstrow{% + \tl_put_right:Nx + \l_@@_people_first_last_names_tl + {\exp_not:V\l_@@_people_first_last_name_tl} + }{ + \tl_put_right:Nx + \l_@@_people_first_last_names_tl + {~and~\exp_not:V\l_@@_people_first_last_name_tl} + } + } +} +\DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{interviewee-art-\int_use:N \g_@@_articles_int}]{people}{% + \l_@@_people_first_last_name_tl=first-last-name% + ,\l_@@_people_role_tl=role% +}{% + \tl_if_in:NnT \l_@@_people_role_tl { interviewee } { + \DTLiffirstrow{% + \tl_put_right:Nx + \l_@@_people_first_last_names_tl + {\exp_not:V\l_@@_people_first_last_name_tl} + }{ + \tl_put_right:Nx + \l_@@_people_first_last_names_tl + {~and~\exp_not:V\l_@@_people_first_last_name_tl} + } + } +} +% \end{macrocode} +% +% We now populate the bibiliographic file. +% \begin{macrocode} +\tl_if_empty:NF \g_@@_title_tl {% + \iow_now:Nx \g_@@_bib_out_iow {% + @article{ + \g_@@_article_bib_key_tl, + \iow_newline: + title={\exp_not:V\g_@@_title_tl}, + \iow_newline: + \tl_if_empty:NF \g_@@_subtitle_tl {% + subtitle={\exp_not:V\g_@@_subtitle_tl}, + \iow_newline: + } + \tl_if_eq:NNF { \g_@@_short_title_tl } { \g_@@_title_tl } {% + shorttitle={\exp_not:V\g_@@_short_title_tl}, + \iow_newline: + }% + \tl_if_empty:NF \l_@@_people_first_last_names_tl + { + author={\exp_not:V\l_@@_people_first_last_names_tl}, + \iow_newline: + } + options={skipbib}, + \iow_newline: + crossref = {\c_@@_issue_bib_key_tl} + } + \iow_newline: + }% +}% +% +\tl_set:Nn \l_@@_bullet_and_rule_odd_tl +{% + \begin{tikzpicture}[remember~picture,overlay] + \draw[fill=@@_circlerule_color,draw=@@_circlerule_color,line~width=0.7mm] + ([xshift=-\c_@@_innermargin_dim-\c_@@_potential_layoutoffset_dim]0,0 -| current~page.west) -- (\linewidth,0);% + \fill[@@_circlerule_color] (\linewidth-2\pgflinewidth,0) circle [radius=2.75mm]; + \end{tikzpicture}% +}% +\tl_set:Nn \l_@@_bullet_and_rule_even_tl +{% + \begin{tikzpicture}[remember~picture,overlay] + \draw[fill=@@_circlerule_color,draw=@@_circlerule_color,line~width=0.7mm] + (0,0 -| current~page.east) -- (0,0);% + \fill[@@_circlerule_color] (0,0) circle [radius=2.75mm]; + \end{tikzpicture}% +}% +\tl_set:Nn \l_@@_title_box_tl +{% + \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} +%<class-article>\hypersetup{pdftitle=\g_@@_short_title_tl,pdfauthor=\l_@@_people_first_last_names_tl} +% \end{macrocode} +% +% \begin{macrocode} +%</class|class-article> +% \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} +%</class> +% \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} +% +% 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} +% +% \begin{macrocode} +%</class|class-article> +% \end{macrocode} +% +% \begin{macrocode} +%<*class> +% \end{macrocode} +% +% 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 (only for the issue's class), which has to be +% located in the \TeX{} search path: at least one such a file is provided by the +% class and located in the same directory as the class file. This file is loaded +% at the end of preamble instead of begin of the document in order some settings +% needed in preamble are taken in account. +% \begin{macrocode} +\AtEndPreamble{ + \file_if_exist_input:nF {\c_@@_configuration_file_string_tl} + { + \msg_error:nn { gzt } { configuration-file-missing } + } +} +% \end{macrocode} +% +% We make use of \pkg{etoc} to perform the special layout of the table of +% contents. For convenience, it is included in a (long)table (from +% \Pkg{longtable}) and the following code mainly comes from the \pkg{etoc}'s +% documentation. +% \begin{macrocode} +\@ifpackageloaded{etoc}{% + \newif\ifShowPartPageInToc % used before \part{Livres} +% cf etoc manual section Typesetting the TOC as a table +% we use "\unexpanded" rather than more cumbersome but Knuthian "\toks" registers + \newtoks\toctabletok + \newcommand*\appendtotok[2]{% #1=toks variable, #2=macro, expands only once #2 + #1\expandafter\expandafter\expandafter {\expandafter\the\expandafter #1#2}} + \newcommand*\PreparePart{% + \edef\toctablepiece {% + \ExceptFirstPart {\noexpand\\[-1.5mm]}% + \unexpanded{% + \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}% + }% + }% + \bool_if:NTF {\g_@@_special_edition_bool} { + \tl_set:Nn \l_tmpa_tl {\c_@@_short_special_edition_string_tl} + }{ + \tl_set:Nn \l_tmpa_tl {\No\int_use:N\g_@@_issue_number_int} + } + \begin{adjustbox}{valign=t} + \begin{tcolorbox}[% + enhanced,% + title=\l_tmpa_tl,%\int_use:N \g_@@_issue_number_int,% + fonttitle=\Large,% + colback=white,% + sharp~corners=all,% + height=33mm,% + boxrule=\c_zero_dim,% + % frame~hidden,% + attach~boxed~title~to~top~left,% + tikznode~boxed~title={minimum~width=\c_@@_boxed_issue_number_width_dim},% + boxed~title~style={% + size=minimal,% + height=\c_@@_boxed_issue_number_height_dim,% + center~upper,% + before={},% + colback=@@_boxed_issue_number_bg_color,% + sharp~corners=all,% + frame~hidden,% + valign=center,% + }% + ] + \@@_reflected_text:n { #2 }% + \end{tcolorbox} + \end{adjustbox}% + }% + \par% +} +% \end{macrocode} +% +% \begin{macrocode} +\cs_new_protected:Nn \_@@_before_frontmatter_stuff: +{ + \bool_gset_true:N \g_@@_frontmatter_bool% + \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:n +{ + \_@@_before_editorial_presidentmessage:nn {}{#1} +} +\cs_new_protected:Nn \_@@_after_display_editorial: +{ + \_@@_after_editorial_presidentmessage: {} + \hspace*{\fill}% + \bool_if:NTF {\g_@@_special_edition_bool} { + \AtNextCitekey{\defcounter{maxnames}{100}} + \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -editorinchief- 1} + }{ + \DTLforeach*[\DTLiseq{\l_@@_people_role_tl}{editorinchief}]{people}{% + \l_@@_firstlastname=first-last-name% + ,\l_@@_people_role_tl=role% + }{% + \_@@_citeauthor_no_firstinits:n {\c_@@_issue_bib_key_tl -editorinchief- \exp_not:V\DTLcurrentindex}% + } + } + % + \_@@_after_frontmatter_stuff: {} +} +\cs_new_protected:Nn \_@@_display_editorial:n +{ + \_@@_before_display_editorial:n {#1} + \file_if_exist_input:nF {\c_@@_editorial_file_string_tl} + {% + \msg_error:nn { gzt } { editorial-file-missing } + } + \_@@_after_display_editorial: {} +} +\AtEndPreamble{% + \tl_set_eq:NN \g_@@_editorial_heading_tl \c_@@_editorial_heading_string_tl + \bool_if:NT {\g_@@_special_edition_bool} { + \tl_if_empty:NF \g_@@_special_edition_editorial_heading_tl {% + \tl_set_eq:NN \g_@@_editorial_heading_tl \g_@@_special_edition_editorial_heading_tl + } + } + \NewDocumentCommand \editorial { O{\g_@@_editorial_heading_tl} } + { + \bool_if:NF {\g_@@_for_authors_bool} { + \_@@_display_editorial:n {#1} + } + } +} +% \end{macrocode} +% +% \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}{} + \bool_if:NTF {\g_@@_special_edition_bool} { + \bookmark[dest=@@_toc,level=chapter]{\c_@@_toc_string_tl} + }{ + \bookmark[dest=@@_toc,level=part]{\c_@@_toc_string_tl} + } + \etocsettocdepth.toc{chapter}% + \tableofcontents + \the\toctabletok + \_@@_after_frontmatter_stuff: {} +} +\NewDocumentCommand \gzttableofcontents {} +{ + \bool_if:NF {\g_@@_for_authors_bool} { + \_@@_display_toc: {} + } +} +% \end{macrocode} +% +% \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} +% +% \begin{macrocode} +%</class> +% \end{macrocode} +% +% \begin{macrocode} +%<*class|class-article> +% \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 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} +%</class|class-article> +% \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} +%</class> +% \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 {% + \bool_if:NTF {\g_@@_special_edition_bool} { + \g_@@_special_edition_title_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) {% + \Large + \bool_if:NT {\g_@@_special_edition_bool} { + \c_@@_short_special_edition_string_tl + \c_space_tl + } + \l_@@_frontmatter_head_text_tl + }% + ; + \else% + \node[% + anchor=north~west,% + align=center,% + fill=white,% + inner~xsep=3.5mm,% + outer~sep=\c_zero_dim,% + ] at + ([% + xshift=\c_@@_frontmatter_headtext_e_xshift_dim,% + yshift=\c_@@_frontmatter_headtext_yshift_dim% + ]current~page.north~west) {% + \Large + \bool_if:NT {\g_@@_special_edition_bool} { + \c_@@_short_special_edition_string_tl + \c_space_tl + } + \l_@@_frontmatter_head_text_tl + }% + ; + \fi% +} +% \end{macrocode} +% +% The mainmatter odd page head rule: +% \begin{macrocode} +\tl_new:N \g_@@_mainmatter_oddpage_headrule_tl +\tl_gset:Nn \g_@@_mainmatter_oddpage_headrule_tl {% + \draw [@@_headrule_color,line~width=\c_@@_header_line_width_dim] + ([yshift=\c_@@_header_line_yshift_dim]current~page~header~area.south~east) + -- + ([yshift=\c_@@_header_line_yshift_dim]current~page~header~area.south~west -| current~page.north~west) + ; +} +% \end{macrocode} +% +% The mainmatter even page head rule: +% \begin{macrocode} +\tl_new:N \g_@@_mainmatter_evenpage_headrule_tl +\tl_gset:Nn \g_@@_mainmatter_evenpage_headrule_tl {% + \draw [@@_headrule_color,line~width=\c_@@_header_line_width_dim] + ([yshift=\c_@@_header_line_yshift_dim]current~page~header~area.south~west) + -- + ([yshift=\c_@@_header_line_yshift_dim]current~page~header~area.south~east -| current~page.north~east) + ; +} +% \end{macrocode} +% +% We momentarily switch to a \enquote{normal} category code régime in which the +% colon (:) is treated as \enquote{letter}, which is necessary where (here +% \pkg{TikZ} and \pkg{tcolorbox}) code makes use of colon. +% \begin{macrocode} +\ExplSyntaxOff +\tcbuselibrary{breakable,skins,hooks,xparse,theorems,listingsutf8} +\usetikzlibrary{babel,fadings,positioning,calc} +% \end{macrocode} +% +% We create a \enquote{minus} version of each of the previous styles for floats +% with number (and keywords) but without any caption: in such cases, the number +% should not be followed by any separator. +% \begin{macrocode} +\tcbset{% + new/blend into/tables-/.style={% + use counter*=table,% + /tcb/code={\appto\tcb@new@colopt{,before title={\fnum@table}}}},% + new/blend into/figures-/.style={% + use counter*=figure,% + /tcb/code={\appto\tcb@new@colopt{,before title={\fnum@figure}}}},% +} +% \end{macrocode} +% +% \begin{macrocode} +%</class|class-article> +% \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} +%</class> +% \end{macrocode} +% +% \begin{macrocode} +%<*class|class-article> +% \end{macrocode} +% +% \begin{macrocode} +\ExplSyntaxOn +% \end{macrocode} +% +% \begin{macrocode} +%</class|class-article> +% \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}{ + \huge + \bool_if:NT {\g_@@_special_edition_bool} { + \color{@@_generic_dark_color} + } + \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} +%</class> +% \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} + ]% + [ +%<class-article> \c_@@_footer_size_font_tl \c_@@_compiled_string_tl\today + ]% + { +%<class-article> \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} +%</class|class-article> +% \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} +%</class> +% \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{% +%<class> \bool_if:nF { \g_@@_frontcover_bool || \g_@@_backcover_bool }{ + \bool_if:NF {\g_@@_advertisement_bool} { + \tikz[remember~picture,overlay] { \g_@@_background_footer_tl }% + }% +%<class> }% +} +% \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 +% acknowledgements. +% \begin{macrocode} + \FloatBarrier% + \begin{_@@_minibiographies_acknowledgements_tcbox} + \@@_display_people_by_role:n { author-art-\int_use:N \g_@@_articles_int } + \tl_if_empty:NF \g_@@_article_acknowledgements_tl + {% + \par% + \bigskip% + \begin{adjustbox}{valign=t,minipage=\linewidth} + \color{@@_acknowledgements_color}% + \g_@@_article_acknowledgements_tl + \end{adjustbox} + } + \end{_@@_minibiographies_acknowledgements_tcbox} + \bool_gset_true:N \g_@@_previous_article_with_bibliography_or_minibio_bool + % + \tl_gclear:N \g_@@_people_affiliation_tl + \tl_gclear:N \g_@@_people_email_tl + \tl_gclear:N \g_@@_people_minibio_tl + \tl_gclear:N \g_@@_people_photo_tl + \tl_gclear:N \g_@@_people_webpage_tl + \tl_gclear:N \g_@@_article_acknowledgements_tl +% \end{macrocode} +% +% We clear the authors database for this new article (XXX: to be moved to the +% authors' minibiographies area). +% \begin{macrocode} + \DTLgcleardb{_@@_authors} + \DTLgcleardb{_@@_interviewees} +} +% \end{macrocode} +% \end{macro} +% 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_acknowledgements" environment and enter in +% the multicolumn environment. +% \end{itemize} +% \begin{macrocode} +\cs_set_eq:NN \_@@_printbibliography \printbibliography +\RenewDocumentCommand \printbibliography { s O{} } { + \bool_if:NT {\g_@@_multicols_bool} { + \end{multicols}% + } +% \end{macrocode} +% We force all the previous floats to be processed no later on the page +% following the beginning of the bibliography, \textsc{cv} or +% acknowledgements. +% \begin{macrocode} +% \afterpage{% + \FloatBarrier% +% }% + \begin{_@@_bibliography_tcbox} + \_@@_printbibliography[heading=subbibliography,resetnumbers,#2] + \end{_@@_bibliography_tcbox} + % + \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} +%</class|class-article> +% \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. In case of special edition, we set the rubric +% title first as empty and then as the special edition's title plus a constant +% string. Otherwise, this title is freely set. +% \begin{macrocode} +\NewDocumentCommand \rubric {O{}mm} +{ + \bool_if:NTF {\g_@@_special_edition_bool} { + \_@@_rubric:nnn {#1}{#2}{#3}% + \tl_gset:Nn \g_@@_rubric_title_tl {% + \c_@@_short_special_edition_string_tl + \c_space_tl + \g_@@_special_edition_title_tl + } + }{ + \_@@_rubric:nnn {#1}{#2}{#3}% + } +} +% \end{macrocode} +% \end{macro} +% +% \begin{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} +%</class> +% \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_acknowledgements_tcbox}{ O{} } +{ + _@@_tcb_minibiographies_acknowledgements_style, + #1 +} +% \end{macrocode} +% +% We provide a public environment "inset" for insets that has the same layout as +% minibiographies and acknowledgements. Its layout is based upon \pkg{tcolorbox} +% features. +% \begin{macrocode} +\DeclareTColorBox{inset}{ O{} } +{ + _@@_tcb_minibiographies_acknowledgements_style, + #1 +} +% \end{macrocode} +% +% We create a "bookreview" environment for the book reviews. +% \begin{macrocode} +\NewDocumentEnvironment{bookreview}{ O{} m } +{ + \keys_set:nn { gzt/bookreview } { #2 } + \begin{_@@_book_review}[#1] + \xpatchfieldformat{title}{mkbibemph}{textbf}{}{}% + \xpretonameformat{author}{\color{@@_people_color}}{}{}% + \g_@@_blx_given_first_inits_false_tl + \noindent% + \parbox[][21.5mm][l]{\linewidth}{\fullcite{\g_@@_bookreview_bibkey_tl}} + \tcblower +}{ + \begin{flushright} + % \g_@@_reviewer_tl + \bigskip + \citereviewer{\g_@@_bookreview_bibkey_tl}\\ + \citereviewerinstitution{\g_@@_bookreview_bibkey_tl} + \end{flushright} + % \vspace*{10mm} + \mbox{} + \end{_@@_book_review} +} +% \end{macrocode} +% +% \begin{macrocode} +\DeclareTColorBox{_@@_book_advertisement}{ O{} } +{ + _@@_tcb_book_advertisement_box_style, + #1 +} +\DeclareTColorBox{_@@_inside_cover_tcb}{ O{} } +{ + #1 +} +% \end{macrocode} +% +% We create a "bookadvertisement" environment for the book advertisements. +% \begin{macrocode} +\NewDocumentCommand \bookadvertisement {O{} m} +{ + \newpage{} + \mbox{} + \vfill + \begin{_@@_book_advertisement}[#1] + \fullcite{#2} + \par + \bigskip + \tcblower + \includegraphics[height=22.5mm]{\c_@@_smf_logo_file_string_tl}% + \par{} + \smallskip% + \url{\l_@@_journal_url_tl} + \end{_@@_book_advertisement} + \vfill + \newpage + \bool_gset_false:N \g_@@_advertisement_bool + \bool_gset_true:N \g_@@_mainmatter_bool +} +% \end{macrocode} +% +% \begin{macrocode} +%</class|class-article> +% \end{macrocode} +% +% \begin{macrocode} +%<*class> +% \end{macrocode} +% +% We create a variant of the "\input" macro which cleans the local +% customizations if any and, if necessary open and close the "refsection" and +% "multicols" environments. +% \begin{macrocode} +\NewDocumentCommand \gztinput { m m } {% + \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} +%</class> +% \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} +%</class-article> +% \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, + }, + _@@_tcb_inside_backcover_style/.style={% + _@@_tcb_inside_cover_style, + enlarge~left~by=\c_@@_inside_cover_offset_dim, + } +} +\AtEndPreamble{% + \bool_if:NTF {\g_@@_special_edition_bool} { + \tcbset{ + _@@_tcb_inside_frontcover_style/.append~style={% + title=\c_@@_special_edition_editorial_board_string_tl + }, + _@@_tcb_inside_backcover_style/.append~style={% + notitle + }, + } + }{ + \tcbset{ + _@@_tcb_inside_frontcover_style/.append~style={% + title=\c_@@_editorial_board_string_tl + }, + _@@_tcb_inside_backcover_style/.append~style={% + title=\file_if_exist:nT { \c_@@_authors_instructions_file_tl } {% + \c_@@_authors_instructions_string_tl + } + }, + } + } +} +\tcbset{% + _@@_tcb_bibliography_style/.style={% + colback=@@_bibliography_minibios_acknowledgements_bg_color, + breakable, + boxrule=\c_zero_dim, + sharp~corners=all,% + enhanced + } +} +\tcbset{% + _@@_tcb_minibiographies_acknowledgements_style/.style={% + colback=@@_bibliography_minibios_acknowledgements_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_if_eq:NNF { \l_@@_newtheorem_frenchtitle_tl } { \l_@@_newtheorem_englishtitle_tl } + % {% + % \tl_set:Nf \l_@@_newtheorem_frenchtitle_tl { + % \l_@@_newtheorem_englishtitle_tl + % } + % } + % } + \_@@_new_theorem:nnVV {style=\l_@@_newtheorem_style_tl}{#2}{\l_@@_newtheorem_frenchtitle_tl}{\l_@@_newtheorem_englishtitle_tl} +} +% \end{macrocode} +% +% Finally, we define some usual theorems: +% \begin{macrocode} +\newtheorem[frenchtitle=Th\'eor\`eme]{theorem} +% \newtheorem[frenchtitle=Th\'eor\`eme,englishtitle=Theorem]{theoreme} +\newtheorem[frenchtitle=Corollaire]{corollary} +% \newtheorem[englishtitle=corollary]{corollaire} +\newtheorem{conjecture} +\newtheorem{proposition} +\newtheorem[frenchtitle=Lemme]{lemma} +% \newtheorem[englishtitle=Lemma]{lemme} +\newtheorem[frenchtitle=Axiome]{axiom} +% \newtheorem[englishtitle=Axiom]{axiome} +% +\newtheorem[style=definition,frenchtitle=D\'efinition]{definition} +\newtheorem[style=definition,frenchtitle=Remarque]{remark} +\newtheorem[style=definition,frenchtitle=Exemple]{example} +\newtheorem[style=definition]{notation} +% +\let\proof\relax +\newtheorem[style=proof,frenchtitle=Preuve]{proof} +% +\cs_new_protected:Nn \_@@_clone_theorem:nn +{ + \NewDocumentEnvironment{#1}{} + { + \begin{#2} + } + { + \end{#2} + } + \NewDocumentEnvironment{#1*}{} + { + \begin{#2*} + } + { + \end{#2*} + } +} +\_@@_clone_theorem:nn {theoreme} {theorem} +\_@@_clone_theorem:nn {corollaire}{corollary} +\_@@_clone_theorem:nn {lemme}{lemma} +\_@@_clone_theorem:nn {axiome}{axiom} +\_@@_clone_theorem:nn {remarque}{remark} +\_@@_clone_theorem:nn {exemple}{example} +\_@@_clone_theorem:nn {preuve}{proof} +% \end{macrocode} +% +% \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} +%</class|class-article> +% \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} +%</configuration> +% \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} +%</class-logo> +% \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} +%</readme-pictograms> +% \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} +%</latexmkrc> +% \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: |