texlive[71337] Master/texmf-dist: babel-french (23may24)

commits+karl at tug.org commits+karl at tug.org
Fri May 24 22:56:42 CEST 2024


Revision: 71337
          https://tug.org/svn/texlive?view=revision&revision=71337
Author:   karl
Date:     2024-05-24 22:56:41 +0200 (Fri, 24 May 2024)
Log Message:
-----------
babel-french (23may24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/babel-french/README.md
    trunk/Master/texmf-dist/doc/generic/babel-french/frenchb-doc.pdf
    trunk/Master/texmf-dist/doc/generic/babel-french/frenchb-doc.tex
    trunk/Master/texmf-dist/doc/generic/babel-french/frenchb.pdf
    trunk/Master/texmf-dist/source/generic/babel-french/frenchb.dtx
    trunk/Master/texmf-dist/tex/generic/babel-french/acadian.ldf
    trunk/Master/texmf-dist/tex/generic/babel-french/canadien.ldf
    trunk/Master/texmf-dist/tex/generic/babel-french/francais.ldf
    trunk/Master/texmf-dist/tex/generic/babel-french/french.ldf
    trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf
    trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.lua

Modified: trunk/Master/texmf-dist/doc/generic/babel-french/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/generic/babel-french/README.md	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/doc/generic/babel-french/README.md	2024-05-24 20:56:41 UTC (rev 71337)
@@ -23,7 +23,7 @@
 License
 -------
 
-Released under the LaTeX Project Public License v1.3 or later
+Released under the LaTeX Project Public License v1.3c or later
 See http://www.latex-project.org/lppl.txt
 
 ## Installation
@@ -49,5 +49,5 @@
 See the included manual frenchb.pdf, section "Change History".
 
 ---
-Copyright 1996--2023 Daniel Flipo
+Copyright 1996--2024 Daniel Flipo
 E-mail: daniel (dot) flipo (at) free (dot) fr

Modified: trunk/Master/texmf-dist/doc/generic/babel-french/frenchb-doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/babel-french/frenchb-doc.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/babel-french/frenchb-doc.tex	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/doc/generic/babel-french/frenchb-doc.tex	2024-05-24 20:56:41 UTC (rev 71337)
@@ -120,7 +120,7 @@
 
 \title{Mode d’emploi du module \ext{babel-french}}
 \author{\href{mailto:daniel.flipo at free.fr}{Daniel \textsc{Flipo}}}
-\newcommand*{\latestversion}{3.5s}
+\newcommand*{\latestversion}{3.6a}
 \date{Version {\latestversion} -- \today}
 
 \begin{document}
@@ -135,7 +135,7 @@
   trouve à la section~\ref{sec:changes-3.0} p.~\pageref{sec:changes-3.0}.
 
   La version actuelle de frenchb (\latestversion), dont le nom officiel est
-  \ext{babel-french}, est prévue pour fonctionner aussi bien avec les anciens
+  \ext{babel-french}, est conçue pour fonctionner aussi bien avec les anciens
   formats TeX comme pdf(La)TeX qu’avec les nouveaux Lua(La)TeX et Xe(La)TeX.
 
   Les mises à jour de \ext{babel-french} sont désormais affichées très
@@ -157,11 +157,6 @@
   \vspace{-\baselineskip}\noindent
   \descindentFB=0pt
   \begin{description}
-  \item[30 avril 2017] Utiliser |\frenchsetup{}| de préférence à
-    |\frenchbsetup{}|, voir p.~\pageref{sec:Perso}.
-    Personnalisation de la commande |\part{}|, voir p.~\pageref{ssec:captions}.
-  \item[31 août 2017] Ajout de l’option \fbo{UnicodeNoBreakSpaces},
-    voir p.~\pageref{ucs-nbsp}.
   \item[30 janvier 2018] Adaptation à la version 3.4a, voir
     section~\ref{ssec:changes-3.4}.
   \item[24 février 2018] Regroupement par thèmes des options de \fbsetup{}.
@@ -183,6 +178,8 @@
     voir p.~\pageref{par-in-lists}.
   \item[19 déc. 2023] \ext{babel-french} est maintenant compatible
     avec \pkg{ucharclasses} (XeLaTeX). \file{frenchb.ins} supprimée.
+  \item[22 mai 2024] Adaptation à la version 3.6a, voir
+    section~\ref{ssec:changes-3.6}.
   \end{description}
 \end{abstract}
 \egroup
@@ -880,8 +877,9 @@
 
 \item [AutoSpaceFootnotes=false (true*)] supprime l’espace fine
   insécable ajoutée par défaut avant l’appel de chaque note dans le texte
-  courant. Cette option affecte la totalité du document.
-
+  courant.   Cette option affecte la totalité du document.
+  L’espace éventuellement ajoutée peut être ajustée, la commande par défaut
+  est : |\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}|
 \end{description}
 
 \subsubsection*{Ponctuation haute}
@@ -1123,10 +1121,10 @@
   section~\ref{sec:description}, p.~\pageref{sec:description}.
 
 \item [LowercaseSuperscripts=false (true)] rend possible d’avoir des lettres
-  supérieures en capitales (est-ce bien utile ?).  Par défaut, la nouvelle
-  commande |\up| (sauf si elle est redéfinie en |\textsuperscript| par l’option
-  précédente) empêche le passage en capitales des lettres supérieures dans les
-  hauts de pages par exemple.
+  supérieures en capitales (est-ce bien utile ?).  Par défaut, la commande
+  |\up| (sauf si elle est redéfinie en |\textsuperscript| par l’option
+  précédente) empêche le passage en capitales des lettres supérieures dans
+  les hauts de pages par exemple.
 
 \item [SuppressWarning=true (false)] peut être utilisée pour supprimer les
   avertissements non essentiels émis par \ext{babel-french}.
@@ -1521,10 +1519,28 @@
 }
 
 %\newpage
-\section{Changements entre les versions 3.5 et 2.6}
+\section{Changements entre les versions \latestversion{} et 3.4 (2018)}
 \label{sec:changes-3.0}
 
-\subsection{Changements entre les versions \latestversion{} et 3.4d}
+\subsection{Changements entre les versions \latestversion{} et 3.5s}
+\label{ssec:changes-3.6}
+
+La version 3.6a n’a plus recours à l’extension \pkg{keyval} pour gérer les
+options, les commandes internes du noyau LaTeX (\pkg{ltkeys})
+|\DeclareKeys{}| et |\SetKeys{}| sont utilisées.\\
+L’espace fine ajoutée avant l’appel des notes de bas de pages est maintenant
+personnalisable (suggestion de Thomas Savary) ; le nom de la commande est
+|\FBfnmarkspace{}|, c’est une \emph{vraie} espace fine (demie espace-mot de la
+police courante) contrairement à la commande LaTeX |\,| alias |\thinspace|%
+\footnote{Elles sont définies pour fonctionner aussi en mode mathématique.}
+précédemment utilisée qui chasse toujours 1/6em.  Les deux définitions
+coïncident pour les polices dont l’espace-mot vaut 1/3em, (cas le plus
+courant), l’écart est infime pour celles qui chassent moins : il est par
+exemple de $(1/6-1/8)12=0,5$pt en 12pt pour une police dont l’espace-mot
+chasse 1/4em.  Il est toujours possible de revenir à l’ancien comportement en
+codant |\renewcommand\FBfnmarkspace{\,}|.
+
+\subsection{Changements entre les versions  3.5a et 3.4d}
 \label{ssec:changes-3.5}
 
 La version 3.5a propose une nouvelle option \fbo{ListItemsAsPar} qui permet
@@ -1671,117 +1687,7 @@
 De nouvelles possibilités de personnalisation de la commande |\part{}| ont été
 introduites, voir page~\pageref{ssec:captions}.
 
-\subsection{Changements entre les versions 3.2h et 3.1m}
-\label{ssec:changes-3.2}
 
-La version 3.2g modifie le comportement par défaut de la commande |\frquote{}|
-sous LuaTeX qui est maintenant le même que sous XeTeX ou pdfTeX.
-Il suffit d’ajouter l’option \fbo{EveryLineGuill=open} pour retrouver le
-comportement des versions précédentes.
-
-Depuis la version 3.2f, \ext{babel-french} est compatible avec l’extension
-\ext{icomma} qui offre une solution alternative à la commande
-|\DecimalMathComma|.
-
-La construction des notes de bas de page a été revue pour les classes
-\cls{beamer}, \cls{memoir} et koma-script (\cls{scrartcl}, \cls{scrreprt}
-et \cls{scrbook}). Le rendu final est conservé mais les possibilités de
-personnalisation offertes par ces classes pour la présentation des notes de
-bas de page (changement de police, de couleur, etc.) sont désormais
-disponibles même lorsque l’option \fbo{FrenchFootnotes} est activée.
-
-Un vieux bug affectant le comportement de |\frquote{}| lorsque l’extension
-\ext{xspace} est chargée, a été corrigé.
-
-Les commandes |\NoAutoSpacing|, |\ttfamilyFB|, |\rmfamilyFB| et |\sffamilyFB|
-ont été complètement réécrites dans la version~3.2c afin de leur assurer un
-comportement identique quel que soit le moteur utilisé, pdfTeX, XeTeX ou
-LuaTeX.
-
-\textbf{{babel-french} v.3.2b et suivantes, mise en garde pour les
-  utilisateurs de Lua(La)TeX :}
-\nopagebreak
-La version~3.2b est la première compatible avec la version~0.95 de LuaTeX
-incluse dans TeXLive~2016. Les changements intervenus dans la structure des
-nœuds de type \textit{glue} rendent cette nouvelle version de LuaTeX
-incompatible avec les précédentes. Le code lua contenu dans les versions 3.2b
-et suivantes de \file{frenchb.lua} ne fonctionne pas avec les versions de
-LuaTeX antérieures à 0.95, aussi à partir de la version~3.2b \ext{babel-french}
-revient aux caractères actifs pour la gestion de la ponctuation haute avec les
-moteurs LuaTeX antérieurs à 0.95 !
-La bonne solution consiste à installer rapidement TeXLive~2016 ou une autre
-distribution contenant LuaTeX~0.95.
-En revanche il n’y a aucun problème de compatibilité ascendante avec les
-moteurs XeTeX et pdfTeX.
-
-\subsection{Changements entre les versions  3.1m et 3.0c}
-\label{ssec:changes-3.1}
-
-{\sloppy
-  Ajout de la commande |\frquote{}| et de sa variante |\frquote*{}|
-  recommandées pour saisir les citations, notamment les citations imbriquées
-  ou celles s’étendant sur plusieurs paragraphes, voir p.~\pageref{frquote}
-  et les nouvelles options \fbo{EveryParGuill}, \fbo{EveryLineGuill} et
-  \fbo{InnerGuillSingle}.
-\par}
-
-Nouvelle option \fbo{SmallCapsFigTabCaptions}, voir p.~\pageref{scfigtab}.
-
-\subsection{Changements entre les versions 3.0c et 2.6h}
-\label{ssec:changes-3.0}
-
-Plusieurs modifications de fond ont motivé le passage à la version~3.0.
-
-\begin{itemize}
-
-\item \ext{babel-french} ne fonctionne désormais qu’avec la version~3.9
-  de Babel ce qui donne accès à une syntaxe plus agréable pour modifier les
-  \textit{captions}, voir p.~\pageref{captionsfrench}.
-  Le séparateur utilisé dans les légendes de figures et de tableaux est
-  choisi de manière globale pour toutes les langues, voir
-  p.~\pageref{captionseparator}.
-
-\item La gestion des options par \fbsetup{} a été complètement remaniée ; deux
-  nouvelles options ont été ajoutées.
-
-\item La variante « canadien » du français fonctionne désormais comme un vrai
-  \textit{dialect} au sens de Babel ; parallèlement le français ne devrait
-  plus être désigné que sous le nom \opt{french}, à la fois en option de
-  |\usepackage[...]{babel}|%
-  \footnote{Le mieux est encore de mettre toutes les déclarations de langues
-    en option de \cs{documentclass}.}
-  et en argument de |\selectlanguage{}| et consorts.
-  Les variantes \opt{frenchb} et \opt{francais} sont encore tolérées mais
-  sans aucune garantie de pérennité.
-
-\item \ext{babel-french} ne charge plus le fichier \file{frenchb.cfg} ; la
-  personnalisation passe par l’utilisation exclusive de \fbsetup{}.
-
-\item Les étiquettes des listes \env{description} sont positionnées comme
-  celles des listes \env{itemize} et \env{enumerate} avec un retrait
-  paramétrable |\listindentFB| par rapport à la marge gauche.
-
-\item Enfin et c’est probablement le plus important, le recours aux
-  caractères actifs est supprimé pour la gestion de la ponctuation haute
-  lorsqu’un format basé sur LuaTeX%
-  \footnote{C’est déjà le cas pour XeTeX depuis la version~2.5 de
-    \ext{babel-french}.}
-  est utilisé (LuaLaTeX par exemple).
-  Le mécanisme des caractères actifs est remplacé par un appel aux
-  \textit{callbacks} |pre_linebreak_filter| et |hpack_filter|%
-  \footnote{Depuis la version 3.1g c’est le\textit{callbacks} \texttt{kerning}
-    qui est mis en œuvre à la place.}.
-
-  La base du code |lua| se trouve dans l’exposé de Paul Isambert
-  à la journée GUT’2010. Un grand merci à Paul pour cette source d’inspiration
-  et pour ses suggestions lors de la relecture finale de \file{frenchb.lua}.
-
-\end{itemize}
-
-À partir de la version 3.0c, \ext{babel-french} laisse le contrôle total des
-listes à la classe \cls{beamer} (option \fbo{StandardLists} automatiquement
-activée) ; nouvelle option \fbo{INGuillSpace} (voir p.~\pageref{INGuillspace}).
-
 \subsection{Comment recompiler un document écrit pour
                 {babel-french}~2.x ?}
 \label{ssec:compat-2.6}

Modified: trunk/Master/texmf-dist/doc/generic/babel-french/frenchb.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/generic/babel-french/frenchb.dtx
===================================================================
--- trunk/Master/texmf-dist/source/generic/babel-french/frenchb.dtx	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/source/generic/babel-french/frenchb.dtx	2024-05-24 20:56:41 UTC (rev 71337)
@@ -27,11 +27,11 @@
 -------------------------------------------------------------
 
 It may be distributed and/or modified under the
-conditions of the LaTeX Project Public License, either version 1.3
+conditions of the LaTeX Project Public License, either version 1.3c
 of this license or (at your option) any later version.
 The latest version of this license is in
   http://www.latex-project.org/lppl.txt
-and version 1.3 or later is part of all distributions of LaTeX
+and version 1.3c or later is part of all distributions of LaTeX
 version 2003/12/01 or later.
 
 This work has the LPPL maintenance status "maintained".
