summaryrefslogtreecommitdiff
path: root/macros/latex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2023-12-07 03:00:45 +0000
committerNorbert Preining <norbert@preining.info>2023-12-07 03:00:45 +0000
commitd1c8f933dea4fce5c8b5628fe829cadf0b33b43d (patch)
tree5b152bf88f12fcde263af23542df43d609a18aa9 /macros/latex
parent517bc0ad712becd89c09bdc30e6b5cdb135fcd83 (diff)
CTAN sync 202312070300
Diffstat (limited to 'macros/latex')
-rw-r--r--macros/latex/contrib/proflycee/README.md13
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdfbin1418840 -> 1444492 bytes
-rw-r--r--macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex272
-rw-r--r--macros/latex/contrib/proflycee/tex/ProfLycee.sty3
-rw-r--r--macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex293
-rw-r--r--macros/latex/contrib/spacingtricks/spacingtricks.dtx63
-rw-r--r--macros/latex/contrib/spacingtricks/spacingtricks.pdfbin182079 -> 182798 bytes
-rw-r--r--macros/latex/contrib/thermodynamics/thermodynamics.dtx9
-rw-r--r--macros/latex/contrib/thermodynamics/thermodynamics.pdfbin273124 -> 270368 bytes
-rw-r--r--macros/latex/contrib/tutodoc/MANIFEST.md72
-rw-r--r--macros/latex/contrib/tutodoc/README.md19
-rw-r--r--macros/latex/contrib/tutodoc/code/tdoc-locale-english.cfg.sty17
-rw-r--r--macros/latex/contrib/tutodoc/code/tdoc-locale-french.cfg.sty17
-rw-r--r--macros/latex/contrib/tutodoc/code/tutodoc.sty1026
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-en.pdfbin0 -> 710329 bytes
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-en.tex1098
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdfbin0 -> 730016 bytes
-rw-r--r--macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex1118
-rw-r--r--macros/latex/required/babel/base/README.md19
-rw-r--r--macros/latex/required/babel/base/babel-code.pdfbin641895 -> 642032 bytes
-rw-r--r--macros/latex/required/babel/base/babel.dtx440
-rw-r--r--macros/latex/required/babel/base/babel.ins2
-rw-r--r--macros/latex/required/babel/base/babel.pdfbin417319 -> 417807 bytes
-rw-r--r--macros/latex/required/babel/base/bbcompat.dtx2
-rw-r--r--macros/latex/required/babel/base/bbidxglo.dtx4
25 files changed, 4250 insertions, 237 deletions
diff --git a/macros/latex/contrib/proflycee/README.md b/macros/latex/contrib/proflycee/README.md
index bdafe102e4..11502d6f77 100644
--- a/macros/latex/contrib/proflycee/README.md
+++ b/macros/latex/contrib/proflycee/README.md
@@ -1,10 +1,13 @@
You are a french mathematics teacher ?
proflycee may be a useful package to daily use of LaTeX.
------------------------------------------------------------------------------
+
+----------------
+
Vous êtes un enseignant de mathématiques en lycée ?
proflycee est un package qui pourra vous aider à utiliser LaTeX au quotidien.
------------------------------------------------------------------------------
-Author.....: Cédric Pierquet
-email......: cpierquet@outlook.fr
-Licence....: Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+----------------
+
+Author : Cédric Pierquet
+email : cpierquet@outlook.fr
+Licence : Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
index c35a881442..21a32e22f8 100644
--- a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.pdf
Binary files differ
diff --git a/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
new file mode 100644
index 0000000000..0dfda9ed87
--- /dev/null
+++ b/macros/latex/contrib/proflycee/doc/ProfLycee-doc.tex
@@ -0,0 +1,272 @@
+% !TeX TXS-program:compile = txs:///arara
+% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
+% arara: pythontex: {rerun: always}
+% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode}
+% arara: lualatex: {shell: yes, synctex: no, interaction: batchmode} if found('log', '(undefined references|Please rerun|Rerun to get)')
+
+\documentclass[a4paper,french,11pt]{article}
+\def\PLversion{3.01a}
+\def\PLdate{6 décembre 2023}
+\usepackage{amsfonts}
+\usepackage{ProfLycee}
+\useproflyclib{piton,minted,pythontex,ecritures}
+\usepackage[math-style=french]{fourier-otf}
+\usepackage{mathrsfs}%pour mathscr
+\usepackage{awesomebox}
+\usepackage[lua]{tkz-euclide}
+\usepackage{tkz-tab}
+\tikzstyle{every picture}+=[remember picture]
+\usetikzlibrary{hobby}
+\usepackage[group-minimum-digits=4]{siunitx}
+\sisetup{locale=FR}
+\usepackage{enumitem}
+\usepackage{fancyvrb}
+\usepackage{fancyhdr}
+\usepackage{tabularray}
+\usepackage{multicol}
+\DeclareMathSymbol{;}\mathbin{operators}{'73} %espacement avec ;
+%fancy
+\fancyhf{}
+\renewcommand{\headrulewidth}{0pt}
+\lfoot{\sffamily \small [ProfLycee]}
+\cfoot{\sffamily \small - \thepage{} -}
+\rfoot{\hyperlink{matoc}{\small\faArrowAltCircleUp[regular]}}
+
+\usepackage{graphics}
+\usepackage{hologo}
+\providecommand\tikzlogo{Ti\textit{k}Z}
+\providecommand\TeXLive{\TeX{}Live\xspace}
+\providecommand\PSTricks{\textsf{PSTricks}\xspace}
+\let\pstricks\PSTricks
+\let\TikZ\tikzlogo
+\newcommand\TableauDocumentation{%
+ \begin{tblr}{width=\linewidth,colspec={X[c]X[c]X[c]X[c]X[c]X[c]},cells={font=\huge\sffamily}}
+ {\LaTeX} & {\hologo{pdfLaTeX}} & {\hologo{LuaLaTeX}} & {\TikZ} & {\TeXLive} & {\hologo{MiKTeX}} \\
+ \end{tblr}
+}
+\usepackage{simplekv}
+\usepackage{menukeys}
+\let\tab\relax
+\usepackage{tabto}
+\usepackage{pgf,pgfplots}
+\pgfplotsset{compat=newest,xlabel near ticks,ylabel near ticks}
+\usepackage{listofitems}
+\usepackage{xintexpr}
+\usepackage{codehigh}
+\usepackage{scontents}
+\usepackage{hyperref}
+\urlstyle{same}
+\hypersetup{pdfborder=0 0 0}
+\usepackage{geometry}
+\geometry{margin=1.5cm}
+\usepackage{babel}
+\usepackage{newverbs}
+
+\input{ProfLycee-doc-macropreamb.tex}
+
+\input{ProfLycee-doc-pagegarde.tex}
+
+\newpage
+
+\phantomsection
+\hypertarget{matoc}{}
+
+\tableofcontents
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Introduction}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-introduction.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Liste des commandes}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-listecommandes.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Écritures mathématiques}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-ecritures.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour l'analyse}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-outilsanalyse.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils graphiques}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-outilsgraphiques.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Présentation de codes}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-prescodes.tex}
+
+\pagebreak
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour la géométrie}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-outilsgeom.tex}
+
+\pagebreak
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour la géométrie analytique}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-outilsgeomanalyt.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour les statistiques}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-stats.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour les probabilités}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-probas.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Outils pour l'arithmétique}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-arithm.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Écritures, simplifications}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-simplif.tex}
+
+\pagebreak
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Jeux et récréations}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-jeuxrecreat.tex}
+
+\newpage
+
+\phantom{t}\par\vfill\par
+\begin{PART}
+ \begin{center}
+ \Huge\MakeUppercase{Historique}
+ \end{center}
+\end{PART}
+\par\vfill\par\phantom{t}
+
+\newpage
+
+\input{ProfLycee-doc-historique.tex}
+
+\end{document} \ No newline at end of file
diff --git a/macros/latex/contrib/proflycee/tex/ProfLycee.sty b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
index 1a9535be02..6d2d836957 100644
--- a/macros/latex/contrib/proflycee/tex/ProfLycee.sty
+++ b/macros/latex/contrib/proflycee/tex/ProfLycee.sty
@@ -3,7 +3,8 @@
% or later, see http://www.latex-project.org/lppl.txtf
\NeedsTeXFormat{LaTeX2e}
-\ProvidesPackage{ProfLycee}[2023/11/30 3.00g Aide pour l'utilisation de LaTeX en lycee]
+\ProvidesPackage{ProfLycee}[2023/12/06 3.01a Aide pour l'utilisation de LaTeX en lycee]
+% 3.01a Ajout des courbes ECC/FCC + paramètres par interpolation
% 3.00g Amélioration de la marge Gauche dans le PseudoCode
% 3.00f Conversion d'une écriture décimale périodique en fraction (avec rédaction éventuelle)
% 3.00e Ajout des 'machines à transformer' + Correction d'un nom de commande (cc ProfCollege ^^)
diff --git a/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex b/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
index eafa4c5909..335b524ec2 100644
--- a/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
+++ b/macros/latex/contrib/proflycee/tex/proflycee-tools-stats.tex
@@ -2,6 +2,7 @@
% Copyright 2023 Cédric Pierquet
% Released under the LaTeX Project Public License v1.3c or later, see http://www.latex-project.org/lppl.txt
+%3.01a Courbe ECC
%2.6.8 Grille histogrammes non réguliers
%2.6.7 Histogrammes
@@ -482,4 +483,296 @@
{}%
}
+%%----Courbe ECC
+%\usetikzlibrary{intersections}
+
+% \newcommand\recuptikzxy[3]{%
+ % \tikz@scan@one@point\pgfutil@firstofone#1\relax
+ % \edef#2{\the\pgf@x}%
+ % \edef#3{\the\pgf@y}%
+% }
+
+\defKV[courbeECC]{%
+ Largeur=\def\ecc@larg@graph{#1},%
+ Hauteur=\def\ecc@haut@graph{#1},%
+ PasX=\def\ecc@grille@x{#1},%
+ PasY=\def\ecc@grille@y{#1},%
+ Couleur=\def\ecc@coul@graph{#1},%
+ CouleursParams=\def\ecc@coul@params{#1},%
+ GraduationsX=\def\ecc@gradx@graph{#1},%
+ GraduationsY=\def\ecc@grady@graph{#1},%
+ PoliceAxes=\def\ecc@font@axes{#1},%
+ ElargirAxes=\def\ecc@elarg@axes{#1}
+}
+
+\setKVdefault[courbeECC]{%
+ Largeur=15,%
+ Hauteur=10,%
+ PasX=50,%
+ PasY=50,%
+ Couleur=blue,%
+ AffParams=true,%
+ CouleursParams={CouleurVertForet/red},%
+ GraduationsX={\DonneesXmin},%
+ GraduationsY={0},%
+ PoliceAxes=\normalsize\normalfont,%
+ ElargirOx=true,%
+ ElargirOy=true,%
+ ElargirAxes=3mm
+}
+
+\tikzset{traitsparamecc/.style={line width=1pt,densely dashed}}
+\tikzset{courbeecc/.style={line width=1pt}}
+\tikzset{gradsecc/.style={thick}}
+\tikzset{axesecc/.style={gradsecc,->,>=latex}}
+
+\NewDocumentCommand\CourbeECCStylesDefaut{ }{%
+ \tikzset{traitsparamecc/.style={line width=1pt,densely dashed}}
+ \tikzset{courbeecc/.style={line width=1pt}}
+ \tikzset{gradsecc/.style={thick}}
+ \tikzset{axesecc/.style={gradsecc,->,>=latex}}
+}
+
+\NewDocumentCommand\CourbeECC{ O{} m m }{%
+ \restoreKV[courbeECC]%
+ \setKV[courbeECC]{#1}%
+ \IfSubStr{\ecc@coul@params}{/}%
+ {%
+ \StrCut{\ecc@coul@params}{/}{\ecc@coul@quart}{\ecc@coul@med}%
+ }%
+ {%
+ \def\ecc@coul@quart{\ecc@coul@params}\def\ecc@coul@med{\ecc@coul@params}%
+ }%
+ \readlist*\DataClass{#2}%
+ \readlist*\DataEff{#3}%
+ \xdef\DonneesECC{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{%
+ \xdef\DonneesTmp{0}
+ \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
+ \xdef\DonneesTmp{\xintfloateval{\DonneesTmp+\DataEff[##2]}}%
+ }%
+ \xdef\DonneesECC{\DonneesECC,\DonneesTmp}%
+ }%
+ \readlist*\DataECC\DonneesECC%
+ \itemtomacro\DataClass[1]\DonneesXmin%
+ \itemtomacro\DataClass[-1]\DonneesXmax%
+ \itemtomacro\DataECC[-1]\DonneesEffMax%
+ \xdef\UniteGraphiqueX{\xintfloateval{(\ecc@larg@graph)/(\DonneesXmax-\DonneesXmin)}}%
+ \xdef\UniteGraphiqueY{\xintfloateval{(\ecc@haut@graph)/(\DonneesEffMax)}}%
+ \xdef\DonneesListeECC{(\DataClass[1],\DataECC[1])}%
+ \xintFor* ##1 in {\xintSeq{2}{\DataECClen}}\do{%
+ \xdef\DonneesListeECC{\DonneesListeECC--(\DataClass[##1],\DataECC[##1])}%
+ }%
+ %paramètres par interpolation
+ \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{%
+ \xdef\isuiv{\xinteval{##1+1}}%
+ \xintifboolexpr{\DataECC[##1] < (0.25*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.25*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValPremQuartile{\xintfloateval{(0.25*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ \xintifboolexpr{\DataECC[##1] < (0.50*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.50*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValMed{\xintfloateval{(0.50*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ \xintifboolexpr{\DataECC[##1] < (0.75*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.75*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValTroisQuartile{\xintfloateval{(0.75*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ }%
+ %graphique
+ \begin{tikzpicture}[x=\UniteGraphiqueX cm,y=\UniteGraphiqueY cm]
+ \draw[xstep=\ecc@grille@x,ystep=\ecc@grille@y,thin,lightgray] (\DonneesXmin,0) grid (\DonneesXmax,\DonneesEffMax) ;
+ %modif axes avec pgffor :-(
+ \foreach \valx in \ecc@gradx@graph {%
+ \draw[gradsecc] (\valx,3pt)--++(0,-6pt) node[below,font=\ecc@font@axes] {\num{\valx}} ;
+ }
+ \foreach \valy in \ecc@grady@graph {%
+ \draw[gradsecc] ($({\DonneesXmin},\valy)+(3pt,0)$)--++(-6pt,0) node[left,font=\ecc@font@axes] {\num{\valy}} ;
+ }
+ \ifboolKV[courbeECC]{ElargirOx}%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--($(\DonneesXmax,0)+(\ecc@elarg@axes,0)$) ;
+ }%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--(\DonneesXmax,0) ;
+ }%
+ \ifboolKV[courbeECC]{ElargirOy}%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--($(\DonneesXmin,\DonneesEffMax)+(0,\ecc@elarg@axes)$) ;
+ }%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--(\DonneesXmin,\DonneesEffMax) ;
+ }%
+ \draw[courbeecc,\ecc@coul@graph] \DonneesListeECC ;
+ \xintFor* ##1 in {\xintSeq{1}{\DataECClen}}\do{%
+ \filldraw[\ecc@coul@graph] (\DataClass[##1],\DataECC[##1]) circle[radius=2pt] ;
+ }%
+ \ifboolKV[courbeECC]{AffParams}%
+ {%
+ \draw[traitsparamecc,\ecc@coul@quart] (\DonneesXmin,{0.25*\DonneesEffMax})--++({\DonneesXmax-\DonneesXmin},0);
+ \draw[traitsparamecc,\ecc@coul@med] (\DonneesXmin,{0.50*\DonneesEffMax})--++({\DonneesXmax-\DonneesXmin},0);
+ \draw[traitsparamecc,\ecc@coul@quart] (\DonneesXmin,{0.75*\DonneesEffMax})--++({\DonneesXmax-\DonneesXmin},0);
+ \draw[traitsparamecc,\ecc@coul@quart] (\ValPremQuartile,{0.25*\DonneesEffMax})--(\ValPremQuartile,0) ; \draw[\ecc@coul@quart,thick,fill=white] (\ValPremQuartile,{0.25*\DonneesEffMax}) circle[radius=2pt] ;
+ \draw[traitsparamecc,\ecc@coul@quart] (\ValTroisQuartile,{0.75*\DonneesEffMax})--(\ValTroisQuartile,0) ; \draw[\ecc@coul@quart,thick,fill=white] (\ValTroisQuartile,{0.75*\DonneesEffMax}) circle[radius=2pt] ;
+ \draw[traitsparamecc,\ecc@coul@med] (\ValMed,{0.5*\DonneesEffMax})--(\ValMed,0) ; \draw[\ecc@coul@med,thick,fill=white] (\ValMed,{0.5*\DonneesEffMax}) circle[radius=2pt] ;
+ }%
+ {}%
+ \end{tikzpicture}%
+ \CourbeECCStylesDefaut%
+}
+
+\NewDocumentEnvironment{EnvCourbeECC}{ O{} m m }%
+{%
+ \restoreKV[courbeECC]%
+ \setKV[courbeECC]{#1}%
+ \IfSubStr{\ecc@coul@params}{/}%
+ {%
+ \StrCut{\ecc@coul@params}{/}{\ecc@coul@quart}{\ecc@coul@med}%
+ }%
+ {%
+ \def\ecc@coul@quart{\ecc@coul@params}%
+ \def\ecc@coul@med{\ecc@coul@params}%
+ }%
+ \readlist*\DataClass{#2}%
+ \readlist*\DataEff{#3}%
+ \xdef\DonneesECC{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{%
+ \xdef\DonneesTmp{0}
+ \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
+ \xdef\DonneesTmp{\xintfloateval{\DonneesTmp+\DataEff[##2]}}%
+ }%
+ \xdef\DonneesECC{\DonneesECC,\DonneesTmp}%
+ }%
+ \readlist*\DataECC\DonneesECC%
+ \itemtomacro\DataClass[1]\DonneesXmin%
+ \itemtomacro\DataClass[-1]\DonneesXmax%
+ \itemtomacro\DataECC[-1]\DonneesEffMax%
+ \xdef\UniteGraphiqueX{\xintfloateval{(\ecc@larg@graph)/(\DonneesXmax-\DonneesXmin)}}%
+ \xdef\UniteGraphiqueY{\xintfloateval{(\ecc@haut@graph)/(\DonneesEffMax)}}%
+ \xdef\DonneesListeECC{(\DataClass[1],\DataECC[1])}%
+ \xintFor* ##1 in {\xintSeq{2}{\DataECClen}}\do{%
+ \xdef\DonneesListeECC{\DonneesListeECC--(\DataClass[##1],\DataECC[##1])}%
+ }%
+ %paramètres par interpolation
+ \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{%
+ \xdef\isuiv{\xinteval{##1+1}}%
+ \xintifboolexpr{\DataECC[##1] < (0.25*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.25*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValPremQuartile{\xintfloateval{(0.25*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ \xintifboolexpr{\DataECC[##1] < (0.50*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.50*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValMed{\xintfloateval{(0.50*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ \xintifboolexpr{\DataECC[##1] < (0.75*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.75*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValTroisQuartile{\xintfloateval{(0.75*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ }%
+ %graphique
+ \begin{tikzpicture}[x=\UniteGraphiqueX cm,y=\UniteGraphiqueY cm]
+ \draw[xstep=\ecc@grille@x,ystep=\ecc@grille@y,thin,lightgray] (\DonneesXmin,0) grid (\DonneesXmax,\DonneesEffMax) ;
+ %modif axes avec pgffor :-(
+ \foreach \valx in \ecc@gradx@graph {%
+ \draw[gradsecc] (\valx,3pt)--++(0,-6pt) node[below,font=\ecc@font@axes] {\num{\valx}} ;
+ }
+ \foreach \valy in \ecc@grady@graph {%
+ \draw[gradsecc] ($({\DonneesXmin},\valy)+(3pt,0)$)--++(-6pt,0) node[left,font=\ecc@font@axes] {\num{\valy}} ;
+ }
+ \ifboolKV[courbeECC]{ElargirOx}%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--($(\DonneesXmax,0)+(\ecc@elarg@axes,0)$) ;
+ }%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--(\DonneesXmax,0) ;
+ }%
+ \ifboolKV[courbeECC]{ElargirOy}%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--($(\DonneesXmin,\DonneesEffMax)+(0,\ecc@elarg@axes)$) ;
+ }%
+ {%
+ \draw[axesecc] (\DonneesXmin,0)--(\DonneesXmin,\DonneesEffMax) ;
+ }%
+ \draw[courbeecc,\ecc@coul@graph] \DonneesListeECC ;
+ \xintFor* ##1 in {\xintSeq{1}{\DataECClen}}\do{%
+ \filldraw[\ecc@coul@graph] (\DataClass[##1],\DataECC[##1]) circle[radius=2pt] ;
+ }%
+ \ifboolKV[courbeECC]{AffParams}%
+ {%
+ \draw[traitsparamecc,\ecc@coul@quart] (\DonneesXmin,{0.25*\DonneesEffMax})--++({\DonneesXmax-\DonneesXmin},0);
+ \draw[traitsparamecc,\ecc@coul@med] (\DonneesXmin,{0.50*\DonneesEffMax})--++({\DonneesXmax-\DonneesXmin},0);
+ \draw[traitsparamecc,\ecc@coul@quart] (\DonneesXmin,{0.75*\DonneesEffMax})--++({\DonneesXmax-\DonneesXmin},0);
+ \draw[traitsparamecc,\ecc@coul@quart] (\ValPremQuartile,{0.25*\DonneesEffMax})--(\ValPremQuartile,0) ; \draw[\ecc@coul@quart,thick,fill=white] (\ValPremQuartile,{0.25*\DonneesEffMax}) circle[radius=2pt] ;
+ \draw[traitsparamecc,\ecc@coul@quart] (\ValTroisQuartile,{0.75*\DonneesEffMax})--(\ValTroisQuartile,0) ; \draw[\ecc@coul@quart,thick,fill=white] (\ValTroisQuartile,{0.75*\DonneesEffMax}) circle[radius=2pt] ;
+ \draw[traitsparamecc,\ecc@coul@med] (\ValMed,{0.5*\DonneesEffMax})--(\ValMed,0) ; \draw[\ecc@coul@med,thick,fill=white] (\ValMed,{0.5*\DonneesEffMax}) circle[radius=2pt] ;
+ }%
+ {}%
+ % \path[name intersections={of=CourbeECC and Quartile1,by=Q1}];
+ % \path[name intersections={of=CourbeECC and Mediane,by=Q2}];
+ % \path[name intersections={of=CourbeECC and Quartile3,by=Q3}];
+ % \recuptikzxy{(Q1)}{\xqun}{\yqun}%
+ % \xdef\ValPremQuartile{\xintfloateval{(0.03515*\fpeval{\xqun})/\UniteGraphiqueX}}%
+ % \recuptikzxy{(Q2)}{\xmediane}{\ymediane}
+ % \xdef\ValMed{\xintfloateval{(0.03515*\fpeval{\xmediane})/\UniteGraphiqueX}}%
+ % \recuptikzxy{(Q3)}{\xqtrois}{\yqtrois}%
+ % \xdef\ValTroisQuartile{\xintfloateval{(0.03515*\fpeval{\xqtrois})/\UniteGraphiqueX}}%
+}%
+{%
+ \end{tikzpicture}%
+ \CourbeECCStylesDefaut%
+}
+
+%détermination 'simple' des paramètres
+\NewDocumentCommand\MedianeQuartilesECC{ m m }{%
+ %lecture des listes
+ \readlist*\DataClass{#1}%
+ \readlist*\DataEff{#2}%
+ %création etlecture de la liste des ECC
+ \xdef\DonneesECC{0}%
+ \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{%
+ \xdef\DonneesTmp{0}%
+ \xintFor* ##2 in {\xintSeq{1}{##1}}\do{%
+ \xdef\DonneesTmp{\xintfloateval{\DonneesTmp+\DataEff[##2]}}%
+ }%
+ \xdef\DonneesECC{\DonneesECC,\DonneesTmp}%
+ }%
+ \readlist*\DataECC\DonneesECC%
+ %effectif total + nb
+ \itemtomacro\DataECC[-1]\DonneesEffMax%
+ %détermination de Q1, par balayage + par interpolation
+ \xintFor* ##1 in {\xintSeq{1}{\DataEfflen}}\do{%
+ \xdef\isuiv{\xinteval{##1+1}}%
+ \xintifboolexpr{\DataECC[##1] < (0.25*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.25*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValPremQuartile{\xintfloateval{(0.25*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ \xintifboolexpr{\DataECC[##1] < (0.50*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.50*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValMed{\xintfloateval{(0.50*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ \xintifboolexpr{\DataECC[##1] < (0.75*\DonneesEffMax) 'and' \DataECC[\isuiv] >= (0.75*\DonneesEffMax)}%
+ {%
+ \xdef\pentetmpECC{(\DataECC[\isuiv]-\DataECC[##1])/(\DataClass[\isuiv]-\DataClass[##1])}%OK
+ \xdef\ValTroisQuartile{\xintfloateval{(0.75*\DonneesEffMax+\pentetmpECC*\DataClass[##1]-\DataECC[##1])/(\pentetmpECC)}}%
+ }
+ {}%
+ }%
+}
+
\endinput \ No newline at end of file
diff --git a/macros/latex/contrib/spacingtricks/spacingtricks.dtx b/macros/latex/contrib/spacingtricks/spacingtricks.dtx
index f6c14e621c..5a75a47aa6 100644
--- a/macros/latex/contrib/spacingtricks/spacingtricks.dtx
+++ b/macros/latex/contrib/spacingtricks/spacingtricks.dtx
@@ -20,7 +20,7 @@
%<*package>
\NeedsTeXFormat{LaTeX2e}[2005/12/01]
\ProvidesPackage{spacingtricks}
- [2023/07/28 v1.7 .dtx spacingtricks file]
+ [2023/12/06 v1.8 .dtx spacingtricks file]
%</package>
%<*driver>
\documentclass{ltxdoc}
@@ -58,7 +58,7 @@
%</driver>
% \fi
%
-% \CheckSum{246}
+% \CheckSum{261}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -114,13 +114,16 @@
%
% \changes{v1.7}{2023/07/27}{
% - Minor adjustments in the documentation}
+
+% \changes{v1.8}{2023/12/05}{
+% - New macro cstrut}
%
% \GetFileInfo{spacingtricks.sty}
%
% \title{The \textsf{spacingtricks} package\thanks{This document
% corresponds to \textsf{spacingtricks}~\fileversion, dated \filedate.}}
% \author{Antoine Missier \\ \texttt{antoine.missier@ac-toulouse.fr}}
-% \date{July 28, 2023}
+% \date{December 6, 2023}
% \maketitle
%
% \section{Introduction}
@@ -132,7 +135,8 @@
% \item \hyperlink{footnote}{\texttt{\bslash footnote}} has been redefined
% to avoid unsuitable spacing in certain cases.
% \item \hyperlink{vstrut}{\texttt{\bslash vstrut}} generates a strut
-% with variable height or depth for maintaining consistent vertical spacing.
+% with variable height or depth for maintaining consistent vertical spacing,
+% and \hyperlink{cstrut}{\texttt{\bslash cstrut}} being symmetric around the mathematical axis.
% \item \hyperlink{indent}{\texttt{\bslash indent}} has been redefined
% to indent a line at the beginning
% of a particular paragraph even if "\parindent" has been set to 0.
@@ -341,8 +345,8 @@
%
% \begin{juxtapose}
% \begin{verbatim}
-%\[\frac{\sqrt{0.5p}}{10} =
-%\frac{\sqrt{\vstrut{1.7ex} 0.5p}}{10}\]
+%\[\frac{\sqrt{0.5p}}{10}
+% = \frac{\sqrt{\vstrut{1.7ex} 0.5p}}{10}\]
% \end{verbatim}
% \otherside
% \[\frac{\sqrt{0.5p}}{10} = \frac{\sqrt{\vstrut{1.7ex} 0.5p}}{10}\]
@@ -352,19 +356,21 @@
% \fbox{\vstrut{2ex}$\sigma(X)=1$}
% better than \fbox{$\sigma(X)=1$}.
%
+% % \hypertarget{cstrut}{}
% \medskip
-% \noindent
-% Adjusting the height using "\vstrut" is done by trial and error.
-% While a vertical phantom box would provide a good result,
-% for example "\vphantom{\bar{t}}" in the previous square root,
-% it's not obvious to know what to put in the phantom box.
-% Moreover, "\vstrut" allows a finer tuning.
+% \DescribeMacro{\cstrut}
+% The "\cstrut" macro is a alternative of "\vstrut" that adds a symmetric strut in height
+% and depth relative to the mathematical center line, which is halfway the height of an `x'.
+% It takes a single parameter "\cstrut"\marg{height}.
+% It's useful in \texttt{array} environments as it maintains
+% the mathematical axis at the center of the cell with \meta{height}
+% above and under.
%
% In a table, using
% "\renewcommand{\arraystretch}"\marg{stretch}
% allows you to increase the height of all rows, but it
-% has a global effect, whereas "\vstrut" allows to adjust the height of each row individually,
-% as in the following table:
+% has a global effect, whereas "\cstrut" (or "\vstrut") allows to adjust the height
+% of each row individually, as in the following table:
% \[
% \begin{array}{|c|}
% \hline
@@ -382,10 +388,10 @@
% \hline
% \multicolumn{2}{|c|}{\text{good}}\\
% \hline
-% \displaystyle\lim_{\substack{x \to 1\\x>1}} \ln\left(\dfrac{x^2}{x-1}\right)\vstrut{3.8ex}
-% & \mbox{obtained with } "\vstrut{3.8ex}" \\
+% \displaystyle\lim_{\substack{x \to 1\\x>1}} \ln\left(\dfrac{x^2}{x-1}\right)\cstrut{3.8ex}
+% & \mbox{obtained with } "\cstrut{3.8ex}" \\
% \hline
-% \dfrac{a}{b} \vstrut[2ex]{3ex} & "\vstrut[2ex]{3ex}" \\
+% \dfrac{a}{b} \cstrut{2.5ex} & "\cstrut{2.5ex}" \\
% \hline
% \displaystyle\int_{1}^{X} \frac{1}{t} \, \mathrm{d} t \vstrut[2.5ex]{4.2ex}
% & "\vstrut[2.5ex]{4.2ex}" \\
@@ -394,10 +400,7 @@
%\]
% However, for tables, we have the \textsf{arraycols} package~\cite{ARCOL},
% which is based on \textsf{cellspace}~\cite{CELLSP} and it allows to automatically adjust
-% row heights. Nevertheless, "\vstrut" can be useful for fine adjustments.
-%
-% In a text line "\vstrut" can be used to increase line space,
-% and is better than "\vspace".
+% row heights. Nevertheless, "\cstrut" and "\vstrut" can be useful for fine adjustments.
%
% \hypertarget{indent}{}
% \medskip
@@ -740,11 +743,21 @@
\newcommand*{\vstrut}[2][0pt]{%
\setlength{\strutheight}{#2}%
\addtolength{\strutheight}{#1}%
- \unskip
- \ensuremath{\rule[-#1]{0pt}{\strutheight}}%
+ \unskip%
+ \rule[-#1]{0pt}{\strutheight}%
\ignorespaces%
}
+\newlength{\strutdepth}
+\newcommand*{\cstrut}[1]{%
+ \setlength\strutdepth{#1}%
+ \setlength\strutheight{2\strutdepth}% total height
+ \addtolength{\strutdepth}{-0.5ex}%
+ \unskip%
+ \rule[-\strutdepth]{0pt}{\strutheight}%
+ \ignorespaces%
+}
+
\newlength{\parindentlength}
\setlength{\parindentlength}{\parindent}
\renewcommand{\indent}{\hspace{\parindentlength}}
@@ -854,9 +867,9 @@
% \bibitem{MAFR} \emph{La distribution \textsf{mafr}}, Christian Obrecht,
% CTAN, v1.0 17/09/2006.
% \bibitem{ARCOL} \emph{The \textsf{arraycols} package}, Antoine Missier, CTAN,
-% v1.2 2021/09/20.
+% v1.4 2031/09/13.
% \bibitem{MSMATH} \emph{\textsf{mismath} -- Miscellaneous mathematical macros},
-% Antoine Missier, CTAN, v2.5 2023/02/24.
+% Antoine Missier, CTAN, v2.8 2023/07/27.
% \bibitem{FVERB} \emph{The \textsf{‘fancyvrb’} package -- Fancy Verbatims in \LaTeX},
% Timothy Van Zandt, CTAN, v4.5a 2023/01/19.
% \bibitem{MKCELL} \emph{The \textsf{makecell} package}, Olga Lapko, CTAN, v0.1e 2009/08/03.
diff --git a/macros/latex/contrib/spacingtricks/spacingtricks.pdf b/macros/latex/contrib/spacingtricks/spacingtricks.pdf
index b2a9b54e38..417fafc0d8 100644
--- a/macros/latex/contrib/spacingtricks/spacingtricks.pdf
+++ b/macros/latex/contrib/spacingtricks/spacingtricks.pdf
Binary files differ
diff --git a/macros/latex/contrib/thermodynamics/thermodynamics.dtx b/macros/latex/contrib/thermodynamics/thermodynamics.dtx
index 7d6904c9ee..972a2b6b0c 100644
--- a/macros/latex/contrib/thermodynamics/thermodynamics.dtx
+++ b/macros/latex/contrib/thermodynamics/thermodynamics.dtx
@@ -36,7 +36,7 @@
%<package>\RequirePackage{expl3}
%<package>\ProvidesPackage{thermodynamics}
%<*package>
- [2023/11/16 v2.00 thermodynamics notation]
+ [2023/12/05 v2.01 thermodynamics notation]
%</package>
%^^X {\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription}
%<*driver>
@@ -3147,6 +3147,7 @@
% \begin{macro}{\NewSuperscriptedSymbol}
% \changes{v2.00}{2023/11/16}{Created \cs{NewSuperscriptedSymbol} to handle
% superscripted excess and residual properties without intervention.}
+% \changes{v2.01}{2023/12/05}{Fixed two typos in \cs{NewSuperscriptedSymbol}.}
% \begin{macrocode}
\NewDocumentCommand{\NewSuperscriptedSymbol}{m m m}
{
@@ -3160,10 +3161,10 @@
}
\cs_new:cpn {\cs_to_str:N #1_one:n} ##1
{
- {#2}\c_math_subscript_token{#1}
+ {#2}\c_math_subscript_token{##1}
\peek_catcode_remove:NTF \c_math_superscript_token
- { \use:c {\cs_to_str:N #1_one:n} }
- { \c_math_subscript_token{#3} }
+ { \use:c {\cs_to_str:N #1_three:n} }
+ { \c_math_superscript_token{#3} }
}
\cs_new:cpn {\cs_to_str:N #1_two:n} ##1
diff --git a/macros/latex/contrib/thermodynamics/thermodynamics.pdf b/macros/latex/contrib/thermodynamics/thermodynamics.pdf
index e4106e74cd..389a58d238 100644
--- a/macros/latex/contrib/thermodynamics/thermodynamics.pdf
+++ b/macros/latex/contrib/thermodynamics/thermodynamics.pdf
Binary files differ
diff --git a/macros/latex/contrib/tutodoc/MANIFEST.md b/macros/latex/contrib/tutodoc/MANIFEST.md
new file mode 100644
index 0000000000..6c712e7180
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/MANIFEST.md
@@ -0,0 +1,72 @@
+# Manifest for tutodoc
+
+This file is a listing of all files considered to be part of this package.
+It is automatically generated with `l3build manifest`.
+
+
+## Repository manifest
+
+The following groups list the files included in the development repository of the package.
+Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
+with ‘‡’ are included in both.
+
+### Source files
+
+These are source files for a number of purposes, including the `unpack` process which
+generates the installation files of the package. Additional files included here will also
+be installed for processing such as testing.
+
+* tdoc-locale-english.cfg.sty †
+* tdoc-locale-french.cfg.sty †
+* tutodoc.sty †
+
+### Text files
+
+Plain text files included as documentation or metadata.
+
+* MANIFEST.md ‡
+* README.md ‡
+
+### Derived files
+
+The files created by ‘unpacking’ the package sources. This typically includes
+`.sty` and `.cls` files created from DocStrip `.dtx` files.
+
+* tdoc-locale-english.cfg.sty †
+* tdoc-locale-french.cfg.sty †
+* tutodoc.sty †
+
+
+## TDS manifest
+
+The following groups list the files included in the TeX Directory Structure used to install
+the package into a TeX distribution.
+
+### TeX files (TDS)
+
+All files included in the `tutodoc/tex` directory.
+
+* tdoc-locale-english.cfg.sty
+* tdoc-locale-french.cfg.sty
+* tutodoc.sty
+
+### Doc files (TDS)
+
+All files included in the `tutodoc/doc` directory.
+
+* MANIFEST.md
+* README.md
+* tutodoc-en.pdf
+* tutodoc-en.tex
+* tutodoc-fr.pdf
+* tutodoc-fr.tex
+
+
+## CTAN manifest
+
+The following group lists the files included in the CTAN package.
+
+### CTAN files
+
+* MANIFEST.md
+* README.md
diff --git a/macros/latex/contrib/tutodoc/README.md b/macros/latex/contrib/tutodoc/README.md
new file mode 100644
index 0000000000..335d288b1d
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/README.md
@@ -0,0 +1,19 @@
+The `LaTeX` package `tutodoc`
+=============================
+
+About `tutodoc`
+---------------
+
+This package proposes some macros to write human documentations of `LaTeX` packages with a tutorial-like flavour.
+
+
+License
+-------
+
+This project may be distributed and/or modified under the conditions of the GNU 3 License.
+
+
+Where is the documentation?
+---------------------------
+
+At this time, there is a French and an English documentation writing with a tutorial-like flavor (in the repository, see the folder `rollout/doc`).
diff --git a/macros/latex/contrib/tutodoc/code/tdoc-locale-english.cfg.sty b/macros/latex/contrib/tutodoc/code/tdoc-locale-english.cfg.sty
new file mode 100644
index 0000000000..58d8975905
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/code/tdoc-locale-english.cfg.sty
@@ -0,0 +1,17 @@
+\NewDocumentCommand{\tdoc@trans@in@EN}{}{in \ english}
+\NewDocumentCommand{\tdoc@trans@latex@show@start}{}{Start \ of \ the \ real \ output}
+\NewDocumentCommand{\tdoc@trans@latex@show@end}{}{End \ of \ the \ real \ output}
+\NewDocumentCommand{\tdoc@trans@this@gives}{}{This \ gives}
+\NewDocumentCommand{\tdoc@trans@exa@title}{}{Example}
+\NewDocumentCommand{\tdoc@trans@rmk@title}{}{Remark}
+\NewDocumentCommand{\tdoc@trans@important@title}{}{Important}
+\NewDocumentCommand{\tdoc@trans@warn@title}{}{Warning}
+\NewDocumentCommand{\tdoc@trans@caution@title}{}{Caution}
+\NewDocumentCommand{\tdoc@trans@note@title}{}{Note}
+\NewDocumentCommand{\tdoc@trans@tip@title}{}{Tip}
+
+\NewDocumentCommand{\tdoc@trans@chges@new}{}{New}
+\NewDocumentCommand{\tdoc@trans@chges@update}{}{Update}
+\NewDocumentCommand{\tdoc@trans@chges@fix}{}{Fix}
+
+\NewDocumentCommand{\tdoc@trans@date}{ mmm }{#1-#2-#3}
diff --git a/macros/latex/contrib/tutodoc/code/tdoc-locale-french.cfg.sty b/macros/latex/contrib/tutodoc/code/tdoc-locale-french.cfg.sty
new file mode 100644
index 0000000000..2973757dd8
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/code/tdoc-locale-french.cfg.sty
@@ -0,0 +1,17 @@
+\NewDocumentCommand{\tdoc@trans@in@EN}{}{en \ anglais}
+\NewDocumentCommand{\tdoc@trans@latex@show@start}{}{Début \ du \ rendu \ réel}
+\NewDocumentCommand{\tdoc@trans@latex@show@end}{}{Fin \ du \ rendu \ réel}
+\NewDocumentCommand{\tdoc@trans@this@gives}{}{Ceci \ donne}
+\NewDocumentCommand{\tdoc@trans@exa@title}{}{Exemple}
+\NewDocumentCommand{\tdoc@trans@rmk@title}{}{Remarque}
+\NewDocumentCommand{\tdoc@trans@important@title}{}{Important}
+\NewDocumentCommand{\tdoc@trans@warn@title}{}{Avertissement}
+\NewDocumentCommand{\tdoc@trans@caution@title}{}{Prudence}
+\NewDocumentCommand{\tdoc@trans@note@title}{}{Note}
+\NewDocumentCommand{\tdoc@trans@tip@title}{}{Astuce}
+
+\NewDocumentCommand{\tdoc@trans@chges@new}{}{Nouveau}
+\NewDocumentCommand{\tdoc@trans@chges@update}{}{Mise \ à \ jour}
+\NewDocumentCommand{\tdoc@trans@chges@fix}{}{Réparation}
+
+\NewDocumentCommand{\tdoc@trans@date}{ mmm }{#3/#2/#1}
diff --git a/macros/latex/contrib/tutodoc/code/tutodoc.sty b/macros/latex/contrib/tutodoc/code/tutodoc.sty
new file mode 100644
index 0000000000..83b6c88433
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/code/tutodoc.sty
@@ -0,0 +1,1026 @@
+% ------------------------------------------------------- %
+% - This is file `tutodoc.sty' generated automatically. - %
+% - - %
+% - Copyright (C) 2023 by Christophe BAL - %
+% - - %
+% - This file may be distributed and/or modified under - %
+% - the conditions of the GNU 3 License. - %
+% ------------------------------------------------------- %
+
+\ProvidesExplPackage
+ {tutodoc}
+ {2023-11-29} % Creation: 2023-11-29
+ {1.0.0}
+ {This package proposes tools for writing "human friendly" documentations of LaTeX packages.}
+
+\RequirePackage[
+ top = 2.5cm,
+ bottom = 2.5cm,
+ left = 2.5cm,
+ right = 2.5cm,
+ marginparwidth = 2cm,
+ marginparsep = 2mm,
+ heightrounded
+]{geometry}[2020-01-02]
+
+\RequirePackage[raggedright]{titlesec}[2021/07/05]
+\RequirePackage{tocbasic}
+
+\RequirePackage{xcolor}[2022/06/12]
+\RequirePackage{hyperref}[2023-02-07]
+
+
+% We delegate the management of quoting to the `csquotes' package,
+% which takes care of the linguistic parameters.
+\RequirePackage{csquotes}[2022-09-14]
+
+
+\RequirePackage{amsthm}[2017/09]
+
+
+\RequirePackage{clrstrip}[2021-08-28]
+
+
+\RequirePackage{tcolorbox}[2023/06/19]
+\tcbuselibrary{minted, breakable, skins}
+
+
+\RequirePackage{marginnote}[2023-09-07]
+
+
+% -- LOCALE LANG -- %
+
+\ExplSyntaxOn
+
+% :: SOME MESSAGES :: %
+
+\msg_set:nnnn { tdoc } { package-option-lang-unknown }
+ { Unknown ~ language. }
+ { See ~ the ~ documentation ~ for ~ the ~ supported ~ languages. }
+
+
+% :: SETTING SOME KEYS :: %
+
+\str_new:N \l_tdoc_opt_lang_str
+
+%%%
+% We define the key-val options that will be exposed by the package.
+%%%
+\keys_define:nn { tdoc } {
+ lang .choices:nn =
+ { french, english }
+ {
+ \tl_set:Nn \l_tdoc_opt_lang_str
+ { \tl_use:N \l_keys_choice_tl }
+ },
+ lang .initial:n = english,
+ lang / unknown .code:n =
+ \msg_error:nnxxx { tdoc } { package-option-lang-unknown }
+ { lang } % Name of choice key
+ { french, english } % Valid choices
+ { \exp_not:n {#1} } % Invalid choice given
+}
+
+\ProcessKeyOptions[tdoc]
+
+\ExplSyntaxOff
+
+
+% -- LOCALE SETTINGS -- %
+
+\NewDocumentCommand{\tdoc@colon}{}{:}
+
+% We must take care of the colons, babel and spacing.
+\@ifpackageloaded{babel}{
+ \iflanguage{french}{
+ \RenewDocumentCommand{\tdoc@colon}{}{\babelshorthand{:}}
+ }{}
+}{}
+
+\ExplSyntaxOn
+
+\input{tdoc-locale-\l_tdoc_opt_lang_str.cfg.sty}
+
+\ExplSyntaxOff
+
+
+% -- GENERAL SETTINGS -- %
+
+\setlength{\parindent}{0cm}
+
+
+% -- LINKS -- %
+
+\hypersetup{
+ colorlinks,
+ citecolor = orange!75!black,
+ filecolor = orange!75!black,
+ linkcolor = orange!75!black,
+ urlcolor = orange!75!black
+}
+
+
+% -- TOC & Co. -- %
+
+\ifcsundef{chapter}%
+ {}%
+ {\renewcommand\thechapter{\Alph{chapter}.}}
+
+\renewcommand\thesection{\Roman{section}.}
+\renewcommand\thesubsection{\arabic{subsection}.}
+\renewcommand\thesubsubsection{\roman{subsubsection}.}
+
+\titleformat{\paragraph}[hang]%
+ {\normalfont\normalsize\bfseries}%
+ {\theparagraph}{1em}%
+ {}
+
+\titlespacing*{\paragraph}%
+ {0pt}%
+ {3.25ex plus 1ex minus .2ex}%
+ {0.5em}
+
+% Source
+% * https://tex.stackexchange.com/a/558025/6880
+\DeclareTOCStyleEntries[
+ raggedentrytext,
+ linefill = \hfill,
+ indent = 0pt,
+ dynindent,
+ numwidth = 0pt,
+ numsep = 1ex,
+ dynnumwidth
+]{tocline}{
+ chapter,
+ section,
+ subsection,
+ subsubsection,
+ paragraph,
+ subparagraph
+}
+
+\DeclareTOCStyleEntry[indentfollows = chapter]{tocline}{section}
+
+
+% -- QUOTING -- %
+
+%%%
+% prototype::
+% #1 : a text to quote.
+%
+% For example, ''\tdocquote{Something}'' prints something like **"Something"**.
+%%%
+\NewDocumentCommand{\tdocquote}{m}{%
+ \enquote{\emph{#1}}%
+}
+
+
+% -- EXPLAINING ENGLISH NAMES -- %
+
+%%%
+% prototype::
+% #1 : an english text to explain in another language.
+%
+% :extra: this macro has a star version.
+%
+% For example, if the language chosen is ''french'', we have
+% the following outputs.
+%
+% 1) ''\tdocinEN{Something}'' prints
+% **"Something" en anglais**.
+%
+% 2) ''\tdocinEN*{Something}'' just prints
+% **"Something"**.
+% This can be useful in a case like
+% ''\tdocinEN*{Something} et \tdocinEN{Another thing}''
+% which gives
+% **"Something" et "Another thing" en anglais**.
+%%%
+\NewDocumentCommand{\tdocinEN}{s m}{%
+ \tdocquote{#2}%
+ \IfBooleanF{#1}{% No star used.
+ \ \tdoc@trans@in@EN{}%
+ }%
+}
+
+
+% -- FOCUS ON SOME CONTENT -- %
+
+% :: EXAMPLE - HIDDEN VERSIONS :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem'' from the package ''amsthm''
+% to have \infos about the environment ''@@tdocexa@nb''.
+%%%
+\newtheorem{@@tdocexa@nb}{\tdoc@trans@exa@title}%
+ [subsubsection]
+
+%%%
+% We redefine the counter associated to the environment ''@@tdocexa@nb''
+% to obtain only one single arabic number.
+%%%
+\renewcommand{\the@@tdocexa@nb}{\arabic{@@tdocexa@nb}}
+
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''@@tdocexa@no@nb''.
+%%%
+\newtheorem*{@@tdocexa@no@nb}{\tdoc@trans@exa@title}
+
+
+% :: EXAMPLE - PUBLIC VERSION :: %
+
+\ExplSyntaxOn
+
+\msg_set:nnnn { tdoc } { env-tdocexa-unknown-option }
+ { Unknown ~ rafters ~ option. }
+ { See ~ the ~ documentation ~ for ~ the ~ supported ~ options. }
+
+\NewDocumentEnvironment{tdocexa}{D<>{nb} O{}}{
+ \str_case:nnF { #1 } {
+ { nb } {
+ \begin{@@tdocexa@nb}[#2]
+ }
+ { nonb } {
+ \begin{@@tdocexa@no@nb}[#2]
+ }
+ }{
+ \msg_error:nn { tdoc } { env-tdocexa-unknown-option }
+ }
+}{
+ \str_case:nnF { #1 } {
+ { nb } {
+ \end{@@tdocexa@nb}
+ }
+ { nonb } {
+ \end{@@tdocexa@no@nb}
+ }
+ }{}
+}
+
+\ExplSyntaxOff
+
+
+% :: REMARK :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''tdocrem''.
+%%%
+\newtheorem*{tdocrem}{\tdoc@trans@rmk@title}
+
+
+% :: IMPORTANT :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''tdocimportant''.
+%%%
+\newtheorem*{tdocimportant}{\tdoc@trans@important@title}
+
+
+% :: NOTE :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''tdocnote''.
+%%%
+\newtheorem*{tdocnote}{\tdoc@trans@note@title}
+
+
+% :: TIP :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''tdoctip''.
+%%%
+\newtheorem*{tdoctip}{\tdoc@trans@tip@title}
+
+
+% :: CUATION :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''tdoccaution''.
+%%%
+\newtheorem*{tdoccaution}{\tdoc@trans@caution@title}
+
+
+% :: WARNING :: %
+
+%%%
+% See the \doc of the macro ''\newtheorem*'' from the package ''amsthm''
+% to have \infos about the environment ''tdocwarn''.
+%%%
+\newtheorem*{tdocwarn}{\tdoc@trans@warn@title}
+
+
+% -- NAMES OF PACKAGES, MACROS & ENVIRONMENTS -- %
+
+%%%
+% prototype::
+% #1 : the name of a class
+%
+% :action: ''\tdoccls{myclass}'' prints verb::''myclass''.
+%%%
+\NewDocumentCommand{\tdoccls}{m}{%
+ \texttt{#1}%
+}
+
+
+%%%
+% prototype::
+% #1 : the name of a package
+%
+% :action:''\tdocpack{mypack}'' prints verb::''mypack''.
+%%%
+\NewDocumentCommand{\tdocpack}{m}{%
+ \texttt{#1}%
+}
+
+
+%%%
+% prototype::
+% #1 : the name of a macro
+%
+% :action: ''\tdocenv{mymacro}'' prints verb::''\mymacro''.
+%%%
+\NewDocumentCommand{\tdocmacro}{m}{%
+ \texttt{\textbackslash{}#1}%
+}
+
+
+%%%
+% prototype::
+% #1 : hard typed options with the good delimiters
+% #2 : the name of an environment
+%
+% :action: ''\tdocenv{myenv}'' prints verb::''\begin{myenv} ... \end{myenv}''
+% or something like verb::''\begin{myenv}<opt1> ... \end{myenv}'',
+% the spaces being secable.
+%%%
+\NewDocumentCommand{\tdocenv}{O{}m}{%
+ \texttt{\textbackslash{}begin\{#2\}#1 %
+ \!...\! %
+ \textbackslash{}end\{#2\}}%
+}
+
+
+% -- EXPLAINING PREFIXES -- %
+
+\ExplSyntaxOn
+
+% :: MESSAGES :: %
+
+\msg_set:nnnn { bdoc } { prefixwhy-bad-format }
+{ Bad ~ format, ~ something ~ like ~ ''pre.fix'' ~ expected. }
+{ You ~ must ~ use ~ one ~ single ~ point. }
+
+
+% :: PREFIX FROM... :: %
+
+%%%
+% prototype::
+% #1 : a prefix and a suffix separated by one colon.
+%
+% :action: ''\tdocprewhy{pre.fix}'' prints verb::''pre''.fix.
+%%%
+\NewDocumentCommand{\tdocprewhy}{m}{%
+% Do we have 2 parts?
+ \seq_set_split:Nnn \l_tmpa_seq { . } { #1 }
+
+ \int_set:Nn \l_tmpa_int
+ {\int_eval:n {\seq_count:N \l_tmpa_seq}}
+
+ \if_int_compare:w \l_tmpa_int = 2
+ \else:
+ \msg_error:nn { bdoc } { prefixwhy-bad-format }
+ \fi:
+
+% Let's go.
+ \seq_pop:NN \l_tmpa_seq \l_tmpa_tl
+ \seq_pop:NN \l_tmpa_seq \l_tmpb_tl
+
+ \textbf{\tdocpre{\tl_use:N \l_tmpa_tl}\kern.5pt\textperiodcentered\kern.5pt{\tl_use:N \l_tmpb_tl}}
+}
+
+\ExplSyntaxOff
+
+
+% :: JUST ONE PREFIX :: %
+
+%%%
+% prototype::
+% #1 : just a prefix
+%
+% :action: ''\tdocpre{pre}'' only prints verb::''pre''.
+% This can be useful in a case like
+% ''\tdocpre{pre} comes from \tdocprewhy{pre}{fix}''
+% which prints:
+% verb::''pre'' comes from verb::''pre''-fix.
+%%%
+\NewDocumentCommand{\tdocpre}{m}{%
+ \texttt{#1}%
+}
+
+
+% -- GENERAL FORMATTING -- %
+
+% :: TEXT INSIDE A RULE :: %
+
+\ExplSyntaxOn
+
+%%%
+% prototype::
+% #1 : a text
+% #2 : a color
+%
+% :action: this macro adds two horizontal lines on either side of the text.
+% The final output is centered.
+%
+% note::
+% The code used comes from
+% cf::''this post ;
+% https://tex.stackexchange.com/a/604708/6880''.
+%%%
+\NewDocumentCommand{\tdocruler}{m m}{
+ \par
+ {
+ \centering
+ \scriptsize
+ \itshape
+ \bfseries
+ \color{#2}
+
+ \hbox_set:Nn \l_tmpa_box { \,\, #1 \,\, }
+ \dim_set:Nn \l_tmpa_dim {
+ .35 \linewidth - .5 \box_wd:N \l_tmpa_box
+ }
+
+ \rule[.75pt] { \dim_use:N \l_tmpa_dim }
+ { 2.5pt }
+ \box_use:N \l_tmpa_box
+ \rule[.75pt] { \dim_use:N \l_tmpa_dim }
+ { 2.5pt }
+ \par
+ }
+}
+
+\ExplSyntaxOff
+
+
+% :: COLOR TRANSFORMATIONS :: %
+
+%%%
+% prototype::
+% #1 : one color following the ''xcolor'' format.
+%
+% :return: a "darker" version of the color ''#1''.
+%%%
+\NewExpandableDocumentCommand{\tdocdarkcolor}{m}{%
+ #1!50!black%
+}
+
+
+%%%
+% prototype::
+% #1 : one color following the ''xcolor'' format.
+%
+% :return: a "transparent" version of the color `#1`.
+%%%
+\NewExpandableDocumentCommand{\tdoclightcolor}{m}{%
+ #1!5%
+}
+
+
+% :: INTERNAL ENVIRONMENTS :: %
+
+%%%
+% prototype::
+% #1 : the text before the real output
+% #2 : the text after the real output
+% #3 : one color following the ''xcolor'' format.
+% This color is used to set the one for the decorated texts printed
+% corresponding to the two first arguments.
+%
+% :action: this environment just adds its content processed by \latex
+% between centered materials produced by the macro ''\tdocruler''
+% such as to stress the start and the end of the content.
+%%%
+\NewDocumentEnvironment{tdoc@showcase@basic}{m m m}{
+ \tdocruler{#1}{\tdocdarkcolor{#3}}
+ \medskip
+}{
+ \medskip
+ \tdocruler{#2}{\tdocdarkcolor{#3}}
+}
+
+
+%%%
+% prototype::
+% #1 : the text before the real output
+% #2 : the text after the real output
+% #3 : the color following the ''xcolor'' format.
+% This color is used to set the ones of the stripe and the decorated
+% texts printed (see the two first arguments).
+%
+% :action: this environment adds a page-width colored stripe in the
+% background of the environment content processed by \latex.
+% This stripe is preceded and followed by centered materials
+% produced by the macro ''\tdocruler'' such as to stress the
+% start and the end of the content.
+%%%
+
+\NewDocumentEnvironment{tdoc@showcase@colorstrip}{m m m}{
+ \begin{colorstrip}{\tdoclightcolor{#3}}
+ \begin{tdoc@showcase@basic}{#1}{#2}{#3}
+}{
+ \end{tdoc@showcase@basic}
+ \end{colorstrip}
+}
+
+
+\ExplSyntaxOn
+
+% :: SETTING SOME KEYS :: %
+
+\tl_new:N \l_tdoc_showcase_before_tl
+\tl_new:N \l_tdoc_showcase_after_tl
+\tl_new:N \l_tdoc_showcase_color_tl
+\bool_new:N \l_tdoc_showcase_nostripe_bool
+
+
+%%%
+% prototype::
+% :see: env.tdocshowcase
+%
+% We define the key-val options that will be exposed by the \env
+% ''tdocshowcase''.
+%%%
+\keys_define:nn { tdoc/showcase } {
+% Texts.
+ before .tl_set:N = \l_tdoc_showcase_before_tl,
+ before .initial:n = \tdoc@trans@latex@show@start,
+ after .tl_set:N = \l_tdoc_showcase_after_tl,
+ after .initial:n = \tdoc@trans@latex@show@end,
+% Decorations.
+ color .tl_set:N = \l_tdoc_showcase_color_tl,
+ color .initial:n = cyan,
+ nostripe .bool_set:N = \l_tdoc_showcase_nostripe_bool,
+ nostripe .initial:n = false,
+}
+
+
+% :: SHOWCASE FROM TYPED CODE :: %
+
+% prototype::
+% #1 : the key-value options.
+%
+% :action: this \env formats \latex code, given as an argument,
+% by framing it with texts decorated by ''\tdocruler'',
+% in order to clearly identify a rendering used as an
+% example.
+% It is also possible to have a coloured strip of the width
+% of the page in the background of the content.
+%
+% :see: env.tdoc@showcase@basic ,
+% env.tdoc@showcase@colorstrip
+%%%
+\NewDocumentEnvironment{tdocshowcase}{O{}}{
+ \group_begin:
+ \keys_set:nn { tdoc/showcase } { #1 }
+
+ \bool_if:NTF \l_tdoc_showcase_nostripe_bool {
+ \begin{tdoc@showcase@basic}%
+ { \tl_use:N \l_tdoc_showcase_before_tl }%
+ { \tl_use:N \l_tdoc_showcase_after_tl }%
+ { \tl_use:N \l_tdoc_showcase_color_tl }
+ }{
+ \begin{tdoc@showcase@colorstrip}%
+ { \tl_use:N \l_tdoc_showcase_before_tl }%
+ { \tl_use:N \l_tdoc_showcase_after_tl }%
+ { \tl_use:N \l_tdoc_showcase_color_tl }
+ }
+}{
+ \bool_if:NTF \l_tdoc_showcase_nostripe_bool {
+ \end{tdoc@showcase@basic}
+ }{
+ \end{tdoc@showcase@colorstrip}
+ }
+ \group_end:
+}
+
+
+% :: SHOWCASE FROM FILE :: %
+
+%%%
+% prototype::
+% #1 : the key-value options supported by the ''tdocshowcase'' \env.
+% #2 : the path of a file
+%
+% :see: env.tdocshowcase
+%%%
+\NewDocumentCommand{\tdocshowcaseinput}{O{} m}{
+ \group_begin:
+ \keys_set_known:nnN { tdoc/latexshow } { #1 } \l_tmpa_tl
+
+ \exp_last_unbraced:NNV \tdocshowcase [\l_tmpa_tl]
+ \input{#2}
+ \endtdocshowcase
+ \group_end:
+}
+
+\ExplSyntaxOff
+
+
+% -- LATEX EXAMPLES -- %
+
+% :: INLINE SHORT LATEX CODE :: %
+
+%%%
+% See the \doc of the macro ''\newmintinline'' from the package ''minted''
+% to have \infos about the macro ''tdocinlatex''.
+%%%
+\newmintinline[tdocinlatex]{latex}{}
+
+
+% :: SHORTCUTS FOR TCOLORBOX LISTING FORMATING :: %
+
+\ExplSyntaxOn
+
+%%%
+% In the following easy-to-understand macro, we use one fictive ''tcolorbox''
+% style such as to indicate an unknown ''tdoc'' style to the user.
+% For example, this can give one message similar to the following one.
+%
+% term::
+% Package pgfkeys Error: I do not know the key '/tcb/tdoclatex bad option
+% "NOT-A-STYLE"' and I am going to ignore it. Perhaps you misspelled it.
+%
+% See the pgfkeys package documentation for explanation.
+%%%
+\NewExpandableDocumentCommand{\tdoc@latex@listing@formating}{ m }{
+ \str_case:nnF { #1 } {
+ { sbs } { listing ~ side ~ text }
+ { code } { listing ~ only }
+ { std } { listing ~ and ~ text }
+ } { tdoclatex ~ bad ~ option ~ "#1" }
+}
+
+\ExplSyntaxOff
+
+
+% :: THE TCOLORBOX LISTING STYLE :: %
+
+%%%
+% note::
+% The settings used come from the following sources.
+% * https://tex.stackexchange.com/a/604821/6880
+% * https://tex.stackexchange.com/a/327983/6880
+%%%
+\tcbset{
+ tdoclatex_tcbstyle/.style = {
+ minted language = latex,
+ breakable,
+% Code and output
+ colback = yellow!5,
+% Frame
+ colframe = darkgray,
+ shadow = {.75mm}{-.75mm}{0mm}{black!30},
+ arc = .75mm,
+ left = 1mm, right = 1mm,
+ bottom = 1mm, top = 1mm,
+% We can use ''sharp corners'' to obtain an "old school" style.
+%
+% Separating line
+ enhanced,
+ segmentation style = {
+ gray,
+ dash pattern = {on 5pt off 2.5pt},
+ line width = 1.25pt
+ },
+ #1
+ },
+}
+
+
+% :: TCOLORBOX LISTING ENVIRONMENT :: %
+
+%%%
+% prototype::
+% #1 : the style to be used (code only, code and output side by side,
+% or the standard style corresponding to the code followed by
+% its output)
+% @ #1 in [code, sbs, std]
+%
+% note::
+% See the \doc of the macro ''\newtcblisting'' from the package
+% ''tcolorbox'' to have \infos about the environment ''tdoclatex''.
+%%%
+\newtcblisting{tdoclatex}[1][std]{%
+ tdoclatex_tcbstyle = \tdoc@latex@listing@formating{#1}
+}
+
+
+% :: TCOLORBOX IMPORTED LISTING MACRO :: %
+
+%%%
+% prototype::
+% #1 : :see: \newtcblisting{tdoclatex}.
+% #2 : the path of the file to input and format.
+%
+% note::
+% See the \doc of the macro ''\newtcbinputlisting'' from the package
+% ''tcolorbox'' to have more \infos about the macro ''\tdoclatexinput''.
+%%%
+\newtcbinputlisting{\tdoclatexinput}[2][std]{
+ listing file = {#2},
+ tdoclatex_tcbstyle = \tdoc@latex@listing@formating{#1}
+}
+
+
+% -- LATEX REAL USE CASES -- %
+
+\ExplSyntaxOn
+
+% :: SETTING SOME KEYS :: %
+
+\tl_new:N \l_tdoc_listing_explain_tl
+
+%%%
+% prototype::
+% :see: macro.tdoclatexshow
+%
+% We define the key-val options that will be exposed by ''\tdoclatexshow''.
+%%%
+\keys_define:nn { tdoc/latexshow } {
+ explain .tl_set:N = \l_tdoc_listing_explain_tl,
+ explain .initial:n = { \tdoc@trans@this@gives \tdoc@colon },
+}
+
+
+% :: LATEXSHOW MACRO :: %
+
+%%%
+% prototype::
+% #1 : the key-value options supported by the ''tdocshowcase'' \env,
+% plus one allowing you to change the description of a line
+% printed between the code and its focused output.
+% #2 : the path of a file
+%
+% :see: env.tdocshowcase ,
+% macro.tdoclatexinput
+%%%
+\NewDocumentCommand{\tdoclatexshow}{O{} m}{
+ \group_begin:
+ \keys_set_known:nnN { tdoc/latexshow } { #1 } \l_tmpa_tl
+
+ \tdoclatexinput[code]{#2}
+
+ \tl_use:N \l_tdoc_listing_explain_tl
+
+% Source: https://tex.stackexchange.com/a/696700/6880
+ \exp_last_unbraced:NNV \tdocshowcaseinput [\l_tmpa_tl] {#2}
+ \group_end:
+}
+
+\ExplSyntaxOff
+
+
+% -- CHANGES - WHEN? --%
+
+\ExplSyntaxOn
+
+% :: MESSAGES :: %
+
+\msg_set:nnnn { tdoc } { date-bad-format }
+ { Bad ~ format ~ for ~ a ~ date. }
+ { Use ~ YYYY-MM-DD. }
+
+
+% :: MARGIN NOTE :: %
+
+\reversemarginpar{}
+
+%%%
+% prototype::
+% #1 : the color of the margin note
+% #2 : the first material (a date or nothing)
+% #3 : the second material (a version number or nothing)
+% #4 : the last negative vertical spacing for the 2nd rule
+%
+% :action: this macro factorizes the printing of the changes
+% in the left margin.
+%
+% :see: \__tdoc_translate_date:n
+%%%
+\NewDocumentCommand{\tdoc@new@change@margin}{m m m m}{
+ \marginnote{
+ \color{#1}
+ \scriptsize
+ \centering
+
+ \vspace{0pt}
+ \rule{1.65cm}{.95pt}
+ \vspace{-2.9pt}
+
+ \IfBlankTF{#2}{}{
+ \par
+ \__tdoc_translate_date:n { #2 }
+ \par
+ }
+
+ \vspace{1pt}
+
+ \par
+ #3
+ \par
+
+ \vspace{#4}
+ \rule{1.65cm}{.95pt}
+ }[-.345cm]
+}
+
+
+%%%
+% prototype::
+% :action: this function checks if we have something like
+% ''YYYY-MM-DD'' and then it calls the function
+% ''\__tdoc_translate_date_process:w'' to finish
+% the job.
+%
+% :see: \__tdoc_translate_date_process:w
+%%%
+\cs_new:Nn \__tdoc_translate_date:n {
+ \regex_match:nnTF { \A \d{1,4} \- \d{2} \- \d{2} \Z } { #1 }{
+ \__tdoc_translate_date_process:w #1 \q_stop
+ }{
+ \msg_error:nn { tdoc } { date-bad-format }
+ }
+}
+
+
+%%%
+% prototype::
+% :action: this function extracts year, month and day in something
+% like ''YYYY-MM-DD'' and then it calls ''\tdoc@trans@date''
+% to use the format expected for a "localised" date.
+%%%
+\cs_new:Npn \__tdoc_translate_date_process:w #1 - #2 - #3 \q_stop {
+ \tdoc@trans@date{#1}
+ {#2}
+ {#3}
+}
+
+
+% :: VERSION AND DATE :: %
+
+%%%
+% prototype::
+% #1 : the color of the margin note
+% #2 : a version number
+% #3 : a date ''YYYY-MM-DD''
+%
+% :action: this macro prints a margin note showing a version number
+% below a date, and the optional argument is used to colorize
+% all this text.
+%
+% warning::
+% The date must use an english formatting like ''2021-07-14''. This allows
+% to parse the date such as to display it following the standard convention
+% of the language chosen when loading the package.
+%%%
+\NewDocumentCommand{\tdocversion}{O{blue} m O{}}{
+ \tdoc@new@change@margin{#1} % Color
+ {#3} % Date
+ {#2} % Version
+ {-4.25pt} % Last negative vertical spacing
+}
+
+
+% :: DATE :: %
+
+%%%
+% prototype::
+% #1 : the color of the margin note
+% #2 : a date ''YYYY-MM-DD''
+%
+% :action: this macro is similar to ''\tdocversion'' except that it just
+% prints a date.
+%%%
+\NewDocumentCommand{\tdocdate}{O{blue} m}{
+ \tdoc@new@change@margin{#1} % Color
+ {#2} % Date
+ {} % Version
+ {-5.35pt} % Last negative spacing
+}
+
+
+% -- CHANGES - WHAT?
+
+% :: MESSAGES :: %
+
+\msg_set:nnnn { tdoc } { changes-topic-missing-title }
+ { Missing ~ title. }
+ { One ~ single ~ title ~ must ~ be ~ indicated. }
+
+
+% :: CHANGES - TOPIC :: %
+
+%%%
+% prototype::
+% #1 : a title that will be followed by a colon.
+%
+% :action: this environment prints some ¨infos about specific changes
+% achieved in a new version (no special formatting is applied).
+%%%
+\NewDocumentEnvironment{tdoctopic}{ m }{
+ \IfBlankT{#1}{
+ \msg_fatal:nn { tdoc } { changes-topic-missing-title }
+ }
+
+ \textbf{
+ \textsc{#1.}
+ }
+
+ \begin{itemize}
+}{
+ \end{itemize}
+}
+
+
+% :: CHANGES - NEW THINGS :: %
+
+%%%
+% prototype::
+% :see: env.tdoctopic
+%
+% :action: similar to the \env ''tdoctopic'' with the title "New"
+% translated into the good language.
+%%%
+\NewDocumentEnvironment{tdocnew}{}{
+ \begin{tdoctopic}{\tdoc@trans@chges@new}
+}{
+ \end{tdoctopic}
+}
+
+
+% :: CHANGES - UPDATE :: %
+
+%%%
+% prototype::
+% :see: env.tdoctopic
+%
+% :action: similar to the \env ''tdoctopic'' with the title "Update"
+% translated into the good language.
+%%%
+\NewDocumentEnvironment{tdocupdate}{}{
+ \begin{tdoctopic}{\tdoc@trans@chges@update}
+}{
+ \end{tdoctopic}
+}
+
+
+% :: CHANGES - FIX :: %
+
+%%%
+% prototype::
+% :see: env.tdoctopic
+%
+% :action: similar to the \env ''tdoctopic'' with the title "Fix"
+% translated into the good language.
+%%%
+\NewDocumentEnvironment{tdocfix}{}{
+ \begin{tdoctopic}{\tdoc@trans@chges@fix}
+}{
+ \end{tdoctopic}
+}
+
+\ExplSyntaxOff
+
+
+% -- DECORATIONS -- %
+
+%%%
+% prototype::
+% :action: this macro draws a centered horizontal rule with a height
+% of qty::''0.75 pt'', and a width equal to half of the current
+% text width.
+% Extra vertical spaces are added above and below the rule.
+%%%
+\NewDocumentCommand{\tdocsep}{}{
+ \medskip
+ \hfill\rule{0.5\textwidth}{0.75pt}\hfill
+ \medskip
+ \smallskip
+}
+
+
+%%%
+% prototype::
+% :action: this macro adds a tiny vertical spacing.
+%%%
+\NewDocumentCommand{\tdocxspace}{}{
+ \vspace{0.25em}
+}
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf b/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf
new file mode 100644
index 0000000000..4d051d3010
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-en.pdf
Binary files differ
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex b/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex
new file mode 100644
index 0000000000..a520d22847
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-en.tex
@@ -0,0 +1,1098 @@
+
+% -------------------- %
+% -- RESOURCES USED -- %
+% -------------------- %
+
+
+\begin{filecontents*}{examples-focus-exa.tex}
+ Bla, bla, bla...
+
+ \begin{tdocexa}
+ Ble, ble, ble...
+ \end{tdocexa}
+
+ \begin{tdocexa}[Wonderful]
+ Bli, bli, bli...
+ \end{tdocexa}
+
+ \begin{tdocexa}<nonb>
+ Blo, blo, blo...
+ \end{tdocexa}
+
+ \begin{tdocexa}<nonb>[Superb]
+ Blu, blu, blu...
+ \end{tdocexa}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-exa-leavevmode.tex}
+\begin{tdocexa}
+ \leavevmode
+
+ \begin{enumerate}
+ \item Point 1.
+
+ \item Point 2.
+ \end{enumerate}
+\end{tdocexa}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-rmk.tex}
+\begin{tdocrem}
+ Just one remark...
+\end{tdocrem}
+
+\begin{tdocrem}[Mini title]
+ Useful?
+\end{tdocrem}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-tip.tex}
+\begin{tdoctip}
+ A tip.
+\end{tdoctip}
+
+\begin{tdoctip}[Mini title]
+ Useful?
+\end{tdoctip}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-note.tex}
+\begin{tdocnote}
+ Something useful to tell you...
+\end{tdocnote}
+
+\begin{tdocnote}[Mini title]
+ Useful?
+\end{tdocnote}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-important.tex}
+\begin{tdocimportant}
+ Important and harmless.
+\end{tdocimportant}
+
+\begin{tdocimportant}[Mini title]
+ Useful?
+\end{tdocimportant}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-caution.tex}
+\begin{tdoccaution}
+ Caution, caution...
+\end{tdoccaution}
+
+\begin{tdoccaution}[Mini title]
+ Useful?
+\end{tdoccaution}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-warn.tex}
+\begin{tdocwarn}
+ Avoid the dangers...
+\end{tdocwarn}
+
+\begin{tdocwarn}[Mini title]
+ Useful?
+\end{tdocwarn}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-default.tex}
+\begin{tdocshowcase}
+ \bfseries A bit of code \LaTeX.
+
+ \bigskip
+
+ \emph{\large End of the awful demo.}
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-customized.tex}
+\begin{tdocshowcase}[before = My beginning,
+ after = My end,
+ color = red]
+Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-hook.tex}
+\begin{tdocshowcase}[]
+ [This works...]
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-no-clrstrip.tex}
+\begin{tdocshowcase}[nostripe]
+ Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-no-clrstrip-customized.tex}
+\begin{tdocshowcase}[nostripe,
+ before = My beginning,
+ after = My end,
+ color = green]
+Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+\end{tdocshowcase}
+
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-external.tex}
+Blablobli, blablobli, blablobli, blablobli, blablobli, blablobli...
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-ABC.tex}
+\begin{tdoclatex}[sbs]
+ $A = B + C$
+\end{tdoclatex}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-strange.tex}
+\begin{tdoclatex}[std]
+ [Strange... Or not!]
+\end{tdoclatex}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-xyz.tex}
+% Just one demo.
+$x y z = 1$
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-latexshow-options.tex}
+\tdoclatexshow[explain = What comes next is colourful...,
+ before = Rendering below.,
+ after = Finished rendering.,
+ color = orange]
+ {examples-listing-xyz.tex}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-dating.tex}
+Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+
+\medskip % CAUTION! This prevents overlapping.
+
+\tdocdate{2023-09-24}
+
+Ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
+
+\medskip % CAUTION! This prevents overlapping.
+
+\tdocdate[gray]{2020-05-08}
+
+Bli, bli, bli, bli, bli, bli, bli, bli, bli, bli, bli, bli, bli...
+
+Blo, blo, blo, blo, blo, blo, blo, blo, blo, blo, blo, blo, blo...
+
+Blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu...
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-versioning.tex}
+\tdocversion[red]{10.2.0-beta}[2023-12-01]
+
+Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+
+\bigskip % CAUTION! This prevents overlapping.
+
+\tdocversion{10.2.0-alpha}
+
+Ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble,
+ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble,
+ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble,
+ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-new.tex}
+\begin{tdocnew}
+ \item Info 1...
+ \item Info 2...
+\end{tdocnew}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-update.tex}
+\begin{tdocupdate}
+ \item Info 1...
+ \item Info 2...
+\end{tdocupdate}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-fix.tex}
+\begin{tdocfix}
+ \item Info 1...
+ \item Info 2...
+\end{tdocfix}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-topic.tex}
+\begin{tdoctopic}{Unclassifiable changes}
+% This is where the point needs to be put.
+ \item Info 1...
+ \item Info 2...
+\end{tdoctopic}
+\end{filecontents*}
+
+
+% ------------------------ %
+% -- SOURCE FOR THE DOC -- %
+% ------------------------ %
+
+\documentclass[12pt, a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+\usepackage[english]{babel, varioref}
+
+\usepackage{enumitem}
+%\frenchsetup{StandardItemLabels=true}
+
+\usepackage{tabularray}
+\usepackage{fmtcount}
+
+% Package documented.
+\usepackage[lang = english]{tutodoc}
+
+
+% Source.
+% * https://tex.stackexchange.com/a/604698/6880
+
+\NewDocumentCommand{ \tdocdocbasicinput }{ m }{%
+ Considérons le code suivant.
+
+ \tdoclatexinput[code]{#1}
+
+ Ceci produira ce qui suit.
+
+ \input{#1}
+}
+
+
+% Source.
+% * https://tex.stackexchange.com/a/604698/6880
+
+\NewDocumentCommand{ \tdocdocextraruler }{ m }{%
+ \par
+ {
+ \centering
+ \color{green!50!black}%
+ \leavevmode
+ \kern.075\linewidth
+ \leaders\hrule height3.25pt\hfill\kern0pt
+ \footnotesize\itshape\bfseries\space\ignorespaces#1\unskip\space
+ \leaders\hrule height3.25pt\hfill\kern0pt
+ \kern.075\linewidth
+ \par
+ }
+}
+
+\NewDocumentEnvironment{ tdoc-doc-showcase }
+ { O{ Début du rendu dans cette doc. }
+ O{ Fin du rendu dans cette doc. } }{
+ \tdocdocextraruler{#1}
+ \smallskip
+}{
+ \smallskip
+ \tdocdocextraruler{#2}
+}
+
+
+
+\begin{document}
+
+\title{Le package \texttt{tutodoc} - Documentation de type tutoriel}
+\author{Christophe BAL}
+\date{29 Nov. 2023 - Version 1.0.0}
+
+\maketitle
+
+\begin{abstract}
+The \tdocpack{tutodoc} package
+\footnote{
+ The name comes from \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}}.
+}
+is used by its author to semantically produce documentation of \LaTeX\ packages and classes in a tutorial style
+\footnote{
+ The idea is to produce an efficient \texttt{PDF} file that can be browsed for one-off needs. This is generally what is expected of coding documentation.
+},
+and with a sober rendering for reading on screen.
+
+
+\begin{tdocnote}
+ This package imposes a formatting style. In the not-too-distant future, \tdocpack{tutodoc} will probably be split into a class and a package.
+\end{tdocnote}
+\end{abstract}
+
+
+\newpage
+\tableofcontents
+\newpage
+\section{General formatting imposed}
+
+\subsection{Page geometry}
+
+The \tdocpack{geometry} package is loaded with the following settings.
+
+
+\begin{tdoclatex}[code]
+\RequirePackage[
+ top = 2.5cm,
+ bottom = 2.5cm,
+ left = 2.5cm,
+ right = 2.5cm,
+ marginparwidth = 2cm,
+ marginparsep = 2mm,
+ heightrounded
+]{geometry}
+\end{tdoclatex}
+
+\subsection{Title and table of contents}
+
+The \tdocpack{titlesec} and \tdocpack{tocbasic} packages are set as follows.
+
+
+\begin{tdoclatex}[code]
+\RequirePackage[raggedright]{titlesec}
+
+% ...
+\ifcsundef{chapter}%
+ {}%
+ {\renewcommand\thechapter{\Alph{chapter}.}}
+
+\renewcommand\thesection{\Roman{section}.}
+\renewcommand\thesubsection{\arabic{subsection}.}
+\renewcommand\thesubsubsection{\roman{subsubsection}.}
+
+\titleformat{\paragraph}[hang]%
+ {\normalfont\normalsize\bfseries}%
+ {\theparagraph}{1em}%
+ {}
+
+\titlespacing*{\paragraph}%
+ {0pt}%
+ {3.25ex plus 1ex minus .2ex}%
+ {0.5em}
+
+% Source
+% * https://tex.stackexchange.com/a/558025/6880
+\DeclareTOCStyleEntries[
+ raggedentrytext,
+ linefill = \hfill,
+ indent = 0pt,
+ dynindent,
+ numwidth = 0pt,
+ numsep = 1ex,
+ dynnumwidth
+]{tocline}{
+ chapter,
+ section,
+ subsection,
+ subsubsection,
+ paragraph,
+ subparagraph
+}
+
+\DeclareTOCStyleEntry[indentfollows = chapter]{tocline}{section}
+\end{tdoclatex}
+
+
+\subsection{Dynamic links}
+
+The \tdocpack{hyperref} package is imported behind the scenes with the settings below.
+
+
+\begin{tdoclatex}[code]
+\hypersetup{
+ colorlinks,
+ citecolor = orange!75!black,
+ filecolor = orange!75!black,
+ linkcolor = orange!75!black,
+ urlcolor = orange!75!black
+}
+\end{tdoclatex}
+
+
+\section{Select language when loading package}
+
+By default, \tdocpack{tutodoc} is set for English, but it is possible to change the language: for example, a French documentation will use \tdocinlatex|\usepackage[lang = french]{tutodoc}| .
+For the moment, we only have the following two choices.
+
+\begin{enumerate}
+ \item \tdocinlatex|english| is the default value.
+
+ \item \tdocinlatex|french|
+\end{enumerate}
+
+
+\begin{tdocnote}
+ Language names are those suggested by the \tdocpack{babel} package.
+\end{tdocnote}
+
+
+\section{What does that mean in \tdocquote{English}?}
+
+The macro \tdocmacro{tdocinEN} and its starred version are useless for English speakers because they have the following effects.
+
+
+\begin{tdoclatex}
+Cool and top stand for \tdocinEN*{cool} and \tdocinEN{top}.
+\end{tdoclatex}
+
+
+The macro \tdocmacro{tdocinEN} and its starred version are based on \tdocmacro{tdocquote} : for example, \tdocquote{semantic} is obtained via \tdocinlatex|tdocquote{semantic}| .
+
+
+\begin{tdocnote}
+ As the text \tdocquote{in English} is translated into the language indicated when \tdocpack{tutodoc} is imported, the macro \tdocmacro{tdocinEN} and its starred version become useful for non-English speakers.
+\end{tdocnote}
+
+
+\section{Highlighting content}
+
+\begin{tdocnote}
+ The environments presented in this section
+ \footnote{
+ The formatting comes from the \tdocpack{amsthm} package.
+ }
+ add a short title indicating the type of information provided.
+ This short text will always be translated into the language indicated when the \tdocpack{tutodoc} package is loaded.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\subsection{Examples}
+
+Numbered or unnumbered examples can be indicated using the \tdocenv{tdocexa} environment, which offers two optional arguments.
+
+\begin{enumerate}
+ \item The \ordinalnum{1} argument between brackets \verb#<...># can take the values \verb#nb# to number, which is the default setting, and \verb#nonb# to not number.
+
+ \item The \ordinalnum{2} argument in square brackets \verb#[...]# is used to add a mini-title..
+\end{enumerate}
+
+
+Here are some possible uses.
+
+\tdoclatexinput[sbs]{examples-focus-exa.tex}
+
+
+% ------------------ %
+
+
+\begin{tdocimportant}
+ The numbering of the examples is reset to zero as soon as a section with a level at least equal to a \tdocinlatex|\subsubsection| is opened.
+\end{tdocimportant}
+
+
+% ------------------ %
+
+
+\begin{tdoctip}
+ It can sometimes be useful to return to the line at the start of the content. Here's how to do it (this trick remains valid for the environments presented in the following sub-sections). Note in passing that the numbering follows that of the previous example as desired.
+
+ \tdoclatexinput[sbs]{examples-focus-exa-leavevmode.tex}
+\end{tdoctip}
+
+
+\subsection{Some remarks}
+
+Everything happens via the \tdocenv{tdocrem} environment, as in the following example.
+
+\tdoclatexinput[sbs]{examples-focus-rmk.tex}
+
+
+\subsection{A tip}
+
+The \tdocenv{tdoctip} environment is used to give tips. Here's how to use it.
+
+\tdoclatexinput[sbs]{examples-focus-tip.tex}
+
+
+\subsection{Informative note}
+
+The \tdocenv{tdocnote} environment is used to highlight useful information. Here's how to use it.
+
+\tdoclatexinput[sbs]{examples-focus-note.tex}
+
+
+
+\subsection{Something important}
+
+The \tdocenv{tdocimportant} environment is used to indicate something important but harmless.
+
+\tdoclatexinput[sbs]{examples-focus-important.tex}
+
+\subsection{Caution about a delicate point}
+
+The \tdocenv{tdoccaution} environment is used to indicate a delicate point to the user. Here's how to use it.
+
+\tdoclatexinput[sbs]{examples-focus-caution.tex}
+
+
+\subsection{Warning of danger}
+
+The \tdocenv{tdocwarn} environment is used to warn the user of a trap to avoid. Here's how to use it.
+
+\tdoclatexinput[sbs]{examples-focus-warn.tex}
+
+
+\section{Specify packages, classes, macros or environments}
+
+Here's what you can type semantically.
+
+
+\begin{tdoclatex}[sbs]
+\tdoccls{myclass} is for...
+
+\tdocpack{mypackage} is for...
+
+\tdocmacro{onemacro} is for...
+
+\tdocenv{env} produces...
+
+We also have :
+
+\tdocenv[{[opt1]<opt2>}]{env}
+\end{tdoclatex}
+
+
+\begin{tdocrem}
+ The advantage of the previous macros over the use of \tdocmacro{tdocinlatex}, see the section \ref{tdoc-listing-inline} page \pageref{tdoc-listing-inline}, is the absence of colouring.
+ Furthermore, the \tdocmacro{tdocenv} macro simply asks you to type the name of the environment
+ \footnote{
+ In addition, \tdocinlatex{\tdocenv{monenv}} produces \tdocenv{monenv} with spaces to allow line breaks if necessary.
+ }
+ with any options by typing the correct delimiters
+ \footnote{
+ Remember that almost anything is possible from now on.
+ }
+ by hand.
+\end{tdocrem}
+
+
+\begin{tdocwarn}
+ The optional argument to the \tdocmacro{tdocenv} macro is copied and pasted during rendering. This can sometimes require the use of protective braces, as in the previous example.
+\end{tdocwarn}
+
+
+% -------------------- %
+
+
+\section{Origin of a prefix or suffix}
+
+To explain the names chosen, there is nothing like indicating and explaining the short prefixes and suffixes used. This is easily done as follows.
+
+
+\begin{tdoclatex}[sbs]
+\tdocpre{sup} relates to...
+
+\tdocprewhy{sup.erbe} means...
+
+\emph{\tdocprewhy{sup.er} for...}
+\end{tdoclatex}
+
+
+\begin{tdocrem}
+ The choice of a full stop to split a word allows words with a hyphen to be used, as in \tdocinlatex+\tdocprewhy{bric.k-breaker}+ which gives \tdocprewhy{bric.k-breaker}.
+\end{tdocrem}
+
+
+\section{A real-life rendering} \label{tdoc-showcase}
+
+It is sometimes useful to render code directly in the documentation. This type of rendering must be dissociable from the explanatory text.
+
+
+% ------------------ %
+
+
+\subsection{With a coloured stripe}
+
+\begin{tdocexa} [With default text]
+ It can be useful to show a real rendering directly in a document
+ \footnote{
+ Typically when making a demo.
+ }.
+ This is done via \tdocenv{tdocshowcase} as follows.
+
+ \tdoclatexinput[code]{examples-showcase-default.tex}
+
+ The result is the following rendering
+ \footnote{
+ Behind the scenes, the strip is created effortlessly using the \tdocpack{clrstrip} package.
+ }.
+
+ \medskip
+
+ \input{examples-showcase-default.tex}
+\end{tdocexa}
+
+
+\begin{tdocrem}
+ See the section \ref{tdoc-latexshow} on page \pageref{tdoc-latexshow} to easily obtain code followed by its actual rendering as in the previous example.
+\end{tdocrem}
+
+
+\begin{tdocnote}
+ The explanatory texts adapt to the language chosen when \tdocpack{tutodoc} is loaded.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Change the default colour and/or text]
+ \leavevmode
+
+ \tdoclatexinput[code]{examples-showcase-customized.tex}
+
+ This will produce the following.
+
+ \medskip
+
+ \input{examples-showcase-customized.tex}
+\end{tdocexa}
+
+
+\begin{tdocnote}
+ You will have noticed that we don't obtain a pure red: behind the scenes, the expandable macros \tdocmacro{tdocbackcolor} and \tdocmacro{tdocdarkcolor} are used to create the background and title colours respectively from the ones proposed in \tdocenv{tdocshowcase}.
+ These macros have a single argument, the chosen colour, and accept the following codes.
+
+ \begin{tdoclatex}[code]
+\NewExpandableDocumentCommand{\tdocbackcolor}{m}{#1!5}
+\NewExpandableDocumentCommand{\tdocdarkcolor}{m}{#1!50!black}
+ \end{tdoclatex}
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\begin{tdocwarn}
+ With the default settings, if the code to be formatted begins with an opening bracket, an empty option must be explicitly indicated, as in the following example.
+
+ \tdoclatexinput[code]{examples-showcase-hook.tex}
+
+ This will produce the following.
+
+ \medskip
+
+ \input{examples-showcase-hook.tex}
+\end{tdocwarn}
+
+
+\begin{tdocnote}
+ Behind the scenes, the \tdocmacro{tdocruler} macro is used.
+
+ \begin{tdoclatex}[std]
+ \tdocruler{Un pseudo-titre décoré}{red}
+ \end{tdoclatex}
+\end{tdocnote}
+
+
+\subsection{Without a colour strip}
+
+The rendering of \tdocenv{tdocshowcase} with a coloured strip may not be suitable, or sometimes may not be acceptable despite the work done by \tdocpack{clrstrip}.
+It is possible not to use a coloured strip, as we will see straight away.
+
+
+\begin{tdocexa}
+ The use of \tdocenv[{[nostripe]}]{tdocshowcase} indicate to not use \tdocpack{clrstrip}.
+ Here is an example.
+
+ \tdoclatexinput[code]{examples-showcase-no-clrstrip.tex}
+
+ This will produce the following.
+
+ \medskip
+
+ \input{examples-showcase-no-clrstrip.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Change the default colour and/or text]
+ \leavevmode
+
+ \tdoclatexinput[code]{examples-showcase-no-clrstrip-customized.tex}
+
+ This will produce the following.
+
+ \medskip
+
+ \input{examples-showcase-no-clrstrip-customized.tex}
+\end{tdocexa}
+
+
+\subsection{By importing the \LaTeX\ code}
+
+To obtain renderings by importing the code from an external file, instead of typing it, simply use the \tdocmacro{tdocshowcaseinput} macro whose option uses the syntax of that of \tdocenv{tdocshowcase} and the mandatory argument corresponds to the path of the file.
+
+
+\begin{tdocexa}<nonb>
+ The following was obtained via \tdocinlatex+\tdocshowcaseinput{external.tex}+.
+
+ \medskip
+
+ \tdocshowcaseinput{examples-showcase-external.tex}
+
+ \medskip
+
+ As for \tdocinlatex+\tdocshowcaseinput[color = orange]{external.tex}+ , this will produce the colour change shown below.
+
+ \medskip
+
+ \tdocshowcaseinput[color = orange]{examples-showcase-external.tex}
+\end{tdocexa}
+
+
+\section{Use cases in \LaTeX}
+
+Documenting a package or a class is done efficiently using use cases showing both the code and the corresponding result.
+
+
+% ------------------ %
+
+
+\subsection{\tdocquote{Inline} codes} \label{tdoc-listing-inline}
+
+The \tdocmacro{tdocinlatex} macro
+\footnote{
+ The name of the macro \tdocmacro{tdocinlatex} comes from \tdocquote{tdocprewhy{in.line} \LaTeX}.
+}
+can be used to type inline code in a similar way to \tdocmacro{verb}.
+Here are some examples.
+
+
+\begin{tdoclatex}[sbs]
+ 1: \tdocinlatex|$a^b = c$|
+
+ 2: \tdocinlatex+\tdocinlatex|$a^b = c$|+
+\end{tdoclatex}
+
+
+\begin{tdocnote}
+ The \tdocmacro{tdocinlatex} macro can be used in a footnote: see the bottom of this page
+ \footnote{
+ \tdocinlatex+$minted = TOP$+ was typed \tdocinlatex|\tdocinlatex+$minted = TOP$+| in this footnote.
+ }.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\subsection{Directly typed codes}
+
+\begin{tdocexa}[Side by side]
+ Using \tdocenv[{[sbs]}]{tdoclatex}, we can display a code and its rendering side by side.
+ \tdocdocbasicinput{examples-listing-ABC.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Following]
+ \tdocenv{tdoclatex} produces the following result, which corresponds to the default option \tdocinlatex#std#
+ \footnote{
+ \tdocinlatex{std} refers to the \tdocquote{standard} behaviour of \tdocpack{tcolorbox} in relation to the \tdocpack{minted} library.
+ }.
+
+ \begin{tdoclatex}
+ $A = B + C$
+ \end{tdoclatex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Just the code]
+ Via \tdocenv[{[code]}]{tdoclatex}, we'll just get the code as shown below.
+
+ \begin{tdoclatex}[code]
+ $A = B + C$
+ \end{tdoclatex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocwarn}
+ With default formatting, if the code begins with an opening bracket, the default option must be explicitly indicated.
+ \tdocdocbasicinput{examples-listing-strange.tex}
+\end{tdocwarn}
+
+
+\subsection{Imported codes}
+
+For the following codes, consider a file with the relative path \verb+examples-listing-xyz.tex+, and with the following contents.
+
+\tdoclatexinput[code]{examples-listing-xyz.tex}
+
+\medskip
+
+The \tdocmacro{tdoclatexinput} macro, shown below, is used in the same way as the \tdocenv{tdoclatex} environment except that the path to a file is supplied.
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Side by side]
+ \leavevmode
+
+ \begin{tdoclatex}[code]
+\tdoclatexinput[sbs]{examples-listing-xyz.tex}
+ \end{tdoclatex}
+
+ This produces the following layout.
+
+ \tdoclatexinput[sbs]{examples-listing-xyz.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Following]
+ \leavevmode
+
+ \begin{tdoclatex}[code]
+\tdoclatexinput{examples-listing-xyz.tex}
+ \end{tdoclatex}
+
+ This produces the following formatting where the default option is \tdocinlatex#std#.
+
+ \tdoclatexinput{examples-listing-xyz.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Just the code]
+ \leavevmode
+
+ \begin{tdoclatex}[code]
+\tdoclatexinput[code]{examples-listing-xyz.tex}
+ \end{tdoclatex}
+
+ This produces the following layout.
+
+ \tdoclatexinput[code]{examples-listing-xyz.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\subsection{Imported codes put into practice} \label{tdoc-latexshow}
+
+\begin{tdocexa}[Showcase]
+ The following can be obtained via \tdocinlatex+\tdoclatexshow{examples-listing-xyz.tex}+.
+
+ \medskip
+
+ \begin{tdoc-doc-showcase}
+ \tdoclatexshow{examples-listing-xyz.tex}
+ \end{tdoc-doc-showcase}
+\end{tdocexa}
+
+
+\begin{tdocnote}
+ The default texts take into account the language chosen when loading the package \tdocpack{tutodoc}.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Changing the explanatory text]
+ Using the key \tdocinlatex|explain|, you can use custom text. Thus, \tdocinlatex|tdoclatexshow[explain = Here is the actual rendering.]{examples-listing-xyz.tex}| will produce the following.
+
+ \medskip
+
+ \begin{tdoc-doc-showcase}
+ \tdoclatexshow[explain = Here is the actual rendering.]{examples-listing-xyz.tex}
+ \end{tdoc-doc-showcase}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[The options available]
+ In addition to the explanatory text, it is also possible to use all the options of \tdocenv{tdocshowcase}, see \ref{tdoc-showcase} page \pageref{tdoc-showcase}.
+ Here is an example to illustrate this.
+
+ \medskip
+
+ \tdoclatexinput[code]{examples-listing-latexshow-options.tex}
+
+ \medskip
+
+ This will produce the following.
+
+ \medskip
+
+ \begin{tdoc-doc-showcase}
+ \input{examples-listing-latexshow-options.tex}
+ \end{tdoc-doc-showcase}
+\end{tdocexa}
+
+
+\section{Indicate changes}
+
+To make it easier to monitor a package, it is essential to provide a history indicating the changes made when a new version is published.
+
+
+% ------------------ %
+
+
+\subsection{When?}
+
+You can either date something, or version it, in which case the version number can be dated.
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Dating new products]
+ The \tdocmacro{tdocdate} macro is used to indicate a date in the margin, as in the following example.
+
+ \tdoclatexshow{examples-version-n-change-dating.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Versioning new features, possibly with a date]
+ Associating a version number with a new feature is done using the \tdocmacro{tdocversion} macro, with the colour and date being optional arguments.
+
+ \tdoclatexshow{examples-version-n-change-versioning.tex}
+\end{tdocexa}
+
+
+\begin{tdocimportant}
+ \leavevmode
+
+ \begin{enumerate}
+ \item The \tdocmacro{tdocdate} and \tdocmacro{tdocversion} macros require two compilations.
+
+ \item The final rendering of the dates takes into account the language specified when loading the package \tdocpack{tutodoc}: for example, if French is selected, the dates will be displayed in the format \texttt{DD/MM/YYYY}.
+ \end{enumerate}
+\end{tdocimportant}
+
+
+\begin{tdocwarn}
+ Only the use of the digital format \tdocinlatex+YYYY-MM-DD+ is verified.
+ \footnote{
+ Technically, checking the validity of a date using \LaTeX3 presents no difficulty.
+ },
+ and this is a choice! Why? Quite simply because dating and versioning explanations should be done semi-automatically to avoid any human bugs.
+\end{tdocwarn}
+
+
+\subsection{What's new?}
+
+\tdocpack{tutodoc} offers different environments to indicate quickly and clearly what has been done
+\footnote{
+ The user doesn't need all the technical details.
+}
+during the latest changes.
+
+
+\begin{tdocexa}[For new features]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-new.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[For updates]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-update.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[For fixes]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-fix.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Chosen topics]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-topic.tex}
+\end{tdocexa}
+
+\section{Ornaments}
+
+Let's finish this documentation with a few small formatting tools that can be very useful.
+
+
+\begin{tdoclatex}[sbs]
+Bla, bla, bla...
+
+\tdocsep % Practical for demarcation.
+
+Ble, ble, ble...
+
+Bli, bli, bli...
+
+\tdocxspace % Subtle space
+ % but useful.
+
+Blo, blo, blo...
+
+Blu, blu, blu...
+
+\end{tdoclatex}
+
+
+
+\section{History}
+
+\tdocversion{1.0.0}[2023-11-29]
+
+First public version of the project.
+
+\end{document}
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf
new file mode 100644
index 0000000000..61c26a3f4f
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.pdf
Binary files differ
diff --git a/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex
new file mode 100644
index 0000000000..d5c55ff667
--- /dev/null
+++ b/macros/latex/contrib/tutodoc/doc/tutodoc-fr.tex
@@ -0,0 +1,1118 @@
+
+% -------------------- %
+% -- RESOURCES USED -- %
+% -------------------- %
+
+
+\begin{filecontents*}{examples-focus-exa.tex}
+Bla, bla, bla...
+
+\begin{tdocexa}
+ Ble, ble, ble...
+\end{tdocexa}
+
+\begin{tdocexa}[Magnifique]
+ Bli, bli, bli...
+\end{tdocexa}
+
+\begin{tdocexa}<nonb>
+ Blo, blo, blo...
+\end{tdocexa}
+
+\begin{tdocexa}<nonb>[Superbe]
+ Blu, blu, blu...
+\end{tdocexa}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-exa-leavevmode.tex}
+\begin{tdocexa}
+ \leavevmode
+
+ \begin{enumerate}
+ \item Point 1.
+
+ \item Point 2.
+ \end{enumerate}
+\end{tdocexa}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-rmk.tex}
+\begin{tdocrem}
+ Juste une remarque...
+\end{tdocrem}
+
+\begin{tdocrem}[Mini titre]
+ Utile ?
+\end{tdocrem}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-tip.tex}
+\begin{tdoctip}
+ Une astuce.
+\end{tdoctip}
+
+\begin{tdoctip}[Mini titre]
+ Utile ?
+\end{tdoctip}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-note.tex}
+\begin{tdocnote}
+ Un truc utile à vous dire...
+\end{tdocnote}
+
+\begin{tdocnote}[Mini titre]
+ Utile ?
+\end{tdocnote}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-important.tex}
+\begin{tdocimportant}
+ Un truc important sans danger.
+\end{tdocimportant}
+
+\begin{tdocimportant}[Mini titre]
+ Utile ?
+\end{tdocimportant}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-caution.tex}
+\begin{tdoccaution}
+ Prudence, prudence...
+\end{tdoccaution}
+
+\begin{tdoccaution}[Mini titre]
+ Utile ?
+\end{tdoccaution}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-focus-warn.tex}
+\begin{tdocwarn}
+ Evitez les dangers...
+\end{tdocwarn}
+
+\begin{tdocwarn}[Mini titre]
+ Utile ?
+\end{tdocwarn}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-default.tex}
+\begin{tdocshowcase}
+ \bfseries Un peu de code \LaTeX.
+
+ \bigskip
+
+ \emph{\large Fin de l'affreuse démo.}
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-customized.tex}
+\begin{tdocshowcase}[before = Mon début,
+ after = Ma fin à moi,
+ color = red]
+ Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-hook.tex}
+\begin{tdocshowcase}[]
+ [Cela fonctionne...]
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-no-clrstrip.tex}
+\begin{tdocshowcase}[nostripe]
+ Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-no-clrstrip-customized.tex}
+\begin{tdocshowcase}[nostripe,
+ before = Mon début,
+ after = Ma fin à moi,
+ color = green]
+ Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+\end{tdocshowcase}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-showcase-external.tex}
+Blablobli, blablobli, blablobli, blablobli, blablobli, blablobli...
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-ABC.tex}
+\begin{tdoclatex}[sbs]
+ $A = B + C$
+\end{tdoclatex}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-strange.tex}
+\begin{tdoclatex}[std]
+ [Étrange... Ou pas !]
+\end{tdoclatex}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-xyz.tex}
+% Juste une démo.
+$x y z = 1$
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-listing-latexshow-options.tex}
+\tdoclatexshow[explain = Ce qui vient est coloré...,
+ before = Rendu ci-après.,
+ after = Rendu fini.,
+ color = orange]
+ {examples-listing-xyz.tex}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-dating.tex}
+Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+
+\medskip % ATTENTION ! Ceci évite le chevauchement.
+
+\tdocdate{2023-09-24}
+
+Ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
+
+\medskip % ATTENTION ! Ceci évite le chevauchement.
+
+\tdocdate[gray]{2020-05-08}
+
+Bli, bli, bli, bli, bli, bli, bli, bli, bli, bli, bli, bli, bli...
+
+Blo, blo, blo, blo, blo, blo, blo, blo, blo, blo, blo, blo, blo...
+
+Blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu, blu...
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-versioning.tex}
+\tdocversion[red]{10.2.0-beta}[2023-12-01]
+
+Bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla, bla...
+
+\bigskip % ATTENTION ! Ceci évite le chevauchement.
+
+\tdocversion{10.2.0-alpha}
+
+Ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble,
+ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble,
+ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble,
+ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble, ble...
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-new.tex}
+\begin{tdocnew}
+ \item Info 1...
+ \item Info 2...
+\end{tdocnew}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-update.tex}
+\begin{tdocupdate}
+ \item Info 1...
+ \item Info 2...
+\end{tdocupdate}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-fix.tex}
+\begin{tdocfix}
+ \item Info 1...
+ \item Info 2...
+\end{tdocfix}
+\end{filecontents*}
+
+
+\begin{filecontents*}{examples-version-n-change-topic.tex}
+\begin{tdoctopic}{Des changements inclassables}
+% Ici le point s'impose.
+ \item Info 1...
+ \item Info 2...
+\end{tdoctopic}
+\end{filecontents*}
+
+
+% ------------------------ %
+% -- SOURCE FOR THE DOC -- %
+% ------------------------ %
+
+\documentclass[10pt, a4paper]{article}
+
+\usepackage[utf8]{inputenc}
+\usepackage[T1]{fontenc}
+
+\usepackage[french]{babel, varioref}
+
+\usepackage{enumitem}
+\frenchsetup{StandardItemLabels=true}
+
+% Package documented.
+\usepackage[lang = french]{tutodoc}
+
+
+% Source.
+% * https://tex.stackexchange.com/a/604698/6880
+
+\NewDocumentCommand{ \tdocdocbasicinput }{ m }{%
+ Considérons le code suivant.
+
+ \tdoclatexinput[code]{#1}
+
+ Ceci produira ce qui suit.
+
+ \input{#1}
+}
+
+
+% Source.
+% * https://tex.stackexchange.com/a/604698/6880
+
+\NewDocumentCommand{ \tdocdocextraruler }{ m }{%
+ \par
+ {
+ \centering
+ \color{green!50!black}%
+ \leavevmode
+ \kern.075\linewidth
+ \leaders\hrule height3.25pt\hfill\kern0pt
+ \footnotesize\itshape\bfseries\space\ignorespaces#1\unskip\space
+ \leaders\hrule height3.25pt\hfill\kern0pt
+ \kern.075\linewidth
+ \par
+ }
+}
+
+\NewDocumentEnvironment{ tdoc-doc-showcase }
+ { O{ Début du rendu dans cette doc. }
+ O{ Fin du rendu dans cette doc. } }{
+ \tdocdocextraruler{#1}
+ \smallskip
+}{
+ \smallskip
+ \tdocdocextraruler{#2}
+}
+
+
+
+\begin{document}
+
+\title{Le package \texttt{tutodoc} - Documentation de type tutoriel}
+\author{Christophe BAL}
+\date{29 Nov. 2023 - Version 1.0.0}
+
+\maketitle
+
+\begin{abstract}
+Le package \tdocpack{tutodoc}
+\footnote{
+ Le nom vient de \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}} se traduit en \tdocquote{documentation de type tutoriel}.
+}
+est utilisé par son auteur pour produire de façon sémantique des documentations de packages et de classes \LaTeX\ dans un style de type tutoriel
+\footnote{
+ L'idée est de produire un fichier \texttt{PDF} efficace à parcourir pour des besoins ponctuels. C'est généralement ce que l'on attend d'une documentation liée au codage.
+},
+et avec un rendu sobre pour une lecture sur écran.
+
+
+\begin{tdocnote}
+ Ce package impose un style de mise en forme.
+ Dans un avenir plus ou moins proche, \tdocpack{tutodoc} sera sûrement éclaté en une classe et un package.
+\end{tdocnote}
+
+\tdocsep
+
+{\small\itshape
+\textbf{Abstract.}
+The \tdocpack{tutodoc} package
+\footnote{
+ The name comes from \tdocquote{\tdocprewhy{tuto.rial-type} \tdocprewhy{doc.umentation}}.
+}
+is used by its author to semantically produce documentation of \LaTeX\ packages and classes in a tutorial style
+\footnote{
+ The idea is to produce an efficient \texttt{PDF} file that can be browsed for one-off needs. This is generally what is expected of coding documentation.
+},
+and with a sober rendering for reading on screen.
+
+
+\begin{tdocnote}
+ This package imposes a formatting style. In the not-too-distant future, \tdocpack{tutodoc} will probably be split into a class and a package.
+\end{tdocnote}
+}
+\end{abstract}
+
+
+\newpage
+\tableofcontents
+\newpage
+\section{Mises en forme générales imposées}
+
+\subsection{Géométrie de la page}
+
+Le package \tdocpack{geometry} est chargé avec les réglages suivants.
+
+
+\begin{tdoclatex}[code]
+\RequirePackage[
+ top = 2.5cm,
+ bottom = 2.5cm,
+ left = 2.5cm,
+ right = 2.5cm,
+ marginparwidth = 2cm,
+ marginparsep = 2mm,
+ heightrounded
+]{geometry}
+\end{tdoclatex}
+
+
+\subsection{Titre et table des matières}
+
+Les packages \tdocpack{titlesec} et \tdocpack{tocbasic} sont réglés comme suit.
+
+
+\begin{tdoclatex}[code]
+\RequirePackage[raggedright]{titlesec}
+
+% ...
+\ifcsundef{chapter}%
+ {}%
+ {\renewcommand\thechapter{\Alph{chapter}.}}
+
+\renewcommand\thesection{\Roman{section}.}
+\renewcommand\thesubsection{\arabic{subsection}.}
+\renewcommand\thesubsubsection{\roman{subsubsection}.}
+
+\titleformat{\paragraph}[hang]%
+ {\normalfont\normalsize\bfseries}%
+ {\theparagraph}{1em}%
+ {}
+
+\titlespacing*{\paragraph}%
+ {0pt}%
+ {3.25ex plus 1ex minus .2ex}%
+ {0.5em}
+
+% Source
+% * https://tex.stackexchange.com/a/558025/6880
+\DeclareTOCStyleEntries[
+ raggedentrytext,
+ linefill = \hfill,
+ indent = 0pt,
+ dynindent,
+ numwidth = 0pt,
+ numsep = 1ex,
+ dynnumwidth
+]{tocline}{
+ chapter,
+ section,
+ subsection,
+ subsubsection,
+ paragraph,
+ subparagraph
+}
+
+\DeclareTOCStyleEntry[indentfollows = chapter]{tocline}{section}
+\end{tdoclatex}
+
+
+\subsection{Liens dynamiques}
+
+Le package \tdocpack{hyperref} est importé en coulisse avec les réglages ci-dessous.
+
+
+\begin{tdoclatex}[code]
+\hypersetup{
+ colorlinks,
+ citecolor = orange!75!black,
+ filecolor = orange!75!black,
+ linkcolor = orange!75!black,
+ urlcolor = orange!75!black
+}
+\end{tdoclatex}
+
+
+\section{Choisir la langue au chargement du package}
+
+La présente documentation utilise le français via \tdocinlatex|\usepackage[lang = french]{tutodoc}| .
+Pour le moment, on a juste les deux choix suivants.
+
+\begin{enumerate}
+ \item \tdocinlatex|english| est la valeur par défaut.
+
+ \item \tdocinlatex|french| est pour \tdocinEN{français}.
+\end{enumerate}
+
+
+\begin{tdocnote}
+ Les noms des langues sont ceux proposés par le package \tdocpack{babel}.
+\end{tdocnote}
+
+
+\section{Cela veut dire quoi en \tdocquote{anglais}}
+
+Penser aux non-anglophones est bien, même si ces derniers se font de plus en plus rares.
+
+
+\begin{tdoclatex}
+Cool et top signifient \tdocinEN*{cool} et \tdocinEN{top}.
+\end{tdoclatex}
+
+
+La macro \tdocmacro{tdocinEN} et sa version étoilée s'appuient sur \tdocmacro{tdocquote} : par exemple, \tdocquote{sémantique} s'obtient via \tdocinlatex|\tdocquote{sémantique}| .
+
+
+\begin{tdocnote}
+ Le texte \tdocquote{en anglais} est traduit dans la langue indiquée lors de l'importation de \tdocpack{tutodoc}.
+\end{tdocnote}
+
+
+\section{Mettre en avant du contenu}
+
+\begin{tdocnote}
+ Les environnements présentés dans cette section
+ \footnote{
+ La mise en forme provient du package \tdocpack{amsthm}.
+ }
+ ajoutent un court titre indiquant le type d'informations fournies.
+ Ce court texte sera toujours traduit dans la langue indiquée lors du chargement du package \tdocpack{tutodoc}.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\subsection{Des exemples}
+
+Des exemples numérotés, ou non, s'indiquent via l'environnement \tdocenv{tdocexa} qui propose deux arguments optionnels.
+
+\begin{enumerate}
+ \item Le 1\ier{} argument entre chevrons \verb#<...># peut prendre au choix les valeurs \verb#nb# pour numéroter, réglage par défaut, et \verb#nonb# pour ne pas numéroter.
+
+ \item Le 2\ieme{} argument entre crochets \verb#[...]# sert à ajouter un mini-titre.
+\end{enumerate}
+
+
+Voici différents emplois possibles.
+
+\tdoclatexinput[sbs]{examples-focus-exa.tex}
+
+
+% ------------------ %
+
+
+\begin{tdocimportant}
+ La numérotation des exemples est remise à zéro dès qu'une section de niveau au moins égale à une \tdocinlatex|\subsubsection| est ouverte.
+\end{tdocimportant}
+
+
+% ------------------ %
+
+
+\begin{tdoctip}
+ Il peut parfois être utile de revenir à la ligne dès le début du contenu. Voici comment faire (ce tour de passe-passe reste valable pour les environnements présentés dans les sous-sections suivantes). Noter au passage que la numérotation suit celle de l'exemple précédent comme souhaité.
+
+ \tdoclatexinput[sbs]{examples-focus-exa-leavevmode.tex}
+\end{tdoctip}
+
+
+\subsection{Des remarques}
+
+Tout se passe via l'environnement \tdocenv{tdocrem} comme dans l'exemple suivant.
+
+\tdoclatexinput[sbs]{examples-focus-rmk.tex}
+
+
+\subsection{Une astuce}
+
+L'environnement \tdocenv{tdoctip} sert à donner des astuces. Voici comment l'employer.
+
+\tdoclatexinput[sbs]{examples-focus-tip.tex}
+
+
+\subsection{Note informative}
+
+L'environnement \tdocenv{tdocnote} sert à mettre en avant des informations utiles. Voici comment l'utiliser.
+
+\tdoclatexinput[sbs]{examples-focus-note.tex}
+
+
+\subsection{Un truc important}
+
+L'environnement \tdocenv{tdocimportant} permet d'indiquer quelque chose d'important mais sans danger.
+
+\tdoclatexinput[sbs]{examples-focus-important.tex}
+
+
+\subsection{Avertir d'un point très délicat}
+
+L'environnement \tdocenv{tdoccaution} sert à indiquer un point délicat à l'utilisateur. Voici comment l'employer.
+
+\tdoclatexinput[sbs]{examples-focus-caution.tex}
+
+
+\subsection{Avertir d'un danger}
+
+L'environnement \tdocenv{tdocwarn} sert à avertir l'utilisateur d'un piège à éviter. Voici comment l'employer.
+
+\tdoclatexinput[sbs]{examples-focus-warn.tex}
+
+
+\section{Indiquer des packages, des classes, des macros ou des environnements}
+
+Voici ce qu'il est possible de taper de façon sémantique.
+
+
+\begin{tdoclatex}[sbs]
+\tdoccls{maclasse} sert à...
+
+\tdocpack{monpackage} est pour...
+
+\tdocmacro{unemacro} permet de...
+
+\tdocenv{env} produit...
+
+On a aussi :
+
+\tdocenv[{[opt1]<opt2>}]{env}
+\end{tdoclatex}
+
+
+\begin{tdocrem}
+ L'intérêt des macros précédentes vis à vis de l'usage de \tdocmacro{tdocinlatex}, voir la section \ref{tdoc-listing-inline} page \pageref{tdoc-listing-inline}, est l'absence de coloration.
+ De plus, la macro \tdocmacro{tdocenv} demande juste de taper le nom de l'environnement
+ \footnote{
+ De plus, \tdocinlatex{\tdocenv{monenv}} produit \tdocenv{monenv} avec des espaces afin d'autoriser des retours à la ligne si besoin.
+ }
+ avec des éventuelles options en tapant les bons délimiteurs
+ \footnote{
+ Se souvenir que tout est possible ou presque dorénavant.
+ }
+ à la main.
+\end{tdocrem}
+
+
+\begin{tdocwarn}
+ L'argument optionnel de la macro \tdocmacro{tdocenv} est copié-collé lors du rendu. Ceci peut donc parfois nécessiter d'utiliser des accolades protectrices comme dans l'exemple précédent.
+\end{tdocwarn}
+
+
+% -------------------- %
+
+
+\section{Origine d'un préfixe ou d'un suffixe}
+
+Pour expliquer les noms retenus, rien de tel que d'indiquer et expliciter les courts préfixes et suffixes employés. Ceci se fait facilement comme suit.
+
+
+\begin{tdoclatex}[sbs]
+\tdocpre{sup} est relatif à...
+
+\tdocprewhy{sup.erbe} signifie...
+
+\emph{\tdocprewhy{sup.er} pour...}
+\end{tdoclatex}
+
+
+\begin{tdocrem}
+ Le choix du point pour scinder un mot permet d'utiliser des mots avec un tiret comme dans \tdocinlatex+\tdocprewhy{ca.sse-brique}+ qui donne \tdocprewhy{ca.sse-brique}.
+\end{tdocrem}
+
+
+\section{Un rendu en situation réelle} \label{tdoc-showcase}
+
+Il est parfois utile d'obtenir directement le rendu d'un code dans la documentation. Ceci nécessite que ce type de rendu soit dissociable du texte donnant des explications.
+
+
+% ------------------ %
+
+
+\subsection{Avec une bande colorée}
+
+\begin{tdocexa}[Avec les textes par défaut]
+ Il peut être utile de montrer un rendu réel directement dans un document
+ \footnote{
+ Typiquement lorsque l'on fait une démo.
+ }.
+ Ceci se tape via \tdocenv{tdocshowcase} comme suit.
+
+ \tdoclatexinput[code]{examples-showcase-default.tex}
+
+ On obtient alors le rendu suivant
+ \footnote{
+ En coulisse, la bande est créée sans effort grâce au package \tdocpack{clrstrip}.
+ }.
+
+ \medskip
+
+ \input{examples-showcase-default.tex}
+\end{tdocexa}
+
+
+\begin{tdocrem}
+ Voir la section \ref{tdoc-latexshow} page \pageref{tdoc-latexshow} pour obtenir facilement un code suivi de son rendu réel comme dans l'exemple précédent.
+\end{tdocrem}
+
+
+\begin{tdocnote}
+ Les textes explicatifs s'adaptent à la langue choisie lors du chargement de \tdocpack{tutodoc}.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Changer la couleur et/ou les textes par défaut]
+ \leavevmode
+
+ \tdoclatexinput[code]{examples-showcase-customized.tex}
+
+ Ceci produira ce qui suit.
+
+ \medskip
+
+ \input{examples-showcase-customized.tex}
+\end{tdocexa}
+
+
+\begin{tdocnote}
+ Vous avez sûrement noté que l'on n'obtient pas un rouge pur : en coulisse les macros développables \tdocmacro{tdocbackcolor} et \tdocmacro{tdocdarkcolor} sont utilisées pour créer celles du fond et des titres respectivement à partir de la couleur proposée à \tdocenv{tdocshowcase}.
+ Ces macros à un seul argument, la couleur choisie, admettent les codes suivants.
+
+ \begin{tdoclatex}[code]
+\NewExpandableDocumentCommand{\tdocbackcolor}{m}{#1!5}
+\NewExpandableDocumentCommand{\tdocdarkcolor}{m}{#1!50!black}
+ \end{tdoclatex}
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\begin{tdocwarn}
+ Avec les réglages par défaut, si le code \LaTeX\ à mettre en forme commence par un crochet ouvrant, il faudra indiquer explicitement une option vide comme dans l'exemple suivant.
+
+ \tdoclatexinput[code]{examples-showcase-hook.tex}
+
+ Ceci produira ce qui suit.
+
+ \medskip
+
+ \input{examples-showcase-hook.tex}
+\end{tdocwarn}
+
+
+\begin{tdocnote}
+ Il faut savoir qu'en coulisse la macro \tdocmacro{tdocruler} est utilisée.
+
+ \begin{tdoclatex}[std]
+ \tdocruler{Un pseudo-titre décoré}{red}
+ \end{tdoclatex}
+\end{tdocnote}
+
+
+\subsection{Sans bande colorée}
+
+Le rendu de \tdocenv{tdocshowcase} avec une bande colorée peut ne pas convenir, ou parfois ne pas être acceptable malgré le travail fait par \tdocpack{clrstrip}.
+Il est possible de ne pas utiliser une bande colorée comme nous allons le voir tout de suite.
+
+
+\begin{tdocexa}
+ L'emploi de \tdocenv[{[nostripe]}]{tdocshowcase} demande de ne pas faire appel à \tdocpack{clrstrip}.
+ Voici un exemple d'utilisation.
+
+ \tdoclatexinput[code]{examples-showcase-no-clrstrip.tex}
+
+ Ceci produira ce qui suit.
+
+ \medskip
+
+ \input{examples-showcase-no-clrstrip.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Changer la couleur et/ou les textes par défaut]
+ \leavevmode
+
+ \tdoclatexinput[code]{examples-showcase-no-clrstrip-customized.tex}
+
+ Ceci produira ce qui suit.
+
+ \medskip
+
+ \input{examples-showcase-no-clrstrip-customized.tex}
+\end{tdocexa}
+
+
+\subsection{En important le code \LaTeX}
+
+Pour obtenir des rendus en important le code depuis un fichier externe, au lieu de le taper, il suffit d'employer la macro \tdocmacro{tdocshowcaseinput} dont l'option reprend la syntaxe de celle de \tdocenv{tdocshowcase} et l'argument obligatoire correspond au chemin du fichier.
+
+
+\begin{tdocexa}<nonb>
+ Ce qui suit a été obtenu via \tdocinlatex+\tdocshowcaseinput{external.tex}+.
+
+ \medskip
+
+ \tdocshowcaseinput{examples-showcase-external.tex}
+
+ \medskip
+
+ Quant à \tdocinlatex+\tdocshowcaseinput[color = orange]{external.tex}+ , ceci produira le changement de couleur observable ci-après.
+
+ \medskip
+
+ \tdocshowcaseinput[color = orange]{examples-showcase-external.tex}
+\end{tdocexa}
+
+
+\section{Cas d'utilisation en \LaTeX}
+
+Documenter un package ou une classe se fait efficacement via des cas d'utilisation montrant à la fois du code et le résultat correspondant.
+
+
+% ------------------ %
+
+
+\subsection{Codes \tdocquote{en ligne}} \label{tdoc-listing-inline}
+
+La macro \tdocmacro{tdocinlatex}
+\footnote{
+ Le nom de la macro \tdocmacro{tdocinlatex} vient de \tdocquote{\tdocprewhy{in.line} \LaTeX} soit \tdocinEN{\LaTeX\ en ligne}.
+}
+permet de taper du code en ligne via un usage similaire à \tdocmacro{verb}.
+Voici des exemples d'utilisation.
+
+
+\begin{tdoclatex}[sbs]
+ 1: \tdocinlatex|$a^b = c$|
+
+ 2: \tdocinlatex+\tdocinlatex|$a^b = c$|+
+\end{tdoclatex}
+
+
+\begin{tdocnote}
+ La macro \tdocmacro{tdocinlatex} est utilisable dans une note de pied de page : voir le bas de cette page
+ \footnote{
+ \tdocinlatex+$minted = TOP$+ a été tapé \tdocinlatex|\tdocinlatex+$minted = TOP$+| dans cette note de bas de page..
+ }.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\subsection{Codes tapés directement}
+
+\begin{tdocexa}[Face à face]
+ Via \tdocenv[{[sbs]}]{tdoclatex}, on affichera un code et son rendu côte à côte.
+ Indiquons que \tdocinlatex#sbs# est pour \tdocquote{\tdocprewhy{s.ide} \tdocprewhy{b.y} \tdocprewhy{s.ide}} soit \tdocinEN{côte à côte}.
+ \tdocdocbasicinput{examples-listing-ABC.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[À la suite]
+ \tdocenv{tdoclatex} produit le résultat suivant qui correspond à l'option par défaut \tdocinlatex#std#
+ \footnote{
+ \tdocinlatex{std} fait référence au comportement \tdocquote{standard} de \tdocpack{tcolorbox} vis à vis de la librairie \tdocpack{minted}.
+ }.
+
+ \begin{tdoclatex}
+ $A = B + C$
+ \end{tdoclatex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Juste le code]
+ Via \tdocenv[{[code]}]{tdoclatex}, on aura juste le code comme ci-après.
+
+ \begin{tdoclatex}[code]
+ $A = B + C$
+ \end{tdoclatex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocwarn}
+ Avec la mise en forme par défaut, si le code commence par un crochet ouvrant, il faudra indiquer explicitement l'option par défaut.
+ \tdocdocbasicinput{examples-listing-strange.tex}
+\end{tdocwarn}
+
+
+\subsection{Codes importés}
+
+Pour les codes suivants, on considère un fichier de chemin relatif \verb+examples-listing-xyz.tex+, et ayant le contenu suivant.
+
+\tdoclatexinput[code]{examples-listing-xyz.tex}
+
+\medskip
+
+La macro \tdocmacro{tdoclatexinput} , présentée ci-après, s'utilise comme l'environnement \tdocenv{tdoclatex} excepté que l'on fournit le chemin d'un fichier.
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Face à face]
+ \leavevmode
+
+ \begin{tdoclatex}[code]
+\tdoclatexinput[sbs]{examples-listing-xyz.tex}
+ \end{tdoclatex}
+
+ Ceci produit la mise en forme suivante.
+
+ \tdoclatexinput[sbs]{examples-listing-xyz.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[À la suite]
+ \leavevmode
+
+ \begin{tdoclatex}[code]
+\tdoclatexinput{examples-listing-xyz.tex}
+ \end{tdoclatex}
+
+ Ceci produit la mise en forme suivante où l'option employée par défaut est \tdocinlatex#std#.
+
+ \tdoclatexinput{examples-listing-xyz.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Juste le code]
+ \leavevmode
+
+ \begin{tdoclatex}[code]
+\tdoclatexinput[code]{examples-listing-xyz.tex}
+ \end{tdoclatex}
+
+ Ceci produit la mise en forme suivante.
+
+ \tdoclatexinput[code]{examples-listing-xyz.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\subsection{Codes importés et mis en situation} \label{tdoc-latexshow}
+
+\begin{tdocexa}[Showcase]
+ Ce qui suit s'obtient via \tdocinlatex+\tdoclatexshow{examples-listing-xyz.tex}+.
+
+ \medskip
+
+ \begin{tdoc-doc-showcase}
+ \tdoclatexshow{examples-listing-xyz.tex}
+ \end{tdoc-doc-showcase}
+\end{tdocexa}
+
+
+\begin{tdocnote}
+ Les textes par défaut tiennent compte de la langue choisie lors du chargement du package \tdocpack{tutodoc}.
+\end{tdocnote}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Changer le texte explicatif]
+ Via la clé \tdocinlatex|explain|, on peut utiliser un texte personnalisé. Ainsi, \tdocinlatex|\tdoclatexshow[explain = Voici le rendu réel.]{examples-listing-xyz.tex}| produira ce qui suit.
+
+ \medskip
+
+ \begin{tdoc-doc-showcase}
+ \tdoclatexshow[explain = Voici le rendu réel.]{examples-listing-xyz.tex}
+ \end{tdoc-doc-showcase}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Les options disponibles]
+ En plus du texte explicatif, il est aussi possible d'utiliser toutes les options de \tdocenv{tdocshowcase}, voir \ref{tdoc-showcase} page \pageref{tdoc-showcase}.
+ Voici un exemple illustrant ceci.
+
+ \medskip
+
+ \tdoclatexinput[code]{examples-listing-latexshow-options.tex}
+
+ \medskip
+
+ Ceci va produire ce qui suit.
+
+ \medskip
+
+ \begin{tdoc-doc-showcase}
+ \input{examples-listing-latexshow-options.tex}
+ \end{tdoc-doc-showcase}
+\end{tdocexa}
+
+
+\section{Indiquer les changements}
+
+Afin de faciliter le suivi d'un package, il est indispensable de fournir un historique indiquant les changements effectués lors de la publication d'une nouvelle version.
+
+
+% ------------------ %
+
+
+\subsection{À quel moment ?}
+
+On peut au choix dater quelque chose, ou bien le versionner, dans ce second cas le numéro de version pourra éventuellement être daté.
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Dater des nouveautés]
+ La macro \tdocmacro{tdocdate} permet d'indiquer une date dans la marge comme dans l'exemple suivant.
+
+ \tdoclatexshow{examples-version-n-change-dating.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Versionner des nouveautés en les datant événtuellement]
+ Associer un numéro de version à une nouveauté se fait via la macro \tdocmacro{tdocversion}, la couleur et la date étant des arguments optionnels.
+
+ \tdoclatexshow{examples-version-n-change-versioning.tex}
+\end{tdocexa}
+
+
+\begin{tdocimportant}
+ \leavevmode
+
+ \begin{enumerate}
+ \item Les macros \tdocmacro{tdocdate} et \tdocmacro{tdocversion} nécessitent deux compilations.
+
+ \item Comme la langue indiquée pour cette documentation est le français, la date dans le rendu final est au format \texttt{JJ/MM/AAAA} alors que dans le code celle-ci devra toujours être saisie au format anglais \texttt{AAAA-MM-JJ}.
+ \end{enumerate}
+\end{tdocimportant}
+
+
+\begin{tdocwarn}
+ Seul l'emploi du format numérique \tdocinlatex+YYYY-MM-DD+ est vérifié
+ \footnote{
+ Techniquement, vérifier la validité d'une date, via \LaTeX3, ne présente pas de difficulté.
+ },
+ et ceci est un choix ! Pourquoi cela ? Tout simplement car dater et versionner des explications devrait se faire de façon semi-automatisée afin d'éviter tout bug humain.
+% \footnote{
+% L'auteur de \tdocpack{tutodoc} est entrain de mettre en place un ensemble d'outils permettant une telle semi-automatisation.
+% }.
+\end{tdocwarn}
+
+
+\subsection{Quoi de neuf ?}
+
+\tdocpack{tutodoc} propose différents environnements pour indiquer rapidement et clairement ce qui a été fait
+\footnote{
+ L'utilisateur n'a pas besoin de tous les détails techniques.
+}
+lors des derniers changements.
+
+
+\begin{tdocexa}[Pour les nouveautés]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-new.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Pour les mises à jour]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-update.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Pour les réparations]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-fix.tex}
+\end{tdocexa}
+
+
+% ------------------ %
+
+
+\begin{tdocexa}[Thématiques aux choix]
+ \leavevmode
+
+ \tdoclatexinput[sbs]{examples-version-n-change-topic.tex}
+\end{tdocexa}
+
+
+\section{Décorations}
+
+Finissons cette documentation avec de petites outils de mise en forme pouvant rendre de grands services.
+
+
+\begin{tdoclatex}[sbs]
+Bla, bla, bla...
+
+\tdocsep % Pratique pour délimiter.
+
+Ble, ble, ble...
+
+Bli, bli, bli...
+
+\tdocxspace % Espace subtile
+ % mais utile.
+
+Blo, blo, blo...
+
+Blu, blu, blu...
+
+\end{tdoclatex}
+\section{Historique}
+
+\tdocversion{1.0.0}[2023-11-29]
+
+Première version publique du projet.
+
+\end{document}
diff --git a/macros/latex/required/babel/base/README.md b/macros/latex/required/babel/base/README.md
index 2957d780bb..b55e1bf964 100644
--- a/macros/latex/required/babel/base/README.md
+++ b/macros/latex/required/babel/base/README.md
@@ -1,6 +1,6 @@
-## Babel 3.97
+## Babel 3.98
-2023-11-11
+2023-12-06
This package manages culturally-determined typographical (and other)
rules, and hyphenation patterns for a wide range of languages. Many
@@ -10,9 +10,9 @@ is a set of ini files for about 275 languages.
The latest stable version is available on <https://ctan.org/pkg/babel>.
-Changes in version 3.97 are described in:
+Changes in version 3.98 are described in:
-https://latex3.github.io/babel/news/whats-new-in-babel-3.97.html
+https://latex3.github.io/babel/news/whats-new-in-babel-3.98.html
Apart from the manual, you can find information on some aspects of babel at:
@@ -48,9 +48,14 @@ respective authors.
### Summary of latest changes
```
-3.97 2023-11-11
- * Support for 'interchar' (xetex).
- * New locale for Buriat, thanks to J. Khaganov.
+3.98 2023-12-06
+ * Case mappings in ini files, with new casing variants in the
+ Latin locales.
+ * New: \ShowLocaleProperties.
+ * Improved Persian/Farsi, thanks to Farshad Rasuli
+ (@farshadrasuli).
+ * In some languages and xetex, the language name was printed with
+ the first \foreignlanguage.
```
### Previous changes
diff --git a/macros/latex/required/babel/base/babel-code.pdf b/macros/latex/required/babel/base/babel-code.pdf
index 130befcb9e..f319285ed3 100644
--- a/macros/latex/required/babel/base/babel-code.pdf
+++ b/macros/latex/required/babel/base/babel-code.pdf
Binary files differ
diff --git a/macros/latex/required/babel/base/babel.dtx b/macros/latex/required/babel/base/babel.dtx
index 4345b09198..afe17f79c5 100644
--- a/macros/latex/required/babel/base/babel.dtx
+++ b/macros/latex/required/babel/base/babel.dtx
@@ -32,7 +32,7 @@
%
% \iffalse
%<*filedriver>
-\ProvidesFile{babel.dtx}[2023/11/11 v3.97 The Babel package]
+\ProvidesFile{babel.dtx}[2023/12/06 v3.98 The Babel package]
\documentclass{ltxdoc}
\GetFileInfo{babel.dtx}
\usepackage{fontspec}
@@ -582,6 +582,16 @@ _\usepackage[vietnamese,danish]{babel}_
BCP47 tag. See section \ref{bcp47} for further details.
\end{note}
+\begin{note}
+ Documents with several input encodings are not frequent, but
+ sometimes are useful. You can set different encodings for different
+ languages as the following example shows:
+\begin{verbatim}
+\addto\extrasfrench{\inputencoding{latin1}}
+\addto\extrasrussian{\inputencoding{koi8-r}}
+\end{verbatim}
+\end{note}
+
\subsection{Mostly monolingual documents}
\label{mostlymono}
@@ -1438,7 +1448,7 @@ Or also:
corresponding behavior is not always implemented. Also, there are
some limitations in the engines. A few remarks follow (which could no
longer be valid when you read this manual, if the packages involved
- han been updated). The Harfbuzz renderer has still some issues, so as
+ have been updated). The Harfbuzz renderer still has some issues, so as
a rule of thumb prefer the default renderer, and resort to Harfbuzz
only if the former does not work for you. Fortunately, fonts can be
loaded twice with different renderers; for example:
@@ -1562,6 +1572,7 @@ captions):
\tag{bs-Cyrl} Bosnian
\tag{bs-Latn} Bosnian\hascapu\hascapl
\tag{bs} Bosnian\hascapu\hascapl
+\tag{bua} Buriat\hascapu\hascapl
\tag{byn} Blin
\tag{ca} Catalan\hascapu\hascapl
\tag{cch} Atsam
@@ -1936,6 +1947,7 @@ breton\\
british\\
britishenglish\\
bulgarian\\
+buriat\\
burmese\\
canadian\\
canadianenglish\\
@@ -2309,7 +2321,7 @@ Many locale templates are quite useable, provided captions and dates are
not required (which is a very frequent case, particularly in ancient
languages). So, they will be included in the default \babel{} distribution.
This can serve to encourage contributions, too. A warning will remember
-they are ‘bare minumum locales’. The locales are currently
+they are ‘bare minimum locales’. The locales are currently
the following:
\begin{multicols}{4}
\small
@@ -2615,23 +2627,25 @@ something like:
first loads |danish.ldf|, and then redefines the captions for
\texttt{danish} (as provided by the |ini| file) and prevents
hyphenation. The rest of the language definitions are not touched.
-Without the optional argument it just loads some aditional tools if
+Without the optional argument it just loads some additional tools if
provided by the |ini| file, like extra counters.
\Describe{\BabelUppercaseMapping}
{\marg{locale-name}\marg{codepoint}\marg{output}}
\DescribeOther{\BabelLowercaseMapping}
{\marg{locale-name}\marg{codepoint}\marg{output}}
+\DescribeOther{\BabelTitlecaseMapping}
+ {\marg{locale-name}\marg{codepoint}\marg{output}}
\New{3.90} These macros are devised as a high level interface for
declaring case mappings, based on the locale name as declared by or
-with \babel. They are the equivalent of |\DeclareUppercaseMapping| and
-|\DeclareLowercaseMapping| (see \textsf{usrguide.pdf}). The purpose is
-twofold: (1) a user-friendly way to declare them, because
-often BCP 47 tags are not known (and sometimes can be complex);
-(2) if for some reason the tag changes (eg, you decide to tag
-|english| as |en-001| instead of |en-US|), the new mappings will be
-still assigned to that language.
+with \babel. They are the equivalent of |\DeclareUppercaseMapping|,
+|\DeclareLowercaseMapping|, and |\DeclareTitlecaseMapping| (see
+\textsf{usrguide.pdf}). The purpose is twofold: (1) a user-friendly way
+to declare them, because often BCP 47 tags are not known (and sometimes
+can be complex); (2) if for some reason the tag changes (eg, you decide
+to tag |english| as |en-001| instead of |en-US|), the new mappings will
+be still assigned to that language.
\begin{example} For Classical Latin (no need to know the tag is
\texttt{la-x-classic}):
@@ -2832,14 +2846,19 @@ See the next section.
\Describe{Alph=}{\meta{counter-name}} Same for |\Alph|.
\Describe{casing}{\meta{rules}} \New{3.90} Selects the casing rules in a few
-languages. They are (from \textsf{interface3.pdf}):
+languages. The first ones are predefined by \LaTeX{} (see
+\textsf{interface3.pdf}), while the following are defined by \babel:
\begin{description}
- \item[Armenian] |yiwn|, which maps U+0587 to capital ech and yiwn on
+ \item[Armenian] |yiwn| maps U+0587 to capital ech and yiwn on
uppercasing.
- \item[German] |eszett|, which maps the lowercase \textit{Eszett} to a
+ \item[German] |eszett| maps the lowercase \textit{Eszett} to a
\textit{großes Eszett}.
- \item[Greek] |iota|, which converts the \textit{ypogegrammeni} (subscript muted
+ \item[Greek] |iota| converts the \textit{ypogegrammeni} (subscript muted
iota) to capital iota when uppercasing.
+ \item[Latin] |nouv| in |classicallatin| and |medievallatin| reverts
+ the default rules, which maps u ↔ V; |uv| in |ecclesianticallatin|
+ and the basic |latin| locale applies the map u ↔ V (by default it’s
+ u ↔ U and v ↔ V).
\end{description}
\begin{example} For the latter:
@@ -3048,7 +3067,7 @@ CSS. They only work with \xetex{} and \luatex{} and are fully
expandable (even inside an unprotected |\edef|). Currently, they are
limited to numbers below 10000.
-There are several ways to use them (for the availabe styles in each
+There are several ways to use them (for the available styles in each
language, see the list below):
\begin{itemize}
@@ -3327,6 +3346,10 @@ note several locales may share a single |\language|, so they are
separated concepts. In \luatex, the |\localeid| is saved in each node
(when it makes sense) as an attribute, too.
+\Describe{\ShowLocaleProporties}{\marg{language}}
+\New{3.98} Prints to the |log| file all the key/value pairs declared in
+the |ini| locale file for \meta{language}.
+
\Describe{\LocaleForEach}{\marg{code}}
\Babel{} remembers which |ini| files have been loaded. There is a loop
named |\LocaleForEach| to traverse the list, where |#1| is the name of
@@ -3498,6 +3521,22 @@ Unicode engines, spacing is based on the ``current'' em unit (the size
of the previous char in \luatex, and the font size set by the last
|\selectfont| in \xetex).
+\begin{note}
+ With Unicode engines, a line break can happen just before an explicit
+ combining char (eg, \textit{\~{g}}, used in Guarani and Filipino, is
+ not included as a combined char and it’s represented in Unicode as
+ |U+0067|~|U+0303|. This issue is not directly related to \babel, but
+ to the hyphenation patterns and/or the font renderer. However, at
+ least with \luatex{} there is a workaround (change the language name
+ to what you are using):
+\begin{verbatim}
+\babelposthyphenation{guarani}{ | [{0300}-{036F}] }{ remove, {} }
+\end{verbatim}
+The Lua pattern means ‘a discretionary followed by a character in the
+range |U+0300|--|U+0367| (which contains combining chars)’. An
+alternative to a transform is |\babelpatterns|.
+\end{note}
+
\subsection{Transforms}
\label{transforms}
@@ -3514,7 +3553,7 @@ It currently embraces |\babelprehyphenation| and
\New{3.57} Several \textsf{ini} files predefine some transforms. They
are activated with the key |transforms| in |\babelprovide|, either if
the locale is being defined with this macro or the languages has been
-previouly loaded as a class or package option, as the following example
+previously loaded as a class or package option, as the following example
illustrates:
\begin{verbatim}
\usepackage[hungarian]{babel}
@@ -3798,7 +3837,7 @@ future release).
\marg{class-first} and \marg{class-second} can be comma separated lists
of char classes, and all combinations are defined (so that 2 first
classes with 2 second classes, define 4 combinations). In the
-\marg{options} field a key named |label| is available, which allows to
+\meta{options} field a key named |label| is available, which allows to
enable or to disable the rule with the following two commands. Like
prehyphenation transforms in \luatex{}, interchars are not applied if the
current hyphenation rules are |nohyphenation|.
@@ -3832,7 +3871,7 @@ current language.
\begin{warning}
Keep in mind two points: (1) a character can be assigned a single
- class; this is a limitation in the interchar mechanims that often
+ class; this is a limitation in the interchar mechanisms that often
leads to incompatibilities; (2) since the character classes set with
|\babelcharclass| are saved (so that they can be restored), there is a
limit in the number of characters in the \marg{char-list} (which,
@@ -4610,7 +4649,7 @@ layout.lists
The first four are documented elsewhere. The following are by default
|on|, but with |off| can disable some features: |bidi.math| (only
preamble) changes for math or \textsf{amsmath}, |linebreak.sea|,
-|linebreak.sea| and |justify.arabic| the corresponding algorithms,
+|linebreak.cjk| and |justify.arabic| the corresponding algorithms,
|layout.tabular| and |layout.lists| changes for tabular and lists.
Some of the are reverted only to some extent.
@@ -4657,18 +4696,11 @@ options (like paragraph direction with |bidi.text|).
\end{verbatim}
\textit{before} loading babel. This way, when the document begins
the sequence is (1) make \verb/|/ active (\textsf{ltxdoc}); (2) make
- it unactive (your settings); (3) make babel shorthands active
+ it inactive (your settings); (3) make babel shorthands active
(\textsf{babel)}; (4) reload \textsf{hhline} (\textsf{babel}, now
with the correct catcodes for \verb/|/ and
\verb|:|).\catcode`\|=\active
-\item Documents with several input encodings are not frequent, but
- sometimes are useful. You can set different encodings for different
- languages as the following example shows:
-\begin{verbatim}
-\addto\extrasfrench{\inputencoding{latin1}}
-\addto\extrasrussian{\inputencoding{koi8-r}}
-\end{verbatim}
\item For the hyphenation to work correctly, lccodes cannot change,
because \TeX{} only takes into account the values when the
paragraph is hyphenated, i.e., when it has been
@@ -4934,8 +4966,8 @@ recommended.
\label{contribute}
Currently, the easiest way to contribute a new language is by taking
-one the the 500 or so |ini| templates available on GitHub as a basis.
-Just make a pull request o dowonload it and then, after filling the
+one of the 500 or so |ini| templates available on GitHub as a basis.
+Just make a pull request or download it and then, after filling the
fields, sent it to me. Fell free to ask for help or to make feature
requests.
@@ -5180,7 +5212,7 @@ The \TeX book states: ``Plain \TeX\ includes a macro called
all characters that have a special category code.'' \cite[p.~380]{DEK}
It is used to set text `verbatim'. To make this work if more
characters get a special category code, you have to add this character
-to the macro |\dospecial|. \LaTeX\ adds another macro called
+to the macro |\dospecials|. \LaTeX\ adds another macro called
|\@sanitize| representing the same character set, but without the
curly braces. The macros |\bbl@add@special|\meta{char} and
|\bbl@remove@special|\meta{char} add and remove the character
@@ -5440,13 +5472,6 @@ to define |\abmoniname|, |\abmoniiname|, etc. (and similarly with
\end{verbatim}
|#1| is replaced by the roman numeral.
-\Describe\SetCase{\oarg{map-list}\marg{toupper-code}\marg{tolower-code}\qquad\textit{Deprecated}}
-
-\begin{warning}
-This feature doesn’t work any longer after some changes in the \LaTeX{}
-kernel. It’s now deprecated and an alternative is on the way.
-\end{warning}
-
\Describe{\SetHyphenMap}{\marg{to-lower-macros}}
\New{3.9g} Case mapping for hyphenation is handled with |\SetHyphenMap|
and controlled with the package option |hyphenmap|.
@@ -5600,7 +5625,7 @@ wouldn’t exist.
%
% The \babel{} installer extends \textsf{docstrip} with a few
% ``pseudo-guards'' to set ``variables'' used at installation time.
-% They are used with |<||@name@>| at the appropiated places in the
+% They are used with |<||@name@>| at the appropriate places in the
% source code and defined with either
% $\langle\langle$\textit{name}=\textit{value}$\rangle\rangle$, or with
% a series of lines between
@@ -5630,8 +5655,8 @@ wouldn’t exist.
% \section{Tools}
%
% \begin{macrocode}
-%<<version=3.97>>
-%<<date=2023/11/11>>
+%<<version=3.98>>
+%<<date=2023/12/06>>
% \end{macrocode}
%
% \textbf{Do not use the following macros in \texttt{ldf} files. They
@@ -5858,14 +5883,14 @@ wouldn’t exist.
\edef#1{\the\toks@}}
% \end{macrocode}
%
-% An extensison to the previous macro. It takes into account the
+% An extension to the previous macro. It takes into account the
% parameters, and it is string based (ie, if you replace |elax| by
% |ho|, then |\relax| becomes |\rho|). No checking is done at all,
% because it is not a general purpose macro, and it is used by \babel{}
% only when it works (an example where it does \textit{not} work is in
% |\bbl@TG@@date|, and also fails if there are macros with spaces,
% because they are retokenized). It may change! (or even merged with
-% |\bbl@replace|; I'm not sure ckecking the replacement is really
+% |\bbl@replace|; I'm not sure checking the replacement is really
% necessary or just paranoia).
%
% \begin{macrocode}
@@ -6100,7 +6125,7 @@ wouldn’t exist.
% \end{macrocode}
%
% This file also takes care of a number of compatibility issues with
-% other packages an defines a few aditional package options. Apart from
+% other packages an defines a few additional package options. Apart from
% all the language options below we also have a few options that
% influence the behavior of language definition files.
%
@@ -6124,7 +6149,7 @@ wouldn’t exist.
%
% If the format created a list of loaded languages (in
% |\bbl@languages|), get the name of the 0-th to show the actual
-% language used. Also avaliable with |base|, because it just shows
+% language used. Also available with |base|, because it just shows
% info.
%
% \begin{macrocode}
@@ -6156,7 +6181,7 @@ wouldn’t exist.
% it exits.
%
% Now the \texttt{base} option. With it we can define (and load, with
-% \luatex) hyphenation patterns, even if we are not interesed in the
+% \luatex) hyphenation patterns, even if we are not interested in the
% rest of babel.
%
% \begin{macrocode}
@@ -6376,7 +6401,7 @@ wouldn’t exist.
% \end{macrocode}
%
% The following is ignored with |shorthands=off|, since it is
-% intended to take some aditional actions for certain chars.
+% intended to take some additional actions for certain chars.
%
% \begin{macrocode}
\bbl@ifshorthand{'}%
@@ -6815,7 +6840,7 @@ wouldn’t exist.
%
% The macro |\bbl@set@language| takes care of switching the language
% environment \emph{and} of writing entries on the auxiliary files.
-% For historial reasons, language names can be either |language| of
+% For historical reasons, language names can be either |language| of
% |\language|. To catch either form a trick is used, but
% unfortunately as a side effect the catcodes of letters in
% |\languagename| are messed up. This is a bug, but preserved for
@@ -8011,7 +8036,7 @@ wouldn’t exist.
%
% The very first thing to do is saving the original catcode and the
% original definition, even if not active, which is possible
-% (undefined characters require a special treatement to avoid
+% (undefined characters require a special treatment to avoid
% making them |\relax| and preserving some degree of protection).
%
% \begin{macrocode}
@@ -8450,14 +8475,14 @@ wouldn’t exist.
%
% \begin{macro}{\defineshorthand}
%
-% Currently we only support two groups of user level shorthands,
-% named internally |user| and |user@<lang>| (language-dependent
-% user shorthands). By default, only the first one is taken into
-% account, but if the former is also used (in the optional argument
-% of |\defineshorthand|) a new level is inserted for it
-% (|user@generic|, done by |\bbl@set@user@generic|); we make also
-% sure |{}| and |\protect| are taken into account in this new top
-% level.
+% Currently we only support two groups of user level shorthands,
+% named internally |user| and |user@<lang>| (language-dependent
+% user shorthands). By default, only the first one is taken into
+% account, but if the former is also used (in the optional argument
+% of |\defineshorthand|) a new level is inserted for it
+% (|user@generic|, done by |\bbl@set@user@generic|); we make also
+% sure |{}| and |\protect| are taken into account in this new top
+% level.
%
% \begin{macrocode}
\def\user@language@group{user@\language@group}
@@ -8485,12 +8510,12 @@ wouldn’t exist.
%
% \begin{macro}{\languageshorthands}
%
-% A user level command to change the language from which shorthands
-% are used. Unfortunately, \babel{} currently does not keep track
-% of defined groups, and therefore there is no way to catch a
-% possible change in casing to fix it in the same way languages names
-% are fixed. [TODO].
-%
+% A user level command to change the language from which shorthands
+% are used. Unfortunately, \babel{} currently does not keep track
+% of defined groups, and therefore there is no way to catch a
+% possible change in casing to fix it in the same way languages names
+% are fixed. [TODO].
+% %
% \begin{macrocode}
\def\languageshorthands#1{\def\language@group{#1}}
% \end{macrocode}
@@ -8498,11 +8523,12 @@ wouldn’t exist.
% \end{macro}
%
% \begin{macro}{\aliasshorthand}
-% \textit{Deprecated}. First the new shorthand needs to be
-% initialized. Then, we define the new shorthand in terms of the
-% original one, but note with |\aliasshorthands{"}{/}| is
-% |\active@prefix /\active@char/|, so we still need to let the
-% lattest to |\active@char"|.
+%
+% \textit{Deprecated}. First the new shorthand needs to be
+% initialized. Then, we define the new shorthand in terms of the
+% original one, but note with |\aliasshorthands{"}{/}| is
+% |\active@prefix /\active@char/|, so we still need to let the
+% latter to |\active@char"|.
%
% \begin{macrocode}
\def\aliasshorthand#1#2{%
@@ -8541,9 +8567,10 @@ wouldn’t exist.
%
% \begin{macro}{\shorthandon}
% \begin{macro}{\shorthandoff}
-% The first level definition of these macros just passes the
-% argument on to |\bbl@switch@sh|, adding |\@nil| at the end to
-% denote the end of the list of characters.
+%
+% The first level definition of these macros just passes the
+% argument on to |\bbl@switch@sh|, adding |\@nil| at the end to
+% denote the end of the list of characters.
%
% \begin{macrocode}
\newcommand*\shorthandon[1]{\bbl@switch@sh\@ne#1\@nnil}
@@ -8554,19 +8581,19 @@ wouldn’t exist.
%
% \begin{macro}{\bbl@switch@sh}
%
-% The macro |\bbl@switch@sh| takes the list of characters apart one
-% by one and subsequently switches the category code of the
-% shorthand character according to the first argument of
-% |\bbl@switch@sh|.
+% The macro |\bbl@switch@sh| takes the list of characters apart one
+% by one and subsequently switches the category code of the
+% shorthand character according to the first argument of
+% |\bbl@switch@sh|.
%
-% But before any of this switching takes place we make sure that the
-% character we are dealing with is known as a shorthand character.
-% If it is, a macro such as |\active@char"| should exist.
+% But before any of this switching takes place we make sure that the
+% character we are dealing with is known as a shorthand character.
+% If it is, a macro such as |\active@char"| should exist.
%
-% Switching off and on is easy -- we just set the category code to
-% `other' (12) and |\active|. With the starred version, the original
-% catcode and the original definition, saved in
-% |@initiate@active@char|, are restored.
+% Switching off and on is easy -- we just set the category code to
+% `other' (12) and |\active|. With the starred version, the original
+% catcode and the original definition, saved in
+% |@initiate@active@char|, are restored.
%
% \begin{macrocode}
\def\bbl@switch@sh#1#2{%
@@ -8605,8 +8632,8 @@ wouldn’t exist.
% \end{macro}
% \end{macro}
%
-% Note the value is that at the expansion time; eg, in the preample
-% shorhands are usually deactivated.
+% Note the value is that at the expansion time; eg, in the preamble
+% shorthands are usually deactivated.
%
% \begin{macrocode}
\def\babelshorthand{\active@prefix\babelshorthand\bbl@putsh}
@@ -8678,15 +8705,15 @@ wouldn’t exist.
% \end{macro}
% \end{macro}
%
-% Usually the |~| is active and expands to \verb*=\penalty\@M\ =.
-% When it is written to the \file{.aux} file it is written
-% expanded. To prevent that and to be able to use the character |~|
-% as a start character for a shorthand, it is redefined here as a
-% one character shorthand on system level. The system declaration
-% is in most cases redundant (when |~| is still a non-break space),
-% and in some cases is inconvenient (if |~| has been redefined);
-% however, for backward compatibility it is maintained (some
-% existing documents may rely on the \babel{} value).
+% Usually the |~| is active and expands to \verb*=\penalty\@M\ =.
+% When it is written to the \file{.aux} file it is written
+% expanded. To prevent that and to be able to use the character |~|
+% as a start character for a shorthand, it is redefined here as a
+% one character shorthand on system level. The system declaration
+% is in most cases redundant (when |~| is still a non-break space),
+% and in some cases is inconvenient (if |~| has been redefined);
+% however, for backward compatibility it is maintained (some
+% existing documents may rely on the \babel{} value).
%
% \begin{macrocode}
\initiate@active@char{~}
@@ -8723,6 +8750,7 @@ wouldn’t exist.
% Language attributes provide a means to give the user control over
% which features of the language definition files he wants to
% enable.
+%
% \begin{macro}{\languageattribute}
%
% The macro |\languageattribute| checks whether its arguments are
@@ -8739,10 +8767,10 @@ wouldn’t exist.
\bbl@vforeach{#2}{%
% \end{macrocode}
%
-% We want to make sure that each attribute is selected only once;
-% therefore we store the already selected attributes in
-% |\bbl@known@attribs|. When that control sequence is not yet
-% defined this attribute is certainly not selected before.
+% To make sure each attribute is selected only once, we store the
+% already selected attributes in |\bbl@known@attribs|. When that
+% control sequence is not yet defined this attribute is certainly
+% not selected before.
%
% \begin{macrocode}
\ifx\bbl@known@attribs\@undefined
@@ -8757,9 +8785,9 @@ wouldn’t exist.
\else
% \end{macrocode}
%
-% When we end up here the attribute is not selected before. So, we
-% add it to the list of selected attributes and execute the
-% associated \TeX-code.
+% When we end up here the attribute is not selected before. So, we
+% add it to the list of selected attributes and execute the
+% associated \TeX-code.
%
% \begin{macrocode}
\bbl@exp{%
@@ -9166,7 +9194,7 @@ wouldn’t exist.
%
% \subsection{Multiencoding strings}
%
-% The aim following commands is to provide a commom interface for
+% The aim following commands is to provide a common interface for
% strings in several encodings. They also contains several hooks which
% can be used by \luatex{} and \xetex. The code is organized here with
% pseudo-guards, so we start with the basic commands.
@@ -9181,37 +9209,8 @@ wouldn’t exist.
\def\bbl@toglobal#1{\global\let#1#1}
% \end{macrocode}
%
-% The second one. We need to patch |\@uclclist|, but it is done once
-% and only if |\SetCase| is used or if strings are encoded. The code
-% is far from satisfactory for several reasons, including the fact
-% |\@uclclist| is not a list any more. Therefore a package option is
-% added to ignore it. Instead of gobbling the macro
-% getting the next two elements (usually |\reserved@a|), we pass it as
-% argument to |\bbl@uclc|. The parser is restarted inside
-% |\|\m{lang}|@bbl@uclc| because we do not know how many expansions
-% are necessary (depends on whether strings are encoded). The last
-% part is tricky -- when uppercasing, we have:
-%\begin{verbatim}
-% \let\bbl@tolower\@empty\bbl@toupper\@empty
-%\end{verbatim}
-% and starts over (and similarly when lowercasing).
-%
-% \begin{macrocode}
-\@ifpackagewith{babel}{nocase}%
- {\let\bbl@patchuclc\relax}%
- {\def\bbl@patchuclc{% TODO. Delete. Doesn’t work any more.
- \global\let\bbl@patchuclc\relax
- \g@addto@macro\@uclclist{\reserved@b{\reserved@b\bbl@uclc}}%
- \gdef\bbl@uclc##1{%
- \let\bbl@encoded\bbl@encoded@uclc
- \bbl@ifunset{\languagename @bbl@uclc}% and resumes it
- {##1}%
- {\let\bbl@tempa##1\relax % Used by LANG@bbl@uclc
- \csname\languagename @bbl@uclc\endcsname}%
- {\bbl@tolower\@empty}{\bbl@toupper\@empty}}%
- \gdef\bbl@tolower{\csname\languagename @bbl@lc\endcsname}%
- \gdef\bbl@toupper{\csname\languagename @bbl@uc\endcsname}}}
-% \end{macrocode}
+% The following option is currently no-op. It was meant for the
+% deprecated |\SetCase|.
%
% \begin{macrocode}
%<<*More package options>>
@@ -9280,7 +9279,7 @@ wouldn’t exist.
%
% Parse the encoding info to get the label, input, and font parts.
%
-% Select the behavior of |\SetString|. Thre are two main cases,
+% Select the behavior of |\SetString|. There are two main cases,
% depending of if there is an optional argument: without it and
% |strings=encoded|, strings are defined
% always; otherwise, they are set only if they are still undefined
@@ -9426,31 +9425,12 @@ wouldn’t exist.
\csname\bbl@LC\expandafter\endcsname\expandafter{\BabelString}}}
% \end{macrocode}
%
-% Now, some addtional stuff to be used when encoded strings are
-% used. Captions then include |\bbl@encoded| for string to be
-% expanded in case transformations. It is |\relax| by default, but
-% in |\MakeUppercase| and |\MakeLowercase| its value is a modified
-% expandable |\@changed@cmd|.
+% A little auxiliary command sets the string. TODO: Formerly used with
+% casing. Very likely no longer necessary, although it’s used in
+% |\setlocalecaption|.
%
% \begin{macrocode}
-\ifx\bbl@opt@strings\relax
- \def\bbl@scset#1#2{\def#1{\bbl@encoded#2}}
- \bbl@patchuclc
- \let\bbl@encoded\relax
- \def\bbl@encoded@uclc#1{%
- \@inmathwarn#1%
- \expandafter\ifx\csname\cf@encoding\string#1\endcsname\relax
- \expandafter\ifx\csname ?\string#1\endcsname\relax
- \TextSymbolUnavailable#1%
- \else
- \csname ?\string#1\endcsname
- \fi
- \else
- \csname\cf@encoding\string#1\endcsname
- \fi}
-\else
- \def\bbl@scset#1#2{\def#1{#2}}
-\fi
+\def\bbl@scset#1#2{\def#1{#2}}
% \end{macrocode}
%
% Define |\SetStringLoop|, which is actually set inside
@@ -9484,18 +9464,24 @@ wouldn’t exist.
%
% \paragraph{Case mapping}
%
-% The command |\SetCase| provides a way to change the behavior of
-% |\MakeUppercase| and |\MakeLowercase|. |\bbl@tempa| is set by the
-% patched |\@uclclist| to the parsing command. \textit{Deprecated.}
+% The command |\SetCase| is deprecated. Currently it consists in a
+% definition with a hack just for backward compatibility in the macro
+% mapping.
%
% \begin{macrocode}
%<<*Macros local to BabelCommands>>
\newcommand\SetCase[3][]{%
- \bbl@patchuclc
- \bbl@forlang\bbl@tempa{%
- \bbl@carg\bbl@encstring{\bbl@tempa @bbl@uclc}{\bbl@tempa##1}%
- \bbl@carg\bbl@encstring{\bbl@tempa @bbl@uc}{##2}%
- \bbl@carg\bbl@encstring{\bbl@tempa @bbl@lc}{##3}}}%
+ \def\bbl@tempa####1####2{%
+ \ifx####1\@empty\else
+ \bbl@carg\bbl@add{extras\CurrentOption}{%
+ \bbl@carg\babel@save{c__text_uppercase_\string####1_tl}%
+ \bbl@carg\def{c__text_uppercase_\string####1_tl}{####2}%
+ \bbl@carg\babel@save{c__text_lowercase_\string####2_tl}%
+ \bbl@carg\def{c__text_lowercase_\string####2_tl}{####1}}%
+ \expandafter\bbl@tempa
+ \fi}%
+ \bbl@tempa##1\@empty\@empty
+ \bbl@carg\bbl@toglobal{extras\CurrentOption}}
%<</Macros local to BabelCommands>>
% \end{macrocode}
%
@@ -10175,7 +10161,7 @@ wouldn’t exist.
%
% |\babelprovide| is a general purpose tool for creating and modifying
% languages. It creates the language infrastructure, and loads, if
-% requested, an |ini| file. It may be used in conjunction to previouly
+% requested, an |ini| file. It may be used in conjunction to previously
% loaded |ldf| files.
%
% \begin{macrocode}
@@ -10196,6 +10182,7 @@ wouldn’t exist.
Alph,labels,labels*,calendar,date,casing}%
{\bbl@csarg\let{KVP@##1}\@nnil}%
\global\let\bbl@release@transforms\@empty
+ \global\let\bbl@release@casing\@empty
\let\bbl@calendars\@empty
\global\let\bbl@inidata\@empty
\global\let\bbl@extend@ini\@gobble
@@ -10508,9 +10495,10 @@ wouldn’t exist.
\let\\\@Alph\<bbl@cntr@\bbl@KVP@Alph @\languagename>}}%
\fi
% == Casing ==
+ \bbl@release@casing
\ifx\bbl@KVP@casing\@nnil\else
\bbl@csarg\xdef{casing@\languagename}%
- {\@nameuse{bbl@casing@\languagename}-x-\bbl@KVP@casing}%
+ {\@nameuse{bbl@casing@\languagename}\bbl@maybextx\bbl@KVP@casing}%
\fi
% == Calendars ==
\ifx\bbl@KVP@calendar\@nnil
@@ -10958,6 +10946,7 @@ wouldn’t exist.
Reported }}}
%
\let\bbl@release@transforms\@empty
+\let\bbl@release@casing\@empty
\def\bbl@ini@exports#1{%
% Identification always exported
\bbl@iniwarning{}%
@@ -10973,7 +10962,7 @@ wouldn’t exist.
\bbl@exp{\\\bbl@exportkey{lname}{identification.name.opentype}%
{\csname bbl@elname@\languagename\endcsname}}%
\bbl@exportkey{tbcp}{identification.tag.bcp47}{}%
- % Somewhat hackish. TODO
+ % Somewhat hackish. TODO:
\bbl@exportkey{casing}{identification.tag.bcp47}{}%
\bbl@exportkey{lbcp}{identification.language.tag.bcp47}{}%
\bbl@exportkey{lotf}{identification.tag.opentype}{dflt}%
@@ -11036,10 +11025,33 @@ wouldn’t exist.
\let\bbl@inikv@identification\bbl@inikv
\let\bbl@inikv@date\bbl@inikv
\let\bbl@inikv@typography\bbl@inikv
-\let\bbl@inikv@characters\bbl@inikv
\let\bbl@inikv@numbers\bbl@inikv
% \end{macrocode}
%
+% The |characters| section also stores the values, but |casing| is
+% treated in a different fashion. Much like transforms, a set of
+% commands calling the parser are stored in |\bbl@release@casing|,
+% which is executed in |\babelprovide|.
+%
+% \begin{macrocode}
+\def\bbl@maybextx{-\bbl@csarg\ifx{extx@\languagename}\@empty x-\fi}
+\def\bbl@inikv@characters#1#2{%
+ \bbl@ifsamestring{#1}{casing}% eg, casing = uV
+ {\bbl@exp{%
+ \\\g@addto@macro\\\bbl@release@casing{%
+ \\\bbl@casemapping{}{\languagename}{\unexpanded{#2}}}}}%
+ {\in@{$casing.}{$#1}% eg, casing.Uv = uV
+ \ifin@
+ \lowercase{\def\bbl@tempb{#1}}%
+ \bbl@replace\bbl@tempb{casing.}{}%
+ \bbl@exp{\\\g@addto@macro\\\bbl@release@casing{%
+ \\\bbl@casemapping
+ {\\\bbl@maybextx\bbl@tempb}{\languagename}{\unexpanded{#2}}}}%
+ \else
+ \bbl@inikv{#1}{#2}%
+ \fi}}
+% \end{macrocode}
+%
% Additive numerals require an additional definition. When |.1| is
% found, two macros are defined -- the basic one, without |.1| called
% by |\localenumeral|, and another one preserving the trailing |.1| for
@@ -11374,7 +11386,6 @@ wouldn’t exist.
% \textbf{Transforms.}
%
% \begin{macrocode}
-\let\bbl@release@transforms\@empty
\bbl@csarg\let{inikv@transforms.prehyphenation}\bbl@inikv
\bbl@csarg\let{inikv@transforms.posthyphenation}\bbl@inikv
\def\bbl@transforms@aux#1#2#3#4,#5\relax{%
@@ -11456,7 +11467,7 @@ wouldn’t exist.
\fi
\AtBeginDocument{%
\bbl@patchfont{\bbl@xenohyph}%
- \expandafter\select@language\expandafter{\languagename}}%
+ {\expandafter\select@language\expandafter{\languagename}}}%
\fi}}%
\fi
\bbl@csarg\bbl@toglobal{lsys@#1}}
@@ -11571,7 +11582,7 @@ wouldn’t exist.
\def\bbl@alphnumeral#1#2{%
\expandafter\bbl@alphnumeral@i\number#2 76543210\@@{#1}}
\def\bbl@alphnumeral@i#1#2#3#4#5#6#7#8\@@#9{%
- \ifcase\@car#8\@nil\or % Currenty <10000, but prepared for bigger
+ \ifcase\@car#8\@nil\or % Currently <10000, but prepared for bigger
\bbl@alphnumeral@ii{#9}000000#1\or
\bbl@alphnumeral@ii{#9}00000#1#2\or
\bbl@alphnumeral@ii{#9}0000#1#2#3\or
@@ -11637,6 +11648,13 @@ wouldn’t exist.
% singletons may change.
%
% \begin{macrocode}
+\ifcase\bbl@engine % Converts utf8 to its code (expandable)
+ \def\bbl@utftocode#1{\the\numexpr\decode@UTFviii#1\relax}
+\else
+ \def\bbl@utftocode#1{\expandafter`\string#1}
+\fi
+% Still somewhat hackish. WIP. Note |\str_if_eq:nnTF| is fully
+% expandable (|\bbl@ifsamestring| isn’t).
\providecommand\BCPdata{}
\ifx\renewcommand\@undefined\else % For plain. TODO. It’s a quick fix
\renewcommand\BCPdata[1]{\bbl@bcpdata@i#1\@empty}
@@ -11652,18 +11670,52 @@ wouldn’t exist.
{\bbl@ifunset{bbl@\csname bbl@info@#1.tag.bcp47\endcsname @#2}{}%
{\bbl@cs{\csname bbl@info@#1.tag.bcp47\endcsname @#2}}}}
\fi
-% Still somewhat hackish. WIP.
\@namedef{bbl@info@casing.tag.bcp47}{casing}
\newcommand\BabelUppercaseMapping[3]{%
- \let\bbl@tempx\languagename
- \edef\languagename{#1}%
- \DeclareUppercaseMapping[\BCPdata{casing}]{#2}{#3}%
- \let\languagename\bbl@tempx}
+ \DeclareUppercaseMapping[\@nameuse{bbl@casing@#1}]{#2}{#3}}
+\newcommand\BabelTitlecaseMapping[3]{%
+ \DeclareTitlecaseMapping[\@nameuse{bbl@casing@#1}]{#2}{#3}}
\newcommand\BabelLowercaseMapping[3]{%
- \let\bbl@tempx\languagename
- \edef\languagename{#1}%
- \DeclareLowercaseMapping[\BCPdata{casing}]{#2}{#3}%
- \let\languagename\bbl@tempx}
+ \DeclareLowercaseMapping[\@nameuse{bbl@casing@#1}]{#2}{#3}}
+% \end{macrocode}
+%
+% The parser for |casing| and |casing.|\meta{variant}.
+%
+% \begin{macrocode}
+\def\bbl@casemapping#1#2#3{% 1:variant
+ \def\bbl@tempa##1 ##2{% Loop
+ \bbl@casemapping@i{##1}%
+ \ifx\@empty##2\else\bbl@afterfi\bbl@tempa##2\fi}%
+ \edef\bbl@templ{\@nameuse{bbl@casing@#2}#1}% Language code
+ \def\bbl@tempe{0}% Mode (upper/lower...)
+ \def\bbl@tempc{#3 }% Casing list
+ \expandafter\bbl@tempa\bbl@tempc\@empty}
+\def\bbl@casemapping@i#1{%
+ \def\bbl@tempb{#1}%
+ \ifcase\bbl@engine % Handle utf8 in pdftex, by surrounding chars with {}
+ \@nameuse{regex_replace_all:nnN}%
+ {[\x{c0}-\x{ff}][\x{80}-\x{bf}]*}{{\0}}\bbl@tempb
+ \else
+ \@nameuse{regex_replace_all:nnN}{.}{{\0}}\bbl@tempb % TODO. needed?
+ \fi
+ \expandafter\bbl@casemapping@ii\bbl@tempb\@@}
+\def\bbl@casemapping@ii#1#2#3\@@{%
+ \in@{#1#3}{<>}% ie, if <u>, <l>, <t>
+ \ifin@
+ \edef\bbl@tempe{%
+ \if#2u1 \else\if#2l2 \else\if#2t3 \fi\fi\fi}%
+ \else
+ \ifcase\bbl@tempe\relax
+ \DeclareUppercaseMapping[\bbl@templ]{\bbl@utftocode{#1}}{#2}%
+ \DeclareLowercaseMapping[\bbl@templ]{\bbl@utftocode{#2}}{#1}%
+ \or
+ \DeclareUppercaseMapping[\bbl@templ]{\bbl@utftocode{#1}}{#2}%
+ \or
+ \DeclareLowercaseMapping[\bbl@templ]{\bbl@utftocode{#1}}{#2}%
+ \or
+ \DeclareTitlecaseMapping[\bbl@templ]{\bbl@utftocode{#1}}{#2}%
+ \fi
+ \fi}
% \end{macrocode}
%
% With version 3.75 |\BabelEnsureInfo| is executed always, but there is
@@ -11715,11 +11767,17 @@ wouldn’t exist.
\fi}
\let\bbl@ini@loaded\@empty
\newcommand\LocaleForEach{\bbl@foreach\bbl@ini@loaded}
+\def\ShowLocaleProperties#1{%
+ \typeout{}%
+ \typeout{*** Properties for language '#1' ***}
+ \def\bbl@elt##1##2##3{\typeout{##1/##2 = ##3}}%
+ \@nameuse{bbl@inidata@#1}%
+ \typeout{*******}}
% \end{macrocode}
%
% \section{Adjusting the Babel bahavior}
%
-% A generic high level inteface is provided to adjust some global
+% A generic high level interface is provided to adjust some global
% and general settings.
%
% \begin{macrocode}
@@ -12774,7 +12832,7 @@ wouldn’t exist.
% \textit{except} if a |main| language has been set. In such a
% case, it is not loaded until all options has been processed.
% The following macro inputs the ldf file and does some additional
-% checks (|\input| works, too, but possible errors are not catched).
+% checks (|\input| works, too, but possible errors are not caught).
%
% \begin{macrocode}
\bbl@trace{Language options}
@@ -12899,7 +12957,7 @@ wouldn’t exist.
%
% Now define the corresponding loaders. With package options, assume
% the language exists. With class options, check if the option is a
-% language by checking if the correspondin file exists.
+% language by checking if the corresponding file exists.
%
% \begin{macrocode}
\bbl@foreach\bbl@language@opts{%
@@ -13608,10 +13666,10 @@ wouldn’t exist.
% For historical reasons, \LaTeX{} can select two different series
% (|bx| and |b|), for what is conceptually a single one. This can
% lead to problems when a single family requires several fonts,
-% depending on the language, mainly because ‘subtitutions’ with some
+% depending on the language, mainly because ‘substitutions’ with some
% combinations are not done consistently -- sometimes |bx/sc| is the
% correct font, but sometimes points to |b/n|, even if |b/sc| exists.
-% So, some subtitutions are redefined (in a somewhat hackish way, by
+% So, some substitutions are redefined (in a somewhat hackish way, by
% inspecting if the variant declaration contains |>ssub*|).
%
% \begin{macrocode}
@@ -14630,7 +14688,7 @@ end
% \subsection{CJK line breaking}
%
% Minimal line breaking for CJK scripts, mainly intended for simple
-% documents and short texts as a secundary language. Only line
+% documents and short texts as a secondary language. Only line
% breaking, with a little stretching for justification, without any
% attempt to adjust the spacing. It is based on (but does not strictly
% follow) the Unicode algorithm.
@@ -14789,7 +14847,7 @@ end
\catcode`_=11 \catcode`:=11
\gdef\bblar@nofswarn{\gdef\msg_warning:nnx##1##2##3{}}
\endgroup
-\gdef\bbl@arabicjust{% TODO. Allow for serveral locales.
+\gdef\bbl@arabicjust{% TODO. Allow for several locales.
\let\bbl@arabicjust\relax
\newattribute\bblar@kashida
\directlua{ Babel.attr_kashida = luatexbase.registernumber'bblar@kashida' }%
@@ -24652,7 +24710,7 @@ Babel.cjk_breaks = {
\@onlypreamble\@onlypreamble
% \end{macrocode}
%
-% Mimick \LaTeX's |\AtBeginDocument|; for this to work the user
+% Mimic \LaTeX's |\AtBeginDocument|; for this to work the user
% needs to add |\begindocument| to his file.
%
% \begin{macrocode}
@@ -24672,7 +24730,7 @@ Babel.cjk_breaks = {
\def\AtBeginDocument{\g@addto@macro\@begindocumenthook}
% \end{macrocode}
%
-% We also have to mimick \LaTeX's |\AtEndOfPackage|. Our
+% We also have to mimic \LaTeX's |\AtEndOfPackage|. Our
% replacement macro is much simpler; it stores its argument in
% |\@endofldf|.
%
@@ -24699,7 +24757,7 @@ Babel.cjk_breaks = {
\catcode`\&=4
% \end{macrocode}
%
-% Mimick \LaTeX's commands to define control sequences.
+% Mimic \LaTeX's commands to define control sequences.
%
% \begin{macrocode}
\def\newcommand{\@star@or@long\new@command}
@@ -25016,7 +25074,7 @@ Babel.cjk_breaks = {
%
% For a couple of languages we need the \LaTeX-control sequence
% |\scriptsize| to be available. Because plain \TeX\ doesn't have such
-% a sofisticated font mechanism as \LaTeX\ has, we just |\let| it to
+% a sophisticated font mechanism as \LaTeX\ has, we just |\let| it to
% |\sevenrm|.
%
% \begin{macrocode}
diff --git a/macros/latex/required/babel/base/babel.ins b/macros/latex/required/babel/base/babel.ins
index b47775f117..88446a4ef6 100644
--- a/macros/latex/required/babel/base/babel.ins
+++ b/macros/latex/required/babel/base/babel.ins
@@ -26,7 +26,7 @@
%% and covered by LPPL is defined by the unpacking scripts (with
%% extension .ins) which are part of the distribution.
%%
-\def\filedate{2023/11/11}
+\def\filedate{2023/12/06}
\def\batchfile{babel.ins}
\input docstrip.tex
diff --git a/macros/latex/required/babel/base/babel.pdf b/macros/latex/required/babel/base/babel.pdf
index da4b04f928..bbf0f874f9 100644
--- a/macros/latex/required/babel/base/babel.pdf
+++ b/macros/latex/required/babel/base/babel.pdf
Binary files differ
diff --git a/macros/latex/required/babel/base/bbcompat.dtx b/macros/latex/required/babel/base/bbcompat.dtx
index 61e273e2f5..48667a55a2 100644
--- a/macros/latex/required/babel/base/bbcompat.dtx
+++ b/macros/latex/required/babel/base/bbcompat.dtx
@@ -30,7 +30,7 @@
%
% \iffalse
%<*dtx>
-\ProvidesFile{bbcompat.dtx}[2023/11/11 v3.97]
+\ProvidesFile{bbcompat.dtx}[2023/12/06 v3.98]
%</dtx>
%
%% File 'bbcompat.dtx'
diff --git a/macros/latex/required/babel/base/bbidxglo.dtx b/macros/latex/required/babel/base/bbidxglo.dtx
index 58a43d9adb..37dbd9505a 100644
--- a/macros/latex/required/babel/base/bbidxglo.dtx
+++ b/macros/latex/required/babel/base/bbidxglo.dtx
@@ -46,7 +46,7 @@
% \end{macrocode}
%
% \fi
-% \title{Generating the index and chage log for the Babel system}
+% \title{Generating the index and change log for the Babel system}
% \author{Johannes Braams}
% \date{\filedate}
% \maketitle
@@ -73,7 +73,7 @@ level '>'
%
% Because the \babel\ system consists of so many files the default
% codeline numbering scheme of the \Lopt{doc} package has been
-% adapted. The line numbers consist of two parts seperated with a
+% adapted. The line numbers consist of two parts separated with a
% dot. This has to made known to the \mkidx\ program when it
% produces the index.
%