summaryrefslogtreecommitdiff
path: root/macros/luatex/latex/letgut/doc/letgut-code.tex
diff options
context:
space:
mode:
Diffstat (limited to 'macros/luatex/latex/letgut/doc/letgut-code.tex')
-rw-r--r--macros/luatex/latex/letgut/doc/letgut-code.tex3361
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