@@ -75,7 +75,7 @@
 %<frenchb>\ProvidesLanguage{frenchb}
 %<lua>--[[
 %<lua>   File `frenchb.lua’ generated from frenchb.dtx
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
 %<lua>   Copyright © 2014-2024 Daniel Flipo
 %<lua>   <daniel (dot) flipo (at) free (dot) fr>
 %<lua>   License LPPL: see french.ldf.
@@ -101,18 +101,25 @@
 \usepackage[dvipsnames]{xcolor}
 \usepackage[no-math]{fontspec}
 \usepackage{realscripts}
-\setmainfont{Vera.ttf}[
-  ItalicFont        = VeraIt.ttf,
-  BoldFont          = VeraBd.ttf,
-  BoldItalicFont    = VeraBI.ttf,
-  Scale = 0.92
+\usepackage{setspace}
+\setstretch{1.15}
+\setmainfont{SourceSansPro}[
+    Scale          = 1.13 ,
+    Extension      = .otf ,
+    UprightFont    = *-Regular ,
+    ItalicFont     = *-RegularIt ,
+    BoldFont       = *-Bold ,
+    BoldItalicFont = *-BoldIt ]
+\setmonofont{iosevka}[%
+    Scale          = MatchLowercase ,
+    FakeStretch    = 1.05 ,
+    Extension      = .ttf,
+    UprightFont    = *-medium,
+    BoldFont       = *-bold,
+    ItalicFont     = *-italic,
+    BoldItalicFont = *-bolditalic,
+%   RawFeatures    = -dlig;-clig        % ligature >= (l.1314)
   ]
-\setmonofont{VeraMono.ttf}[
-  ItalicFont        = VeraMoIt.ttf,
-  BoldFont          = VeraMoBd.ttf,
-  BoldItalicFont    = VeraMoBI.ttf,
-  Scale = MatchLowercase,
-  ]
 %
 \def\PrintMacroName#1{%
   \strut\MacroFont\color{Sepia}\normalsize\string#1}
@@ -149,8 +156,8 @@
    \clearpage
    \section{Change History}%
    \GlossaryPrologue{}%
-   Changes are listed in reverse order (latest first) and limited to
-   \frenchb{}~v3.
+   Changes listed in reverse order (latest first) and not older
+    than~v3.3 (2018).
    \PrintChanges
 }
 \begin{document}
@@ -298,8 +305,8 @@
 %      the quotation either an opening French guillemet («), or
 %      a closing one (») or nothing depending on option
 %      \fbo{EveryParGuill=open} or \fbo{=close} or \fbo{=none},
-%      see p.~\pageref{everyparguill}.
-%      Command |\NoEveryParQuote| is provided to locally suppress
+%      see p.~\pageref{everyparguill}.\\
+%      The command |\NoEveryParQuote| is provided to locally suppress
 %      unwanted guillemets (typically when lists are embedded in
 %      |\frquote{}|), it is meant to be used inside an environment
 %      or a group.
@@ -355,7 +362,7 @@
 %          Usage: |Albert~\bsc{Camus}|.
 %
 %    \item Commands |\primo|, |\secundo|, |\tertio| and |\quarto|
-%          print 1\up{o}, 2\up{o}, 3\up{o}, 4\up{o}.
+%          print 1\up{o}, 2\up{o}, 3\up{o}, 4\up{o}.\linebreak
 %          |\FrenchEnumerate{6}| prints 6\up{o}.
 %    \item Abbreviations for ``Numéro(s)’’ and ``numéro(s)’’
 %          (N\up{o} N\up{os} n\up{o} and n\up{os}~) are obtained
@@ -403,7 +410,7 @@
 %    Customisation of \frenchb{} relies on command \fbsetup{}
 %    (formerly called |\frenchbsetup{}|, the latter name will be kept
 %    for ever to ensure backwards compatibility), options are entered
-%    using the \file{keyval} syntax.
+%    using the \file{l3keys} syntax.
 %    The command \fbsetup{} is to appear in the preamble only
 %    (after loading \babel).
 %
@@ -418,7 +425,7 @@
 %
 %    \fbsetup{ShowOptions} prints all available options to
 %    the \file{.log} file, it is just meant as a remainder of the
-%    list of offered options.  As usual with \file{keyval} syntax,
+%    list of offered options.  As usual with \file{l3keys} syntax,
 %    boolean options (as \fbo{ShowOptions}) can be entered as
 %    \fbo{ShowOptions=true} or just \fbo{ShowOptions}, the
 %    \fbo{=true} part can be omitted.
@@ -453,9 +460,10 @@
 %      first paragraph of sections.  When French is the main language,
 %      this option applies to all languages.
 %
-%    \item [PartNameFull=false (true)]; when true, \frenchb{} numbers
-%      the title of |\part{}| commands as ``Première partie’’,
-%      ``Deuxième partie’’ and so on.  With some classes which
+%    \item [PartNameFull=false (true)]; when true (the default),
+%      \frenchb{} numbers the title of |\part{}| commands as
+%      ``Première partie’’, ``Deuxième partie’’ and so on.
+%      With some classes which
 %      change the |\part{}| command (AMS classes do so), you could
 %      get ``Première partie~1’’, ``Deuxième partie~2’’ in the toc;
 %      when this occurs, this option should be set to
@@ -506,9 +514,9 @@
 %      you had to set \fbo{ReduceListSpacing=false} to revert to the
 %      class settings which actually reduce list’s spacings even more
 %      than \frenchb! \fbo{StandardListSpacing=true} replaces
-%      \fbo{ReduceListSpacing=false}.}; \frenchb{} customises
+%      \fbo{ReduceListSpacing=false}.}; \frenchb{} usually customises
 %      the vertical spaces in the \env{list} environment, this affects
-%      all lists, including \env{itemize} \env{enumerate},
+%      all lists, including \env{itemize}, \env{enumerate},
 %      \env{description}, but also \env{abstract}, \env{quote},
 %      \env{quotation}, \env{verse}, etc. which are based on \env{list}.
 %      Setting this option to \fbo{true} reverts to the standard
@@ -552,12 +560,14 @@
 %           \cs{ding\{43\}} (\cs{textemdash}*)]\hfill
 %
 %    \item [StandardLists=true (false*)] forbids \frenchb{} to
-%      customise any kind of list.  Try the option \fbo{StandardLists}
-%      in case of conflicts with classes or packages that customise
+%      customise any kind of list.  The option \fbo{StandardLists=true}
+%      should be used in case of conflicts with classes or packages that
+%      customise
 %      lists too.  This option is just a shorthand setting all four
 %      options \fbo{StandardListSpacing=true},
-%      \fbo{StandardItemizeEnv=true}, \fbo{StandardEnumerateEnv=true}
-%      and \fbo{StandardItemLabels=true}.
+%      \fbo{StandardItemizeEnv=true},\linebreak
+%      \fbo{StandardEnumerateEnv=true} and
+%      \fbo{StandardItemLabels=true}.
 %
 %    \item [ListOldLayout=true (false)]; starting with version~2.6a,
 %      the layout of lists has changed regarding leftmargins’ sizes
@@ -576,9 +586,11 @@
 %      instance).
 %
 %    \item [AutoSpaceFootnotes=false (true*)]; by default \frenchb{}
-%      adds a thin space in the running text before the number or
-%      symbol calling the footnote.  Making this option \fbo{false}
-%      reverts to the standard setting (no space added).
+%      adds a (customisable) thin space in the running text before the
+%      number or symbol calling the footnote.  Making this option
+%      \fbo{false} reverts to the standard setting (no space added).
+%      The default definition of this thin space is:\\
+%      |\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}|
 %
 %    \item [AutoSpacePunctuation=false (true)]; in French, the user
 %      \hlabel{autospacepunctuation}
@@ -677,7 +689,7 @@
 %      always surrounded by « and », the next option is ineffective.
 %
 %    \item [InnerGuillSingle=true (false)];
-%      if \fbo{InnerGuillSingle=false} (default), inner quotations
+%      if \fbo{InnerGuillSingle=false} (the default), inner quotations
 %      entered with |\frquote{}| start with~\texttt{``} and end
 %      with~\texttt{’’}.
 %      If \fbo{InnerGuillSingle=true}, \texttt{\guilsinglleft} and
@@ -693,7 +705,7 @@
 %      |\npthousandsep| is defined as a non-breaking space (|~|)%
 %      \footnote{Actually without stretch nor shrink.} in French;
 %      when set to true, this option redefines |\npthousandsep|
-%      as a thin space (|\,|).
+%      as a thin space (|\FBthinspace|).
 %
 %    \item [SmallCapsFigTabCaptions=false (true*)]; when set to
 %      \fbo{false}, |\figurename| and |\tablename| will be printed in
@@ -702,8 +714,8 @@
 %      achieved by defining |\FBfigtabshape| as |\relax| before
 %      loading \frenchb{} (in a document class f.i.).
 %
-%    \item [CustomiseFigTabCaptions=false (true*)]; when \fbo{false}
-%      the default separator (colon) is used instead of
+%    \item [CustomiseFigTabCaptions=false (true*)]; when set to
+%     \fbo{false} the default separator (colon) is used instead of
 %      |\CaptionSeparator|.  Anyway, \frenchb{} tries hard to insert
 %      a proper space before it in French and warns if it fails to do
 %      so.
@@ -735,23 +747,23 @@
 %    in the order they appear in the \fbsetup{} command.
 %    Someone wishing that \frenchb{} leaves the layout of lists
 %    and footnotes untouched but caring for indentation of first
-%    paragraph of sections should choose\\
-%    \fbsetup{StandardLayout,IndentFirst} to get the expected
-%    layout.  The reverse order
-%    \fbsetup{IndentFirst,StandardLayout} would lead to option
-%    \fbo{IndentFirst} being overwritten by \fbo{StandardLayout}.
+%    paragraph of sections should choose
+%    \fbsetup{StandardLayout,IndentFirst}\par
+%    The reverse order \fbsetup{IndentFirst,StandardLayout}
+%    would lead to option \fbo{IndentFirst} being overwritten by
+%    \fbo{StandardLayout}.
 %
 %  \subsubsection{Caption names}
 %  \label{sssec-captions-name}
 %
-%    All caption names can easily be customised in French using the
-%    simplified syntax introduced by \babel~3.9, for instance
-%    |\def\frenchproofname{Preuve}| or
+%    {\sloppy All caption names can easily be customised in French
+%    using the simplified syntax introduced by \babel~3.9,
+%    for instance |\def\frenchproofname{Preuve}| or
 %    |\def\acadianproofname{Preuve}| for the \opt{acadian} dialect.
 %    The older syntax |\addto\captionsfrench{\def\proofname{Preuve}}|
 %    still works. Keep in mind that \emph{only} |french| can be used
 %    to redefine captions, even if \babel{}’s option was entered as
-%    |frenchb| or |francais|.
+%    |frenchb| or |francais|.\par}
 %
 %  \subsubsection{Figure and table captions}
 %  \label{sssec-captions-fig}
@@ -839,6 +851,13 @@
 %  \subsection{Changes}
 %  \label{ssec-changes}
 %
+%  \subsubsection*{What’s new in version 3.6?}
+%
+%    Version 3.6a no longer loads the \pkg{keyval} package, replaced by
+%    core LaTeX commands (\pkg{ltkeys}). The thin space added before
+%    footnote’s calls is now customisable (suggested by Thomas Savary),
+%    the command’s name is |\FBfnmarkspace|.
+%
 %  \subsubsection*{What’s new in version 3.5?}
 %
 %    Version 3.5a offers a new option \fbo{ListItemsAsPar}.  The default
@@ -864,7 +883,7 @@
 %    kerning was disabled for Type1 fonts since v3.1g (2015).
 %
 %    Version 3.5j also fixes a long standing bug affecting koma-script,
-%    \cls{memoir} et \cls{beamer} classes: redefintions of the caption
+%    \cls{memoir} and \cls{beamer} classes: redefintions of the caption
 %    separator (commands |\captionformat|, |\captiondelim|, etc.) are
 %    now taken into account properly.
 %
@@ -958,92 +977,6 @@
 %    three new commands |\frenchpartfirst|, |\frenchpartsecond| and
 %    |\frenchpartnameord|.
 %
-%  \subsubsection*{What’s new in version 3.2?}
-%
-%    Version 3.2g changes the default behaviour of |\frquote{}|
-%    with LuaTeX based engines, the output is now the same with
-%    all engines; to recover the former behaviour, add option
-%    \fbo{EveryLineGuill=open}.
-%
-%    The handling of footnotes has been redesigned for the
-%    \cls{beamer}, \cls{memoir} and koma-script classes.
-%    The layout of footnotes ``à la française’’ should be unchanged
-%    but footnotes’ customisations offered by these classes
-%    (i.e.\ font or color changes) are now available even when option
-%    \fbo{FrenchFootnotes} is \fbo{true}.
-%
-%    A long standing bug regarding the \pkg{xspace} package has been
-%    fixed: |\xspace| has been moved up from the internal command
-%    |\FB at fg| to |\fg|; |\frquote{}| now works properly when the
-%      \pkg{xspace} package is loaded.
-%
-%    Version 3.2b is the first one designed to work with LuaTeX
-%    v.~0.95 as included in TeXLive 2016 (LuaTeX’s new glue node
-%    structure is not compatible with previous versions).
-%
-%    \textbf{Warning to Lua(La)TeX users:} starting with version~3.2b
-%    the lua code included in \file{frenchb.lua} will \emph{not work}
-%    on older installations (TL2015 f.i.), so \frenchb{} reverts to
-%    active characters while handling high punctuation with LuaTeX
-%    engines older than 0.95!
-%    The best way to go is to upgrade to TL2016 or equivalent asap.
-%    Xe(La)TeX and pdf(La)TeX users can safely use \frenchb{} v.~3.2b
-%    and later on older installations too.
-%
-%    The internals of commands |\NoAutoSpacing|, |\ttfamilyFB|,
-%    |\rmfamilyFB| and |\sffamilyFB| have been completely redesigned
-%    in version~3.2c, they behave now consistently with all engines.
-%
-%  \subsubsection*{What’s new in version 3.1?}
-%
-%    New command |\frquote{}| meant to enter French quotations,
-%    especially long ones (spreading over several paragraphs) and/or
-%    embedded ones. see p.~\pageref{frquote} for details.
-%
-%  \subsubsection*{What’s new in version 3.0?}
-%
-%    Many deep changes lead me to step \frenchb’s version number
-%    to~3.0a:
-%    \begin{itemize}
-%    \item \babel{}~3.9 is required now to process
-%      \file{frenchb.ldf}, this change allows for cleaner definitions
-%      of dates and captions for the Unicode engines LuaTeX and
-%      XeTeX and also provides a simpler syntax for end-users, see
-%      section~\ref{sssec-captions-name}
-%      p.\pageref{sssec-captions-name}.
-%    \item \fbsetup{} options management has been completely
-%      reworked; two new options added.
-%    \item Canadian French didn’t work as a normal \babel’s dialect,
-%      it should now; btw. the French language should now be loaded
-%      as \opt{french}, \emph{not as} \opt{frenchb} or
-%      \opt{francais} and preferably as a \emph{global} option of
-%      |\documentclass|. Some tolerance still exists in v3.0, but
-%      do not rely on it.
-%    \item \frenchb{} no longer loads \file{frenchb.cfg}:
-%      customisation should definitely be done using \fbsetup{}
-%      options.
-%    \item Description lists labels are now indented; try setting
-%      |\descindentFB=0pt| (or |\listindentFB=0pt| for all lists)
-%      in the preamble if you don’t like it.
-%    \item The last but not least change affects the (recent)
-%      LuaTeX-based engines, (this means version 0.76 as included in
-%      TL2013 and up): active characters are no longer used in French
-%      for `high punctuation’%
-%      \footnote{The current \frenchb{} version requires LuaTeX
-%      v.~1.0.4 as included in TL2017, see above.}.
-%      Functionalities and user interface are unchanged.
-%
-%      Many thanks to Paul Isambert who provided the basis for the
-%      lua code (see his presentation at GUT’2010) and kindly
-%      reviewed my first drafts suggesting significant improvements.
-%
-%    \end{itemize}
-%
-%    Starting with version~3.0c, \frenchb{} no longer customises
-%    lists with the \cls{beamer} class and offers a new option
-%    (\fbo{INGuillSpace}) to follow French `Imprimerie Nationale’
-%    recommendations regarding quotes’ spacing.
-%
 % \StopEventually{}
 %
 % \changes{v2.6c}{2013/05/20}{Dummy file frenchb.cfg is no longer
@@ -1217,7 +1150,12 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \begin{macro}{\ifFBunicode}
+%    Check LaTeX2e version (support for \pkg{ltkeys} required).
+%    \begin{macrocode}
+\ifLaTeXe \NeedsTeXFormat{LaTeX2e}[2022/06/01] \fi
+%    \end{macrocode}
+%
+%\begin{macro}{\ifFBunicode}
 % \begin{macro}{\ifFBLuaTeX}
 % \begin{macro}{\ifFBXeTeX}
 %    French hyphenation patterns are now coded in Unicode, see file
@@ -1460,8 +1398,8 @@
 %
 % \begin{macro}{\FBsetspaces}
 %    This command makes it easy to fine tune |\FBguillspace|,
-%    |\FBcolonspace| and |\FBthinspace| in French (defaut) or
-%    independently in a French dialect using the optional argument.
+%    |\FBcolonspace| and\linebreak |\FBthinspace| in French (defaut)
+%    or independently in a French dialect using the optional argument.
 %    They are meant for LaTeX2e \emph{only} and can only be used
 %    in the preamble.
 %    Four mandatory arguments are expected besides the optional one:
@@ -1469,8 +1407,8 @@
 %    "thin", the last four are decimal numbers specifying
 %    \textit{width}, \textit{stretch} and \textit{shrink} relative to
 %    \textit{fontdimens}.\hlabel{FBsetspaces}
-%    For instance |\FBsetspaces[acadian]{colon}{0.5}{0}{0}| defines
-%    |\acadianFBcolonspace| as a thinspace which will be used for
+%    For \kern0pt instance |\FBsetspaces[acadian]{colon}{0.5}{0}{0}|
+%    defines |\acadianFBcolonspace| as a thinspace which will be used for
 %    the Acadian dialect only.  When used without optional argument or
 %    with argument `french’, the same command would tune the basic
 %    |\FBcolonspace| command.
@@ -1687,13 +1625,16 @@
              with this version of LuaTeX!}
   \fi
 %    \end{macrocode}
-%    The next command will be used in the first call of |\extrasfrench|
-%    to convert |\FBcolonspace|, |\FBthinspace| and |\FBguillspace|
-%    into a table usable by LuaTeX.  This way, any customisation done
-%    in the preamble (by \fbsetup{}, redefinitions or |\FBsetspaces|
-%    commands) are taken into account.  Values not explicitly set for
-%    Acadian by |\FBsetspaces[|\textit{acadian}|]| commands are copied
-%    from the French ones.
+%
+%    {\sloppy The next command will be used in the first call of
+%    |\extrasfrench| to convert |\FBcolonspace|, |\FBthinspace| and
+%    |\FBguillspace| into a table usable by LuaTeX.
+%    This way, any customisation done in the preamble (by \fbsetup{},
+%    redefinitions or |\FBsetspaces| commands) are taken into account.
+%    Values not explicitly set for Acadian by
+%    |\FBsetspaces[|\textit{acadian}|]| commands are copied from the
+%    French ones.\par}
+
 %    In case parsing by the Lua function |FBget_glue| (defined in file
 %    \file{frenchb.lua}) fails due to unexpected syntax in |\FB...space|
 %    the table remains unchanged and a warning is issued.
@@ -2744,13 +2685,13 @@
 %    tex4ht, pointed out by MPG.}
 %
 %    {\sloppypar |\autospace at beforeFDP| and |\noautospace at beforeFDP| are
-%    internal commands.  |\autospace at beforeFDP| defines |\FDP at thinspace|
-%    and |\FDP at colonspace| as non-breaking spaces and sets LuaTeX
-%    attribute |\FB at addDPspace| to 1 (true), while
-%    |\noautospace at beforeFDP| lets these spaces empty and sets flag
+%    internal commands.  |\autospace at beforeFDP| defines commands
+%    |\FDP at thinspace| and |\FDP at colonspace| as non-breaking spaces and
+%    sets LuaTeX attribute |\FB at addDPspace| to 1 (true), while
+%    |\noautospace at beforeFDP| makes them no-op and sets flag
 %    |\FB at addDPspace| to 0 (false).  User commands |\AutoSpaceBeforeFDP|
 %    and |\NoAutoSpaceBeforeFDP| do the same and take care of the flag
-%    |\ifFBAutoSpacePunctuation| in \LaTeX{}.\par}
+%    |\ifFBAutoSpacePunctuation| in LaTeX{}.\par}
 %
 %    Set the default now for Plain (done later for LaTeX).
 %    \begin{macrocode}
