diff options
Diffstat (limited to 'macros/luatex/latex/letgut/doc/letgut-code.tex')
-rw-r--r-- | macros/luatex/latex/letgut/doc/letgut-code.tex | 3361 |
1 files changed, 0 insertions, 3361 deletions
diff --git a/macros/luatex/latex/letgut/doc/letgut-code.tex b/macros/luatex/latex/letgut/doc/letgut-code.tex deleted file mode 100644 index 672935a5fb..0000000000 --- a/macros/luatex/latex/letgut/doc/letgut-code.tex +++ /dev/null @@ -1,3361 +0,0 @@ -% Created 2022-03-22 mar. 11:24 -% Intended LaTeX compiler: lualatex -\documentclass{letgut} - \setmainfont{KpRoman} -\setsansfont{KpSans} -\setmonofont[Scale = MatchLowercase]{RobotoMono} -\letgutsetup{editorial=false} -\input{listings-conf} -\author{Association GUTenberg} -\date{\today} -\title{Support for the newsletter “La Lettre GUTenberg”} -\begin{document} - - -\section{Identification} -\label{sec:org4c9ba67} - -\begin{lstlisting} -% This is file `letgut.cls', -% generated with the Emacs Org-babel utility. -% -% The original source file is letgut.org -% -% -------:| ---------------------------------------------------- -% letgut:| Class for the newsletter “La Lettre GUTenberg” -% Author:| Association GUTenberg -% E-mail:| secretariat@gutenberg.eu.org -% License:| Released under the LaTeX Project Public License -% | v1.3c or later -% See:| http://www.latex-project.org/lppl.txt -% -% Copyright (C) 1994-2022 by Association GUTenberg -% <secretariat@gutenberg.eu.org> -% -% This work may be distributed and/or modified under the -% conditions of the LaTeX Project Public License (LPPL), either -% version 1.3c of this license or (at your option) any later -% version. The latest version of this license is in the file: -% -% http://www.latex-project.org/lppl.txt -% -% This work is “maintained” (as per LPPL maintenance status) -% by Association GUTenberg. -% -\end{lstlisting} - -\section{Debugging} -\label{sec:org09b0cd2} - -\begin{lstlisting} -% \RequirePackage[ -% , check-declarations -% , enable-debug -% , backend=luatex -% ]{expl3} -\end{lstlisting} - -\section{Implementation} -\label{sec:orga99a9b5} - -These document classes can only be used with \LaTeXe, so we make -sure that an appropriate message is displayed when another \TeX{} -format is used. - -\begin{lstlisting} -\NeedsTeXFormat{LaTeX2e}[2020-10-01] -\end{lstlisting} - -We define some constant token lists immediately useful. - -\begin{lstlisting} -\ExplSyntaxOn -\tl_const:Nn \c__letgut_Lettre_tl { \emph{ Lettre } } -\tl_const:Nn \c__letgut_gutenberg_tl { GUTenberg } -\tl_const:Nn \c__letgut_Lettre_gutenberg_tl { - \c__letgut_Lettre_tl~\c_space_tl \c__letgut_gutenberg_tl -} -\tl_const:Nn \c__letgut_la_lettre_gutenberg_tl { - la~ \c__letgut_Lettre_gutenberg_tl -} -\tl_const:Nn \c__letgut_La_lettre_gutenberg_tl { - \text_titlecase_first:n \c__letgut_la_lettre_gutenberg_tl -} -\ExplSyntaxOff -\end{lstlisting} - -Now, we can announce the class name and its version: - -\begin{lstlisting} -\ProvidesExplClass{letgut} -{2022-03-22} -{0.9.1} -{ - Class~ for~ the~ newsletter~ - “\c__letgut_La_lettre_gutenberg_tl” -} -\end{lstlisting} - -\subsection{Messages} -\label{sec:org447090b} - -We specify the messages come from a class, which is letgut (see -\url{https://github.com/latex3/latex3/issues/887}). - -\begin{lstlisting} -\prop_gput:Nnn \g_msg_module_type_prop { letgut } { Class } -\end{lstlisting} - -Some messages are declared for future use. - -\begin{lstlisting} -\msg_new:nnn{letgut}{Wrong~engine}{ - The~ letgut~ class~ requires~ LuaTeX.\\\\ - You~ must~ change~ your~ typesetting~ engine~ to~ - “lualatex”~ instead~ of~ “latex”~ or~ “pdflatex” - or~ “xelatex”. -} -\msg_new:nnn{letgut}{Existing~command}{ - The~ command~ \c_backslash_str \text_lowercase:n{#1}~ - already~ exists~ and~ has~ not~ be~ overwritten~ by~ - \token_to_str:N \letgutacro{#1}{...}.~ - The~ corresponding~ acronym~ has~ to~ be~ used~ e.g.~ - like~ this:~ - \token_to_str:N \ac{ \text_lowercase:n{#1} }. -} -\msg_new:nnn{letgut}{Not~month~iso~date}{ - The~ supplied~ date~(“#1”)~ isn't~ at~ the~ month~ iso~ - date~ format~ (YYYY-MM):~ it~ will~ be~ printed~ as~ - it~ is. -} -\msg_new:nnn{letgut}{Banner~file~not~provided}{ - No~ `\c__letgut_banner_file_tl.pdf'~ file~ provided:~ - the~ banner~ will~ be~ automatically~ created. -} -\msg_new:nnn{letgut}{Editorial~file~missing}{ - File~`\c__letgut_editorial_file_tl.tex'~missing!~ - The~ editorial~ will~ be~ missing. -} -\msg_new:nnn{letgut}{Informations~file~missing}{ - File~ `\c__letgut_informations_gutenberg_file_tl.tex'~ - missing!~ The~ informations~ about~ - \c__letgut_gutenberg_tl\c_space_tl~ will~ be~ missing. -} -\msg_new:nnn{letgut}{pagecolor~inoperative~with~paper~option}{ - The~ `pagecolor=#1`~ option~ is~ inoperative~ with~ the~ `paper`~ - option:~ the~ color~ of~ the~ page~ will~ remain~ white. -} -\msg_new:nnn{letgut}{frontcover-missing}{ - You~ didn't~ use~ the~ `frontcover`~ option~ for~ the~ - bookreview~ “#1”,~ so~ the~ book~ cover~image~ will~ be~ missing:~ - are~ you~ sure? -} -\msg_new:nnn{letgut}{frontcover-file-not-found}{ - The~ book~ cover~ image~ `#2`~ you~ specified~ via~ the~ - `frontcover`~ option~ for~ the~ bookreview~ “#1”~ cannot~ be~ found. -} -\end{lstlisting} - -\subsection{Engine checking} -\label{sec:org5711d86} - -\begin{lstlisting} -\sys_if_engine_luatex:F { - \msg_fatal:nn{letgut}{Wrong~engine} -} -\end{lstlisting} - -\subsection{Declarations} -\label{sec:orga63e6a8} - -\subsubsection{Booleans} -\label{sec:orge5b5c6b} - -\begin{itemize} -\item For testing the emptyness of the title. -\begin{lstlisting} -\bool_new:N \g__letgut_title_empty_bool -\end{lstlisting} -\item For the paper (or not) output. -\begin{lstlisting} -\bool_new:N \g__letgut_paper_bool -\end{lstlisting} -\item For testing whether we currently are in a footnote or not. -\begin{lstlisting} -\bool_new:N \l__letgut_in_footnote_bool -\end{lstlisting} -\end{itemize} - -\subsubsection{Dimensions} -\label{sec:org61842b5} - -\begin{itemize} -\item Geometry of the document -\begin{lstlisting} -\dim_const:Nn \c__letgut_textheight_dim { 25cm } -\dim_const:Nn \c__letgut_textwidth_dim { 14cm } -\dim_const:Nn \c__letgut_lmargin_dim { 5cm } -\dim_const:Nn \c__letgut_tmargin_dim { 2.92cm } -% \dim_const:Nn \c__letgut_tmargin_dim { 3cm } -\dim_const:Nn \c__letgut_head_dim { 0.6cm } -\dim_const:Nn \c__letgut_headsep_dim { 0.82cm } -% \dim_const:Nn \c__letgut_headsep_dim { 0.9cm } -\dim_const:Nn \c__letgut_marginparwidth_dim { 3.74cm } -\end{lstlisting} -\item Horizontal offset of the headers and the sections titles: -\begin{lstlisting} -\dim_const:Nn \c__letgut_hoffset_dim { 3cm } -\dim_const:Nn \c__letgut_title_hoffset_dim { - -\c__letgut_hoffset_dim -} -\dim_const:Nn \c__letgut_subtitle_hoffset_dim { - \c__letgut_title_hoffset_dim -} -\dim_const:Nn \c__letgut_section_hoffset_dim { - \c__letgut_title_hoffset_dim + 1cm -} -\dim_const:Nn \c__letgut_subsection_hoffset_dim { - \c__letgut_title_hoffset_dim + 1.5cm -} -\dim_const:Nn \c__letgut_subsubsection_hoffset_dim { - \c__letgut_title_hoffset_dim + 2cm -} -\dim_const:Nn \c__letgut_paragraph_hoffset_dim { - \c__letgut_title_hoffset_dim + 2.5cm -} -\dim_const:Nn \c__letgut_subparagraph_hoffset_dim { - \c__letgut_title_hoffset_dim + 3cm -} -\end{lstlisting} -\item Distance between the baseline of the header text and the decorative line: -\begin{lstlisting} -\dim_const:Nn \c__letgut_head_rule_skip_dim { 0.115cm } -\end{lstlisting} -\item Head rule width: -\begin{lstlisting} -\dim_const:Nn \c__letgut_head_rule_width_dim { 0.03cm } -\end{lstlisting} -\item Dimensions of the banner. -\begin{itemize} -\item Thickness of the “L”. -\begin{lstlisting} -\dim_const:Nn \c__letgut_banner_thickness_dim { 4cm } -\end{lstlisting} -\item Height of the “L” (that of the text area plus 3cm). -\begin{lstlisting} -\dim_const:Nn \c__letgut_banner_height_dim { - \c__letgut_textheight_dim - + - 3cm -} -\end{lstlisting} -\end{itemize} -\item Height of the membership reminder box. -\begin{lstlisting} -\dim_new:N \g__letgut_membership_reminder_box_height_dim -\end{lstlisting} -\item Horizontal space for the frontcover in the margin in book reviews. -\begin{lstlisting} -\dim_const:Nn \c__letgut_bookreview_frontcover_margin_sep_dim { - 4mm - } -\end{lstlisting} -\item Dimensions used by the listings and the examples. -\end{itemize} -\begin{lstlisting} -\dim_const:Nn \c__letgut_height_mentions_dim { 5mm } -\dim_const:Nn \c__letgut_from_left_boundingbox_to_text_dim { 5.5mm } -\dim_const:Nn \c__letgut_number_offset_dim { 1mm } -\dim_const:Nn \c__letgut_number_sep_dim { - \c__letgut_from_left_boundingbox_to_text_dim - + - \c__letgut_number_offset_dim -} -\end{lstlisting} - -\subsubsection{Skips (lengths with rubber components)} -\label{sec:orgbda0ae2} - -The following skips, borrowed from the standard classes, are specified in -\lstinline+ex+ unit, which depends on the font used and hence have to be specified -after the class has been loaded; in fact, we postpone this at the end of the -preamble, when the font is specified (thanks to \lstinline+\setmainfont+). - -\begin{lstlisting} -\AddToHook{begindocument/before}{% -\end{lstlisting} - -Before and after: - -\begin{itemize} -\item “titles titles”: -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_title_title_skip -{ - 3.5ex plus 1ex minus .2ex -} -\skip_const:Nn \c__letgut_after_title_title_skip -{ - 2.3ex plus .2ex -} -\end{lstlisting} -\item subtitles titles: -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_subtitle_title_skip -{ - \c__letgut_before_title_title_skip -} -\skip_const:Nn \c__letgut_after_subtitle_title_skip -{ - \c__letgut_after_title_title_skip -} -\end{lstlisting} -\item sections titles: -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_section_title_skip -{ - 3.25ex plus 1ex minus .2ex -} -\skip_const:Nn \c__letgut_after_section_title_skip -{ - 1.5ex plus .2ex -} -\end{lstlisting} -\item subsections titles (identical to the sections ones): -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_subsection_title_skip -{ - \c__letgut_before_section_title_skip -} -\skip_const:Nn \c__letgut_after_subsection_title_skip -{ - \c__letgut_after_section_title_skip -} -\end{lstlisting} -\item paragraphs titles: -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_subsubsection_title_skip -{ - 1.5ex plus .5ex minus .2ex -} -\skip_const:Nn \c__letgut_after_subsubsection_title_skip -{ - 0.75ex plus 0.1ex -} -\end{lstlisting} -\item paragraphs titles (identical to the subsubsection ones): -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_paragraph_title_skip -{ - \c__letgut_before_subsubsection_title_skip -} -\skip_const:Nn \c__letgut_after_paragraph_title_skip -{ - \c__letgut_after_subsubsection_title_skip -} -\end{lstlisting} -\item subparagraphs titles (identical to the paragraph ones): -\begin{lstlisting} -\skip_const:Nn \c__letgut_before_subparagraph_title_skip -{ - \c__letgut_before_paragraph_title_skip -} -\skip_const:Nn \c__letgut_after_subparagraph_title_skip -{ - \c__letgut_after_paragraph_title_skip -} -\end{lstlisting} -\end{itemize} - -We close the \lstinline+\AddToHook{begindocument/before}+ argument. - -\begin{lstlisting} -} -\end{lstlisting} - - -\subsubsection{Integers} -\label{sec:orgb3e9382} -\begin{lstlisting} -\int_new:N \g__letgut_ltx_example_int -\end{lstlisting} - -\subsubsection{Strings} -\label{sec:orgdd18dd8} - -\begin{lstlisting} -\str_new:N \g__letgut_label_ltx_example_str -\str_new:N \g__letgut_callout_label_ltx_example_str -\str_const:Nn \c__letgut_label_ltx_example_str { - __letgut_label_ltx_example -} -\str_const:Nn \c__letgut_callout_label_ltx_example_str { - __letgut_callout_label_ltx_example -} -\end{lstlisting} - -\subsubsection{Token lists} -\label{sec:orgaf6d8ec} - -\begin{enumerate} -\item Constant ones -\label{sec:orgb1ea800} - -\begin{lstlisting} -\tl_const:Nn \c__letgut_cahier_tl { \emph{ Cahier } } -\tl_const:Nn \c__letgut_cahiers_tl { - \c__letgut_cahier_tl \emph{ s } -} -\tl_const:Nn \c__letgut_tugboat_tl { \emph{ TUGboat } } -\tl_const:Nn \c__letgut_banner_file_tl { bandeau } -\tl_const:Nn \c__letgut_editorial_file_tl { editorial } -\tl_const:Nn \c__letgut_informations_gutenberg_file_tl { - informations-gut -} -\tl_const:Nn \c__letgut_acronyms_file_tl { letgut-acronyms } -\tl_const:Nn \c__letgut_local_config_file_tl { localconf } -\tl_const:Nn \c__letgut_contents_name_tl { Sommaire } -\tl_const:Nn \c__letgut_draftwatermark_text_tl { - \textnormal{Brouillon} -} -\tl_const:Nn \c__letgut_membership_reminder_tl { - {\LARGE - \bfseries - Avez-vous~ pensé~ à~ régler~ votre~ cotisation~ ? - % \the\year~ ? - \par - \medskip - } - Si~ vous~ avez~ oublié,~ ce~ n'est~ ni~ trop~ tard~ - ni~ difficile~ : - \par - \url{http://gutenberg.eu.org/?Adherer-en-ligne} - \bool_if:NT \g__letgut_informations_bool { - \file_if_exist:nT - {./\c__letgut_informations_gutenberg_file_tl}{ - \par - Voir~ aussi~ page~ \pageref{letgut_label_adhesions}. - } - } -} -\tl_const:Nn \c__letgut_missing_editorial_tl { - Ne~ pas~ omettre~ l'éditorial~ !\\(à~ faire~ figurer~ - dans~ un~ \file*{\c__letgut_editorial_file_tl.tex}~ - dans~ le~ dossier~ courant) -} -\tl_const:Nn \c__letgut_missing_infomations_tl { - Ne~ pas~ omettre~ les~ informations~ sur~ - \c__letgut_gutenberg_tl{}~ !\\(dans~ un~ - \file*{\c__letgut_informations_gutenberg_file_tl.tex}~ - situé~ dans~ le~ dossier~ courant) -} -\tl_const:Nn \c__letgut_default_alert_box_color_tl { - gray9 -} -\tl_const:Nn \c__letgut_default_allcolors_links_color_tl -{ - teal!60!black -} -\end{lstlisting} - -\item Variables ones -\label{sec:org4c5e60d} - -\begin{lstlisting} -\tl_new:N \g__letgut_mark_tl -\tl_new:N \g__letgut_title_tl -\tl_new:N \l_letgut_last_name_tl -\tl_new:N \l_letgut_first_name_tl -\tl_new:N \l_letgut_title_tl -\tl_new:N \l__letgut_title_addon_tl -\tl_new:N \l__letgut_reference_text_tl -\end{lstlisting} -\end{enumerate} - -\subsubsection{Comma separated lists} -\label{sec:org158b7a3} - -\begin{lstlisting} -\clist_new:N \g__letgut_pagecolor_clist -\clist_const:Nn \c__letgut_default_pagecolor_screen_clist -{1.0, 0.98, 0.94} -\clist_const:Nn \c__letgut_default_pagecolor_paper_clist -{1, 1, 1} -\end{lstlisting} - -\subsubsection{Sequences} -\label{sec:orgaa04440} - -\begin{lstlisting} -\seq_new:N \l__letgut_first_last_names_items_seq -\end{lstlisting} - -\subsection{Class options} -\label{sec:orgef3017c} - -In order to provide class options, we load the \package{l3keys2e} which provides -\LaTeXe{} option processing using \LaTeX3 keys: - -\begin{lstlisting} -\RequirePackage{l3keys2e} -\end{lstlisting} - -We define the 2 load time options for the target audience: - -\begin{itemize} -\item \lstinline+for-readers+ (the default), for the “normal” “Lettre”, -\item \lstinline+for-authors+, (only) the author(s) of an article of the “Lettre”. -\end{itemize} - -\begin{lstlisting} -\keys_define:nn { letgut } -{ - , for-readers .bool_gset:N = \g__letgut_for_readers_bool - , for-readers .initial:n = { true } - , for-readers .default:n = { true } - , for-authors .bool_gset_inverse:N = \g__letgut_for_readers_bool -} -\ProcessKeysOptions { letgut } -\end{lstlisting} - -\subsection{Class and package loading} -\label{sec:org464c4b7} - -The \letgutcls{} is based on the \lstinline+article+ class. It is by default two sided -because of the alternating headers, and will by typeset with \lstinline+11pt+ as global -font size. - -\begin{lstlisting} -\LoadClass[twoside,11pt]{article} -\end{lstlisting} - -We now load some packages. - -\begin{itemize} -\item The \letgutcls{} will have to be used with LuaLaTeX. Hence the font selection -package for XeLaTeX and LuaLaTeX. -\begin{lstlisting} -\RequirePackage{fontspec} -\end{lstlisting} -\item For subliminal refinements towards typographical perfection. -\begin{lstlisting} -\RequirePackage[ -, stretch=30 -, shrink=25 -, letterspace=150 -]{microtype} -\end{lstlisting} -\item Help in implementing paragraph layouts where the paragraphs are separated by -a vertical space instead of (or in addition to) indenting them. -\begin{lstlisting} -\RequirePackage{parskip} -\end{lstlisting} -\item Extensive control of page headers and footers in \LaTeXe. -\begin{lstlisting} -\RequirePackage{fancyhdr} -\end{lstlisting} -\item Flexible and complete interface to document dimensions. -\begin{lstlisting} -\RequirePackage[a4paper]{geometry} -\end{lstlisting} -\item Enhanced support for graphics. -\begin{lstlisting} -\RequirePackage{graphicx} -\end{lstlisting} -\item Extending the array and tabular environments. -\begin{lstlisting} -\RequirePackage{array} -\end{lstlisting} -\item Completely customisable TOCs. -\begin{lstlisting} -\RequirePackage{etoc} -\end{lstlisting} -\item Control layout of itemize, enumerate, description, and design our own lists. -\begin{lstlisting} -\RequirePackage{enumitem} -\end{lstlisting} -\item Select alternative section titles. -\begin{lstlisting} -\RequirePackage{titlesec} -\end{lstlisting} -\item Several logos and ornaments. -\begin{lstlisting} -\RequirePackage{fourier-orns} -\end{lstlisting} -\item Control float placement. -\begin{lstlisting} -\RequirePackage[section,above]{placeins} -\end{lstlisting} -\item Sophisticated verbatim text. -\begin{lstlisting} -\RequirePackage{fancyvrb} -\end{lstlisting} -\item Publication quality tables in \LaTeX{}. -\begin{lstlisting} -\RequirePackage{booktabs} -\end{lstlisting} -\item Context sensitive quotation facilities. -\begin{lstlisting} -\RequirePackage{csquotes} -\end{lstlisting} -\item Mathematical tools to use with (and which loads) \package{amsmath}. -\begin{lstlisting} -\RequirePackage[fleqn]{mathtools} -\end{lstlisting} -\item Better accessibility support for PDF files. This package is used because we -want the material added to the background (banner on the first page and draft -watermark) to be not selectable in order to let the reader who wants to copy -the interesting text be able to select it. -\end{itemize} -\begin{lstlisting} -\RequirePackage{accsupp} -\end{lstlisting} -\begin{itemize} -\item A comprehensive (SI) units package. -\begin{lstlisting} -\RequirePackage{siunitx} -\end{lstlisting} -\item A collection of logos with bookmark support. -\begin{lstlisting} -\RequirePackage{hologo} -\end{lstlisting} -\item Driver-independent color extensions. -\begin{lstlisting} -\RequirePackage[table]{xcolor} -\end{lstlisting} -\item Coloured boxes, for \LaTeX{} examples and theorems, etc. -\begin{lstlisting} -\RequirePackage{tcolorbox} -\end{lstlisting} -\item Expandable macros to extract the data from references and allow counter -assignments or calculations. -\begin{lstlisting} -\RequirePackage{refcount} -\end{lstlisting} -\item Select colors with proper WCAG color contrast. -\begin{lstlisting} -\RequirePackage{ninecolors} -\end{lstlisting} -\item Typeset tabulars and arrays with LaTeX3 (for the alert boxes typeset as -simple tabulars). -\begin{lstlisting} -\RequirePackage{tabularray} -\end{lstlisting} -\item Multilingual support for Plain \TeX{} or \LaTeX{}. -\begin{lstlisting} -\RequirePackage[english,french]{babel} -\end{lstlisting} -\item Intelligent page references. -\begin{lstlisting} -\RequirePackage[nospace,french]{varioref} -\end{lstlisting} -\item Macros for Euro sign. -\begin{lstlisting} -\RequirePackage[right]{eurosym} -\end{lstlisting} -\item Typeset source code listings using \LaTeX{}. -\begin{lstlisting} -\RequirePackage{listings} -\end{lstlisting} -\item Modifying the layout of floats. -\begin{lstlisting} -\RequirePackage{floatrow} -\end{lstlisting} -\item Sophisticated Bibliographies in \LaTeX{}. -\begin{lstlisting} -\RequirePackage[ - sorting=none, - datamodel=letgut, - citestyle=letgut -]{biblatex} -\end{lstlisting} -\item Typeset acronyms. -\begin{lstlisting} -\RequirePackage{acro} -\end{lstlisting} -\end{itemize} - -The following packages have to be the last ones loaded. So we ensure this by -loading them just before the begining of the document: -\begin{lstlisting} -\AddToHook{begindocument/before}{ -\end{lstlisting} -\begin{itemize} -\item Extensive support for hypertext in \LaTeX{} -\begin{lstlisting} -\RequirePackage{hyperref} -\end{lstlisting} -\item Adjusting the anchors of captions -\begin{lstlisting} -\RequirePackage[all]{hypcap} -\end{lstlisting} -\item Intelligent cross-referencing -\begin{lstlisting} -\RequirePackage[french]{cleveref} -\end{lstlisting} -\end{itemize} -We close the \lstinline+\AddToHook{begindocument/before}+ argument. -\begin{lstlisting} -} -\end{lstlisting} - -\subsection{Settings for the loaded packages} -\label{sec:orgbefd239} - -\begin{itemize} -\item We switch to the French typographic conventions for \package{siunitx}. -\begin{lstlisting} -\sisetup{ - , locale=FR - , mode=text -} -\end{lstlisting} -\item Concerning floats, we ask: -\begin{itemize} -\item the caption text will be justified, -\item the figures and their captions to be boxed (in order to distiguish them from -the current text), -\item the tables to have their captions above them. -\begin{lstlisting} -\DeclareMarginSet{hangleft}{ - \setfloatmargins{\hskip-\c__letgut_hoffset_dim}{\hfil} -} -\DeclareFloatVCode{__letgut_ruleabove}{ - \par\rule{\hsize}{.8pt}\vskip4pt\par - } -\DeclareFloatVCode{__letgut_rulebelow}{ - \par\vskip2pt\rule{\hsize}{.8pt}\par -} -\DeclareFloatStyle{__letgut_ruled}{ - precode=__letgut_ruleabove, - postcode=__letgut_rulebelow, - % heightadjust=all, - floatwidth=.8\linewidth -} -\floatsetup{objectset=justified} -\floatsetup[figure]{ - style=__letgut_ruled, - margins=hangleft, - capposition=beside, - capbesideposition={top,left}, - floatwidth=0.85\textwidth -} -\floatsetup[table]{capposition=top} -\end{lstlisting} -\end{itemize} -Moreover, the tables will be entitled \enquote{tableau} instead of -\enquote{table}. -\begin{lstlisting} -\renewcommand*\frenchtablename{Tableau} -\end{lstlisting} -\item We fix some defaults for the listings : we define a style for all the listings -which resets all the \TeX{} control sequences/keywords and then load all the -basic (La)\TeX{} dialects of \TeX{}. But we start with a dialect which is missing in -the \package*{listings}. -\begin{lstlisting} -\lstdefinelanguage[classes]{TeX}[LaTeX]{TeX}{% - % Control sequences - moretexcs={% - abovecaptionskip,abstractname,appendix,appendixname, - arraycolsep,arrayrulewidth,author,backmatter,baselinestretch, - belowcaptionskip,bf,bibindent,bibname,bigskipamount, - bottomfraction,brokenpenalty,cal,chapter,chaptermark, - chaptername,clubpenalty,columnsep,columnseprule,contentsname, - date,dblfloatpagefraction,dblfloatsep,dbltextfloatsep, - dbltopfraction,descriptionlabel,displaywidowpenalty, - doublerulesep,evensidemargin,fboxrule,fboxsep,figurename, - floatpagefraction,floatsep,footins,footnoterule,footnotesep, - footnotesize,footskip,frontmatter,headheight,headsep,huge,Huge, - indexname,indexspace,interlinepenalty,intextsep,it,jot, - labelenumi,labelenumii,labelenumiii,labelenumiv,labelitemfont, - labelitemi,labelitemii,labelitemiii,labelitemiv,labelsep, - labelwidth,large,Large,LARGE,leftmargin,leftmargini, - leftmarginii,leftmarginiii,leftmarginiv,leftmarginv, - leftmarginvi,lineskip,listfigurename,listoffigures, - listoftables,listtablename,mainmatter,maketitle,marginparpush, - marginparsep,marginparwidth,maxdepth,medskipamount,mit, - newblock,normallineskip,normalsize,oddsidemargin,paragraph, - paragraphmark,parindent,parskip,part,partname,partopsep, - postdisplaypenalty,predisplaypenalty,refname,rm,sc,scriptsize, - section,sectionmark,sf,sl,small,smallskipamount,subitem, - subparagraph,subparagraphmark,subsection,subsectionmark, - subsubitem,subsubsection,subsubsectionmark,tabbingsep, - tabcolsep,tablename,tableofcontents,textfloatsep,textfraction, - textheight,textwidth,thechapter,theenumi,theenumii,theenumiii, - theenumiv,theequation,theparagraph,thepart,thesection, - thesubparagraph,thesubsection,thesubsubsection,tiny,title, - today,topfraction,topmargin,topskip,tt,widowpenalty, - },% - % Keywords of class 1 : keywords that contain other characters - % (since of the same class as the ones specified as - % 'otherkeywords') - morekeywords={% - % - },% - % Keywords of class 2 : environments names - morekeywords=[2]{% - abstract,description,figure,quotation,quote,table, - thebibliography,theindex,titlepage,verse% - },% - % Keywords of class 3 : mandatory arguments (not environments) - % & optional arguments which are keys (in key=value) - morekeywords=[3]{% - },% - % Keywords of class 4 : values of keys (in key=value) - morekeywords=[4]{% - },% - % Keywords of class 5 : arguments specifications (after “:” - % in expl3 syntax) - morekeywords=[5]{% - },% - % Keywords of class 6 : current package name (and possibly - % derived packages) - morekeywords=[6]{% - a0poster,aalok,aastex631,abntex2,achemso,acmart,acmconf, - active-conf,adfathesis,afparticle,afthesis,aguplus,aiaa-tc, - akklecture,akkscript,akktecdoc,akletter,myletter,ametsoc, - amsart,amsbook,amsdtx,amsldoc,amsproc,aomart,apa,apa6, - apa6e,apa7,arabart,arabbook,arabrep,arabrep1,articleingud, - asaetr,ascelike,asmeconf,asmejour,assignment,aucklandthesis, - bangorcsthesis,bangorexam,barticle,bbook,bletter, - bankstatement,article,book,letter,ltnews,ltxdoc,ltxguide, - minimal,proc,report,slides,source2edoc,basque-book,beamer, - beamerswitch,beaulivre,beilstein,argetabelle,bewerbung, - bgteubner,BHCexam,bitart,bitbook,bjfuthesis,BMSTU-IU8, - bookcover,bookest,bookshelf,br-lex,brandeis-dissertation, - brandeis-problemset,brandeis-thesis,buctcover,buctthesis, - bxjsarticle,bxjsbook,bxjsreport,bxjsslide,cascadilla,cd, - cd-cover,articoletteracdp,letteracdp,cesenaexam,cheatsheet, - chemmacros-manual,chletter,cje,cnbwp,cnltx-doc,codedoc, - colorart,colorbook,combine,cc,ConcProg,confproc,contracard, - courseoutline,coursepaper,cquthesis,csbulletin,csbulobalka, - csbulv1,ctexart,ctexbeamer,ctexbook,ctexrep,ctxdoc,curve, - cv4tw,cweb,idcc,ijdc-v14,ijdc-v9,dinbrief,disser,gost732, - dithesis,droit-fr,dtk,dvdcoll,easybook,ebsthesis,agecon, - ajae,apecon,ecca,erae,itaxpf,jrurstud,njf,oegatb,pocoec, - regstud,worlddev,ecv,einfart,ejpecp,elbioimp,elegantbook, - elegantnote,elegantpaper,elpres,cas-dc,cas-sc,elsarticle, - elteikthesis,emisa,emulateapj,erdc,eskd,eskdgraph,eskdtab, - eskdtext,estcpmm,europasscv,europecv,exam,exam-n,examdesign, - exesheet,extarticle,extbook,extletter,extproc,extreport, - facsimile,factura,fancyhandout,fancyslides,fbithesis,fcavtex, - fdudoc,fduthesis-en,fduthesis,fei,ffslides,fithesis, - fithesis2,fithesis3,fithesis4,flacards,flashcards,frletter, - g-brief,g-brief2,gaceta,gammas,gatech-thesis,gmdocc, - gradstudentresume,grant-afosr,grant-aro,grant-darpa,grant-doe, - grant-nih,grant-nrl,grant-nsf,grant-onr,grant,graphpaper, - gridslides,gsemthesis,guitartabs,gzt,gztarticle,h2020proposal, - hgbarticle,hgbreport,hgbthesis,harnon-cv,hausarbeit-jura, - hcart,hcletter,hcreport,hcslides,hecthese,hepthesis,hitec, - hithesis,hitreport,hitszthesis,hletter,hpsdiss,fsbispit, - huawei,hustthesis,icsv,IEEEconf,IEEEtran,ijmart,ijsra, - image-gallery,IMTEKda,inkpaper,invoice-class,iodhbwm,iscram, - isov2,isodoc,iwhdp,jacow,jlreq,jmlr,jmlrbook,jnuexam,jpsj2, - jura,jurabook,juraovw,juraurtl,kdgcoursetext,kdgmasterthesis, - kdpcover,kerntest,kluwer,knittingpattern,scrartcl,scrarticle, - scrbook,scrdoc,scrletter,scrlttr2,scrreport,scrreprt,komacv, - oblivoir-utf,oblivoir-xl,oblivoir,xoblivoir,ksp-thesis,l3doc, - labbook,leadsheet,leaflet,lebhart,lectures,letgut,lettre,limap, - limecv,lion-msc,lni,lps,lt3graph-packagedoc,ltxdockit, - ltxguidex,abstbook,beletter,flashcard,iagproc,cours,fiche, - matapli,matc3mem,mcmthesis,ltxmdf,medstarbeamer,meetingmins, - memoir,mensa-tex,mentis,metanorma,milog,minimart,minimbook, - mla,mluexercise,mnras,moderncv,modernposter,msu-thesis, - mucproc,mugsthesis,muling,musuos,muthesis,third-rep,mwart, - mwbk,mwrep,mycv,nature,ncc,nccproc,sibjnm,nddiss2e, - ndsu-thesis,newlfm,nih,nihbiosketch,njurepo,nlctdoc,nostarch, - nrc1,nrc2,artikel1,artikel2,artikel3,boek,boek3,brief, - rapport1,rapport3,nwejm,nwejmart,octavo,onrannual, - oup-authoring-template,journal,paper,papertex,pbsheet,pecha, - petiteannonce,philosophersimprint,pittetd,pkuthss,plari,play, - postcards,powerdot,FUpowerdot,ppr-prv,pracjourn,pressrelease, - proposal,reporting,dfgproposal,dfgreporting,euproposal, - eureporting,prosper,protocol,prtec,upmgr,wkmgr,pst-doc, - ptptex,qcm,quantumarticle,qyxf-book,ReadableCV,recipe, - RecipeBook,recipecard,refart,refrep,resphilosophica,revtex4-2, - revtex4,revtex4-1,rtklage,ryersonSGSThesis,ryethesis,sageep, - sapthesis,schuleab,schulein,schuleit,schulekl,schuleub, - schuleue,schullsg,schullzk,schulma-ab,schulma-gutachten, - schulma-klausur,schulma-komp,schulma-mdlprf,schulma-praes, - schwalbe,sciposter,screenplay,scrjrnl,sdapsclassic,sduthesis, - seminar,semproc,sesamanuel,seuthesix,sffms,cassete,etiketka, - shtthesis,caesar_book,sides,simplecv,simplivre,skbarticle, - skbbeamer,skbbook,skblncsbeamer,skblncsppt,skbmoderncv,skdoc, - skeyval-testclass,skrapport,smfart,smfbook,SPhdThesis,spie, - sr-vorl,sslides,stage,standalone,usthesis,hwexam,mikoslides, - omdoc,smglom,subfiles,suftesi,sugconf,tabriz-thesis,talk, - tcldoc,tclldoc,powersem,thesis-ekf,thesis-gwu,thuthesis, - tikz-kalender,tikzposter,tlc-article,TOPletter,toptesi, - tudabeamer,tudaexercise,tudaleaflet,tudaletter,tudaposter, - tudapub,tudasciposter,tudscrartcl,tudscrbook,tudscrdoc, - tudscrmanual,tudscrposter,tudscrreprt,tufte-book,tufte-handout, - ltugboat,ltugproc,tui,turabian,turabian-researchpaper, - turabian-thesis,my-thesis,ua-thesis,uafthesis, - uantwerpenbamathesis,uantwerpencoursetext,uantwerpenexam, - uantwerpenletter,uantwerpenphdthesis,uantwerpenreport, - ucalgmthesis,ucbthesis,ucdavisthesis,ucsmonograph,ucthesis, - udesoftec,uebungsblatt,uestcthesis,uhhassignment,uiucredborder, - uiucthesis,ulthese,legislation,umich-thesis,umthesis, - unam-thesis,unifith,unitn-bimrep,univie-ling-expose, - univie-ling-paper,univie-ling-thesis,univie-ling-wlg, - unizgklasa,uothesis,UoWthesis,upmethodology-document,URbeamer, - URletter,uspatent,ut-thesis,utexasthesis,uwmslide,uwthesis, - verifica,webquiz,willowtreebook,withargs-packagedoc, - wsemclassic,xduthesis,xebaposter,xmuthesis,xsim-manual, - yaletter,yathesis,ycbook,ydoc,york-thesis, - },% - otherkeywords={},% - alsoletter={0123456789-},% - alsodigit={},% - sensitive% -}[keywords,tex,comments]% -\end{lstlisting} - -\begin{lstlisting} -\lstdefinestyle{__letgut_all_reset}{ - basicstyle=\ttfamily, - language=TeX,% - texcs={},% - keywords={},% - keywords=[2]{},% - keywords=[3]{},% - keywords=[4]{},% - keywords=[5]{},% - otherkeywords={},% - alsoletter={},% - alsodigit={},% - alsolanguage=[AlLaTeX]TeX,% - alsolanguage=[LaTeX]TeX,% - alsolanguage=[plain]TeX,% - alsolanguage=[common]TeX,% - alsolanguage=[primitive]TeX,% - alsolanguage=[classes]TeX,% -\end{lstlisting} -Because of a current issue involving \package{parskip} and -\package{listings} -(\url{https://github.com/FrankMittelbach/fmitex-parskip/issues/3}), we have to -set the skip below the displayed listings to a zero length. -\begin{lstlisting} -belowskip=0pt, -} -\lstset{ - style=__letgut_all_reset -} -\end{lstlisting} -This style is applied automatically at the beginning of each \lstinline+\input+ -file. Hence, the keywords defined in a previous file (by loading some -peticular (La)\TeX{} dialects, i.e. control sequences and keywords specific to -some class or packages) won't interfere with the ones of the current file. -\begin{lstlisting} -\AddToHook{cmd/input/before}{ - \lstset{% - style=__letgut_all_reset,% - } -} -\end{lstlisting} -\item The \lstinline+\printbibliography+ command is redefined in order its \lstinline+heading+ is by -default set to \lstinline+subbibliography+. -\begin{lstlisting} -\NewCommandCopy{\__letgut_old_printbibliography}{ - \printbibliography -} -\RenewDocumentCommand {\printbibliography} { O{} } { - \phantomsection - \__letgut_old_printbibliography[#1] -} -\end{lstlisting} - For printing the bibliography, we define two new bibheadings for the -structure levels \lstinline+\title+ and \lstinline+\subtitle+. -\begin{lstlisting} -\defbibheading{title}[\refname]{% - \title{#1}} -\defbibheading{subtitle}[\refname]{% - \subtitle{#1}} -\end{lstlisting} -\item The acronyms will be typset in footnote, with small caps shape. When they are -(English) foreign, it will be specified and the translation will be added. -\begin{lstlisting} -\acsetup{ - first-style=footnote, - format/short = {\scshape}, - format/foreign = {\em}, - foreign/display, - locale/format = {\upshape}, - locale/display, -} -\end{lstlisting} - Moreover, we redefine the private macro \lstinline+\acro_footnote:n+ of the -\package*{acro} in order to make the footnotes displaying the long forms of the -acronyms ended by a period (like ordinary footnotes). -\begin{lstlisting} -\cs_undefine:N \acro_footnote:n -\cs_new_protected:Npn \acro_footnote:n #1 -{ - \tl_set:Ne \l__acro_tmpa_tl { - \l__acro_fnpct_check_tl - } - \exp_last_unbraced:Nno - \footnote {#1.} - \l__acro_tmpa_tl -} -\end{lstlisting} - -The following settings for packages that have to be the last ones loaded are -also done just before the begining of the document. -\end{itemize} - -\begin{lstlisting} -\AddToHook{begindocument/before}{ -\end{lstlisting} - -\begin{itemize} -\item We want the hyperlinks to be as unobtrusive as possible. -\begin{lstlisting} -\bool_if:NTF \g__letgut_paper_bool { - \hypersetup{draft} -}{ - \hypersetup{% - colorlinks,% - allcolors={letgut_allcolors_links},% - }% -} -\end{lstlisting} - -A preset of acronyms is input (if found). -\begin{lstlisting} -\file_if_exist:nT {\c__letgut_acronyms_file_tl}{ - \file_input:n {\c__letgut_acronyms_file_tl} -} -\end{lstlisting} - -\item Depending on some chosen class options, some packages have to be loaded, -notably before \package*{hyperref} is loaded, and actions are taken -accordingly. -\begin{itemize} -\item If the `draft` mode (default) is on, we load the \package*{lua-typo} which -highlights typographical flaws with LuaLaTeX. For the moment, - -the \package*{lua-typo} isn't loaded since the `luacolor` -package it loads - -currently does not work well in \lstinline+shipout/background+ (see -\url{https://github.com/ho-tex/luacolor/issues/4}). -\begin{lstlisting} -% % \bool_if:NF \g__letgut_paper_bool { -\bool_if:NT \g__letgut_draft_bool { - % \RequirePackage[All]{lua-typo} - \AddToHook{shipout/background} - { - \__letgut_unselectable:n { - \put(0.5\paperwidth,-0.5\paperheight) - { - \Huge -\end{lstlisting} -Currently, we can't use \package{l3color}'s \lstinline+\color_fill:n+\footnote{See \url{https://github.com/ho-tex/luacolor/issues/4\#issuecomment-848774260}.} -and we have to rely on \package{xcolor}'s \lstinline+\color+. -\begin{lstlisting} -% \color_fill:n {black!10} -\color{black!10} -\hbox_set:Nn \l_tmpa_box { - \fontsize{0.25\paperwidth}{0.3\paperwidth} - \selectfont - \c__letgut_draftwatermark_text_tl -} -\hbox_set:Nn \l_tmpb_box { - \hbox_overlap_center:n { - \box_use:N \l_tmpa_box - } -} -\end{lstlisting} -The draft watermak is rotated in order to be parallely slanted to the first -diagonal of the page (angle \(=\arctan(\text{paper height}/\text{paper - width})\)). -\begin{lstlisting} -\box_rotate:Nn \l_tmpb_box { - \fp_eval:n { - atand ( - \dim_to_fp:n {\paperheight} - / - \dim_to_fp:n {\paperwidth} - ) - } -} -\box_use:N \l_tmpb_box -} -} -} -\end{lstlisting} - Moreover, we want all the overfull boxes to be shown (as with -\lstinline+draft+ option of the standard classes). -\begin{lstlisting} -\setlength\overfullrule{5pt} -} -% % } -\end{lstlisting} -\end{itemize} -\end{itemize} - -We close the \lstinline+\AddToHook{begindocument/before}+ argument. - -\begin{lstlisting} -} -\end{lstlisting} - -\subsection{Date handling} -\label{sec:org5c102e6} - -\begin{lstlisting} -\int_new:N \g__letgut_date_month_int -\int_new:N \g__letgut_date_year_int - -\int_gset:Nn \g__letgut_date_month_int {\the\month} -\int_gset:Nn \g__letgut_date_year_int {\the\year} - -\tl_new:N \g__letgut_date_month_tl -\tl_new:N \g__letgut_date_tl - -\cs_new_protected:Npn \__letgut_date_parse:n #1 -{ - \__letgut_if_is_iso_date:nTF {#1} - { - \__letgut_date_parse:www #1 \q_stop - }{ - \msg_term:nnn{letgut}{Not~month~iso~date}{#1} - \tl_gset:Nn \g__letgut_date_tl { #1 } - } -} - -\prg_new_protected_conditional:Npnn -\__letgut_if_is_iso_date:n #1 { T, F, TF } -{ - \regex_match:nnTF { ^\d{4}-(\d{1,2}) } {#1} - { \prg_return_true: } - { \prg_return_false: } -} - -\prg_new_protected_conditional:Npnn -\__letgut_if_is_int:n #1 { T, F, TF } -{ - \regex_match:nnTF { ^[\+\-]?[\d]+$ } {#1} - { \prg_return_true: } - { \prg_return_false: } -} - -\cs_new_protected:Npn \__letgut_month_name:n #1 -{ - % \text_titlecase_first:n { - \int_case:nnF - { #1 } - { - { 1 }{ janvier } - { 2 }{ février } - { 3 }{ mars } - { 4 }{ avril } - { 5 }{ mai } - { 6 }{ juin } - { 7 }{ juillet } - { 8 }{ août } - { 9 }{ septembre } - { 10 }{ octobre } - { 11 }{ novembre } - { 12 }{ décembre } - } - { Month~ Error! } - % } -} - -\cs_new_protected:Npn \__letgut_date_parse:www #1-#2 -\q_stop -{ - \int_compare:nTF - { - \the\year <= #1 <= \the\year+1 -\end{lstlisting} - -\begin{lstlisting} -}{ - \int_gset:Nn \g__letgut_date_year_int {#1} -}{ - \int_gset:Nn \g__letgut_date_year_int {\the\year} -} -\__letgut_if_is_int:nTF {#2} -{ - \int_compare:nTF - { - 1 <= #2 <= 12 -\end{lstlisting} - -\begin{lstlisting} - } - {\int_gset:Nn \g__letgut_date_month_int {#2}} - {\int_gset:Nn \g__letgut_date_month_int {\the\month}} - }{ - \int_gset:Nn \g__letgut_date_month_int {\the\month} - } - \tl_gset:Nn \g__letgut_date_month_tl { - \__letgut_month_name:n { \g__letgut_date_month_int } - } - \tl_gset:Nn \g__letgut_date_tl { - \tl_use:N \g__letgut_date_month_tl - \c_space_tl - \int_use:N \g__letgut_date_year_int - } -} -\end{lstlisting} - -\subsection{Page color default settings} -\label{sec:orgbdbe3de} - -By default, the page color will be the one linked to the \lstinline+screen+ option. - -\begin{lstlisting} -\pagecolor[rgb]{\c__letgut_default_pagecolor_screen_clist} -\clist_set_eq:NN \g__letgut_pagecolor_clist - \c__letgut_default_pagecolor_screen_clist -\end{lstlisting} - -\subsection{Options} -\label{sec:orgc4ef889} - -These options look to need to be specified rather at the end (throws an error if -defined before the \lstinline+\__letgut_date_parse:n+'s definition): - -\begin{itemize} -\item \lstinline+number+ for the number of the issue, -\item \lstinline+date+ for the date of the issue, either empty (hence the current (month) -date) or at the format \lstinline+YYYY-MM+ or as free input, -\item \lstinline+pagecolor+ (relevant only with the (default) \lstinline+screen+ load time option) for -a color of the page other than the default one, -\item \lstinline+membership-reminder+ that typesets a membership reminder on the first page, -\end{itemize} - -\begin{lstlisting} -\keys_define:nn { letgut/setup } -{ - , draft .bool_gset:N = \g__letgut_draft_bool - , draft .initial:n = { true } - , draft .default:n = { true } - , final .bool_gset_inverse:N = \g__letgut_draft_bool - , number .int_gset:N = \g__letgut_number_int - , date .code:n = { \__letgut_date_parse:n { #1 } } - , date .initial:x = {\the\year-\the\month} - , paper .code:n = { - \bool_gset_true:N \g__letgut_paper_bool - \pagecolor[rgb]{\c__letgut_default_pagecolor_paper_clist} - \clist_set_eq:NN \g__letgut_pagecolor_clist - \c__letgut_default_pagecolor_paper_clist - } - , screen .bool_gset_inverse:N = \g__letgut_paper_bool - , pagecolor .initial:V - = \c__letgut_default_pagecolor_screen_clist - , pagecolor .code:n = { - \definecolor{letgut_pagecolor}{rgb}{#1} - \AddToHook{begindocument/before} - { - \bool_if:NTF \g__letgut_paper_bool { - \msg_warning:nnn{letgut}{ - pagecolor~inoperative~with~paper~option - }{#1} - }{ - \clist_gset:Nn \g__letgut_pagecolor_clist { #1 } - \pagecolor[rgb]{#1} - } - } - } - , allcolorslinks .code:n = { - \colorlet{letgut_allcolors_links}{#1}} - , allcolorslinks .initial:V - = \c__letgut_default_allcolors_links_color_tl - , membership-reminder .bool_gset:N - = \g__letgut_membership_reminder_bool - , membership-reminder .initial:n = { true } - , editorial .bool_gset:N = \g__letgut_editorial_bool - , editorial .initial:n = { true } - , informations .bool_gset:N = \g__letgut_informations_bool - , informations .initial:n = { true } -} -\end{lstlisting} - -\subsection{Headers} -\label{sec:org0244c68} - -We now define the headers. - -\begin{itemize} -\item The distance between the baseline of the header text and the decorative line -in the header is made a little bit bigger. -\begin{lstlisting} -\renewcommand{\headruleskip}{ - \c__letgut_head_rule_skip_dim -} -\end{lstlisting} -\item The decorative line width in the header is made a little bit bigger. -\begin{lstlisting} -\renewcommand{\headrulewidth}{ - \c__letgut_head_rule_width_dim -} -\end{lstlisting} -\item The headers alternate between even and odd pages. -\begin{lstlisting} -\fancyhf{} -\fancyhead[RO,LE]{\thepage} -\fancyhead[RE,LO]{\g__letgut_mark_tl} -\end{lstlisting} -\item The headers are left offset -\begin{lstlisting} -\fancyheadoffset[L]{\c__letgut_hoffset_dim} -\end{lstlisting} -\item We load the default \package{fancyhdr}'s page style -\begin{lstlisting} -\pagestyle{fancy} -\end{lstlisting} -\end{itemize} - -\subsection{Marginal notes} -\label{sec:org56c8ec1} -We want the marginal notes to be in the left margin. - -\begin{lstlisting} -\reversemarginpar -\end{lstlisting} - -\subsection{Table of contents} -\label{sec:org861e968} - -The table of contents is customized: - -\begin{itemize} -\item only the titles of the articles are shown (but the bookmarks have their natural depth): -\end{itemize} -\begin{lstlisting} -\etocsetnexttocdepth{0} -\end{lstlisting} -\begin{itemize} -\item layout: -\begin{lstlisting} -\etocsetstyle {section} -{} -{\leavevmode\leftskip 2cm\relax} -{\normalsize% - \etocname~\dotfill~\etocpage\par -} -{} -\end{lstlisting} -\item its title is dropped: -\end{itemize} -\begin{lstlisting} -\renewcommand*\frenchcontentsname{} -\end{lstlisting} - -\subsection{Geometry of the document} -\label{sec:org282c9ab} - -\begin{lstlisting} -\geometry{ - asymmetric, - textheight=\c__letgut_textheight_dim, - textwidth=\c__letgut_textwidth_dim, - lmargin=\c__letgut_lmargin_dim, - tmargin=\c__letgut_tmargin_dim, - head=\c__letgut_head_dim, - headsep=\c__letgut_headsep_dim, - marginparwidth=\c__letgut_marginparwidth_dim, - % verbose, - % showframe -} -\end{lstlisting} - -\subsection{Alert box} -\label{sec:org1d5f02b} - -\begin{lstlisting} -\cs_new_protected:Nn \__letgut_alert_box:nn -{ - \noindent - \begin{tblr}{ - width=\linewidth, - rowspec={Q[c,m,#1]}, - colspec={| -\end{lstlisting} - -\begin{lstlisting} - >{\bfseries}X| - }, - vlines, - hlines, - rowsep=2.5mm, - colsep=2.5mm - } - #2 - \end{tblr} - \skip_vertical:N \c_zero_dim -} -\end{lstlisting} - -\subsection{“Title” and marks} -\label{sec:org7f25fee} - -We redefine \lstinline+\@title+ in order to make it empty. Hence we can later test if -the \lstinline+\title+ has been populated by the user (thanks to \lstinline+\title+) and, if so, -we will (automatically) display on the first page and headers the provided -title instead of the number and the date (see below). -\begin{lstlisting} -\tl_gclear:N \@title -\end{lstlisting} - -At the end of preamble, we put the \lstinline+\@title+ (empty or populated by the -user) into \lstinline+\g__letgut_@title_str+ for later tests. -\begin{lstlisting} -\AddToHook{begindocument/before} -{ - \str_set_eq:NN \g__letgut_@title_str \@title -\end{lstlisting} - -The number is added only if it is - -\(>0\). - -\begin{lstlisting} -\tl_gset:Nn \g__letgut_title_tl { - \int_compare:nNnT - \g__letgut_number_int -\end{lstlisting} - -\begin{lstlisting} - > \c_zero_int - {numéro~ \int_use:N\g__letgut_number_int{}~ --~ } - \g__letgut_date_tl - } - \str_if_empty:NTF \g__letgut_@title_str { - \tl_gset:Nn \g__letgut_mark_tl { - \textit{\c__letgut_La_lettre_gutenberg_tl} - } - }{ - \tl_gset:Nn \g__letgut_mark_tl { - \g__letgut_@title_str - } - } - \tl_gput_right:Nn \g__letgut_mark_tl { - ,~\g__letgut_title_tl - } -} -\end{lstlisting} - -\subsection{First page handling} -\label{sec:org30496fe} - -The first page is special as it should automatically contain certain elements: -\begin{itemize} -\item the banner, -\item either the number and the date of the issue, or a given title, -\item the table of contents, -\item the editorial, -\item the membership reminder. -\end{itemize} - -The first page is inserted only is the target audience is the readers of the -Lettre. - -\begin{lstlisting} -\bool_if:NT \g__letgut_for_readers_bool { -\end{lstlisting} - -\begin{lstlisting} -\file_if_exist:nTF {\c__letgut_banner_file_tl.pdf}{ - \AddToHookNext{shipout/background} - { - \begin{picture}(0,0) - \put(-2cm,-25.275cm){ - \includegraphics[scale=0.96]{ - \c__letgut_banner_file_tl.pdf - } - } - \end{picture} - } -}{ -\end{lstlisting} - -The \lstinline+pagecolor+ option is possibly set (with \lstinline+\AddToHook{begindocument/before}+) -and the page color chosen has to be used for the letters of the banner so the -following code has to be postponed after the former (hence here -\lstinline+\AddToHook{begindocument}+ and with \lstinline+\AddToHook{begindocument/before}+). - -\begin{lstlisting} - \msg_term:nn{letgut}{Banner~file~not~provided} - \RequirePackage[pagecolor={\g__letgut_pagecolor_clist}]{ - letgut-banner - } -} -\end{lstlisting} - -Here starts what is automatically added at the beginning of the document. - -\begin{lstlisting} -\AddToHook{begindocument/end} -{ -\end{lstlisting} - -\begin{itemize} -\item If a membership reminder is asked, we create an (alert) box containing the -corresponding text and reduce the textheight of this page of the height of -this box. -\begin{lstlisting} -\bool_if:NT \g__letgut_membership_reminder_bool { - \box_new:N \g__letgut_membership_reminder_box - \vbox_gset:Nn \g__letgut_membership_reminder_box { - \alertbox []{ \c__letgut_membership_reminder_tl } - } - \dim_gset:Nn - \g__letgut_membership_reminder_box_height_dim { - \box_ht:N \g__letgut_membership_reminder_box - } - \enlargethispage{ - - \g__letgut_membership_reminder_box_height_dim - } -} -\end{lstlisting} -\item We want the text on the first page to not encroach on the horizontal bar of -the banner. -\begin{lstlisting} -\dim_const:Nn \c__letgut_first_page_shrink_dim { - \c__letgut_banner_thickness_dim - + - \c__letgut_tmargin_dim - + - \c__letgut_textheight_dim - - - .5\paperheight - - - .5\c__letgut_banner_height_dim -} -\enlargethispage{ - - \c__letgut_first_page_shrink_dim -} -\enlargethispage{ - - \baselineskip -} -\end{lstlisting} -\item If the user has specified a title, we make a (our own) title and use it and -the possibly provided author(s) for the metadata of the PDF; otherwise we -display the number and the date of the newsletter. -\begin{lstlisting} -\str_if_empty:NTF \g__letgut_@title_str { - \bool_gset_true:N \g__letgut_title_empty_bool - \begin{flushright} - \Huge - \text_titlecase_first:n { \g__letgut_title_tl } - \end{flushright} - \hypersetup{ - pdftitle={ - \c__letgut_Lettre_gutenberg_tl - \int_compare:nNnT - \g__letgut_number_int -\end{lstlisting} -\end{itemize} - -\begin{lstlisting} - > \c_zero_int - { - \c_space_tl~ \int_use:N \g__letgut_number_int - } - }, - pdfauthor={ - Association~ - \c__letgut_gutenberg_tl - \c_space_tl - (éditeur) - }, - } - \vspace*{1cm} -}{ - \hypersetup{ - pdftitle={\g__letgut_@title_str} - } - \tl_if_empty:NF \@author { - \hypersetup{ - pdfauthor={\@author} - } - } -\end{lstlisting} -Here, we insert the title, but don't rely on \lstinline+\maketitle+ because it -lets to \lstinline+\relax+ the command \lstinline+\title+ which is used later as new sectionning -levels for the titles of the articles of the Lettre. So we emulate the -intersting part of the \lstinline+\maketitle+ command (borrowed from \file{article.cls}). -\begin{lstlisting} -\null -\vskip 2em% -\begin{center}% - \let \footnote \thanks - {\LARGE \@title \par}% - \vskip 1.5em% - {\large - \lineskip .5em% - \begin{tabular}[t]{c}% - \@author - \end{tabular}\par}% - \vskip 1em% - {\large \@date}% -\end{center}% -\par -\vskip 1.5em -} -\end{lstlisting} -\begin{itemize} -\item No headers on the first page. This has to be inserted after the previous -(customized) \lstinline+\maketitle+ since this command inserts a \lstinline+\newpage+ which would -ruin the effort of \lstinline+\thispagestyle{empty}+ if inserted before. -\begin{lstlisting} -\thispagestyle{empty} -\end{lstlisting} -\item The table of contents is automatically added and has a bookmark entry. -\begin{lstlisting} -\pdfbookmark[1]{ - \c__letgut_contents_name_tl -}{ - \c__letgut_contents_name_tl -} -\tableofcontents -\end{lstlisting} -Should a title be displayed, the table of contents would be added after it, -followed by a new page (otherwise, if \lstinline+\title+ used after \lstinline+\begin{document}+ -sees its title on the front page, it will overflow onto the banner). -\begin{lstlisting} -\bool_if:NTF \g__letgut_title_empty_bool { - \vspace*{1.5cm} -}{ - \newpage -} -\end{lstlisting} -\item Conditionally to the fact the \lstinline+editorial+ option is not set to \lstinline+false+: if the -\file*{editorial.tex} of the editorial is found, its content is input and -has a bookmark entry; otherwise, a warning is displayed. -\begin{lstlisting} -\bool_if:NTF \g__letgut_editorial_bool { - \file_if_exist:nTF {./\c__letgut_editorial_file_tl}{ - \RenewDocumentCommand\author{ m } { - \__letgut_author:n { #1 } - } - \pdfbookmark[1]{Éditorial}{ - \c__letgut_editorial_file_tl - } - \file_input:n {./\c__letgut_editorial_file_tl} - % % \int_set:N \l_tmpa_int {\pagenumber} - % % \int_compare:nNnT \l_tmpa_int = 1 { \newpage } -\end{lstlisting} -\end{itemize} - -\begin{lstlisting} - % \if\count{\pagenumber}>1 - % \else - % \newpage - % \fi - }{ - \msg_warning:nn{letgut}{Editorial~file~missing} - \alertbox{ \c__letgut_missing_editorial_tl } - \newpage - } -}{ - % \newpage -} -\end{lstlisting} - -We close the \lstinline+\AddToHook{begindocument/end}+ argument. - -\begin{lstlisting} -} -\end{lstlisting} - -Membership reminder. - -\begin{lstlisting} -\AddToHook{begindocument}{ - \bool_if:NT \g__letgut_membership_reminder_bool { - \AddToHookNext{shipout/background} - { - \put(1in,-1in){ - \put( - \oddsidemargin, - - \topmargin - - \headheight - - \headsep - - \textheight - + \c__letgut_first_page_shrink_dim - + .5\baselineskip - ){ - \box_use:N \g__letgut_membership_reminder_box - } - } - } - } -} -\end{lstlisting} - -\subsection{Last page handling} -\label{sec:org4d6bc37} - -The last page is special: it should automatically contain some informations about -\gutenberg. - -\begin{lstlisting} -\AddToHook{enddocument} -{ -\end{lstlisting} -Conditionally to the fact the \lstinline+informations+ option is not set to \lstinline+false+: if the -\file*{informations-gut.tex} which contains the informations about -\gutenberg. Otherwise, a warning is displayed. -\begin{lstlisting} -\bool_if:NT \g__letgut_informations_bool { - \clearpage - \phantomsection - \file_if_exist:nTF - {./\c__letgut_informations_gutenberg_file_tl}{ - \file_input:n {./\c__letgut_informations_gutenberg_file_tl} - }{ - \msg_warning:nn{letgut}{Informations~file~missing} - \alertbox{ \c__letgut_missing_infomations_tl } - } -} -\end{lstlisting} - -We close the \lstinline+\AddToHook{enddocument}+ argument. - -\begin{lstlisting} -} -\end{lstlisting} - -We close the boolean which tests whether the target audience is the readers or -the author(s) of the “Lettre”. - -\begin{lstlisting} -} -\end{lstlisting} - -\subsection{Sections, subsections, etc.} -\label{sec:org4d2fa9d} - -\subsubsection{Numbering} -\label{sec:orge3d86f9} -We want all the sections to be unnumbered. - -\begin{lstlisting} -\setcounter{secnumdepth}{-10} -\end{lstlisting} - -\subsubsection{Format} -\label{sec:org36330f3} - -\begin{itemize} -\item We create the new level \lstinline+\title+ for the titles of the articles. They are -displayed uppercased. -\begin{lstlisting} -\AddToHook{begindocument/before}{% - \titleclass{\title}{straight}[\part] - \titleformat{\title}{ - \normalfont - \LARGE - \bfseries - \text_uppercase:n - }{}{1em}{ - \aldineleft\c_space_tl - }{} - \etocsetlevel{title}{0} - \def\toclevel@title{0}% - \etocsetstyle {title} - {} - { - \leavevmode\leftskip 2cm\relax - } - {\mdseries\normalsize - \etocname - \nobreak\leaders\hbox~ to~ 1ex{\hss.}\hfill - \etocpage - \par} - {} -\end{lstlisting} -\item We also create the new level \lstinline+\subtitle+ for the subtitles of the -articles. They are dispayed uppercased (but in a smaller size than \lstinline+\title+). -\begin{lstlisting} -\titleclass{\subtitle}{straight}[\title] -\titleformat{\subtitle}{ - \normalfont - \Large - \bfseries - \text_uppercase:n -}{}{1em}{}{} -\etocsetlevel{subtitle}{1} -\def\toclevel@subtitle{1}% -\def\toclevel@subtitle{1} -\end{lstlisting} -\item By default (that is when \lstinline+\subtitle+ is not used), the toc levels of the -sections, subsections, etc. are set to \lstinline+1+, \lstinline+2+, etc. But, when \lstinline+\subtitle+ is -used, since this level has toc level \lstinline+1+, the toc levels of the sections, -subsections, etc. have to be set to \lstinline+2+, \lstinline+3+, etc. And this has to be reset -each time \lstinline+\title+ and \lstinline+\subtitle+ are used. -\begin{lstlisting} -\AddToHook{cmd/title/before}{ - \etocsetlevel{section}{1} - \def\toclevel@section{1}% - \etocsetlevel{subsection}{2} - \def\toclevel@subsection{2}% - \etocsetlevel{subsubsection}{3} - \def\toclevel@subsubsection{3}% - \etocsetlevel{paragraph}{4} - \def\toclevel@paragraph{4}% - \etocsetlevel{subparagraph}{5} - \def\toclevel@subparagraph{5}% -} -\AddToHook{cmd/subtitle/before}{ - \etocsetlevel{section}{2} - \def\toclevel@section{2}% - \etocsetlevel{subsection}{3} - \def\toclevel@subsection{3}% - \etocsetlevel{subsubsection}{4} - \def\toclevel@subsubsection{4}% - \etocsetlevel{paragraph}{5} - \def\toclevel@paragraph{5}% - \etocsetlevel{subparagraph}{6} - \def\toclevel@subparagraph{6}% -} -\end{lstlisting} - -\begin{itemize} -\item The (sub)paragraphs have the usual format, except that they are not -“runin” (\package{titlesec}'s package's terminology). -\end{itemize} -\begin{lstlisting} - \titleformat{\paragraph}{ - \normalfont - \normalsize - \bfseries - }{\theparagraph}{1em}{} - \titleformat{\subparagraph}{ - \normalfont - \normalsize - \bfseries - }{\thesubparagraph}{1em}{} -} -\end{lstlisting} -\item We modify the spacing, mainly by shifting the titles in the left margin (the -rest is borrowed from the standard classes). -\begin{lstlisting} -\titlespacing*{\title} -{\c__letgut_title_hoffset_dim} -{\c__letgut_before_title_title_skip} -{\c__letgut_after_title_title_skip} -\titlespacing*{\subtitle} -{\c__letgut_subtitle_hoffset_dim} -{\c__letgut_before_subtitle_title_skip} -{\c__letgut_after_subtitle_title_skip} -\titlespacing*{\section} -{\c__letgut_section_hoffset_dim} -{\c__letgut_before_section_title_skip} -{\c__letgut_after_section_title_skip} -\titlespacing*{\subsection} -{\c__letgut_subsection_hoffset_dim} -{\c__letgut_before_subsection_title_skip} -{\c__letgut_after_subsection_title_skip} -\titlespacing*{\subsubsection} -{\c__letgut_subsubsection_hoffset_dim} -{\c__letgut_before_subsubsection_title_skip} -{\c__letgut_after_subsubsection_title_skip} -\titlespacing*{\paragraph} -{\c__letgut_paragraph_hoffset_dim} -{\c__letgut_before_paragraph_title_skip} -{\c__letgut_after_paragraph_title_skip} -\titlespacing*{\subparagraph} -{\c__letgut_subparagraph_hoffset_dim} -{\c__letgut_before_subparagraph_title_skip} -{\c__letgut_after_subparagraph_title_skip} -\end{lstlisting} -\end{itemize} - -\subsection{Document commands} -\label{sec:orga7db03b} - -\subsubsection{Setup} -\label{sec:org35e852f} - -We define the command that lets us specify the newsletter setup. - -\begin{lstlisting} -\NewDocumentCommand \letgutsetup { m } { - \keys_set:nn { letgut/setup } { #1 } -} -\end{lstlisting} - -\subsubsection{For the rubric dedicated to new stuffs appeared on \acs{ctan}} -\label{sec:orga18e077} - -\begin{itemize} -\item We create a new type of list, dedicated to the new stuffs (classes, packages, -etc.) on CTAN and similar to a description list (except the label provided in -the optional argument of \lstinline+\item+ is automatically an argument of the -\lstinline+\package+ command). -\begin{lstlisting} -\cs_new_protected:Nn \__letgut_ctan_news_item:n { - \package{#1}~: -} -\newlist{ctannews}{description}{1} -\setlist[ctannews]{format=\__letgut_ctan_news_item:n} -\end{lstlisting} -The stuffs created by French speaking people are highlighted in a special -way and, for this, a starred variant of the \lstinline+\item+ command is provided. We -insert a systematic \lstinline+\phantomsection+ in order the cross-references to such -items are correct. -\begin{lstlisting} -\cs_new_protected:Npn \__letgut_item:nn #1 #2 -{ - \tl_if_empty:nTF {#2} - { - \__letgut_old_item - }{ - \__letgut_old_item[#2] - } - \phantomsection - \IfBooleanT {#1}{ - \mbox{}\marginpar[\mbox{}\hfill\francophony]{} - } -} -\NewCommandCopy{\__letgut_old_item}{\item} -\RenewDocumentCommand {\item} { s O{} } { - \__letgut_item:nn {#1}{#2} -} -\end{lstlisting} -\end{itemize} -\begin{itemize} -\item Command that inserts the \enquote{francophony} logo. -\begin{lstlisting} -\NewDocumentCommand {\francophony} { } { - \raisebox{-1.5pt}{ - \includegraphics[width=\f@size pt]{ - letgut-francophony-icon - } - } -} -\end{lstlisting} -\end{itemize} - -\subsubsection{Persons and authors} -\label{sec:org73bd77f} - -For both persons and authors, the argument of: -\begin{itemize} -\item a single individual is given as: -\begin{itemize} -\item \meta{Last name}, \meta{First name} -\item and possibly \meta{Last name}, \meta{First name}, \meta{Title} -\end{itemize} -\item multiple individuals, the schemes for each of the individuals are the same of -a single one, separated by a semicolon. -\end{itemize} - -\begin{lstlisting} -\NewDocumentCommand {\person} { m } { - \__letgut_process_list:n {#1} -} -\cs_new_protected:Npn \__letgut_author:n #1 -{ - \nopagebreak - \begin{flushright} - \__letgut_process_list:n {#1} - \end{flushright} -} -\AddToHook{begindocument/end}{% - \RenewDocumentCommand\author{ m } { - \__letgut_author:n { #1 } - } -} -\end{lstlisting} - -In the following \lstinline+\__letgut_titlecase_name+ control sequence, we parse last and -first names, splitting and unsplitting them at spaces and dashes (\lstinline+-+) with -titlecasing in between. - -\begin{lstlisting} -\cs_new_protected:Npn \__letgut_titlecase_name:n #1 -{ - \seq_set_split:Nnn \l_tmpa_seq { - } {#1} - \seq_set_map_x:NNn \l_tmpb_seq \l_tmpa_seq { - \text_titlecase_first:n{ \text_lowercase:n {##1} } - } - \tl_set:Nx \l_tmpa_tl {\seq_use:Nn \l_tmpb_seq {-}} - \seq_clear:N \l_tmpa_seq - \seq_set_split:NnV \l_tmpa_seq { ~ } { \l_tmpa_tl } - \seq_set_map_x:NNn \l_tmpb_seq \l_tmpa_seq { - \text_titlecase_first:n{##1} - } - \seq_use:Nn \l_tmpb_seq {~} -} -\end{lstlisting} - -The following control sequence splits a semi-colon separated list and each item -is splitted as a comma separated list. - -\begin{lstlisting} -\cs_new_protected:Nn \__letgut_person_last_name:n -{ - {\scshape \__letgut_titlecase_name:n {#1}} -} -\cs_new_protected:Nn \__letgut_person_first_name_last_name:nn -{ - \__letgut_titlecase_name:n {#1} - \c_space_tl - \__letgut_person_last_name:n {#2} -} -\cs_new_protected:Nn -\__letgut_person_first_name_last_name_title:nnn -{ - \__letgut_person_first_name_last_name:nn {#1} {#2} - \c_space_tl - (#3) -} -\seq_new:N \l__letgut_items_seq -\cs_new_protected:Npn \__letgut_process_list:n #1 -{ - \seq_clear:N \l__letgut_items_seq - \seq_set_split:Nnn \l_tmpa_seq {and} {#1} - \seq_map_inline:Nn \l_tmpa_seq { - \seq_set_from_clist:Nn \l_tmpb_seq {##1} - \seq_pop_left:NN \l_tmpb_seq \l_letgut_last_name_tl - \seq_pop_left:NN \l_tmpb_seq \l_letgut_first_name_tl - \seq_pop_left:NN \l_tmpb_seq \l_letgut_title_tl - \seq_put_right:Nx \l__letgut_items_seq { - \quark_if_no_value:NTF \l_letgut_first_name_tl { - \__letgut_person_last_name:n { - \l_letgut_last_name_tl - } - }{ - \quark_if_no_value:NTF \l_letgut_title_tl { - \__letgut_person_first_name_last_name:nn - {\l_letgut_first_name_tl} - {\l_letgut_last_name_tl} - }{ - \__letgut_person_first_name_last_name_title:nnn - {\l_letgut_first_name_tl} - {\l_letgut_last_name_tl} - {\l_letgut_title_tl} - } - } - } - } - \seq_use:Nnnn \l__letgut_items_seq { - \c_space_tl \str_use:N \& \c_space_tl - } { ,~ } { \c_space_tl \str_use:N \& \c_space_tl } -} -\end{lstlisting} - -\subsubsection{Horizontal rule} -\label{sec:orgc866c8e} - -\begin{lstlisting} -\NewDocumentCommand {\separator} { } { - \par - \skip_vertical:N 1em - \hrule - \skip_vertical:N 1em -} -\end{lstlisting} - -\subsubsection{Alert boxes} -\label{sec:org7e6600e} - -\begin{lstlisting} -\colorlet {letgut_default_alert_box_color} { - \c__letgut_default_alert_box_color_tl -} -\NewDocumentCommand \alertbox { - O{letgut_default_alert_box_color} +m -} { - \__letgut_alert_box:nn { #1 }{ #2 } -} -\end{lstlisting} - -\subsubsection{Typesetting of packages, classes, files and softwares.} -\label{sec:orgaf32b00} - -The \lstinline+\c__letgut_httpsprefix_tl+ comes from: - -\url{https://github.com/latex3/hyperref/issues/188\#issuecomment-826302843}. - -\begin{lstlisting} -\tl_const:Nx \c__letgut_httpsprefix_tl -{https\char_generate:nn{58}{12}//} -\end{lstlisting} -We define the font switches dediacted to each of packages and classes -(\TeX{} stuff), files and softwares. -\begin{lstlisting} -\tl_new:N \l__letgut__tex_stuff_font_switch_tl -\tl_new:N \l__letgut_files_font_switch_tl -\tl_new:N \l__letgut_softwares_font_switch_tl -\tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\sffamily} -\tl_set:Nn \l__letgut_files_font_switch_tl {\ttfamily} -\tl_set:Nn \l__letgut_softwares_font_switch_tl {\ttfamily} -\end{lstlisting} - -\begin{lstlisting} -\cs_new_protected:Nn \__letgut_tex_stuff:nn -{ - \IfNoValueTF {#1} - { - \href{ - \c__letgut_httpsprefix_tl ctan.org/pkg/#2 - }{ - {\l__letgut__tex_stuff_font_switch_tl #2} - } - }{ - \tl_if_empty:nTF {#1} - { - {\l__letgut__tex_stuff_font_switch_tl #2} - }{ - \href{#1}{{\l__letgut__tex_stuff_font_switch_tl #2}} - } - } -} -\cs_new_protected:Nn \__letgut_software:nn -{ - \tl_if_empty:nTF {#1} - { - {\l__letgut_softwares_font_switch_tl #2} - }{ - \href{#1}{{\l__letgut_softwares_font_switch_tl #2}} - } -} -\cs_new_protected:Nn \__letgut_file:n -{ - {\l__letgut_files_font_switch_tl #1} -} -\NewDocumentCommand{\package}{ s o m O{package} } { - \IfBooleanT{#1}{ - #4 - \c_space_tl - } - \__letgut_tex_stuff:nn {#2}{#3} -} -\NewDocumentCommand{\class}{ s o m O{classe} } { - \IfBooleanT{#1}{ - #4 - \c_space_tl - } - \__letgut_tex_stuff:nn {#2}{#3} -} -\NewDocumentCommand{\file}{ s m O{fichier} } { - \IfBooleanT{#1}{ - #3 - \c_space_tl - } - \__letgut_file:n {#2} -} -\NewDocumentCommand {\software} { s O{} m O{logiciel} } { - \IfBooleanT{#1}{ - #4 - \c_space_tl - } - \__letgut_software:nn {#2}{#3} -} -\end{lstlisting} - -\subsubsection{Names, etc.} -\label{sec:org45141b1} - -\begin{lstlisting} - \NewExpandableDocumentCommand { \gutenberg } { } { - \c__letgut_gutenberg_tl - } - \NewExpandableDocumentCommand { \gut } { } { - \c__letgut_gutenberg_tl - } -\NewExpandableDocumentCommand { \lettre } { } { - \c__letgut_Lettre_tl - } - \NewExpandableDocumentCommand { \lettregut } { } { - \lettre \c_space_tl \gutenberg - } - \NewExpandableDocumentCommand { \Cahier } { } { - \c__letgut_cahier_tl - } - \NewExpandableDocumentCommand { \Cahiers } { } { - \c__letgut_cahiers_tl - } - \NewExpandableDocumentCommand { \letgut } { } { - \class{letgut} - } - \NewExpandableDocumentCommand { \letgutcls } { } { - \class*{letgut} - } - \NewExpandableDocumentCommand { \tugboat } { } { - \c__letgut_tugboat_tl - } - \NewExpandableDocumentCommand { \knuth } { } { - \person{Knuth, Donald~ E.} - } - \NewExpandableDocumentCommand { \lamport } { } { - \person{Lamport, Leslie} - } -\end{lstlisting} - -\subsubsection{Foreign locutions} -\label{sec:org32f4b23} - -\begin{lstlisting} -\cs_new_protected:Npn \__letgut_emphasis:n #1 -{ - \emph{#1} -} -\NewDocumentCommand { \foreignloc } { m } { - \__letgut_emphasis:n {#1} -} -\NewDocumentCommand { \latinloc } { m } { - \__letgut_emphasis:n {#1} -} -\end{lstlisting} - -\subsubsection{Bookmarks handling} -\label{sec:org2ee5370} - -We disabling some commands when their arguments have to go to bookmarks. - -\begin{lstlisting} -\AddToHook{begindocument/end}{ - \pdfstringdefDisableCommands{ - \def\person#1{#1} - \def\author#1{#1} - \def\package#1{#1} - % \def\package*#1{package~#1} - \def\class#1{#1} - % \def\class*#1{classe~#1} - \def\file#1{#1} - % \def\file*#1{fichier~#1} - \def\software#1{#1} - % \def\software*#1{logiciel~#1} - \def\foreignloc#1{#1} - \def\lettre{Lettre} - \def\gutenberg{GUTenberg} - \def\gut{\gutenberg} - \def\lettregut{\lettre\c_space_tl\gutenberg} - \def\Cahier{Cahier} - \def\Cahiers{\Cahier s} - \def\letgut{letgut} - \def\letgutcls{classe~ letgut} - \def\knuth{Donald~ E.~ Knuth} - \def\lamport{Leslie~ Lamport} - \def\latinloc#1{#1} - } -} -\end{lstlisting} - -\subsubsection{Acronyms} -\label{sec:orgd329484} - -The following command let us define acronyms. The arguments are as follows: -\begin{itemize} -\item \lstinline+#1+: optional argument that let us override the default settings of this -command, -\item \lstinline+#2+: the uppercase version of both the id and the short form of the acronym, -\item \lstinline+#3+: the long form (in French if \#4 has \lstinline+-NoValue-+, in English otherwise), -\item \lstinline+#4+: the French translation of an English acronym. -\end{itemize} - -\begin{lstlisting} -\cs_new_protected:Nn \__letgut_acronym:nnnn -{ - \AddToHook{begindocument/before}{ - \IfValueTF {#4}{ - \tl_if_empty:nTF {#4}{ - \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{ - short = \text_lowercase:n {#2}, - sort= #2, - long = {\emph{#3}}, - extra-long = {anglais}, - pdfstring = #2, - short-acc = #2, - #1 - } - }{ - \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{ - short = \text_lowercase:n {#2}, - sort= #2, - long = {#4}, - foreign = {#3}, - foreign-babel = english, - foreign-locale = anglais, - pdfstring = #2, - short-acc = #2, - #1 - } - } - }{ - \exp_args:Nx \DeclareAcronym{\text_lowercase:n {#2}}{ - short = \text_lowercase:n {#2}, - sort= #2, - long = {#3}, - pdfstring = #2, - short-acc = #2, - #1 - } - } -\end{lstlisting} -The ⟨id⟩ of the acronym will automatically be the name of a public command -(\lstinline+\+⟨id⟩) acting as \lstinline+\ac{id}+. -\begin{lstlisting} -\exp_after:wN \cs_if_exist:cT { \text_lowercase:n {#2} } { - \msg_note:nnn{letgut}{Existing~command}{#2} -} -\exp_args:Nc \ProvideDocumentCommand -{ \text_lowercase:n {#2} } { s } { - \IfBooleanTF {##1}{ - \exp_args:Nx \acs { \text_lowercase:n {#2} } - }{ - \exp_args:Nx \ac { \text_lowercase:n { #2 } } - } -} -\end{lstlisting} -We want the command \lstinline+\+⟨id⟩ to work also in bookmarks (the resulting string will -be the uppercased acronym). -\begin{lstlisting} -\pdfstringdefDisableCommands - { - \exp_after:wN - \def\cs:w \text_lowercase:n {#2} \cs_end: { #2 } - } -} -} -\end{lstlisting} - -The first occurrences of the acronyms will be displayed in their short forms, -with the long ones in footnotes. But what about acronyms whom first occurrences -arise within footnotes? We want the to be displayed as their short forms -followed by their the long form in parentheses. For this, we have to add -a boolean at the beginning (and reversed at the end) of the \lstinline+\footnote+ command -to know whether we currently are in a footnote or not and display the acronym -accordingly. - -\begin{lstlisting} -\NewCommandCopy{\__letgut_old_footnote}{\footnote} -\RenewDocumentCommand {\footnote} { m }{ - \bool_set_true:N \l__letgut_in_footnote_bool - \__letgut_old_footnote { #1 } - \bool_set_false:N \l__letgut_in_footnote_bool -} -\end{lstlisting} -We change a bit both the \lstinline+footnote+ acro template, the \lstinline+description+ list -template, and the macro which prints the locale. -\begin{lstlisting} -\DeclareAcroProperty{extra-foreign} -\DeclareAcroProperty{extra-long} -\RenewAcroTemplate {footnote} -{ - \acrowrite {short} - \acroiffirstT - { -\end{lstlisting} -If we are in a footnote, first occurrences of the acronyms are displayed -as “short (long)”. Otherwise, they are displayed as “short\footnote{long}”. -\begin{lstlisting} - \bool_if:NTF \l__letgut_in_footnote_bool { - \space - ( - \acroifT {alt} { \acrotranslate {or} ~ \acrowrite {alt} ~ } - \acroifT {foreign} { \acrowrite {foreign} :~ } - \acrowrite {long} - \acrogroupcite - ) - }{ - \acfootnote - { - \acroifT {alt} { - \acrotranslate {or} ~ \acrowrite {alt} :~ - } - \acroifT {foreign} { \acrowrite {foreign} } - \acrowrite {long} - \acroifT {extra-long} { ~ [\acrowrite {extra-long}] } - \acroifT {extra-foreign} { - \c_space_tl [\acrowrite {extra-foreign}] - } - \acrogroupcite - } - } - } - } - \RenewAcroTemplate[list]{description}{% - \acroheading - \acropreamble - \begin{description} - \acronymsmapF{% - \item[\acrowrite{short}\acroifT{alt}{/\acrowrite{alt}}] - \acroifT{foreign}{ - \acrowrite{foreign}\acroifT{extra}{, } - }% - \acroifT{extra}{\acrowrite{extra}}% - \acroifanyT{foreign,extra}{\acspace (}% - \acrowrite{list}% - \acroifT {extra-foreign} { - , \c_space_tl \acrowrite {extra-foreign} - } - \acroifanyT{foreign,extra}{)}% - \acropagefill - \acropages - {\acrotranslate{page}\nobreakspace} - {\acrotranslate{pages}\nobreakspace}% - } - {\item\AcroRerun} - \end{description} -} -% #1: id -% #2: property -% #3: text -\cs_set_protected:Npn \acro_locale:nnn #1#2#3 - { - \acro_if_foreign:nTF {#2} - { - \acro_if_locale:nnTF {#1} {#2} - { - \__acro_foreign_language:en - { \str_lowercase:e { - \acro_property_get:nn {#1} {foreign-babel} - } - } - {#3} - \bool_if:NTF \l__acro_list_bool - { \bool_if:NT \l__acro_list_show_locale_bool } - { \bool_if:NT \l__acro_show_locale_bool } - { - { - \l__acro_locale_format_tl - { - \acro_property_if_set:nnTF {#1} { - foreign-locale - } - { - \acspace - [ - \acro_property_get:nn {#1} { - foreign-locale - } - ] - }{ - \baselanguage - { - \acro_property_get:nn {#1} { - foreign-babel - } - } - } - } - } - :~ - } - } - {#3} - } - {#3} - } -\end{lstlisting} -Now, the document command that let the user create acronyms. -\begin{lstlisting} -\NewDocumentCommand{\letgutacro}{ O{} m m o } -{ - \__letgut_acronym:nnnn {#1} {#2} {#3} {#4} -} -\end{lstlisting} -For printing the acronyms, we define two new heading templates for the structure -levels \lstinline+\title+ and \lstinline+\subtitle+. -\begin{lstlisting} -\NewAcroTemplate[heading] {title} - { \title { \acrolistname } } -\NewAcroTemplate[heading] {subtitle} - { \subtitle { \acrolistname } } -\end{lstlisting} -We make \lstinline+\letgutacro+ available only in the preamble part of the document -(otherwise, no warning from \package{acro} but only the long form of the acronym -is printed when used for the first time with \lstinline+\ac+). -\begin{lstlisting} -\@onlypreamble\letgutacro -\end{lstlisting} - -\subsection{Bibliography} -\label{sec:orgc523238} - -We want the \lstinline+\citeauthor+ command to display, not only the last, but the -full name of the authors. - -\begin{lstlisting} -\NewCommandCopy{\__letgut_old_citeauthor}{ - \citeauthor -} -\RenewDocumentCommand {\citeauthor} { O{} O{} m } { - \AtNextCite{\DeclareNameAlias{labelname}{given-family}} - \__letgut_old_citeauthor[#1][#2]{#3} -} -\end{lstlisting} - -\subsection{Book reviews} -\label{sec:org2fd9b20} - -\begin{lstlisting} -\tl_new:N \g__letgut_bookreview_frontcover_tl -\tl_new:N \g__letgut_bookreview_bibkey_tl -\end{lstlisting} -The keys options are created. -\begin{lstlisting} -\keys_define:nn { letgut/bookreview } -{ - title .tl_gset:N = \g__letgut_bookreview_title_tl, - frontcover .tl_gset:N = \g__letgut_bookreview_frontcover_tl, - bibkey .tl_gset:N = \g__letgut_bookreview_bibkey_tl, - reviewer .tl_gset:N = \g__letgut_bookreview_reviewer_tl, - price .tl_gset:N = \g__letgut_bookreview_price_tl, -\end{lstlisting} - -All these options, when used, must receive a value. - -\begin{lstlisting} - title .value_required:n = true, - frontcover .value_required:n = true, - bibkey .value_required:n = true, - reviewer .value_required:n = true, -} -\end{lstlisting} - -We create the new environment for the book reviews. - -\begin{lstlisting} -\cs_generate_variant:Nn \msg_warning:nnn { nnV } -\cs_generate_variant:Nn \msg_error:nnnn { nnVV } -\NewDocumentEnvironment{bookreview}{ m } -{ - \keys_set:nn { letgut/bookreview } { #1 } - \section{\g__letgut_bookreview_title_tl} - \tl_if_empty:NTF \g__letgut_bookreview_frontcover_tl { - \msg_warning:nnV{letgut}{frontcover-missing}{ - \g__letgut_bookreview_title_tl - } - }{ -\end{lstlisting} - -We check if the front cover file is available against the list of accepted -extensions of the \lstinline+graphicx+ package. - -\begin{lstlisting} - \clist_map_inline:Nn \Gin@extensions { - \file_if_exist:nT{\g__letgut_bookreview_frontcover_tl##1}{ - \bool_set_true:N \l_tmpa_bool - \clist_map_break: - } - } - \bool_if:NTF \l_tmpa_bool { - \marginpar{ - \hspace*{\c__letgut_bookreview_frontcover_margin_sep_dim} - % \raggedleft - \raisebox{-\totalheight}{ - \fbox{ - \includegraphics[width=-\c__letgut_title_hoffset_dim]{ - \g__letgut_bookreview_frontcover_tl - } - } - } - } - }{ - \msg_error:nnVV - {letgut} - {frontcover-file-not-found} - {\g__letgut_bookreview_title_tl} - {\g__letgut_bookreview_frontcover_tl} - } - } - \noindent - \textsf{\fullcite{\g__letgut_bookreview_bibkey_tl}} - \tl_if_empty:NF \g__letgut_bookreview_price_tl{ - .\c_space_tl\EUR{\g__letgut_bookreview_price_tl} - } - \par -}{ - \exp_args:NV \author{\g__letgut_bookreview_reviewer_tl} -} -\end{lstlisting} - -\subsection{Miscellanous} -\label{sec:org00f0870} - -\begin{itemize} -\item We specify the possible hyphenations of \enquote{\gutenberg}. -\end{itemize} -\begin{lstlisting} -\hyphenation{GUT-enberg} -\end{lstlisting} - -\subsubsection{Non selectable text} -\label{sec:org4c4b60b} - -We create a control sequence that makes its argument not selectable in the -PDF. This will be used notably for the line numbers of the listings and the -watermarks. -\begin{lstlisting} -\cs_new_protected:Npn \__letgut_unselectable:n #1 -{ - \BeginAccSupp{ActualText={}}#1\EndAccSupp{} -} -\end{lstlisting} - -\subsubsection{Typesetting of code, etc.} -\label{sec:org61c4abd} - -We provide a \lstinline+\meta+ macro that (poorly) mimics the one of the -\package*{doc}. It is added at the very end of the preamble since other -package that provide a better definition of this macro may have been loaded -(e.g. \package{tcolorbox}). -\begin{lstlisting} -\colorlet {__letgut_meta} { - brown -} -\cs_new_protected:Nn \__letgut_meta:nn -{ - \bgroup - \normalfont - \ttfamily - \itshape - \textcolor{#1}{$\langle$#2$\rangle$} - \egroup -} -\AddToHook{begindocument/before}{ - \ProvideDocumentCommand{\meta}{ O{__letgut_meta} m } { - \__letgut_meta:nn {#1}{#2} - } -} -\end{lstlisting} - -\subsection{\LaTeX{} listings and examples} -\label{sec:org371597a} - -We first define some colors used in the listings and examples. - -\begin{lstlisting} -\definecolor{__letgut_backgroundCode}{cmyk}{0,0,0,0.04} -\definecolor{__letgut_borderCode}{cmyk}{0,0,0,0.2} -\definecolor{__letgut_foregroundLinenumber}{cmyk}{0,0,0,0.5} -\definecolor{__letgut_foregroundMention}{cmyk}{0,0,0,0} -\definecolor{__letgut_backgroundResult}{cmyk}{0,0,0,0} -\end{lstlisting} - -We now define the colors for the syntax highlighting and define the style of our -listings. - -\begin{lstlisting} -\colorlet{__letgut_texcs}{blue} -\colorlet{__letgut_comment}{gray} -\colorlet{__letgut_argument-specification-separator}{red} -\colorlet{__letgut_argument-specification}{cyan} -\colorlet{__letgut_mandatory-argument}{purple} -\colorlet{__letgut_environment}{teal} -\colorlet{__letgut_key}{__letgut_mandatory-argument} -\colorlet{__letgut_value}{violet} -\colorlet{__letgut_optional-argument}{__letgut_key} -\colorlet{__letgut_math}{green!50!black} -\lstset{% - texcsstyle=*\color{__letgut_texcs}, - commentstyle=\color{__letgut_comment}\itshape, - keywordstyle= \color{__letgut_argument-specification-separator}, - keywordstyle={[2]\color{__letgut_environment}}, - keywordstyle={[3]\color{__letgut_key}}, - keywordstyle={[4]\color{__letgut_value}}, - keywordstyle={[5]\color{__letgut_argument-specification}}, - keywordstyle={[6]\color{__letgut_key}}, - escapechar=£, - literate=*% - {\\\\}{{{\color{__letgut_texcs}\textbackslash\textbackslash}}}{2}% - {\\[}{{\textcolor{__letgut_math}{\textbackslash[}}}{2}% - {\\]}{{\textcolor{__letgut_math}{\textbackslash]}}}{2}% - {$}{{\textcolor{__letgut_math}{\$}}}{1}%$ -} -\end{lstlisting} - -For the listings and examples, we rely on \package*{tcolorbox}, and more -specifically on some of its libraries. - -\begin{lstlisting} -\tcbuselibrary{listings,xparse,breakable,skins} -\end{lstlisting} - -The functions: - -\begin{itemize} -\item \lstinline+\__letgut_code_result_mention_box:n+ draws the mentions “code” and “résultat” -in the codes boxes and the possible corresponding results boxes, -\item \lstinline+\__letgut_title_code_result_box:n+ for the title of codes and the results -boxes: “Exemple” followed by the number of the example and, if a \lstinline+title addon+ -option is provided, the specified title addon. -\end{itemize} - -\begin{lstlisting} -\cs_new_protected:Npn \__letgut_code_result_mention_box:nn #1 #2 -{ - \node[ - minimum~ width=1cm, - minimum~ height=\c__letgut_height_mentions_dim, - outer~ sep=auto, - anchor=north~ east, - fill=__letgut_borderCode - ]~ at~ (#1) - { - \itshape - \small - \color{__letgut_foregroundMention} - \__letgut_unselectable:n {#2} - }; -} -\cs_new_protected:Npn \__letgut_title_code_result_box:n #1 -{ - Exemple~ \thetcbcounter - \tl_if_empty:NF {#1} { \hypersetup{hidelinks} \c_space_tl :~#1 } -} -\cs_new_protected:Nn \__letgut_on_callout_page:nn -{ - \tl_set:Nn \l_tmpa_int {\getpagerefnumber{#1}} - \tl_set:Nn \l_tmpb_int {\thepage} - \int_compare:nNnF {\l_tmpa_int} = {\l_tmpb_int} - {#2} -} -\end{lstlisting} - -We define the style of the codes and the results boxes. - -\begin{lstlisting} -\tl_set:Nn \l__letgut_reference_text_tl { - Cf.~\vref{\g__letgut_label_ltx_example_str}. -} -\tcbset{ - __letgut_code/.style={ - listing~ options={ - % style=tcblatex, - numbers=left, - numbersep=\c__letgut_number_sep_dim, -\end{lstlisting} -We want the line numbers to not be selectable, hence the \lstinline+\__letgut_unselectable:n+:. -\begin{lstlisting} -numberstyle= - \scriptsize - \ttfamily - \color{__letgut_foregroundLinenumber} - \__letgut_unselectable:n, -}, -every~ float=\raggedleft, -colback=__letgut_backgroundCode, -breakable, -sharp~ corners, -boxrule=0.25mm, -colframe=__letgut_borderCode, -sidebyside~ align=top~ seam, -toprule~ at~ break=0mm, -bottomrule~ at~ break=0mm, -colbacktitle=__letgut_borderCode, -fonttitle=\sffamily\bfseries, -before~ title={ - \tl_set:Nn \l__letgut__tex_stuff_font_switch_tl {\rmfamily} -}, -\end{lstlisting} -We define a custom \package*{tcolorbox}'s \lstinline+title addon+ option that let us -specify an addon to the title which will added after the automatically -generated title “Exemple \meta{number}”. -\begin{lstlisting} -title~ addon/.store~ in=\l__letgut_title_addon_tl, -title=\__letgut_title_code_result_box:n {\l__letgut_title_addon_tl}, -\end{lstlisting} -We define a custom \package*{tcolorbox}'s \lstinline+reference text+ option that let us -override the text of the reference for the examples with code and result side by -side that are floating and not being of their call out pages. -\begin{lstlisting} -reference~ text/.code={ - \tl_set:Nn \l__letgut_reference_text_tl {##1} -}, -\end{lstlisting} -We define a custom \package*{tcolorbox}'s \lstinline+result width+ option that let us -specify the width of the result which is \lstinline+\linewidth+ by default. -\begin{lstlisting} -result~ width/.store~ in=\l__letgut_result_width_dim, -result~ width=\linewidth, -}, -__letgut_code_result/.style={ - __letgut_code={#1}, - bicolor, - colbacklower=__letgut_backgroundResult, - segmentation~ at~ break=false, - top=\c__letgut_height_mentions_dim, - middle=\c__letgut_height_mentions_dim, -\end{lstlisting} -We want the side by side code/result examples to automatically be floating. -\begin{lstlisting} -sidebyside@true/.code={% - \tcb@sidebysidetrue% - \tcb@isbreakablefalse% - \pgfkeysalso{floatplacement=ht}% - \pgfkeysalso{float}% - \pgfkeysalso{label={\g__letgut_label_ltx_example_str}}% - \tl_set:Nx \l_tmpa_tl { - \getpagerefnumber { - \g__letgut_callout_label_ltx_example_str - } - } - \tl_set:Nx \l_tmpb_tl { - \getpagerefnumber { - \g__letgut_label_ltx_example_str - } - } - \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl - { - \l__letgut_reference_text_tl - \tl_set:Nn \l__letgut_reference_text_tl { - Cf.~\vref{\g__letgut_label_ltx_example_str}. - } - \pgfkeysalso{ - drop~ shadow=black, - grow~ to~ left~ by=4cm, - boxed~ title~ style={sharp~ corners}, - } - \pgfkeysalso{after~ title~ app=\c_space_tl (cf.~page~\thepage)} - } -},% -overlay={ - \iftcb@sidebyside - \__letgut_code_result_mention_box:nn {segmentation.north} {code} - \__letgut_code_result_mention_box:nn {interior.north~ east} {résultat} - \else - \ifcase\tcbsegmentstate - % 0 = Box contains only an upper part - \__letgut_code_result_mention_box:nn {interior.north~ east} {code} - \or% - % 1 = Box contains an upper and a lower part - \__letgut_code_result_mention_box:nn {interior.north~ east} {code -\end{lstlisting} - -\begin{lstlisting} - \int_compare:nNnT {\thetcbbreakpart} > {1} {~(suite)} -} -\__letgut_code_result_mention_box:nn { - [yshift=.1mm]segmentation.east -} {résultat} -\else% -% 2 = Box contains only a lower part -\__letgut_code_result_mention_box:nn {interior.north~ east} {résultat -\end{lstlisting} - -\begin{lstlisting} -\int_compare:nNnT {\thetcbbreakpart} > {1} {~(suite)} -} -\fi -\fi -}, -}, -} -\end{lstlisting} - -The \package*{tcolorbox} listings defined below make use of -\package*{cleveref}'s features. But, since the latter package is loaded -\lstinline+\AddToHook{begindocument/before}+, the same is needed for these listings. - -\begin{lstlisting} -\AddToHook{begindocument/before}{ -\end{lstlisting} - -We now define the environments that let us display: - -\begin{enumerate} -\item only \LaTeX{} code: -\end{enumerate} -\begin{lstlisting} -\DeclareTCBListing[ - auto~ counter, - crefname={exemple}{exemples} -]{ltx-code}{ !O{} }{% - __letgut_code, - listing~ only, - #1% -} -\end{lstlisting} -\begin{enumerate} -\item both \LaTeX{} code and its result: -\begin{enumerate} -\item ordinary: -\end{enumerate} -\end{enumerate} -\begin{lstlisting} -\DeclareTCBListing[ - use~ counter~ from=ltx-code, - crefname={exemple}{exemples} -]{ltx-code-result}{ !O{} }{% - __letgut_code_result, - #1% -} -\end{lstlisting} -\begin{enumerate} -\item with the result obtained externally: -\end{enumerate} -\begin{lstlisting} -\DeclareTCBListing[ - use~ counter~ from=ltx-code, - crefname={exemple}{exemples} -]{ltx-code-external-result}{ O{} m }{% - __letgut_code_result, - listing~ and~ comment, - image~ comment={width=\l__letgut_result_width_dim}{#2}, - center~ lower, - #1% -} -\end{lstlisting} - -\begin{lstlisting} -} -\end{lstlisting} - -The examples with code and result side by side will be floating but we want the -ones being of their call out pages to have before and after them a reduced -vertical glue (\lstinline+\g__letgut_reduced_intextsep_dim+). Hence we store the original -glue (\lstinline+\intextsep+) in a custom one (\lstinline+\g__letgut_orig_intextsep_dim+) in order -to retrieve the original skip for floats other than these ones. - -\begin{lstlisting} -\skip_const:Nn \c__letgut_orig_intextsep_skip {\intextsep} -\skip_const:Nn \c__letgut_reduced_intextsep_skip { - 4\p@ \@plus .667\p@ \@minus .667\p@ -} -\end{lstlisting} - -We now use hooks in order to\ldots{} - -\begin{lstlisting} -\AddToHook{env/ltx-code-result/before}{ - \int_gincr:N \g__letgut_ltx_example_int - \str_set:Nx \g__letgut_label_ltx_example_str { - \c__letgut_label_ltx_example_str- - \int_use:N \g__letgut_ltx_example_int - } - \str_set:Nx \g__letgut_callout_label_ltx_example_str { - \c__letgut_callout_label_ltx_example_str- - \int_use:N \g__letgut_ltx_example_int - } - \label{\g__letgut_callout_label_ltx_example_str} - \tl_set:Nx \l_tmpa_tl { - \getpagerefnumber { - \g__letgut_callout_label_ltx_example_str - } - } - \tl_set:Nx \l_tmpb_tl { - \getpagerefnumber { - \g__letgut_label_ltx_example_str - } - } - \tl_if_eq:NNF \l_tmpa_tl \l_tmpb_tl - { - \skip_set_eq:NN \intextsep \c__letgut_reduced_intextsep_skip - } -} -\end{lstlisting} - -\subsection{Local config file} -\label{sec:org562c2a3} - -Each issue of the Lettre requires certain local configurations: configuration -dedicated to the issue in question, particular packages used in the articles, -specific configurations of the \package*{listings}, etc. In order to not clutter -the main \file*{.tex} of the Lettre, a local configuration file named -\file{localconf.tex}, if present in the current directory, is automatically -included at the end of the end of the preamble. And since this file is input in -the current category régime (\lstinline+\ExplSyntaxOn+), a \lstinline+\ExplSyntaxOff+ is -automatically inserted at its beginning. - -\begin{lstlisting} -\file_if_exist:nT {./\c__letgut_local_config_file_tl}{ - \AddToHook { file/before/./\c__letgut_local_config_file_tl } { - \ExplSyntaxOff - } - \file_input:n {./\c__letgut_local_config_file_tl} -} -\end{lstlisting} - -We don't want the book review entry types to be listed in the bibliography -(they appears only thanks to the \lstinline+bookreview+ environment). - -\begin{lstlisting} -\ExecuteBibliographyOptions[bookreview]{skipbib,skiplab} -\end{lstlisting} - -\begin{lstlisting} -\endinput -\end{lstlisting} - -\section{(biblatex) Data model} -\label{sec:org14731c9} - -We give the (\package{biblatex}) data model that enriches the default one for -several purposes: -\begin{itemize} -\item the books reviews, -\item the books advertisements. -\end{itemize} - -\begin{lstlisting} -\ProvidesFile{letgut.lbx}[2022-03-22 v0.9.1 letgut localization] -\InheritBibliographyExtras{french} -\DeclareBibliographyStrings{ - inherit = {french}, - number = {{\no}{\no}}, - volume = {{volume}{vol\adddot}}, - volumes = {{volumes}{vol\adddot}}, -} -\end{lstlisting} - -We create the new bibliography driver \lstinline+bookreview+ (that seems to -create the corresponding new entry). - -\begin{lstlisting} -\ProvidesFile{letgut.dbx}[2022-03-22 v0.9.1 letgut data model macros] -\DeclareBibliographyDriver{bookreview}{% - \usebibmacro{bibindex}% - \usebibmacro{begentry}% - \usebibmacro{author/editor+others/translator+others}% - \setunit{\printdelim{nametitledelim}} - \newblock - \usebibmacro{maintitle+title}% - \newunit - \printlist{language}% - \newunit\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 - \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}} - {}% - \finentrypunct - \usebibmacro{finentry}} -\end{lstlisting} - -We provide a specific \lstinline+biblatex+ citation style . - -\begin{lstlisting} -\ProvidesFile{letgut.cbx}[2022-03-22 v0.9.1 letgut base citation style] -\RequireCitationStyle{numeric} -\end{lstlisting} - -The books reviewed have their titles not only emphasized, but in bold face as -well\ldots{} - -\begin{lstlisting} -\DeclareFieldFormat[bookreview]{title}{\textbf{\emph{#1}}} -\end{lstlisting} - -\ldots{} but not their subtitles. - -\begin{lstlisting} -\renewbibmacro*{title}{% - \ifboolexpr{ - test {\iffieldundef{title}} - and - test {\iffieldundef{subtitle}} - } - {} - {\printtext[title]{% - \printfield[titlecase]{title}% - \setunit{\subtitlepunct}}% - \printfield[emph]{subtitle}% - \newunit}% - \printfield{titleaddon}} -\end{lstlisting} - -\section{Provided files} -\label{sec:org59fbe1b} - -\subsection{Example file of an issue of the newsletter} -\label{sec:org4b9a54d} - -\begin{lstlisting} -\documentclass{letgut} - -\letgutsetup{ - % % Option booléenne pour la version finale de la Lettre. - % % L'option contraire`draft` (par défaut) affiche - % % « Brouillon » en filigrane et actionne le package - % % `lua-typo`. - % - % , final - % - % % Option coloriant le fond de la page d'une couleur - % % par défaut (`1.0, 0.98, 0.94` en « rgb ») mais - % % modifiable au moyen de l'option `pagecolor` ci-dessous. - % - % , paper - % - % % Numéro de la Lettre - % - , number=44 - % - % % Date de la Lettre. Celle-ci est déduite de la - % % date du jour, mais peut être spécifiée sous la forme - % % AAAA-MM (avec garde-fous) ou librement - % % (p. ex. `date=Printemps 2021`). - % - % , date=2025-16 - % - % % Couleur de la page, à spécifier selon le modèle « rgb ». - % - % , pagecolor={1.0, 0.1, 0.94} - % - % % Couleur des hyperliens, à spécifier selon le modèle - % % « named ». - % - % , allcolorslinks=cyan - % - % % Un (r)appel à cotisation est automatiquement ajouté - % % en 1re page. Si on ne le souhaite pas, il suffit de - % % passer l'option `membership-reminder=false`. - % - % , membership-reminder=false - % - % % Si un fichier `editorial.tex`, on s'en doute censé - % % contenir l'éditorial, est présent dans le répertoire - % % courant, son contenu est automatiquement ajouté en - % % 1re page. Si un tel fichier est absent du répertoire - % % courant, une alerte est affichée à la place, sauf si, - % % parce qu'on ne souhaite pas d'éditorial, on passe - % % l'option `editorial=false`. - % - % , editorial=false - % - % % Les informations concernant GUTenberg, si elles - % % figurent dans un fichier `informations-gut.tex` - % % présent dans le répertoire courant, sont - % % automatiquement ajoutées en dernière page. - % % Si on ne souhaite pas que figurent ces - % % informations, il suffit de passer l'option - % % `informations=false`. - % - % , informations=false -} - -\setmainfont{TeX Gyre Schola} % Par exemple - -\usepackage[maths=both]{duckuments} -\usepackage{mwe} - -% \addbibresource{biblio.bib} - -\begin{document} -\duckument -\end{document} - -%%% Local Variables: -%%% mode: latex -%%% TeX-engine: luatex -%%% TeX-master: t -%%% End: -\end{lstlisting} - -\subsection{Example of an editorial} -\label{sec:orgf79a2c2} - -\begin{lstlisting} -Ceci est un intéressant éditorial de la \lettregut{} -dans lequel on peut causer de l'\ag{} et du \ca{} -de l'association. Il peut aussi y être question du \ctan. - -\lipsum[1-5] - -\begin{figure}[ht] - \centering - \includegraphics[width=.7\linewidth]{example-image} - \caption{Ducks ?} - \label{fig:ducks} -\end{figure} - -\lipsum[6-10] -\end{lstlisting} - -\subsection{Informations about \gutenberg} -\label{sec:orgcc0dfe6} - -\begin{lstlisting} -\enlargethispage{1.5cm} -\small -\vspace*{-1cm} -\hspace*{-1.5cm}% -\raisebox{-\height+0.7\baselineskip}{% - \begin{minipage}[t]{.6\textwidth}%\vspace{0pt}% - \includegraphics[width=\linewidth]{logo-gut.pdf} - \end{minipage}% -}% -\hfill% -\begin{minipage}[t]{.4\textwidth}%\vspace{0pt}% - \footnotesize\raggedleft% - Association \gut{}\\ - 15 rue des Halles -- \textsc{bp} 74\\ - 75001 Paris\\ - France\\ - \nolinkurl{secretariat@gutenberg.eu.org} -\end{minipage}% - -\begin{description} -\item[Site internet :] \url{https://www.gutenberg.eu.org/} -\item[\Cahiers{} :] \url{http://cahiers.gutenberg.eu.org/} -\item[Problèmes techniques :] - \leavevmode - \begin{description} - \item[la liste \texttt{gut} :] - \url{https://www.gutenberg.eu.org/-Listes-de-diffusion-} - \item[le site \TeX nique de questions et réponses :] - \url{https://texnique.fr/} - \item[la foire aux questions :] - \url{https://faq.gutenberg.eu.org} - \end{description} -\end{description} -% -\alertbox{% - Cette association est la vôtre: faites-nous part de - vos idées, de vos envies, de vos préoccupations - à l'adresse \nolinkurl{secretariat@gutenberg.eu.org}.% -} - -% \section[Association GUTenberg (tout sur l')] -% {Adhésion à l'association} -\title{Adhésion à l'association} -\label{letgut_label_adhesions} - -\begin{itemize} -\item % Adhésions et abonnements - Les adhésions sont à renouveler en début d'année - pour l'année civile. - % \item Il n'y a pas de lettre de rappel, chaque membre - % doit faire son renouvellement annuel; %\hspace*{1em} - % merci de renvoyer spontanément le bulletin ci-dessous - % en début d'année. -\item Les administrations peuvent joindre un bon de commande - revêtu de la signature de la personne responsable ; - les étudiants doivent joindre un justificatif. - % \item Si vous souhaitez que vos coordonnées restent - % confidentielles, merci de le signaler. -\end{itemize} - -\section{Tarifs \the\year} - -Les membres de \gut\ peuvent adhérer à l'association -internationale, le \acf{tug}, et recevoir son bulletin -\emph{\acs{tug}boat} à un tarif préférentiel : -\begin{description} -\item[tarif normal :] \EUR{65} (au lieu de 85~\$) -\item[tarif étudiant :] \EUR{40} (au lieu de 55~\$) -\end{description} -% (\EUR{49,50}, étudiants et demandeurs d'emploi : -% \EUR{29}, au lieu de 85\$ et % 65\$). Voir -% \url{% -% https://www.gutenberg.eu.org/?Adherer-a-l-association% -% }. - -\footnotesize -\begin{center} - \begin{tabular}{lr} - \toprule - \textbf{Type d'adhésion} & \textbf{Prix} \\ - \midrule - Membre individuel & \EUR{30} \\ - Membre individuel + adhésion \acs{tug} & \EUR{95} \\ - Membre individuel étudiant/demandeur d'emploi & \EUR{15} \\ - Membre individuel étudiant + adhésion \acs{tug} & \EUR{55} \\ - Association d'étudiants & \EUR{65} \\ - Organisme à but non lucratif & \EUR{130} \\ - Organisme à but lucratif & \EUR{229} \\ - \bottomrule - \end{tabular} -\end{center} - -\section{Règlements} - -Les règlements peuvent s'effectuer par : -\begin{itemize} -\item \textbf{virement bancaire}% - \footnote{Nous vous remercions de \textbf{privilégier} - le \textbf{virement bancaire}.\label{fn:1}} (IBAN : - FR76 1870 7000 3003 0191 3568 475)% - \leavevmode - - \alertbox{% - Veillez à bien \emph{indiquer vos nom et prénom} - dans les références du virement !% - } -\item Paypal\footnotemark[\value{footnote}] : - \url{https://www.gutenberg.eu.org/?Adherer-en-ligne} -\item bulletin et chèque\footnotemark[\value{footnote}] : - \url{https://www.gutenberg.eu.org/?Adherer-a-l-association} -\end{itemize} - -\vfill - -\begin{center} - \begin{tblr}{ - width=.75\linewidth, - colspec={ - % < (Just not to disturb the parentheses - % balancing detection of my editor.) - >{\bfseries}r@{ }X - }, - vline{1,3}={solid}, - hline{1,7}={solid}, - rowsep=0mm, - row{1} = {abovesep+=.25cm}, - row{2} = {belowsep+=.125cm}, - row{6} = {belowsep+=.25cm}, - % colsep=2.5mm, - } - \SetCell[c=2]{c} \emph{La \lettregut}\\ - \SetCell[c=2]{c} \mdseries Bulletin irrégulomestriel - de l'association \gut\\ - Directeur de la publication : - & \person{Bideault, Patrick} \\ - Comité de rédaction : - & {Patrick \bsc{Bideault}, Denis \bsc{Bitouzé}, \\ - Céline \bsc{Chevalier} \& Maxime \bsc{Chupin}} \\ - Adresse de la rédaction : & - { - Association \gut\\ - 15 rue des Halles -- \textsc{bp} 74\\ - 75001 Paris - } - \\ - \acs{issn} : & 2742-6149 (version numérique) - \end{tblr} -\end{center} -\vfill -\mbox{} -\clearpage - -%%% Local Variables: -%%% mode: latex -%%% End: -\end{lstlisting} -\end{document}
\ No newline at end of file |