@@ -3600,64 +3541,41 @@
   \providecommand*{\textbackslash}{{\char"005C}}
   \providecommand*{\textasciicircum}{{\char"005E}}
   \providecommand*{\textasciitilde}{{\char"007E}}
-  \newcommand*{\FB at degre}{°}
+  \DeclareRobustCommand*{\degre}{°}
 \else
-  \ifLaTeXe
-    \newcommand*{\FB at degre}{\r{}}
-  \fi
+  \DeclareRobustCommand*{\degre}{\textdegree}
 \fi
 \DeclareRobustCommand*{\boi}{\textbackslash}
 \DeclareRobustCommand*{\circonflexe}{\textasciicircum}
 \DeclareRobustCommand*{\tild}{\textasciitilde}
-\DeclareRobustCommand*{\degre}{%
-  \texorpdfstring{\FB at degre}{\textdegree}}
 \newcommand*{\at}{@}
 %    \end{macrocode}
 %
 % \begin{macro}{\degres}
 %    We now define a macro |\degres| for typesetting the abbreviation
-%    for `degrees’ (as in `degrees Celsius’).  As the bounding box of
-%    the character `degree’ has \emph{very} different widths in CM/EC
-%    and PostScript fonts, we fix the width of the bounding box of
-%    |\degres| to 0.3\,em, this lets the symbol `degree’ stick to the
-%    preceding (e.g., |45\degres|) or following character
-%    (e.g., |20~\degres C|). |\degres| works in math-mode (angles).
+%    for `degrees’ (as in `°C’ or `°K’) in text fonts which also works
+%    in math mode for angles.
 %
 % \changes{v2.6e}{2013/07/06}{Refrain from redefining \cs{textdegree}
 %    from latin1.def, applemac.def, etc. as \cs{degres} because it
 %    loops in hyperref’s bookmarks.  Pointed out by Eddy Flas on fctt.}
 %
-%    If \TeX{} Companion fonts are available (\file{textcomp.sty}),
-%    we pick up |\textdegree| from them instead of emulating `degrees’
-%    from the |\r{}| accent.  Otherwise we advise the user (once only)
-%    to use TS1-encoding.
-%
 % \changes{v2.1c}{2008/04/29}{Provide a temporary definition (hyperref
 %    safe) of \cs{degres} in case it has to be expanded in the preamble
 %    (by beamer’s \cs{title} command for instance).}
 %
+% \changes{v3.6a}{2024/05/20}{Simplify \cs{degres} definition for text
+%    and math mode: \cs{textdegree} always defined (TS1) since 2019.}
+%
 %    \begin{macrocode}
 \DeclareRobustCommand*{\degres}{\degre}
 \ifLaTeXe
   \AtBeginDocument{%
-    \@ifpackageloaded{fontspec}{}{%
-      \ifdefined\DeclareEncodingSubset
-        \DeclareRobustCommand*{\degres}{%
+    \@ifpackageloaded{fontspec}{}%
+        {\DeclareRobustCommand*{\degres}{%
           \texorpdfstring{\hbox{\UseTextSymbol{TS1}{\textdegree}}}%
                          {\textdegree}}%
-      \else
-        \def\Warning at degree@TSone{\FBWarning
-             {Degrees would look better in TS1-encoding:%
-              \MessageBreak add \protect
-              \usepackage{textcomp} to the preamble.%
-              \MessageBreak Degrees used}}
-        \DeclareRobustCommand*{\degres}{%
-          \texorpdfstring{\hbox to 0.3em{\hss\degre\hss}%
-                          \Warning at degree@TSone
-                          \global\let\Warning at degree@TSone\relax}%
-                          {\textdegree}}%
-      \fi
-    }%
+        }%
   }
 \fi
 %    \end{macrocode}
@@ -4056,9 +3974,10 @@
 %    ua-thesis.cls… change it).
 %    If they are identical, \frenchb{} just adds a hook called
 %    |\FBCaption at Separator| to |\@makecaption|; |\FBCaption at Separator|
-%    defaults to `:~’ as in the standard |\@makecaption| and will be
-%    changed to `~:~’ in French `AtBeginDocument’; it can be also set to
-%    |\CaptionSeparator| (` -- ’) using \fbo{CustomiseFigTabCaptions}.
+%    defaults to `:~’ as in the standard definition of |\@makecaption|
+%    and will be changed to `~:~’ in French `AtBeginDocument’;
+%    it can be also set to |\CaptionSeparator| (` -- ’) using
+%    \fbo{CustomiseFigTabCaptions}.
 %
 % \changes{v2.6c}{2013/05/18}{Former \cs{CaptionSeparator}
 %    has been renamed as \cs{FBCaption at Separator};
@@ -4076,7 +3995,7 @@
 %    active).
 %    \begin{macrocode}
 \bgroup
-  \catcode`:=12 \catcode`>=12 \relax
+  \catcode`: =12 \catcode`> =12 \relax
   \long\gdef\STD at makecaption#1#2{%
     \vskip\abovecaptionskip
     \sbox\@tempboxa{#1: #2}%
@@ -4256,7 +4175,7 @@
 %    with XeTeX and LuaTeX.
 %
 % \changes{v2.0}{2006/11/06}{Added special case for LY1 encoding,
-%    see  bug report from Bruno Voisin (2004/05/18).}
+%    see bug report from Bruno Voisin (2004/05/18).}
 %
 % \changes{v2.5f}{2011/06/18}{Unicode fonts also provide a ready made
 %    character for \cs{textellipsis}, let’s just use it!
@@ -4345,7 +4264,7 @@
 }
 %    \end{macrocode}
 %
-%  \subsection{Setup options: keyval stuff}
+%  \subsection{Setup options: key/value stuff (ltkeys)}
 %  \label{ssec-keyval}
 %
 % \changes{v2.0}{2006/11/06}{New command \cs{frenchbsetup} added
@@ -4355,125 +4274,34 @@
 %    reorganised, now \cs{babel at save} and\cs{babel at savevariable} are
 %    usable for French.}
 %
-%    All setup options are handled by command \fbsetup{} using the
-%    keyval syntax.  A list of flags is defined and set to a default
-%    value which will possibly be changed `AtEndOfPackage’ if French is
-%    the main language.  After this, \fbsetup{} eventually modifies the
-%    preset values of these flags.
+% \changes{v3.6a}{2024/05/16}{Internal `ltkeys’ replaces package
+%    `keyval’ for options’ management.}
 %
-%    {\sloppypar Option processing can occur either in \fbsetup{}, but
-%    \emph{only for options explicitly set} by \fbsetup{}, or
+%    All setup options are handled by command \fbsetup{} based on
+%    the \file{ltkeys}’ |\SetKeys{}| command.  A list of flags is
+%    defined beforehand and set to default values which will possibly
+%    be changed `AtEndOfPackage’ in case French is the main language.
+%    After this, \fbsetup{} eventually modifies the preset values of
+%    these flags.
+%
+%    {\sloppypar Some options processing occurs in \fbsetup{},
+%    \emph{only for options explicitly set} by \fbsetup{}, the rest
 %    `AtBeginDocument’; any option affecting |\extrasfrench{}|
-%    \emph{must} be processed by \fbsetup{}: when French is the main
-%    language, |\extrasfrench{}| is executed by \babel{} when it
-%    switches the main language and this occurs \emph{before} reading
+%    \emph{must} be immediatelt processed by \fbsetup{}: when French is
+%    the main language, |\extrasfrench{}| is executed by \babel{} when
+%    it switches the main language and this occurs \emph{before} reading
 %    the stuff postponed by \frenchb{} `AtBeginDocument’.  Reexecuting
-%    |\extrasfrench{}| is an option which was used up to v2.6h, it has
-%    been dropped in v3.0a because of its side-effects (f.i.\
-%    |\babel at save| and |\babel at savevariable| did not work for
+%    |\extrasfrench{}| is not an option because of its side-effects
+%    (f.i.\ |\babel at save| and |\babel at savevariable| did not work for
 %    French).\par}
 %
-% \begin{macro}{\frenchsetup}
-%    Let’s now define this command which reads and sets the options
-%    to be processed either immediately (i.e.\ just after setting the
-%    key) or later (at |\begin{document}|) by |\FBprocess at options|.
-%    \fbsetup{} can only be called in the preamble.
+%    We first define a collection of conditionals and set  their
+%    defaults (true or false).
 %
-% \changes{v2.0c}{2007/06/25}{Option ThinSpaceInFrenchNumbers added.}
-%
-% \changes{v2.0d}{2007/07/15}{Options og and fg changed: limit
-%    the definition to French so that quote characters can be used
-%    in German.}
-%
-% \changes{v2.0e}{2007/10/05}{New option: StandardLists.}
-%
-% \changes{v2.0f}{2008/03/23}{Two typos corrected in
-%    option StandardLists.}
-%
-% \changes{v2.0f}{2008/03/23}{StandardLayout option had no
-%    effect on lists.  Test moved to \cs{FBprocess at options}.}
-%
-% \changes{v2.0g}{2008/03/23}{Revert previous change to
-%    StandardLayout.  This option must set the three flags
-%    \cs{FBReduceListSpacingfalse}, \cs{FBCompactItemizefalse},
-%    and \cs{FBStandardItemLabeltrue} instead of
-%    \cs{FBStandardListstrue}, so that later options can still
-%    change their value before executing \cs{FBprocess at options}.
-%    Same thing for option StandardLists.}
-%
-% \changes{v2.1a}{2008/03/24}{New option: FrenchSuperscripts
-%    to define \cs{up} as \cs{fup} or as \cs{textsuperscript}.}
-%
-% \changes{v2.1a}{2008/03/30}{New option: LowercaseSuperscripts.}
-%
-% \changes{v2.2a}{2008/05/08}{The global layout of the document is
-%    no longer changed when frenchb is not the last option of babel
-%    (\cs{bbl at main@language}).  Suggested by Ulrike Fischer.}
-%
-% \changes{v2.2a}{2008/05/08}{Default values of flags changed:
-%    default now means `StandardLayout’, they will be changed to
-%    `FrenchLayout’ AtEndOfPackage only if french is
-%    \cs{bbl at main@language}.}
-%
-% \changes{v2.2a}{2008/05/08}{When frenchb is babel’s last option,
-%    French becomes the document’s main language, so
-%    GlobalLayoutFrench applies.}
-%
-% \changes{v2.4a}{2009/11/23}{New option SuppressWarning.}
-%
-% \changes{v2.6a}{2013/01/30}{New options ListOldLayout,
-%    StandardItemizeEnv and StandardEnumerateEnv (CompactItemize is
-%    deprecated).}
-%
-% \changes{v3.0a}{2014/02/28}{New options OldFigTabCaptions and
-%    CustomiseFigTabCaptions.}
-%
-% \changes{v3.0c}{2014/04/18}{New option INGuillSpace.}
-%
-% \changes{v3.1a}{2014/05/20}{New options InnerGuillSingle,
-%    EveryParGuill and EveryLineGuill to control \cs{frquote}.}
-%
-% \changes{v3.1b}{2014/09/15}{New option SmallCapsFigTabCaptions.}
-%
-% \changes{v3.1e}{2015/04/10}{Corrected typo: SmallCapsFigTabcaptions
-%    instead of SmallCapsFigTabCaptions.  Pointed out by Céline
-%    Chevalier.}
-%
-% \changes{v3.1g}{2015/05/10}{PartNameFull now just sets the flag,
-%    nothing to add to \cs{captionsfrench} when false.}
-%
-% \changes{v3.3a}{2017/04/30}{\cs{frenchbsetup} is now an alias for
-%    \cs{frenchsetup}.}
-%
-% \changes{v3.3a}{2017/04/30}{Options INGuillSpace, ThinColonSpace no
-%    longer delayed AtBeginDocument.}
-%
-% \changes{v3.5a}{2018/07/04}{New option ListItemsAsPar for displaying
-%    lists’ items ``as paragraphs’’.}
-%
-% \changes{v3.5d}{2019/01/24}{ReduceListSpacing option depreciated: see
-%    StandardListSpacing.}
-%
 %    \begin{macrocode}
-\newcommand*{\frenchsetup}[1]{%
-  \setkeys{FB}{#1}%
-}%
-\@onlypreamble\frenchsetup
-%    \end{macrocode}
-%    Keep the former name |\frenchbsetup| working for compatibility.
-%    \begin{macrocode}
-\let\frenchbsetup\frenchsetup
-\@onlypreamble\frenchbsetup
-%    \end{macrocode}
-%
-%    We define a collection of conditionals with their defaults
-%    (true or false).
-%
-%    \begin{macrocode}
 \newif\ifFBShowOptions
 \newif\ifFBStandardLayout           \FBStandardLayouttrue
 \newif\ifFBGlobalLayoutFrench       \FBGlobalLayoutFrenchtrue
-\newif\ifFBReduceListSpacing
 \newif\ifFBStandardListSpacing      \FBStandardListSpacingtrue
 \newif\ifFBListOldLayout
 \newif\ifFBListItemsAsPar
@@ -4498,25 +4326,6 @@
 \newif\ifFBINGuillSpace
 %    \end{macrocode}
 %
-%    The defaults values of these flags have been choosen so that
-%    \frenchb{} does not change anything regarding the global layout.
-%    |\bbl at main@language|, set by the last option of \babel, controls
-%    the global layout of the document.  `AtEndOfPackage’ we check the
-%    main language in |\bbl at main@language|; if it is French (or a
-%    French dialect) the values of some flags have to be changed to
-%    ensure a French looking layout for the whole document (even in
-%    parts written in languages other than French); the end-user will
-%    then be able to customise the values of all these flags with
-%    \fbsetup{}.
-%
-% \changes{v2.5b}{2010/10/30}{Do not use the
-%    test \cs{iflanguage}\{french\} to check whether French is the
-%    main language or not, as it might be be erroneously positive
-%    when English is the main language and no hyphenation patterns
-%    are available for French.
-%    In this case \cs{l at french} and \cs{l at english} are 0.
-%    Pointed out by Günter Milde.}
-%
 % \changes{v3.1g}{2015/05/10}{Bug fix for koma-scripts classes:
 %    a spurious dot was added by the \cs{partformat} command.}
 %
@@ -4540,6 +4349,14 @@
 \fi
 %    \end{macrocode}
 %
+% \changes{v2.5b}{2010/10/30}{Do not use the
+%    test \cs{iflanguage}\{french\} to check whether French is the
+%    main language or not, as it might be be erroneously positive
+%    when English is the main language and no hyphenation patterns
+%    are available for French.
+%    In this case \cs{l at french} and \cs{l at english} are 0.
+%    Pointed out by Günter Milde.}
+%
 % \changes{v3.0c}{2014/03/30}{No list customisation when beamer
 %    class is loaded.}
 %
@@ -4553,6 +4370,13 @@
 %    options can no longer be toggled when French is not the main
 %    language.}
 %
+%    The defaults values of these flags are choosen so that
+%    \frenchb{} does not change anything regarding the global layout.
+%    Some of them must be toogled when French (or a French dialect) is
+%    the main language. The latter (last option of \babel, stored in
+%    |\bbl at main@language|) will be known `AtEndOfPackage’.
+%    So we postpone the |\bbl at main@language| checking until then.
+%
 %    Our list customisation conflicts with the \cls{beamer} class and
 %    with the \pkg{beamerarticle} package.  The patch provided in
 %    \pkg{beamerbasecompatibility} solves the conflict except in case
@@ -4600,227 +4424,326 @@
     \FBAutoSpaceFootnotestrue
     \FBCustomiseFigTabCaptionstrue
   \fi
+}
 %    \end{macrocode}
-%    \frenchb{} being an option of \babel, it cannot load a package
-%    (\pkg{keyval}) while \file{french.ldf} is read, so we defer the
-%    loading of \file{keyval} and the options setup at the end of
-%    \babel’s loading.
+%
+% \begin{macro}{\frenchsetup}
+%    Let’s define the keys to be used in \fbsetup{}.
 %    \begin{macrocode}
-  \RequirePackage{keyval}%
-  \define at key{FB}{ShowOptions}[true]%
-          {\csname FBShowOptions#1\endcsname}%
+\DeclareKeys[FBsetup]
+  {
+    ShowOptions.if               = FBShowOptions                        ,
+    StandardLayout.default:n     = {true}                               ,
+    StandardLayout.code          = \FBStandardLayout at setup{#1}          ,
+    GlobalLayoutFrench.default:n = {true}                               ,
+    GlobalLayoutFrench.code      = \FBGlobalLayout at setup{#1}            ,
+    StandardListSpacing.if       = FBStandardListSpacing                ,
+    ReduceListSpacing.ifnot      = FBStandardListSpacing                ,
+    ListOldLayout.default:n      = {true}                               ,
+    ListOldLayout.code           = \FBListOldLayout at setup{#1}           ,
+    CompactItemize.default:n     = {true}                               ,
+    CompactItemize.code          = \FBCompactItemize at setup{#1}          ,
+    StandardItemizeEnv.if        = FBStandardItemizeEnv                 ,
+    StandardEnumerateEnv.if      = FBStandardEnumerateEnv               ,
+    StandardItemLabels.if        = FBStandardItemLabels                 ,
+    ItemLabels.store             = \FrenchLabelItem                     ,
+    ItemLabeli.store             = \Frlabelitemi                        ,
+    ItemLabelii.store            = \Frlabelitemii                       ,
+    ItemLabeliii.store           = \Frlabelitemiii                      ,
+    ItemLabeliv.store            = \Frlabelitemiv                       ,
+    StandardLists.default:n      = {true}                               ,
+    StandardLists.code           = \FBStandardLists at setup{#1}           ,
+    ListItemsAsPar.if            = FBListItemsAsPar                     ,
+    IndentFirst.if               = FBIndentFirst                        ,
+    FrenchFootnotes.if           = FBFrenchFootnotes                    ,
+    AutoSpaceFootnotes.if        = FBAutoSpaceFootnotes                 ,
+    AutoSpacePunctuation.if      = FBAutoSpacePunctuation               ,
+    OriginalTypewriter.if        = FBOriginalTypewriter                 ,
+    ThinColonSpace.default:n     = {true}                               ,
+    ThinColonSpace.code          = \FBThinColonSpace at setup{#1}          ,
+    ThinSpaceInFrenchNumbers.if  = FBThinSpaceInFrenchNumbers           ,
+    FrenchSuperscripts.if        = FBFrenchSuperscripts                 ,
+    LowercaseSuperscripts.if     = FBLowercaseSuperscripts              ,
+    PartNameFull.if              = FBPartNameFull                       ,
+    CustomiseFigTabCaptions.if   = FBCustomiseFigTabCaptions            ,
+    OldFigTabCaptions.default:n  = {true}                               ,
+    OldFigTabCaptions.code       = \FBOldFigTabCaptions at setup{#1}       ,
+    SmallCapsFigTabCaptions.default:n = {true}                          ,
+    SmallCapsFigTabCaptions.code = \FBSmallCapsFigTabCaptions at setup{#1} ,
+    SuppressWarning.default:n    = {true}                               ,
+    SuppressWarning.code         = \FBSuppressWarning at setup{#1}         ,
+    INGuillSpace.default:n       = {true}                               ,
+    INGuillSpace.code            = \FBINGuillSpace at setup{#1}            ,
+    InnerGuillSingle.if          = FBInnerGuillSingle                   ,
+    EveryParGuill.default:n      = {open}                               ,
+    EveryParGuill.code           = \FBEveryParGuill at setup{#1}           ,
+    EveryLineGuill.default:n     = {open}                               ,
+    EveryLineGuill.code          = \FBEveryLineGuill at setup{#1}          ,
+    UnicodeNoBreakSpaces.default:n = {true}                             ,
+    UnicodeNoBreakSpaces.code    = \FBUnicodeNoBreakSpaces at setup{#1}    ,
+    og.code                      = \FBog at setup{#1}                      ,
+    fg.code                      = \FBfg at setup{#1}                      ,
+}
 %    \end{macrocode}
-%    The next two keys can only be toggled when French is the main
-%    language.
+%
+%    Let’s now define this command which reads and sets the options
+%    to be processed either immediately (i.e.\ just after setting the
+%    key) or later (at |\begin{document}|) by |\FBprocess at options|.
+%    \fbsetup{} can only be called in the preamble.
+%
+% \changes{v2.0c}{2007/06/25}{Option ThinSpaceInFrenchNumbers added.}
+%
+% \changes{v2.0d}{2007/07/15}{Options og and fg changed: limit
+%    the definition to French so that quote characters can be used
+%    in German.}
+%
+% \changes{v2.0e}{2007/10/05}{New option: StandardLists.}
+%
+% \changes{v2.0f}{2008/03/23}{Two typos corrected in
+%    option StandardLists.}
+%
+% \changes{v2.0f}{2008/03/23}{StandardLayout option had no
+%    effect on lists.  Test moved to \cs{FBprocess at options}.}
+%
+% \changes{v2.0g}{2008/03/23}{Revert previous change to
+%    StandardLayout.  This option must set the three flags
+%    \cs{FBReduceListSpacingfalse}, \cs{FBCompactItemizefalse},
+%    and \cs{FBStandardItemLabeltrue} instead of
+%    \cs{FBStandardListstrue}, so that later options can still
+%    change their value before executing \cs{FBprocess at options}.
+%    Same thing for option StandardLists.}
+%
+% \changes{v2.1a}{2008/03/24}{New option: FrenchSuperscripts
+%    to define \cs{up} as \cs{fup} or as \cs{textsuperscript}.}
+%
+% \changes{v2.1a}{2008/03/30}{New option: LowercaseSuperscripts.}
+%
+% \changes{v2.2a}{2008/05/08}{The global layout of the document is
+%    no longer changed when frenchb is not the last option of babel
+%    (\cs{bbl at main@language}).  Suggested by Ulrike Fischer.}
+%
+% \changes{v2.2a}{2008/05/08}{Default values of flags changed:
+%    default now means `StandardLayout’, they will be changed to
+%    `FrenchLayout’ AtEndOfPackage only if french is
+%    \cs{bbl at main@language}.}
+%
+% \changes{v2.2a}{2008/05/08}{When frenchb is babel’s last option,
+%    French becomes the document’s main language, so
+%    GlobalLayoutFrench applies.}
+%
+% \changes{v2.4a}{2009/11/23}{New option SuppressWarning.}
+%
+% \changes{v2.6a}{2013/01/30}{New options ListOldLayout,
+%    StandardItemizeEnv and StandardEnumerateEnv (CompactItemize is
+%    deprecated).}
+%
+% \changes{v3.0a}{2014/02/28}{New options OldFigTabCaptions and
+%    CustomiseFigTabCaptions.}
+%
+% \changes{v3.0c}{2014/04/18}{New option INGuillSpace.}
+%
+% \changes{v3.1a}{2014/05/20}{New options InnerGuillSingle,
+%    EveryParGuill and EveryLineGuill to control \cs{frquote}.}
+%
+% \changes{v3.1b}{2014/09/15}{New option SmallCapsFigTabCaptions.}
+%
+% \changes{v3.1e}{2015/04/10}{Corrected typo: SmallCapsFigTabcaptions
+%    instead of SmallCapsFigTabCaptions.  Pointed out by Céline
+%    Chevalier.}
+%
+% \changes{v3.1g}{2015/05/10}{PartNameFull now just sets the flag,
+%    nothing to add to \cs{captionsfrench} when false.}
+%
+% \changes{v3.3a}{2017/04/30}{\cs{frenchbsetup} is now an alias for
+%    \cs{frenchsetup}.}
+%
+% \changes{v3.3a}{2017/04/30}{Options INGuillSpace, ThinColonSpace no
+%    longer delayed AtBeginDocument.}
+%
+% \changes{v3.5a}{2018/07/04}{New option ListItemsAsPar for displaying
+%    lists’ items ``as paragraphs’’.}
+%
+% \changes{v3.5d}{2019/01/24}{ReduceListSpacing option depreciated: see
+%    StandardListSpacing.}
+%
 %    \begin{macrocode}
-  \define at key{FB}{StandardLayout}[true]%
-          {\ifFB at mainlanguage@FR
-             \csname FBStandardLayout#1\endcsname
-           \else
-             \PackageWarning{french.ldf}%
-               {Option `StandardLayout' skipped:\MessageBreak
-                French is *not* babel's last option.\MessageBreak
-                Reported}%
-           \fi
-           \ifFBStandardLayout
-             \FBStandardListSpacingtrue
-             \FBStandardItemizeEnvtrue
-             \FBStandardItemLabelstrue
-             \FBStandardEnumerateEnvtrue
-             \FBIndentFirstfalse
-             \FBFrenchFootnotesfalse
-             \FBAutoSpaceFootnotesfalse
-           \else
-             \FBStandardListSpacingfalse
-             \FBStandardItemizeEnvfalse
-             \FBStandardItemLabelsfalse
-             \FBStandardEnumerateEnvfalse
-             \FBIndentFirsttrue
-             \FBFrenchFootnotestrue
-             \FBAutoSpaceFootnotestrue
-           \fi}%
-  \define at key{FB}{GlobalLayoutFrench}[true]%
-          {\ifFB at mainlanguage@FR
-            \csname FBGlobalLayoutFrench#1\endcsname
-           \else
-             \PackageWarning{french.ldf}%
-               {Option `GlobalLayoutFrench' skipped:\MessageBreak
-                French is *not* babel's last option.\MessageBreak
-                Reported}%
-           \fi}%
+\newcommand*{\frenchsetup}[1]{%
+  \SetKeys[FBsetup]{#1}%
+}%
+\@onlypreamble\frenchsetup
 %    \end{macrocode}
-%    If this key is set to \fbo{true} when French is the main language,
-%    nothing to do: all flags keep their default value.
-%    If this key is set to \fbo{false}, nothing to do either:
-%    |\babel at save| will do the job at every language’s switch.
+%    Keep the former name |\frenchbsetup| working for compatibility.
 %    \begin{macrocode}
-  \define at key{FB}{ReduceListSpacing}[true]%
-          {\csname FBReduceListSpacing#1\endcsname
-           \ifFBReduceListSpacing \FBStandardListSpacingfalse
-           \else \FBStandardListSpacingtrue\fi
-           }%
-  \define at key{FB}{StandardListSpacing}[true]%
-          {\csname FBStandardListSpacing#1\endcsname}%
-  \define at key{FB}{ListOldLayout}[true]%
-          {\csname FBListOldLayout#1\endcsname
-           \ifFBListOldLayout
-             \FBStandardEnumerateEnvtrue
-             \renewcommand*{\FrenchLabelItem}{\textendash}%
-           \fi}%
-  \define at key{FB}{CompactItemize}[true]%
-          {\csname FBCompactItemize#1\endcsname
-           \ifFBCompactItemize
-             \FBStandardItemizeEnvfalse
-             \FBStandardEnumerateEnvfalse
-           \else
-             \FBStandardItemizeEnvtrue
-             \FBStandardEnumerateEnvtrue
-           \fi}%
-  \define at key{FB}{StandardItemizeEnv}[true]%
-          {\csname FBStandardItemizeEnv#1\endcsname}%
-  \define at key{FB}{StandardEnumerateEnv}[true]%
-          {\csname FBStandardEnumerateEnv#1\endcsname}%
-  \define at key{FB}{StandardItemLabels}[true]%
-          {\csname FBStandardItemLabels#1\endcsname}%
-  \define at key{FB}{ItemLabels}%
-          {\renewcommand*{\FrenchLabelItem}{#1}}%
-  \define at key{FB}{ItemLabeli}%
-          {\renewcommand*{\Frlabelitemi}{#1}}%
-  \define at key{FB}{ItemLabelii}%
-          {\renewcommand*{\Frlabelitemii}{#1}}%
-  \define at key{FB}{ItemLabeliii}%
-          {\renewcommand*{\Frlabelitemiii}{#1}}%
-  \define at key{FB}{ItemLabeliv}%
-          {\renewcommand*{\Frlabelitemiv}{#1}}%
-  \define at key{FB}{StandardLists}[true]%
-          {\csname FBStandardLists#1\endcsname
-           \ifFBStandardLists
-             \FBStandardListSpacingtrue
-             \FBStandardItemizeEnvtrue
-             \FBStandardEnumerateEnvtrue
-             \FBStandardItemLabelstrue
-           \else
-             \FBStandardListSpacingfalse
-             \FBStandardItemizeEnvfalse
-             \FBStandardEnumerateEnvfalse
-             \FBStandardItemLabelsfalse
-           \fi}%
-  \define at key{FB}{ListItemsAsPar}[true]%
-          {\csname FBListItemsAsPar#1\endcsname}
-  \define at key{FB}{IndentFirst}[true]%
-          {\csname FBIndentFirst#1\endcsname}%
-  \define at key{FB}{FrenchFootnotes}[true]%
-          {\csname FBFrenchFootnotes#1\endcsname}%
-  \define at key{FB}{AutoSpaceFootnotes}[true]%
-          {\csname FBAutoSpaceFootnotes#1\endcsname}%
-  \define at key{FB}{AutoSpacePunctuation}[true]%
-          {\csname FBAutoSpacePunctuation#1\endcsname}%
-  \define at key{FB}{OriginalTypewriter}[true]%
-          {\csname FBOriginalTypewriter#1\endcsname}%
-  \define at key{FB}{ThinColonSpace}[true]%
-          {\csname FBThinColonSpace#1\endcsname
-           \ifFBThinColonSpace
-             \renewcommand*{\FBcolonspace}{\FBthinspace}%
-           \fi}%
-  \define at key{FB}{ThinSpaceInFrenchNumbers}[true]%
-          {\csname FBThinSpaceInFrenchNumbers#1\endcsname}%
-  \define at key{FB}{FrenchSuperscripts}[true]%
-          {\csname FBFrenchSuperscripts#1\endcsname}
-  \define at key{FB}{LowercaseSuperscripts}[true]%
-          {\csname FBLowercaseSuperscripts#1\endcsname}
-  \define at key{FB}{PartNameFull}[true]%
-          {\csname FBPartNameFull#1\endcsname}%
-  \define at key{FB}{CustomiseFigTabCaptions}[true]%
-          {\csname FBCustomiseFigTabCaptions#1\endcsname}%
-  \define at key{FB}{OldFigTabCaptions}[true]%
-          {\csname FBOldFigTabCaptions#1\endcsname
-           \ifFBOldFigTabCaptions
-             \def\FB at capsep@fix{\babel at save\FBCaption at Separator
-                    \def\FBCaption at Separator{\CaptionSeparator}}%
+\let\frenchbsetup\frenchsetup
+\@onlypreamble\frenchbsetup
+%    \end{macrocode}
+%
+%    The following commands, defined with property |.code| in
+%    |DeclareKeys{}|, execute some post-treatment required to
+%    immediately take the flags value into account.
+%    \begin{macrocode}
+\newcommand*{\FBStandardLayout at setup}[1]%
+  {\ifFB at mainlanguage@FR
+     \csname FBStandardLayout#1\endcsname
+   \else
+     \PackageWarning{french.ldf}%
+         {Option `StandardLayout' skipped:\MessageBreak
+          French is *not* babel's last option.\MessageBreak
+          Reported}%
+   \fi
+   \ifFBStandardLayout
+     \FBStandardListSpacingtrue
+     \FBStandardItemizeEnvtrue
+     \FBStandardItemLabelstrue
+     \FBStandardEnumerateEnvtrue
+     \FBIndentFirstfalse
+     \FBFrenchFootnotesfalse
+     \FBAutoSpaceFootnotesfalse
+   \else
+     \FBStandardListSpacingfalse
+     \FBStandardItemizeEnvfalse
+     \FBStandardItemLabelsfalse
+     \FBStandardEnumerateEnvfalse
+     \FBIndentFirsttrue
+     \FBFrenchFootnotestrue
+     \FBAutoSpaceFootnotestrue
+   \fi
+  }
+\newcommand*{\FBGlobalLayout at setup}[1]%
+  {\ifFB at mainlanguage@FR
+     \csname FBGlobalLayoutFrench#1\endcsname
+   \else
+     \PackageWarning{french.ldf}%
+       {Option `GlobalLayoutFrench' skipped:\MessageBreak
+        French is *not* babel's last option.\MessageBreak
+        Reported}%
+   \fi
+  }
+\newcommand*{\FB at ListOldLayout@setup}[1]%
+  {\csname FBListOldLayout#1\endcsname
+   \ifFBListOldLayout
+     \FBStandardEnumerateEnvtrue
+     \renewcommand*{\FrenchLabelItem}{\textendash}%
+   \fi
+  }
+\newcommand*{\FB at CompactItemize@setup}[1]%
+  {\csname FBCompactItemize#1\endcsname
+   \ifFBCompactItemize
+     \FBStandardItemizeEnvfalse
+     \FBStandardEnumerateEnvfalse
+   \else
+     \FBStandardItemizeEnvtrue
+     \FBStandardEnumerateEnvtrue
+   \fi
+  }
+\newcommand*{\FBStandardLists at setup}[1]%
+  {\csname FBStandardLists#1\endcsname
+   \ifFBStandardLists
+     \FBStandardListSpacingtrue
+     \FBStandardItemizeEnvtrue
+     \FBStandardEnumerateEnvtrue
+     \FBStandardItemLabelstrue
+   \else
+     \FBStandardListSpacingfalse
+     \FBStandardItemizeEnvfalse
+     \FBStandardEnumerateEnvfalse
+     \FBStandardItemLabelsfalse
+   \fi
+  }
+\newcommand*{\FBThinColonSpace at setup}[1]%
+  {\csname FBThinColonSpace#1\endcsname
+   \ifFBThinColonSpace
+     \renewcommand*{\FBcolonspace}{\FBthinspace}%
+   \fi
+  }
+\newcommand*{\FBOldFigTabCaptions at setup}[1]%
+  {\csname FBOldFigTabCaptions#1\endcsname
+   \ifFBOldFigTabCaptions
+     \def\FB at capsep@fix{\babel at save\FBCaption at Separator
+             \def\FBCaption at Separator{\CaptionSeparator}}%
              \addto\extrasfrench{\FB at capsep@fix}%
              \ifdefined\extrasacadian
                \addto\extrasacadian{\FB at capsep@fix}%
              \fi
-           \fi}%
-  \define at key{FB}{SmallCapsFigTabCaptions}[true]%
-          {\csname FBSmallCapsFigTabCaptions#1\endcsname
-           \ifFBSmallCapsFigTabCaptions
-           \else \let\FBfigtabshape\relax \fi}%
-  \define at key{FB}{SuppressWarning}[true]%
-          {\csname FBSuppressWarning#1\endcsname
-           \ifFBSuppressWarning
-             \renewcommand{\FBWarning}[1]{}%
-           \fi}%
+   \fi
+  }
+\newcommand*{\FBSmallCapsFigTabCaptions at setup}[1]%
+  {\csname FBSmallCapsFigTabCaptions#1\endcsname
+   \ifFBSmallCapsFigTabCaptions
+   \else
+     \let\FBfigtabshape\relax
+   \fi
+  }
+\newcommand*{\FBSuppressWarning at setup}[1]%
+  {\csname FBSuppressWarning#1\endcsname
+   \ifFBSuppressWarning
+     \renewcommand{\FBWarning}[1]{}%
+   \fi
+  }
+\newcommand*{\FBINGuillSpace at setup}[1]%
+  {\csname FBINGuillSpace#1\endcsname
+   \ifFBINGuillSpace
+     \renewcommand*{\FBguillspace}{\space}%
+   \fi
+  }
+\newcommand*{\FBEveryParGuill at setup}[1]%
+  {\expandafter\let\expandafter
+      \FBeveryparguill\csname FBguill#1\endcsname
+   \ifx\FBeveryparguill\FBguillopen
+   \else\ifx\FBeveryparguill\FBguillclose
+        \else\ifx\FBeveryparguill\FBguillnone
+             \else
+               \let\FBeveryparguill\FBguillopen
+               \FBWarning{Wrong value for `EveryParGuill':
+                          try `open',\MessageBreak
+                          `close' or `none'. Reported}%
+              \fi
+        \fi
+   \fi
+  }
+\newcommand*{\FBEveryLineGuill at setup}[1]%
+  {\ifFB at luatex@punct
+     \expandafter\let\expandafter
+        \FBeverylineguill\csname FBguill#1\endcsname
+     \ifx\FBeverylineguill\FBguillopen
+     \else\ifx\FBeverylineguill\FBguillclose
+          \else\ifx\FBeverylineguill\FBguillnone
+               \else
+                 \let\FBeverylineguill\FBguillnone
+                 \FBWarning{Wrong value for `EveryLineGuill':
+                            try `open',\MessageBreak
+                            `close' or `none'. Reported}%
+               \fi
+          \fi
+     \fi
+   \else
+     \FBWarning{Option `EveryLineGuill' skipped:%
+                \MessageBreak this option is for
+                LuaTeX *only*.\MessageBreak Reported}%
+   \fi
+  }
 %    \end{macrocode}
-%    Here are the options controlling French guillemets spacing
-%    and the output of |\frquote{}|.
 %
-% \changes{v3.2g}{2017/01/30}{Warn when wrong values are provided to
-%    options EveryParGuill or EveryLineGuill.}
-%
-%    \begin{macrocode}
-  \define at key{FB}{INGuillSpace}[true]%
-          {\csname FBINGuillSpace#1\endcsname
-           \ifFBINGuillSpace
-             \renewcommand*{\FBguillspace}{\space}%
-           \fi}%
-  \define at key{FB}{InnerGuillSingle}[true]%
-          {\csname FBInnerGuillSingle#1\endcsname}%
-  \define at key{FB}{EveryParGuill}[open]%
-          {\expandafter\let\expandafter
-             \FBeveryparguill\csname FBguill#1\endcsname
-           \ifx\FBeveryparguill\FBguillopen
-           \else\ifx\FBeveryparguill\FBguillclose
-                \else\ifx\FBeveryparguill\FBguillnone
-                     \else
-                       \let\FBeveryparguill\FBguillopen
-                       \FBWarning{Wrong value for `EveryParGuill':
-                                  try `open',\MessageBreak
-                                  `close' or `none'. Reported}%
-                     \fi
-                \fi
-           \fi}%
-  \define at key{FB}{EveryLineGuill}[open]%
-          {\ifFB at luatex@punct
-             \expandafter\let\expandafter
-               \FBeverylineguill\csname FBguill#1\endcsname
-             \ifx\FBeverylineguill\FBguillopen
-             \else\ifx\FBeverylineguill\FBguillclose
-                  \else\ifx\FBeverylineguill\FBguillnone
-                       \else
-                         \let\FBeverylineguill\FBguillnone
-                         \FBWarning{Wrong value for `EveryLineGuill':
-                                    try `open',\MessageBreak
-                                    `close' or `none'. Reported}%
-                       \fi
-                  \fi
-             \fi
-           \else
-             \FBWarning{Option `EveryLineGuill' skipped:%
-                        \MessageBreak this option is for
-                        LuaTeX *only*.\MessageBreak Reported}%
-           \fi}%
-%    \end{macrocode}
-%
 % \changes{v3.3c}{2017/07/23}{New option `UnicodeNoBreakSpaces’ for
 %    html translators (LuaLaTeX only).}
 %
 %    Option \fbo{UnicodeNoBreakSpaces} (LuaLaTeX  only) is meant for
 %    HTML translators: when true, all non-breaking spaces added by
-%    \frenchb{} are coded in the PDF file as Unicode characters, namely
-%    U+A0 or U+202F, instead of penalties and glues.
+%    \frenchb{} are coded in the PDF file as Unicode characters,
+%    namely U+A0 or U+202F, instead of penalties and glues.
 %    \begin{macrocode}
-  \define at key{FB}{UnicodeNoBreakSpaces}[true]%
-          {\ifFB at luatex@punct
-             \csname FBucsNBSP#1\endcsname
-             \ifFBucsNBSP \FB at ucsNBSP=\@ne \fi
-           \else
-             \FBWarning{Option `UnicodeNoBreakSpaces' skipped:%
-                        \MessageBreak this option is for
-                        LuaTeX *only*.\MessageBreak Reported}%
-           \fi
-          }%
+\newcommand*{\FBUnicodeNoBreakSpaces at setup}[1]%
+  {\ifFB at luatex@punct
+     \csname FBucsNBSP#1\endcsname
+     \ifFBucsNBSP \FB at ucsNBSP=\@ne \fi
+   \else
+     \FBWarning{Option `UnicodeNoBreakSpaces' skipped:%
+                \MessageBreak this option is for
+                LuaTeX *only*.\MessageBreak Reported}%
+   \fi
+  }%
 %    \end{macrocode}
+%
 %    Inputing French quotes as \emph{single characters} when they are
 %    available on the keyboard (through a compose key for instance)
 %    is more comfortable than typing |\og| and |\fg|.
@@ -4861,145 +4784,145 @@
 %    it can be single-byte (latin1, latin9, applemac,…) or
 %    multi-bytes (utf-8, utf8x); the next command is meant for checking
 %    whether a character is single-byte (|\FB at second| is empty) or not.
-%    \begin{macrocode}
-  \def\FB at parse#1#2\endparse{\def\FB at second{#2}}%
-%    \end{macrocode}
 %
 %    \begin{macrocode}
-  \define at key{FB}{og}%
-          {\ifFBunicode
+\def\FB at parse#1#2\endparse{\def\FB at second{#2}}%
+\newcommand*{\FB@@og}%
+  {\ifFBfrench
+     \ifFB at spacing \FB at og\ignorespaces
+     \else \guillemotleft
+     \fi
+   \else \guillemotleft
+   \fi
+  }
+\newcommand*{\FB@@fg}%
+  {\ifFBfrench
+     \ifFB at spacing \FB at fg
+     \else \guillemotright
+     \fi
+   \else \guillemotright
+   \fi
+  }
+\newcommand*{\FBog at setup}[1]%
+  {\ifFBunicode
 %    \end{macrocode}
 %    LuaTeX or XeTeX in use, first try modern LuaTeX: we just need
 %    to set LuaTeX’s attribute |\FB at addGUILspace| to 1,
 %    \begin{macrocode}
-             \ifFB at luatex@punct
-               \FB at addGUILspace=1 \relax
-             \fi
+     \ifFB at luatex@punct
+       \FB at addGUILspace=1 \relax
+     \fi
 %    \end{macrocode}
 %    then with XeTeX it is a bit more tricky:
 %    \begin{macrocode}
-             \ifFB at xetex@punct
+     \ifFB at xetex@punct
 %    \end{macrocode}
 %    |\XeTeXinterchartokenstate| is defined, we just need to set
 %    |\XeTeXcharclass| to |\FB at guilo| for the French opening quote
 %    in T1 and Unicode encoding (see subsection~\ref{ssec-punct}).
 %    \begin{macrocode}
-               \XeTeXcharclass"13   = \FB at guilo
-               \XeTeXcharclass"AB   = \FB at guilo
-               \XeTeXcharclass"A0   = \FB at guilnul
-               \XeTeXcharclass"202F = \FB at guilnul
-             \fi
+       \XeTeXcharclass"13   = \FB at guilo
+       \XeTeXcharclass"AB   = \FB at guilo
+       \XeTeXcharclass"A0   = \FB at guilnul
+       \XeTeXcharclass"202F = \FB at guilnul
+     \fi
 %    \end{macrocode}
 %    Issue a warning with older Unicode engines requiring active
 %    characters.
 %    \begin{macrocode}
-             \ifFB at active@punct
-               \FBWarning{Option og=« not supported with this version
-                          of\MessageBreak LuaTeX/XeTeX; reported}%
-             \fi
-           \else
+     \ifFB at active@punct
+       \FBWarning{Option og=« not supported with this version of
+                  \MessageBreak LuaTeX/XeTeX; reported}% »
+     \fi
+   \else
 %    \end{macrocode}
 %    This is for conventional TeX engines:
 %    \begin{macrocode}
-             \newcommand*{\FB@@og}{%
-                \ifFBfrench
-                  \ifFB at spacing\FB at og\ignorespaces
-                  \else\guillemotleft
-                  \fi
-                \else\guillemotleft\fi}%
-             \AtBeginDocument{%
-                \ifdefined\uc at dclc
+     \AtBeginDocument{%
+        \ifdefined\uc at dclc
 %    \end{macrocode}
 %    Package \pkg{inputenc} with utf8x (ucs) encoding loaded,
 %    use |\uc at dclc|:
 %    \begin{macrocode}
-                  \uc at dclc{171}{default}{\FB@@og}%
-                \else
+          \uc at dclc{171}{default}{\FB@@og}%
+        \else
 %    \end{macrocode}
 %    if encoding is not utf8x, check if the argument of |og|
 %    is a single-byte character:
 %    \begin{macrocode}
-                  \FB at parse#1\endparse
-                  \ifx\FB at second\@empty
+          \FB at parse#1\endparse
+          \ifx\FB at second\@empty
 %    \end{macrocode}
 %    This means 8-bit character encoding.
 %    Package \pkg{MULEenc} (from CJK) defines |\mule at def|
 %    to map characters to control sequences.
 %    \begin{macrocode}
-                    \ifdefined\mule at def
-                      \mule at def{11}{\FB@@og}%
-                    \else
-                      \ifdefined\DeclareInputText
-                        \@tempcnta`#1\relax
-                        \DeclareInputText{\the\@tempcnta}{\FB@@og}%
-                      \else
+            \ifdefined\mule at def
+              \mule at def{11}{\FB@@og}%
+            \else
+              \ifdefined\DeclareInputText
+                \@tempcnta`#1\relax
+                \DeclareInputText{\the\@tempcnta}{\FB@@og}%
+              \else
 %    \end{macrocode}
 %    Package \pkg{inputenc} not loaded, no way…
 %    \begin{macrocode}
-                        \FBWarning{Option `og' requires package
-                                   inputenc;\MessageBreak reported}%
-                      \fi
-                    \fi
-                  \else
+                \FBWarning{Option `og' requires package
+                           inputenc;\MessageBreak reported}%
+              \fi
+            \fi
+          \else
 %    \end{macrocode}
 %    This means multi-byte character encoding, we assume UTF-8
 %    \begin{macrocode}
-                    \DeclareUnicodeCharacter{00AB}{\FB@@og}%
-                  \fi
-                \fi}%
-           \fi
-          }%
+            \DeclareUnicodeCharacter{00AB}{\FB@@og}%
+          \fi
+        \fi}%
+   \fi
+  }
 %    \end{macrocode}
 %
 %    Same code for the closing quote.
 %    \begin{macrocode}
-  \define at key{FB}{fg}%
-          {\ifFBunicode
-             \ifFB at luatex@punct
-               \FB at addGUILspace=1 \relax
-             \fi
-             \ifFB at xetex@punct
-               \XeTeXcharclass"14   = \FB at guilf
-               \XeTeXcharclass"BB   = \FB at guilf
-               \XeTeXcharclass"A0   = \FB at guilnul
-               \XeTeXcharclass"202F = \FB at guilnul
-             \fi
-             \ifFB at active@punct
-               \FBWarning{Option fg=» not supported with this version
-                          of\MessageBreak LuaTeX/XeTeX; reported}%
-             \fi
-           \else
-             \newcommand*{\FB@@fg}{%
-                \ifFBfrench
-                  \ifFB at spacing\FB at fg
-                  \else\guillemotright
-                  \fi
-                \else\guillemotright\fi}%
-             \AtBeginDocument{%
-                \ifdefined\uc at dclc
-                  \uc at dclc{187}{default}{\FB@@fg}%
-                \else
-                  \FB at parse#1\endparse
-                  \ifx\FB at second\@empty
-                    \ifdefined\mule at def
-                      \mule at def{27}{{\FB@@fg}}%
-                    \else
-                      \ifdefined\DeclareInputText
-                        \@tempcnta`#1\relax
-                        \DeclareInputText{\the\@tempcnta}{\FB@@fg}%
-                      \else
-                        \FBWarning{Option `fg' requires package
-                                   inputenc;\MessageBreak reported}%
-                      \fi
-                    \fi
-                  \else
-                    \DeclareUnicodeCharacter{00BB}{\FB@@fg}%
-                  \fi
-                \fi}%
-           \fi
-          }%
-}
-%    \end{macrocode}
+\newcommand*{\FBfg at setup}[1]%
+  {\ifFBunicode
+     \ifFB at luatex@punct
+       \FB at addGUILspace=1 \relax
+     \fi
+     \ifFB at xetex@punct
+       \XeTeXcharclass"14   = \FB at guilf
+       \XeTeXcharclass"BB   = \FB at guilf
+       \XeTeXcharclass"A0   = \FB at guilnul
+       \XeTeXcharclass"202F = \FB at guilnul
+     \fi
+     \ifFB at active@punct
+       \FBWarning{Option fg=» not supported with this version of
+                  \MessageBreak LuaTeX/XeTeX; reported}%
+     \fi
+   \else
+     \AtBeginDocument{%
+        \ifdefined\uc at dclc
+          \uc at dclc{187}{default}{\FB@@fg}%
+        \else
+          \FB at parse#1\endparse
+          \ifx\FB at second\@empty
+             \ifdefined\mule at def
+               \mule at def{27}{{\FB@@fg}}%
+             \else
+               \ifdefined\DeclareInputText
+                 \@tempcnta`#1\relax
+                 \DeclareInputText{\the\@tempcnta}{\FB@@fg}%
+               \else
+                 \FBWarning{Option `fg' requires package
+                            inputenc;\MessageBreak reported}%
+                 \fi
+               \fi
+          \else
+            \DeclareUnicodeCharacter{00BB}{\FB@@fg}%
+          \fi
+        \fi}%
+   \fi
+  }
 % \end{macro}
 %
 % \begin{macro}{\FBprocess at options}
@@ -5113,8 +5036,8 @@
 %
 %    When package \pkg{numprint} is loaded with option
 %    \opt{autolanguage}, \pkg{numprint}’s command |\npstylefrench| has
-%    to be redefined differently according to the value of flag
-%    \fbo{ThinSpaceInFrenchNumbers}.
+%    to be redefined differently according to the value of
+%    flag\linebreak \fbo{ThinSpaceInFrenchNumbers}.
 %    As |\npstylefrench| was undefined in old versions of
 %    \pkg{numprint}, we provide this command.
 %    \begin{macrocode}
@@ -5122,7 +5045,7 @@
     {\ifnprt at autolanguage
        \providecommand*{\npstylefrench}{}%
        \ifFBThinSpaceInFrenchNumbers
-         \renewcommand*{\FBthousandsep}{\,}%
+         \renewcommand*{\FBthousandsep}{\FBthinspace}%
        \fi
        \g at addto@macro\npstylefrench{\npthousandsep{\FBthousandsep}}%
      \fi
@@ -5129,10 +5052,9 @@
     }{}%
 %    \end{macrocode}
 %    \fbo{FrenchSuperscripts}: if \fbo{true} |\up=\fup|, else
-%    |\up=\textsuperscript|.  Anyway |\up*=\FB at up@fake|.  The star-form
-%    |\up*{}| is provided for fonts that lack some superior letters:
-%    Adobe Jenson Pro and Utopia Expert have no ``g superior’’ for
-%    instance.
+%    |\up=\textsuperscript|.  The star-form |\up*=\FB at up@fake| is
+%    provided for fonts that lack some superior letters: Adobe Jenson
+%    Pro and Utopia Expert have no ``g superior’’ for instance.
 %    \begin{macrocode}
   \ifFBFrenchSuperscripts
     \DeclareRobustCommand*{\up}{%
@@ -5275,9 +5197,8 @@
 %    Reported by Sébastien Gouezel.}
 %
 %    At |\begin{document}|, we have to provide an |\xspace| command
-%    in case the \pkg{xspace} package is not loaded, do some setup for
-%    \file{hyperref}’s bookmarks, execute |\FBprocess at options|, switch
-%    LuaTeX punctuation on and issue some warnings if necessary.
+%    in case the \pkg{xspace} package is not loaded and execute
+%    |\FBprocess at options|.
 %    \begin{macrocode}
 \AtBeginDocument{%
    \providecommand*{\xspace}{\relax}%
@@ -5426,13 +5347,14 @@
 % \begin{macro}{\Frlabelitemii}
 % \begin{macro}{\Frlabelitemiii}
 % \begin{macro}{\Frlabelitemiv}
-%    Default labels for French itemize-lists (same label for all levels):
+%    Default labels for French itemize-lists ---same label for all
+%    levels---, (already defined as empty by |\DeclareKey{}|):
 %    \begin{macrocode}
-\newcommand*{\FrenchLabelItem}{\textemdash}
-\newcommand*{\Frlabelitemi}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemii}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemiii}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemiv}{\FrenchLabelItem}
+\renewcommand*{\FrenchLabelItem}{\textemdash}
+\renewcommand*{\Frlabelitemi}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemii}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemiii}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemiv}{\FrenchLabelItem}
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -5444,7 +5366,7 @@
 % \begin{macro}{\descindentFB}
 % \begin{macro}{\labelindentFB}
 % \begin{macro}{\labelwidthFB}
-%    Let’s define four dimens |\listindentFB|, |\descindentFB|,
+%    {\sloppy Let’s define four dimens |\listindentFB|, |\descindentFB|,
 %    |\labelindentFB| and |\labelwidthFB| to customise lists’ horizontal
 %    indentations.
 %    They are given silly negative values here in order to eventually
@@ -5451,7 +5373,7 @@
 %    enable their customisation in the preamble.  They will get
 %    reasonnable defaults later when entering French (see
 %    |\setlabelitemsFB| and |\setlistindentFB|) unless they have been
-%    customised.
+%    customised.\par}
 %    \begin{macrocode}
 \newdimen\listindentFB
 \setlength{\listindentFB}{-1pt}
@@ -5784,20 +5706,6 @@
 % \changes{v2.0}{2006/11/06}{Footnotes are now printed
 %     by default `à la française’ for the whole document.}
 %
-% \changes{v2.0b}{2007/04/18}{Footnotes: Just do nothing
-%    (except warning) when the bigfoot package is loaded.}
-%
-% \changes{v3.5s}{2024/01/05}{Footnotes: no customising of
-%    \cs{@footnotetext} when the footnotebackref package is loaded.
-%    Just warn the user.}
-%
-%    The \pkg{bigfoot} package deeply changes the way footnotes are
-%    handled.  When \file{bigfoot} is loaded, we just warn the user
-%    that \frenchb{} will not customise footnotes at all.
-%    When the \pkg{footnotebackref} package is loaded, \frenchb{}
-%    will not customise |\@footnotetext| in order to keep back
-%    referencing working.
-%
 %    The layout of footnotes is controlled by two flags
 %    |\ifFBAutoSpaceFootnotes| and |\ifFBFrenchFootnotes| which are
 %    set by options of \fbsetup{} (see section~\ref{ssec-keyval}).
@@ -5806,40 +5714,9 @@
 %    different because one was called in a French part, the other one
 %    in English!).
 %
-%    We save the original definition of |\@footnotemark| at the
-%    |\begin{document}| in order to include any customisation that
-%    packages might have done; we define a variant |\@footnotemarkFB|
-%    which just adds a thin space before the number or symbol calling
-%    a footnote (any space typed in is removed first). The choice
-%    between the two definitions (valid for the whole document) is
-%    controlled by flag |\ifFBAutoSpaceFootnotes|.
-%
 % \changes{v2.4a}{2009/11/23}{\cs{PackageWarning} changed to
 %    \cs{PackageInfo} (when bigfoot package in use).}
 %
-%    \begin{macrocode}
-\AtBeginDocument{%
-  \@ifpackageloaded{bigfoot}%
-                   {\PackageWarning{french.ldf}%
-                     {bigfoot package in use.\MessageBreak
-                      babel-french will NOT customise footnotes;%
-                      \MessageBreak reported}}%
-                   {\let\@footnotemarkORI\@footnotemark
-                    \def\@footnotemarkFB{\leavevmode\unskip\unkern
-                                         \,\@footnotemarkORI}%
-                    \ifFBAutoSpaceFootnotes
-                      \let\@footnotemark\@footnotemarkFB
-                    \fi}%
-  \@ifpackageloaded{footnotebackref}%
-                   {\FBFrenchFootnotesfalse
-                    \PackageWarning{french.ldf}%
-                     {footnotebackref package loaded.\MessageBreak
-                      babel-french will NOT customise footnotes;%
-                      \MessageBreak reported}}%
-                   {}%
-  }
-%    \end{macrocode}
-%
 % \begin{macro}{\@makefntextFB}
 %    We then define |\@makefntextFB|, a variant of |\@makefntext|
 %    which is responsible for the layout of footnotes, to match the
@@ -5880,10 +5757,9 @@
 \newcommand*{\kernFFN}{\kern .5em}
 \newdimen\FBfnindent
 %    \end{macrocode}
-%    |\@makefntextFB|’s definition is now tuned according to the
-%    document’s class for better compatibility.
+%    |\@makefntextFB|’s definition depends on the document’s class.
 %
-%    Koma-script classes provide |\deffootnote|, a handy command
+%    Koma-script classes: they provide |\deffootnote|, a handy command
 %    to customise the footnotes’ layout (see English manual
 %    \file{scrguien.pdf}); it redefines |\@makefntext| and
 %    |\@@makefnmark|.  First, save the original definitions.
@@ -5929,19 +5805,17 @@
       \makefootmark #1}%
    }{}
 %    \end{macrocode}
-%    Definitions for the \cls{beamer} class:
-%    \begin{macrocode}
-\@ifclassloaded{beamer}
-%    \end{macrocode}
-%    (see original definition in \file{beamerbaseframecomponents.sty}),
-%    note that for the \cls{beamer} class footnotes are LR-boxes, not
-%    paragraphs, so |\parindentFFN| is irrelevant.
-%    class.
+%    Definitions for the \cls{beamer} class:\par
+%    the original definition is in
+%    \file{beamerbaseframecomponents.sty}, note that for the
+%    \cls{beamer} class footnotes are LR-boxes, not paragraphs,
+%    so |\parindentFFN| is irrelevant.
 %
 % \changes{v3.2h}{2016/04/09}{With beamer.cls, add \cs{llap} to
 %    \cs{@thefnmark} for notes numbered over 99.}
 %
 %    \begin{macrocode}
+\@ifclassloaded{beamer}
    {\def\@makefntextFB#1{%
       \def\insertfootnotetext{#1}%
       \def\insertfootnotemark{\insertfootnotemarkFB}%
@@ -5952,9 +5826,9 @@
       \llap{\@thefnmark}\dotFFN\kernFFN}%
    }{}
 %    \end{macrocode}
+%
 %    Now the default definition of |\@makefntextFB| for standard LaTeX
 %    and AMS classes.
-%
 %    The next command prints the footnote mark according to the
 %    specifications of the French `Imprimerie Nationale’.
 %    Keep in mind that |\@thefnmark| might be empty (i.e.\ in
@@ -5971,12 +5845,37 @@
 %    \end{macrocode}
 % \end{macro}
 %
-%    The rest of |\@makefntext|’s customisation is done at the
-%    |\begin{document}|.  We save the original definition of
-%    |\@makefntext|, and then redefine |\@makefntext| according
+%    The rest of |\@makefntext|’s customisation will be done at
+%    the |\begin{document}|: saving the original definition of
+%    |\@makefntext|, then redefining |\@makefntext| according
 %    to the value of flag |\ifFBFrenchFootnotes| (true or false).
-%    Koma-script classes require a special treatment.
 %
+% \begin{macro}{\@footnotemark}
+%
+% \changes{v3.6a}{2024/05/13}{Allow customisation of the space added
+%    in \cs{\@footnotemarkFB}.}
+%
+%    We will save the original definition of |\@footnotemark| at the
+%    |\begin{document}| in order to include any customisation that
+%    packages might have done; we define a variant |\@footnotemarkFB|
+%    which just adds a (customisable) thin space before the number or
+%    symbol calling a footnote (any space typed in is removed first).
+%    The choice between the two definitions (valid for the whole
+%    document) is controlled by flag |\ifFBAutoSpaceFootnotes|.
+%
+%    |\@footnotemark|’s customisation: let’s define a customisable
+%    thin space which will be added before footnote’s call by
+%    |\@footnotemarkFB|.
+%    \begin{macrocode}
+\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}
+\def\@footnotemarkFB{\leavevmode\unskip\unkern
+                     \protect\FBfnmarkspace\@footnotemarkORI}%
+%    \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.0b}{2007/04/18}{Footnotes: Just do nothing
+%    (except warning) when the bigfoot package is loaded.}
+%
 % \changes{v3.3c}{2017/07/28}{Reset \cs{localleftbox} locally
 %    inside \cs{@makefntext}.  Needed by \cs{frquote} with LuaTeX.}
 %
@@ -5987,6 +5886,12 @@
 %    \cs{localleftbox} and \cs{FBeverypar at quote} saved and restored
 %    instead.}
 %
+% \changes{v3.5s}{2024/01/05}{Footnotes: no customising of
+%    \cs{@footnotetext} when the footnotebackref package is loaded.
+%    Just warn the user.}
+%
+%    Switching between French or Standard layout for footnotes is done
+%    `AtBeginDocument’.
 %    The LuaTeX command |\localleftbox| and |\FBeverypar at quote| used
 %    by |\frquote{}| have to be reset inside footnotes; done for LaTeX
 %    based formats only.
@@ -5993,8 +5898,37 @@
 %    \begin{macrocode}
 \providecommand\localleftbox[1]{}
 \AtBeginDocument{%
-   \@ifpackageloaded{bigfoot}{}%
-      {\ifdim\parindentFFN<10in
+%    \end{macrocode}
+%    When the \pkg{footnotebackref} package is loaded, \frenchb{}
+%    will not customise |\@footnotetext| in order to keep back
+%    referencing working.
+%    \begin{macrocode}
+  \@ifpackageloaded{footnotebackref}%
+      {\FBFrenchFootnotesfalse
+       \PackageWarning{french.ldf}%
+          {footnotebackref package loaded.\MessageBreak
+           babel-french will NOT customise footnotes;%
+           \MessageBreak reported}}%
+      {}%
+%    \end{macrocode}
+%    The \pkg{bigfoot} package deeply changes the way footnotes are
+%    handled.  When \file{bigfoot} is loaded, we just warn the user
+%    that \frenchb{} will not customise footnotes at all.
+%    \begin{macrocode}
+   \@ifpackageloaded{bigfoot}%
+      {\PackageWarning{french.ldf}%
+          {bigfoot package in use.\MessageBreak
+           babel-french will NOT customise footnotes;%
+           \MessageBreak reported}}%
+%    \end{macrocode}
+%    Otherwise, footnotes may be customised according to the
+%    \fbsetup{} options.
+%    \begin{macrocode}
+      {\let\@footnotemarkORI\@footnotemark
+       \ifFBAutoSpaceFootnotes
+         \let\@footnotemark\@footnotemarkFB
+       \fi
+       \ifdim\parindentFFN<10in
        \else
          \parindentFFN=\parindent
          \ifdim\parindentFFN<1.5em \parindentFFN=1.5em \fi
@@ -6002,8 +5936,8 @@
        \settowidth{\FBfnindent}{\dotFFN\kernFFN}%
        \addtolength{\FBfnindent}{\parindentFFN}%
        \let\@makefntextORI\@makefntext
-       \ifFB at koma
 %    \end{macrocode}
+%    Koma-script classes require a special treatment.\par
 %    Definition of |\@makefntext| for koma-script classes: running
 %    \@makefntextORI inside a group to reset |\localleftbox{}| and
 %    |\FBeverypar at quote| would mess up the layout of footnotes whenever
@@ -6010,6 +5944,7 @@
 %    the first manadatory argument of |\deffootnote{}| (used as
 %    |\leftskip|) is non-nil (default is 1em, 0pt in French).
 %    \begin{macrocode}
+       \ifFB at koma
          \let\@@makefnmarkORI\@@makefnmark
          \long\def\@makefntext#1{%
            \localleftbox{}%
@@ -6071,7 +6006,7 @@
            \localleftbox{\FBeveryline at quote}}%
        \fi
     }%
-}
+  }
 %    \end{macrocode}
 %
 %    For compatibility reasons, we provide definitions for the commands

Modified: trunk/Master/texmf-dist/tex/generic/babel-french/acadian.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-french/acadian.ldf	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/tex/generic/babel-french/acadian.ldf	2024-05-24 20:56:41 UTC (rev 71337)
@@ -10,11 +10,11 @@
 %% -------------------------------------------------------------
 %% 
 %% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
 %% of this license or (at your option) any later version.
 %% The latest version of this license is in
 %%   http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
 %% version 2003/12/01 or later.
 %% 
 %% This work has the LPPL maintenance status "maintained".
@@ -24,7 +24,7 @@
 %% Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
 %% 
 \ProvidesLanguage{acadian}
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
 \PackageInfo{acadian.ldf}%
   {`acadian' dialect is currently\MessageBreak
    *absolutely identical* to the\MessageBreak

Modified: trunk/Master/texmf-dist/tex/generic/babel-french/canadien.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-french/canadien.ldf	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/tex/generic/babel-french/canadien.ldf	2024-05-24 20:56:41 UTC (rev 71337)
@@ -10,11 +10,11 @@
 %% -------------------------------------------------------------
 %% 
 %% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
 %% of this license or (at your option) any later version.
 %% The latest version of this license is in
 %%   http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
 %% version 2003/12/01 or later.
 %% 
 %% This work has the LPPL maintenance status "maintained".
@@ -24,7 +24,7 @@
 %% Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
 %% 
 \ProvidesLanguage{canadien}
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
 \PackageWarning{canadien.ldf}%
   {Option `canadien' for Babel is *deprecated*,\MessageBreak
    it might be removed sooner or later.  Please\MessageBreak

Modified: trunk/Master/texmf-dist/tex/generic/babel-french/francais.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-french/francais.ldf	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/tex/generic/babel-french/francais.ldf	2024-05-24 20:56:41 UTC (rev 71337)
@@ -10,11 +10,11 @@
 %% -------------------------------------------------------------
 %% 
 %% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
 %% of this license or (at your option) any later version.
 %% The latest version of this license is in
 %%   http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
 %% version 2003/12/01 or later.
 %% 
 %% This work has the LPPL maintenance status "maintained".
@@ -24,7 +24,7 @@
 %% Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
 %% 
 \ProvidesLanguage{francais}
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
 \PackageWarning{francais.ldf}%
   {Option `francais' for Babel is *deprecated*,\MessageBreak
    it might be removed sooner or later.  Please\MessageBreak

Modified: trunk/Master/texmf-dist/tex/generic/babel-french/french.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-french/french.ldf	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/tex/generic/babel-french/french.ldf	2024-05-24 20:56:41 UTC (rev 71337)
@@ -10,11 +10,11 @@
 %% -------------------------------------------------------------
 %% 
 %% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
 %% of this license or (at your option) any later version.
 %% The latest version of this license is in
 %%   http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
 %% version 2003/12/01 or later.
 %% 
 %% This work has the LPPL maintenance status "maintained".
@@ -24,7 +24,7 @@
 %% Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
 %% 
 \ProvidesLanguage{french}
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
 %%
 %%  Babel package for LaTeX version 2e
 %%  Copyright © 1996-2024
@@ -108,6 +108,7 @@
    \fi
 \fi
 \bbl at tempa
+\ifLaTeXe \NeedsTeXFormat{LaTeX2e}[2022/06/01] \fi
 \newif\ifFBunicode
 \newif\ifFBLuaTeX
 \newif\ifFBXeTeX
@@ -252,6 +253,7 @@
     \fb at info{No need for active punctuation characters\\
              with this version of LuaTeX!}
   \fi
+
   \newcommand*{\set at glue@table}[1]{%
     \directlua {
       local s = token.get_meaning("FB#1space")
@@ -777,39 +779,22 @@
   \providecommand*{\textbackslash}{{\char"005C}}
   \providecommand*{\textasciicircum}{{\char"005E}}
   \providecommand*{\textasciitilde}{{\char"007E}}
-  \newcommand*{\FB at degre}{°}
+  \DeclareRobustCommand*{\degre}{°}
 \else
-  \ifLaTeXe
-    \newcommand*{\FB at degre}{\r{}}
-  \fi
+  \DeclareRobustCommand*{\degre}{\textdegree}
 \fi
 \DeclareRobustCommand*{\boi}{\textbackslash}
 \DeclareRobustCommand*{\circonflexe}{\textasciicircum}
 \DeclareRobustCommand*{\tild}{\textasciitilde}
-\DeclareRobustCommand*{\degre}{%
-  \texorpdfstring{\FB at degre}{\textdegree}}
 \newcommand*{\at}{@}
 \DeclareRobustCommand*{\degres}{\degre}
 \ifLaTeXe
   \AtBeginDocument{%
-    \@ifpackageloaded{fontspec}{}{%
-      \ifdefined\DeclareEncodingSubset
-        \DeclareRobustCommand*{\degres}{%
+    \@ifpackageloaded{fontspec}{}%
+        {\DeclareRobustCommand*{\degres}{%
           \texorpdfstring{\hbox{\UseTextSymbol{TS1}{\textdegree}}}%
                          {\textdegree}}%
-      \else
-        \def\Warning at degree@TSone{\FBWarning
-             {Degrees would look better in TS1-encoding:%
-              \MessageBreak add \protect
-              \usepackage{textcomp} to the preamble.%
-              \MessageBreak Degrees used}}
-        \DeclareRobustCommand*{\degres}{%
-          \texorpdfstring{\hbox to 0.3em{\hss\degre\hss}%
-                          \Warning at degree@TSone
-                          \global\let\Warning at degree@TSone\relax}%
-                          {\textdegree}}%
-      \fi
-    }%
+        }%
   }
 \fi
 \newif\ifFB at icomma
@@ -1012,7 +997,7 @@
 }
 \newcommand{\FBWarning}[1]{\PackageWarning{french.ldf}{#1}}
 \bgroup
-  \catcode`:=12 \catcode`>=12 \relax
+  \catcode`: =12 \catcode`> =12 \relax
   \long\gdef\STD at makecaption#1#2{%
     \vskip\abovecaptionskip
     \sbox\@tempboxa{#1: #2}%
@@ -1124,16 +1109,9 @@
                 BEFORE babel/french; reported}%
    \fi
 }
-\newcommand*{\frenchsetup}[1]{%
-  \setkeys{FB}{#1}%
-}%
-\@onlypreamble\frenchsetup
-\let\frenchbsetup\frenchsetup
-\@onlypreamble\frenchbsetup
 \newif\ifFBShowOptions
 \newif\ifFBStandardLayout           \FBStandardLayouttrue
 \newif\ifFBGlobalLayoutFrench       \FBGlobalLayoutFrenchtrue
-\newif\ifFBReduceListSpacing
 \newif\ifFBStandardListSpacing      \FBStandardListSpacingtrue
 \newif\ifFBListOldLayout
 \newif\ifFBListItemsAsPar
@@ -1195,284 +1173,312 @@
     \FBAutoSpaceFootnotestrue
     \FBCustomiseFigTabCaptionstrue
   \fi
-  \RequirePackage{keyval}%
-  \define at key{FB}{ShowOptions}[true]%
-          {\csname FBShowOptions#1\endcsname}%
-  \define at key{FB}{StandardLayout}[true]%
-          {\ifFB at mainlanguage@FR
-             \csname FBStandardLayout#1\endcsname
-           \else
-             \PackageWarning{french.ldf}%
-               {Option `StandardLayout' skipped:\MessageBreak
-                French is *not* babel's last option.\MessageBreak
-                Reported}%
-           \fi
-           \ifFBStandardLayout
-             \FBStandardListSpacingtrue
-             \FBStandardItemizeEnvtrue
-             \FBStandardItemLabelstrue
-             \FBStandardEnumerateEnvtrue
-             \FBIndentFirstfalse
-             \FBFrenchFootnotesfalse
-             \FBAutoSpaceFootnotesfalse
-           \else
-             \FBStandardListSpacingfalse
-             \FBStandardItemizeEnvfalse
-             \FBStandardItemLabelsfalse
-             \FBStandardEnumerateEnvfalse
-             \FBIndentFirsttrue
-             \FBFrenchFootnotestrue
-             \FBAutoSpaceFootnotestrue
-           \fi}%
-  \define at key{FB}{GlobalLayoutFrench}[true]%
-          {\ifFB at mainlanguage@FR
-            \csname FBGlobalLayoutFrench#1\endcsname
-           \else
-             \PackageWarning{french.ldf}%
-               {Option `GlobalLayoutFrench' skipped:\MessageBreak
-                French is *not* babel's last option.\MessageBreak
-                Reported}%
-           \fi}%
-  \define at key{FB}{ReduceListSpacing}[true]%
-          {\csname FBReduceListSpacing#1\endcsname
-           \ifFBReduceListSpacing \FBStandardListSpacingfalse
-           \else \FBStandardListSpacingtrue\fi
-           }%
-  \define at key{FB}{StandardListSpacing}[true]%
-          {\csname FBStandardListSpacing#1\endcsname}%
-  \define at key{FB}{ListOldLayout}[true]%
-          {\csname FBListOldLayout#1\endcsname
-           \ifFBListOldLayout
-             \FBStandardEnumerateEnvtrue
-             \renewcommand*{\FrenchLabelItem}{\textendash}%
-           \fi}%
-  \define at key{FB}{CompactItemize}[true]%
-          {\csname FBCompactItemize#1\endcsname
-           \ifFBCompactItemize
-             \FBStandardItemizeEnvfalse
-             \FBStandardEnumerateEnvfalse
-           \else
-             \FBStandardItemizeEnvtrue
-             \FBStandardEnumerateEnvtrue
-           \fi}%
-  \define at key{FB}{StandardItemizeEnv}[true]%
-          {\csname FBStandardItemizeEnv#1\endcsname}%
-  \define at key{FB}{StandardEnumerateEnv}[true]%
-          {\csname FBStandardEnumerateEnv#1\endcsname}%
-  \define at key{FB}{StandardItemLabels}[true]%
-          {\csname FBStandardItemLabels#1\endcsname}%
-  \define at key{FB}{ItemLabels}%
-          {\renewcommand*{\FrenchLabelItem}{#1}}%
-  \define at key{FB}{ItemLabeli}%
-          {\renewcommand*{\Frlabelitemi}{#1}}%
-  \define at key{FB}{ItemLabelii}%
-          {\renewcommand*{\Frlabelitemii}{#1}}%
-  \define at key{FB}{ItemLabeliii}%
-          {\renewcommand*{\Frlabelitemiii}{#1}}%
-  \define at key{FB}{ItemLabeliv}%
-          {\renewcommand*{\Frlabelitemiv}{#1}}%
-  \define at key{FB}{StandardLists}[true]%
-          {\csname FBStandardLists#1\endcsname
-           \ifFBStandardLists
-             \FBStandardListSpacingtrue
-             \FBStandardItemizeEnvtrue
-             \FBStandardEnumerateEnvtrue
-             \FBStandardItemLabelstrue
-           \else
-             \FBStandardListSpacingfalse
-             \FBStandardItemizeEnvfalse
-             \FBStandardEnumerateEnvfalse
-             \FBStandardItemLabelsfalse
-           \fi}%
-  \define at key{FB}{ListItemsAsPar}[true]%
-          {\csname FBListItemsAsPar#1\endcsname}
-  \define at key{FB}{IndentFirst}[true]%
-          {\csname FBIndentFirst#1\endcsname}%
-  \define at key{FB}{FrenchFootnotes}[true]%
-          {\csname FBFrenchFootnotes#1\endcsname}%
-  \define at key{FB}{AutoSpaceFootnotes}[true]%
-          {\csname FBAutoSpaceFootnotes#1\endcsname}%
-  \define at key{FB}{AutoSpacePunctuation}[true]%
-          {\csname FBAutoSpacePunctuation#1\endcsname}%
-  \define at key{FB}{OriginalTypewriter}[true]%
-          {\csname FBOriginalTypewriter#1\endcsname}%
-  \define at key{FB}{ThinColonSpace}[true]%
-          {\csname FBThinColonSpace#1\endcsname
-           \ifFBThinColonSpace
-             \renewcommand*{\FBcolonspace}{\FBthinspace}%
-           \fi}%
-  \define at key{FB}{ThinSpaceInFrenchNumbers}[true]%
-          {\csname FBThinSpaceInFrenchNumbers#1\endcsname}%
-  \define at key{FB}{FrenchSuperscripts}[true]%
-          {\csname FBFrenchSuperscripts#1\endcsname}
-  \define at key{FB}{LowercaseSuperscripts}[true]%
-          {\csname FBLowercaseSuperscripts#1\endcsname}
-  \define at key{FB}{PartNameFull}[true]%
-          {\csname FBPartNameFull#1\endcsname}%
-  \define at key{FB}{CustomiseFigTabCaptions}[true]%
-          {\csname FBCustomiseFigTabCaptions#1\endcsname}%
-  \define at key{FB}{OldFigTabCaptions}[true]%
-          {\csname FBOldFigTabCaptions#1\endcsname
-           \ifFBOldFigTabCaptions
-             \def\FB at capsep@fix{\babel at save\FBCaption at Separator
-                    \def\FBCaption at Separator{\CaptionSeparator}}%
+}
+\DeclareKeys[FBsetup]
+  {
+    ShowOptions.if               = FBShowOptions                        ,
+    StandardLayout.default:n     = {true}                               ,
+    StandardLayout.code          = \FBStandardLayout at setup{#1}          ,
+    GlobalLayoutFrench.default:n = {true}                               ,
+    GlobalLayoutFrench.code      = \FBGlobalLayout at setup{#1}            ,
+    StandardListSpacing.if       = FBStandardListSpacing                ,
+    ReduceListSpacing.ifnot      = FBStandardListSpacing                ,
+    ListOldLayout.default:n      = {true}                               ,
+    ListOldLayout.code           = \FBListOldLayout at setup{#1}           ,
+    CompactItemize.default:n     = {true}                               ,
+    CompactItemize.code          = \FBCompactItemize at setup{#1}          ,
+    StandardItemizeEnv.if        = FBStandardItemizeEnv                 ,
+    StandardEnumerateEnv.if      = FBStandardEnumerateEnv               ,
+    StandardItemLabels.if        = FBStandardItemLabels                 ,
+    ItemLabels.store             = \FrenchLabelItem                     ,
+    ItemLabeli.store             = \Frlabelitemi                        ,
+    ItemLabelii.store            = \Frlabelitemii                       ,
+    ItemLabeliii.store           = \Frlabelitemiii                      ,
+    ItemLabeliv.store            = \Frlabelitemiv                       ,
+    StandardLists.default:n      = {true}                               ,
+    StandardLists.code           = \FBStandardLists at setup{#1}           ,
+    ListItemsAsPar.if            = FBListItemsAsPar                     ,
+    IndentFirst.if               = FBIndentFirst                        ,
+    FrenchFootnotes.if           = FBFrenchFootnotes                    ,
+    AutoSpaceFootnotes.if        = FBAutoSpaceFootnotes                 ,
+    AutoSpacePunctuation.if      = FBAutoSpacePunctuation               ,
+    OriginalTypewriter.if        = FBOriginalTypewriter                 ,
+    ThinColonSpace.default:n     = {true}                               ,
+    ThinColonSpace.code          = \FBThinColonSpace at setup{#1}          ,
+    ThinSpaceInFrenchNumbers.if  = FBThinSpaceInFrenchNumbers           ,
+    FrenchSuperscripts.if        = FBFrenchSuperscripts                 ,
+    LowercaseSuperscripts.if     = FBLowercaseSuperscripts              ,
+    PartNameFull.if              = FBPartNameFull                       ,
+    CustomiseFigTabCaptions.if   = FBCustomiseFigTabCaptions            ,
+    OldFigTabCaptions.default:n  = {true}                               ,
+    OldFigTabCaptions.code       = \FBOldFigTabCaptions at setup{#1}       ,
+    SmallCapsFigTabCaptions.default:n = {true}                          ,
+    SmallCapsFigTabCaptions.code = \FBSmallCapsFigTabCaptions at setup{#1} ,
+    SuppressWarning.default:n    = {true}                               ,
+    SuppressWarning.code         = \FBSuppressWarning at setup{#1}         ,
+    INGuillSpace.default:n       = {true}                               ,
+    INGuillSpace.code            = \FBINGuillSpace at setup{#1}            ,
+    InnerGuillSingle.if          = FBInnerGuillSingle                   ,
+    EveryParGuill.default:n      = {open}                               ,
+    EveryParGuill.code           = \FBEveryParGuill at setup{#1}           ,
+    EveryLineGuill.default:n     = {open}                               ,
+    EveryLineGuill.code          = \FBEveryLineGuill at setup{#1}          ,
+    UnicodeNoBreakSpaces.default:n = {true}                             ,
+    UnicodeNoBreakSpaces.code    = \FBUnicodeNoBreakSpaces at setup{#1}    ,
+    og.code                      = \FBog at setup{#1}                      ,
+    fg.code                      = \FBfg at setup{#1}                      ,
+}
+\newcommand*{\frenchsetup}[1]{%
+  \SetKeys[FBsetup]{#1}%
+}%
+\@onlypreamble\frenchsetup
+\let\frenchbsetup\frenchsetup
+\@onlypreamble\frenchbsetup
+\newcommand*{\FBStandardLayout at setup}[1]%
+  {\ifFB at mainlanguage@FR
+     \csname FBStandardLayout#1\endcsname
+   \else
+     \PackageWarning{french.ldf}%
+         {Option `StandardLayout' skipped:\MessageBreak
+          French is *not* babel's last option.\MessageBreak
+          Reported}%
+   \fi
+   \ifFBStandardLayout
+     \FBStandardListSpacingtrue
+     \FBStandardItemizeEnvtrue
+     \FBStandardItemLabelstrue
+     \FBStandardEnumerateEnvtrue
+     \FBIndentFirstfalse
+     \FBFrenchFootnotesfalse
+     \FBAutoSpaceFootnotesfalse
+   \else
+     \FBStandardListSpacingfalse
+     \FBStandardItemizeEnvfalse
+     \FBStandardItemLabelsfalse
+     \FBStandardEnumerateEnvfalse
+     \FBIndentFirsttrue
+     \FBFrenchFootnotestrue
+     \FBAutoSpaceFootnotestrue
+   \fi
+  }
+\newcommand*{\FBGlobalLayout at setup}[1]%
+  {\ifFB at mainlanguage@FR
+     \csname FBGlobalLayoutFrench#1\endcsname
+   \else
+     \PackageWarning{french.ldf}%
+       {Option `GlobalLayoutFrench' skipped:\MessageBreak
+        French is *not* babel's last option.\MessageBreak
+        Reported}%
+   \fi
+  }
+\newcommand*{\FB at ListOldLayout@setup}[1]%
+  {\csname FBListOldLayout#1\endcsname
+   \ifFBListOldLayout
+     \FBStandardEnumerateEnvtrue
+     \renewcommand*{\FrenchLabelItem}{\textendash}%
+   \fi
+  }
+\newcommand*{\FB at CompactItemize@setup}[1]%
+  {\csname FBCompactItemize#1\endcsname
+   \ifFBCompactItemize
+     \FBStandardItemizeEnvfalse
+     \FBStandardEnumerateEnvfalse
+   \else
+     \FBStandardItemizeEnvtrue
+     \FBStandardEnumerateEnvtrue
+   \fi
+  }
+\newcommand*{\FBStandardLists at setup}[1]%
+  {\csname FBStandardLists#1\endcsname
+   \ifFBStandardLists
+     \FBStandardListSpacingtrue
+     \FBStandardItemizeEnvtrue
+     \FBStandardEnumerateEnvtrue
+     \FBStandardItemLabelstrue
+   \else
+     \FBStandardListSpacingfalse
+     \FBStandardItemizeEnvfalse
+     \FBStandardEnumerateEnvfalse
+     \FBStandardItemLabelsfalse
+   \fi
+  }
+\newcommand*{\FBThinColonSpace at setup}[1]%
+  {\csname FBThinColonSpace#1\endcsname
+   \ifFBThinColonSpace
+     \renewcommand*{\FBcolonspace}{\FBthinspace}%
+   \fi
+  }
+\newcommand*{\FBOldFigTabCaptions at setup}[1]%
+  {\csname FBOldFigTabCaptions#1\endcsname
+   \ifFBOldFigTabCaptions
+     \def\FB at capsep@fix{\babel at save\FBCaption at Separator
+             \def\FBCaption at Separator{\CaptionSeparator}}%
              \addto\extrasfrench{\FB at capsep@fix}%
              \ifdefined\extrasacadian
                \addto\extrasacadian{\FB at capsep@fix}%
              \fi
-           \fi}%
-  \define at key{FB}{SmallCapsFigTabCaptions}[true]%
-          {\csname FBSmallCapsFigTabCaptions#1\endcsname
-           \ifFBSmallCapsFigTabCaptions
-           \else \let\FBfigtabshape\relax \fi}%
-  \define at key{FB}{SuppressWarning}[true]%
-          {\csname FBSuppressWarning#1\endcsname
-           \ifFBSuppressWarning
-             \renewcommand{\FBWarning}[1]{}%
-           \fi}%
-  \define at key{FB}{INGuillSpace}[true]%
-          {\csname FBINGuillSpace#1\endcsname
-           \ifFBINGuillSpace
-             \renewcommand*{\FBguillspace}{\space}%
-           \fi}%
-  \define at key{FB}{InnerGuillSingle}[true]%
-          {\csname FBInnerGuillSingle#1\endcsname}%
-  \define at key{FB}{EveryParGuill}[open]%
-          {\expandafter\let\expandafter
-             \FBeveryparguill\csname FBguill#1\endcsname
-           \ifx\FBeveryparguill\FBguillopen
-           \else\ifx\FBeveryparguill\FBguillclose
-                \else\ifx\FBeveryparguill\FBguillnone
-                     \else
-                       \let\FBeveryparguill\FBguillopen
-                       \FBWarning{Wrong value for `EveryParGuill':
-                                  try `open',\MessageBreak
-                                  `close' or `none'. Reported}%
-                     \fi
-                \fi
-           \fi}%
-  \define at key{FB}{EveryLineGuill}[open]%
-          {\ifFB at luatex@punct
-             \expandafter\let\expandafter
-               \FBeverylineguill\csname FBguill#1\endcsname
-             \ifx\FBeverylineguill\FBguillopen
-             \else\ifx\FBeverylineguill\FBguillclose
-                  \else\ifx\FBeverylineguill\FBguillnone
-                       \else
-                         \let\FBeverylineguill\FBguillnone
-                         \FBWarning{Wrong value for `EveryLineGuill':
-                                    try `open',\MessageBreak
-                                    `close' or `none'. Reported}%
-                       \fi
-                  \fi
-             \fi
-           \else
-             \FBWarning{Option `EveryLineGuill' skipped:%
-                        \MessageBreak this option is for
-                        LuaTeX *only*.\MessageBreak Reported}%
-           \fi}%
-  \define at key{FB}{UnicodeNoBreakSpaces}[true]%
-          {\ifFB at luatex@punct
-             \csname FBucsNBSP#1\endcsname
-             \ifFBucsNBSP \FB at ucsNBSP=\@ne \fi
-           \else
-             \FBWarning{Option `UnicodeNoBreakSpaces' skipped:%
-                        \MessageBreak this option is for
-                        LuaTeX *only*.\MessageBreak Reported}%
-           \fi
-          }%
-  \def\FB at parse#1#2\endparse{\def\FB at second{#2}}%
-  \define at key{FB}{og}%
-          {\ifFBunicode
-             \ifFB at luatex@punct
-               \FB at addGUILspace=1 \relax
-             \fi
-             \ifFB at xetex@punct
-               \XeTeXcharclass"13   = \FB at guilo
-               \XeTeXcharclass"AB   = \FB at guilo
-               \XeTeXcharclass"A0   = \FB at guilnul
-               \XeTeXcharclass"202F = \FB at guilnul
-             \fi
-             \ifFB at active@punct
-               \FBWarning{Option og=« not supported with this version
-                          of\MessageBreak LuaTeX/XeTeX; reported}%
-             \fi
-           \else
-             \newcommand*{\FB@@og}{%
-                \ifFBfrench
-                  \ifFB at spacing\FB at og\ignorespaces
-                  \else\guillemotleft
-                  \fi
-                \else\guillemotleft\fi}%
-             \AtBeginDocument{%
-                \ifdefined\uc at dclc
-                  \uc at dclc{171}{default}{\FB@@og}%
-                \else
-                  \FB at parse#1\endparse
-                  \ifx\FB at second\@empty
-                    \ifdefined\mule at def
-                      \mule at def{11}{\FB@@og}%
-                    \else
-                      \ifdefined\DeclareInputText
-                        \@tempcnta`#1\relax
-                        \DeclareInputText{\the\@tempcnta}{\FB@@og}%
-                      \else
-                        \FBWarning{Option `og' requires package
-                                   inputenc;\MessageBreak reported}%
-                      \fi
-                    \fi
-                  \else
-                    \DeclareUnicodeCharacter{00AB}{\FB@@og}%
-                  \fi
-                \fi}%
-           \fi
-          }%
-  \define at key{FB}{fg}%
-          {\ifFBunicode
-             \ifFB at luatex@punct
-               \FB at addGUILspace=1 \relax
-             \fi
-             \ifFB at xetex@punct
-               \XeTeXcharclass"14   = \FB at guilf
-               \XeTeXcharclass"BB   = \FB at guilf
-               \XeTeXcharclass"A0   = \FB at guilnul
-               \XeTeXcharclass"202F = \FB at guilnul
-             \fi
-             \ifFB at active@punct
-               \FBWarning{Option fg=» not supported with this version
-                          of\MessageBreak LuaTeX/XeTeX; reported}%
-             \fi
-           \else
-             \newcommand*{\FB@@fg}{%
-                \ifFBfrench
-                  \ifFB at spacing\FB at fg
-                  \else\guillemotright
-                  \fi
-                \else\guillemotright\fi}%
-             \AtBeginDocument{%
-                \ifdefined\uc at dclc
-                  \uc at dclc{187}{default}{\FB@@fg}%
-                \else
-                  \FB at parse#1\endparse
-                  \ifx\FB at second\@empty
-                    \ifdefined\mule at def
-                      \mule at def{27}{{\FB@@fg}}%
-                    \else
-                      \ifdefined\DeclareInputText
-                        \@tempcnta`#1\relax
-                        \DeclareInputText{\the\@tempcnta}{\FB@@fg}%
-                      \else
-                        \FBWarning{Option `fg' requires package
-                                   inputenc;\MessageBreak reported}%
-                      \fi
-                    \fi
-                  \else
-                    \DeclareUnicodeCharacter{00BB}{\FB@@fg}%
-                  \fi
-                \fi}%
-           \fi
-          }%
-}
+   \fi
+  }
+\newcommand*{\FBSmallCapsFigTabCaptions at setup}[1]%
+  {\csname FBSmallCapsFigTabCaptions#1\endcsname
+   \ifFBSmallCapsFigTabCaptions
+   \else
+     \let\FBfigtabshape\relax
+   \fi
+  }
+\newcommand*{\FBSuppressWarning at setup}[1]%
+  {\csname FBSuppressWarning#1\endcsname
+   \ifFBSuppressWarning
+     \renewcommand{\FBWarning}[1]{}%
+   \fi
+  }
+\newcommand*{\FBINGuillSpace at setup}[1]%
+  {\csname FBINGuillSpace#1\endcsname
+   \ifFBINGuillSpace
+     \renewcommand*{\FBguillspace}{\space}%
+   \fi
+  }
+\newcommand*{\FBEveryParGuill at setup}[1]%
+  {\expandafter\let\expandafter
+      \FBeveryparguill\csname FBguill#1\endcsname
+   \ifx\FBeveryparguill\FBguillopen
+   \else\ifx\FBeveryparguill\FBguillclose
+        \else\ifx\FBeveryparguill\FBguillnone
+             \else
+               \let\FBeveryparguill\FBguillopen
+               \FBWarning{Wrong value for `EveryParGuill':
+                          try `open',\MessageBreak
+                          `close' or `none'. Reported}%
+              \fi
+        \fi
+   \fi
+  }
+\newcommand*{\FBEveryLineGuill at setup}[1]%
+  {\ifFB at luatex@punct
+     \expandafter\let\expandafter
+        \FBeverylineguill\csname FBguill#1\endcsname
+     \ifx\FBeverylineguill\FBguillopen
+     \else\ifx\FBeverylineguill\FBguillclose
+          \else\ifx\FBeverylineguill\FBguillnone
+               \else
+                 \let\FBeverylineguill\FBguillnone
+                 \FBWarning{Wrong value for `EveryLineGuill':
+                            try `open',\MessageBreak
+                            `close' or `none'. Reported}%
+               \fi
+          \fi
+     \fi
+   \else
+     \FBWarning{Option `EveryLineGuill' skipped:%
+                \MessageBreak this option is for
+                LuaTeX *only*.\MessageBreak Reported}%
+   \fi
+  }
+\newcommand*{\FBUnicodeNoBreakSpaces at setup}[1]%
+  {\ifFB at luatex@punct
+     \csname FBucsNBSP#1\endcsname
+     \ifFBucsNBSP \FB at ucsNBSP=\@ne \fi
+   \else
+     \FBWarning{Option `UnicodeNoBreakSpaces' skipped:%
+                \MessageBreak this option is for
+                LuaTeX *only*.\MessageBreak Reported}%
+   \fi
+  }%
+\def\FB at parse#1#2\endparse{\def\FB at second{#2}}%
+\newcommand*{\FB@@og}%
+  {\ifFBfrench
+     \ifFB at spacing \FB at og\ignorespaces
+     \else \guillemotleft
+     \fi
+   \else \guillemotleft
+   \fi
+  }
+\newcommand*{\FB@@fg}%
+  {\ifFBfrench
+     \ifFB at spacing \FB at fg
+     \else \guillemotright
+     \fi
+   \else \guillemotright
+   \fi
+  }
+\newcommand*{\FBog at setup}[1]%
+  {\ifFBunicode
+     \ifFB at luatex@punct
+       \FB at addGUILspace=1 \relax
+     \fi
+     \ifFB at xetex@punct
+       \XeTeXcharclass"13   = \FB at guilo
+       \XeTeXcharclass"AB   = \FB at guilo
+       \XeTeXcharclass"A0   = \FB at guilnul
+       \XeTeXcharclass"202F = \FB at guilnul
+     \fi
+     \ifFB at active@punct
+       \FBWarning{Option og=« not supported with this version of
+                  \MessageBreak LuaTeX/XeTeX; reported}% »
+     \fi
+   \else
+     \AtBeginDocument{%
+        \ifdefined\uc at dclc
+          \uc at dclc{171}{default}{\FB@@og}%
+        \else
+          \FB at parse#1\endparse
+          \ifx\FB at second\@empty
+            \ifdefined\mule at def
+              \mule at def{11}{\FB@@og}%
+            \else
+              \ifdefined\DeclareInputText
+                \@tempcnta`#1\relax
+                \DeclareInputText{\the\@tempcnta}{\FB@@og}%
+              \else
+                \FBWarning{Option `og' requires package
+                           inputenc;\MessageBreak reported}%
+              \fi
+            \fi
+          \else
+            \DeclareUnicodeCharacter{00AB}{\FB@@og}%
+          \fi
+        \fi}%
+   \fi
+  }
+\newcommand*{\FBfg at setup}[1]%
+  {\ifFBunicode
+     \ifFB at luatex@punct
+       \FB at addGUILspace=1 \relax
+     \fi
+     \ifFB at xetex@punct
+       \XeTeXcharclass"14   = \FB at guilf
+       \XeTeXcharclass"BB   = \FB at guilf
+       \XeTeXcharclass"A0   = \FB at guilnul
+       \XeTeXcharclass"202F = \FB at guilnul
+     \fi
+     \ifFB at active@punct
+       \FBWarning{Option fg=» not supported with this version of
+                  \MessageBreak LuaTeX/XeTeX; reported}%
+     \fi
+   \else
+     \AtBeginDocument{%
+        \ifdefined\uc at dclc
+          \uc at dclc{187}{default}{\FB@@fg}%
+        \else
+          \FB at parse#1\endparse
+          \ifx\FB at second\@empty
+             \ifdefined\mule at def
+               \mule at def{27}{{\FB@@fg}}%
+             \else
+               \ifdefined\DeclareInputText
+                 \@tempcnta`#1\relax
+                 \DeclareInputText{\the\@tempcnta}{\FB@@fg}%
+               \else
+                 \FBWarning{Option `fg' requires package
+                            inputenc;\MessageBreak reported}%
+                 \fi
+               \fi
+          \else
+            \DeclareUnicodeCharacter{00BB}{\FB@@fg}%
+          \fi
+        \fi}%
+   \fi
+  }
 \newcommand*{\FBprocess at options}{%
   \@ifpackageloaded{enumitem}{%
      \ifFBStandardItemizeEnv
@@ -1547,7 +1553,7 @@
     {\ifnprt at autolanguage
        \providecommand*{\npstylefrench}{}%
        \ifFBThinSpaceInFrenchNumbers
-         \renewcommand*{\FBthousandsep}{\,}%
+         \renewcommand*{\FBthousandsep}{\FBthinspace}%
        \fi
        \g at addto@macro\npstylefrench{\npthousandsep{\FBthousandsep}}%
      \fi
@@ -1687,11 +1693,11 @@
 }
 \def\listFB#1#2{\listORI{#1}{\FB at listVsettings #2}}
 \let\endlistFB\endlistORI
-\newcommand*{\FrenchLabelItem}{\textemdash}
-\newcommand*{\Frlabelitemi}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemii}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemiii}{\FrenchLabelItem}
-\newcommand*{\Frlabelitemiv}{\FrenchLabelItem}
+\renewcommand*{\FrenchLabelItem}{\textemdash}
+\renewcommand*{\Frlabelitemi}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemii}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemiii}{\FrenchLabelItem}
+\renewcommand*{\Frlabelitemiv}{\FrenchLabelItem}
 \newdimen\listindentFB
 \setlength{\listindentFB}{-1pt}
 \newdimen\descindentFB
@@ -1854,26 +1860,6 @@
     \@afterindenttrue
   \fi}
 \addto\extrasfrench{\bbl at frenchindent}
-\AtBeginDocument{%
-  \@ifpackageloaded{bigfoot}%
-                   {\PackageWarning{french.ldf}%
-                     {bigfoot package in use.\MessageBreak
-                      babel-french will NOT customise footnotes;%
-                      \MessageBreak reported}}%
-                   {\let\@footnotemarkORI\@footnotemark
-                    \def\@footnotemarkFB{\leavevmode\unskip\unkern
-                                         \,\@footnotemarkORI}%
-                    \ifFBAutoSpaceFootnotes
-                      \let\@footnotemark\@footnotemarkFB
-                    \fi}%
-  \@ifpackageloaded{footnotebackref}%
-                   {\FBFrenchFootnotesfalse
-                    \PackageWarning{french.ldf}%
-                     {footnotebackref package loaded.\MessageBreak
-                      babel-french will NOT customise footnotes;%
-                      \MessageBreak reported}}%
-                   {}%
-  }
 \newdimen\parindentFFN
 \parindentFFN=10in
 \newcommand*{\dotFFN}{.}
@@ -1919,10 +1905,28 @@
     \llap{\@thefnmark}\dotFFN\kernFFN
   \fi}
 \providecommand\@makefntextFB[1]{\insertfootnotemarkFB #1}
+\newcommand*{\FBfnmarkspace}{\kern .5\fontdimen2\font}
+\def\@footnotemarkFB{\leavevmode\unskip\unkern
+                     \protect\FBfnmarkspace\@footnotemarkORI}%
 \providecommand\localleftbox[1]{}
 \AtBeginDocument{%
-   \@ifpackageloaded{bigfoot}{}%
-      {\ifdim\parindentFFN<10in
+  \@ifpackageloaded{footnotebackref}%
+      {\FBFrenchFootnotesfalse
+       \PackageWarning{french.ldf}%
+          {footnotebackref package loaded.\MessageBreak
+           babel-french will NOT customise footnotes;%
+           \MessageBreak reported}}%
+      {}%
+   \@ifpackageloaded{bigfoot}%
+      {\PackageWarning{french.ldf}%
+          {bigfoot package in use.\MessageBreak
+           babel-french will NOT customise footnotes;%
+           \MessageBreak reported}}%
+      {\let\@footnotemarkORI\@footnotemark
+       \ifFBAutoSpaceFootnotes
+         \let\@footnotemark\@footnotemarkFB
+       \fi
+       \ifdim\parindentFFN<10in
        \else
          \parindentFFN=\parindent
          \ifdim\parindentFFN<1.5em \parindentFFN=1.5em \fi
@@ -1980,7 +1984,7 @@
            \localleftbox{\FBeveryline at quote}}%
        \fi
     }%
-}
+  }
 \newcommand*{\AddThinSpaceBeforeFootnotes}{\FBAutoSpaceFootnotestrue}
 \newcommand*{\FrenchFootnotes}{\FBFrenchFootnotestrue}
 \newcommand*{\StandardFootnotes}{\FBFrenchFootnotesfalse}

Modified: trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.ldf	2024-05-24 20:56:41 UTC (rev 71337)
@@ -10,11 +10,11 @@
 %% -------------------------------------------------------------
 %% 
 %% It may be distributed and/or modified under the
-%% conditions of the LaTeX Project Public License, either version 1.3
+%% conditions of the LaTeX Project Public License, either version 1.3c
 %% of this license or (at your option) any later version.
 %% The latest version of this license is in
 %%   http://www.latex-project.org/lppl.txt
-%% and version 1.3 or later is part of all distributions of LaTeX
+%% and version 1.3c or later is part of all distributions of LaTeX
 %% version 2003/12/01 or later.
 %% 
 %% This work has the LPPL maintenance status "maintained".
@@ -24,7 +24,7 @@
 %% Please report errors to: <daniel (dot) flipo (at) free (dot) fr>
 %% 
 \ProvidesLanguage{frenchb}
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
 \def\bbl at tempa{frenchb}
 \ifx\CurrentOption\bbl at tempa
   \chardef\l at frenchb\l at french

Modified: trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.lua
===================================================================
--- trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.lua	2024-05-24 20:56:29 UTC (rev 71336)
+++ trunk/Master/texmf-dist/tex/generic/babel-french/frenchb.lua	2024-05-24 20:56:41 UTC (rev 71337)
@@ -1,6 +1,6 @@
 --[[
    File `frenchb.lua’ generated from frenchb.dtx
-         [2024-02-29 v3.5s French support from the babel system]
+         [2024-05-24 v3.6a French support from the babel system]
    Copyright © 2014-2024 Daniel Flipo
    <daniel (dot) flipo (at) free (dot) fr>
    License LPPL: see french.ldf.



More information about the tex-live-commits mailing list.