summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/babel-french
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2013-05-07 23:19:38 +0000
committerKarl Berry <karl@freefriends.org>2013-05-07 23:19:38 +0000
commit5be21ea43e12a7e7e0208ccc712d2001412b7ac7 (patch)
treee733a7991fca8e7f1ef86cabaeb6b33adb3956b5 /Master/texmf-dist/source/generic/babel-french
parentba25ca7d24c2c129f2e7bbac09232a98b8f61561 (diff)
babel-frenchb now named babel-french
git-svn-id: svn://tug.org/texlive/trunk@30323 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/generic/babel-french')
-rw-r--r--Master/texmf-dist/source/generic/babel-french/frenchb.dtx3571
-rw-r--r--Master/texmf-dist/source/generic/babel-french/frenchb.ins118
2 files changed, 3689 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/babel-french/frenchb.dtx b/Master/texmf-dist/source/generic/babel-french/frenchb.dtx
new file mode 100644
index 00000000000..e510c25a130
--- /dev/null
+++ b/Master/texmf-dist/source/generic/babel-french/frenchb.dtx
@@ -0,0 +1,3571 @@
+% \CheckSum{2913}
+%
+% \iffalse
+% Tell the \LaTeX\ system who we are and write an entry on the
+% transcript. Nothing to write to the .cfg file, if generated.
+%<*dtx>
+\ProvidesFile{frenchb.dtx}
+%</dtx>
+% \changes{v2.1d}{2008/05/04}{Argument of \cs{ProvidesLanguage} changed
+% from `french' to `frenchb', otherwise \cs{listfiles} prints
+% no date/version information. The bug with \cs{listfiles}
+% (introduced in v.~1.5!), was pointed out by Ulrike Fischer.}
+%<code>\ProvidesLanguage{frenchb}
+%\ProvidesFile{frenchb.dtx}
+%<*!cfg>
+ [2013/03/14 v2.6b French support from the babel system]
+%</!cfg>
+%<*cfg>
+%% frenchb.cfg: configuration file for frenchb.ldf
+%% Daniel Flipo daniel.flipo at free.fr
+%</cfg>
+%% File `frenchb.dtx'
+%% Babel package for LaTeX version 2e
+%% Copyright (C) 1989 - 2013
+%% by Daniel Flipo, GUTenberg
+%
+%<*!cfg>
+%% Frenchb language Definition File
+%% Copyright (C) 1989 - 2013
+%% by Daniel Flipo, GUTenberg
+%
+%% Please report errors to: Daniel Flipo, GUTenberg
+%% daniel.flipo at free.fr
+%</!cfg>
+%
+% This file is part of the babel system, it provides the source
+% code for the French language definition file.
+%
+%<*filedriver>
+\documentclass[a4paper]{ltxdoc}
+\DeclareFontEncoding{T1}{}{}
+\DeclareFontSubstitution{T1}{lmr}{m}{n}
+\DeclareTextCommand{\guillemotleft}{OT1}{%
+ {\fontencoding{T1}\fontfamily{lmr}\selectfont\char19}}
+\DeclareTextCommand{\guillemotright}{OT1}{%
+ {\fontencoding{T1}\fontfamily{lmr}\selectfont\char20}}
+\newcommand*\TeXhax{\TeX hax}
+\newcommand*\babel{\textsf{babel}}
+\newcommand*\langvar{$\langle \mathit lang \rangle$}
+\newcommand*\note[1]{}
+\newcommand*\Lopt[1]{\textsf{#1}}
+\newcommand*\file[1]{\texttt{#1}}
+\lefthyphenmin=2 \righthyphenmin=3
+\begin{document}
+\setlength{\parindent}{0pt}
+\begin{center}
+ \textbf{\Large A Babel language definition file for French}\\[3mm]^^A\]
+ Daniel \textsc{Flipo}\\
+ \texttt{daniel.flipo@free.fr}
+\end{center}
+ \RecordChanges
+ \DocInput{frenchb.dtx}
+\end{document}
+%</filedriver>
+% \fi
+% \GetFileInfo{frenchb.dtx}
+%
+% \section{The French language}
+%
+% The file \file{\filename}\footnote{The file described in this
+% section has version number \fileversion\ and was last revised on
+% \filedate.}, defines all the language definition macros for the
+% French language.
+%
+% Customisation for the French language is achieved following the
+% book ``Lexique des r\`egles typographiques en usage \`a
+% l'Imprimerie nationale'' troisi\`eme \'edition (1994),
+% ISBN-2-11-081075-0.
+%
+% First version released: 1.1 (1996/05/31) as part of
+% \babel-3.6beta.
+%
+% |frenchb| has been improved using helpful suggestions from many
+% people, mainly from Jacques Andr\'e, Michel Bovani, Thierry Bouche,
+% and Vincent Jalby. Thanks to all of them!
+%
+% This new version (2.x) has been designed to be used with \LaTeXe{}
+% and Plain\TeX{} formats only. \LaTeX-2.09 is no longer supported.
+% Changes between version 1.6 and \fileversion{} are listed in
+% subsection~\ref{ssec-changes} p.~\pageref{ssec-changes}.
+%
+% An extensive documentation is available in French here:\\
+% |http://daniel.flipo.free.fr/frenchb|
+%
+% \subsection{Basic interface}
+%
+% In a multilingual document, some typographic rules are language
+% dependent, i.e.\ spaces before `double punctuation' (|:| |;| |!|
+% |?|) in French, others concern the general layout (i.e.\ layout of
+% lists, footnotes, indentation of first paragraphs of sections) and
+% should apply to the whole document.
+%
+% Starting with version~2.2, |frenchb| behaves differently according
+% to \babel's \emph{main language} defined as the \emph{last}
+% option\footnote{Its name is kept in \texttt{\textbackslash
+% bbl@main@language}.} at \babel's loading. When French is
+% not \babel's main language, |frenchb| no longer alters the global
+% layout of the document (even in parts where French is the current
+% language): the layout of lists, footnotes, indentation of first
+% paragraphs of sections are not customised by |frenchb|.
+%
+% When French is loaded as the last option of \babel, |frenchb|
+% makes the following changes to the global layout, \emph{both in
+% French and in all other languages}\footnote{%
+% For each item, hooks are provided to reset standard
+% \LaTeX{} settings or to emulate the behavior of former versions
+% of \texttt{frenchb} (see command
+% \texttt{\textbackslash frenchbsetup\{\}},
+% section~\ref{ssec-custom}).}:
+% \begin{enumerate}
+% \item the first paragraph of each section is indented
+% (\LaTeX{} only);
+% \item the default items in itemize environment are set to `---'
+% instead of `\textbullet', and all vertical spacing and glue
+% is deleted; it is possible to change `---' to something else
+% (`--' for instance) using |\frenchbsetup{}|;
+% \item vertical spacing in general \LaTeX{} lists is
+% shortened;
+% \item footnotes are displayed ``\`a la fran\c{c}aise''.
+% \end{enumerate}
+%
+% Regarding local typography, the command |\selectlanguage{french}|
+% switches to the French language\footnote{%
+% \texttt{\textbackslash selectlanguage\{francais\}}
+% and \texttt{\textbackslash selectlanguage\{frenchb\}} are kept
+% for backward compatibility but should no longer be used.},
+% with the following effects:
+% \begin{enumerate}
+% \item French hyphenation patterns are made active;
+% \item `double punctuation' (|:| |;| |!| |?|) is made
+% active%\footnote{Actually, they are active in the whole
+% document, only their expansions differ in French and
+% outside French.} for correct spacing in French;
+% \item |\today| prints the date in French;
+% \item the caption names are translated into French
+% (\LaTeX{} only);
+% \item the space after |\dots| is removed in French.
+% \end{enumerate}
+%
+% Some commands are provided in |frenchb| to make typesetting
+% easier:
+% \begin{enumerate}
+% \item French quotation marks can be entered using the commands
+% |\og| and |\fg| which work in \LaTeXe and Plain\TeX,
+% their appearance depending on what is available to draw
+% them; even if you use \LaTeXe{} \emph{and} |T1|-encoding,
+% you should refrain from entering them as
+% |<<~French quotation marks~>>|: |\og| and |\fg| provide
+% better horizontal spacing.
+% |\og| and |\fg| can be used outside French, they typeset
+% then English quotes `` and ''.
+% \item A command |\up| is provided to typeset superscripts like
+% |M\up{me}| (abbreviation for ``Madame''), |1\up{er}| (for
+% ``premier''). Other commands are also provided for
+% ordinals: |\ier|, |\iere|, |\iers|, |\ieres|, |\ieme|,
+% |\iemes| (|3\iemes| prints 3\textsuperscript{es}).
+% \item Family names should be typeset in small capitals and never
+% be hyphenated, the macro |\bsc| (boxed small caps) does
+% this, e.g., |Leslie~\bsc{Lamport}| will produce
+% Leslie~\mbox{\textsc{Lamport}}. Note that composed names
+% (such as Dupont-Durant) may now be hyphenated on explicit
+% hyphens, this differs from |frenchb|~v.~1.x.
+% \item Commands |\primo|, |\secundo|, |\tertio| and |\quarto|
+% print 1\textsuperscript{o}, 2\textsuperscript{o},
+% 3\textsuperscript{o}, 4\textsuperscript{o}.
+% |\FrenchEnumerate{6}| prints 6\textsuperscript{o}.
+% \item Abbreviations for ``Num\'ero(s)'' and ``num\'ero(s)''
+% (N\textsuperscript{o} N\textsuperscript{os}
+% n\textsuperscript{o} and n\textsuperscript{os}~)
+% are obtained via the commands |\No|, |\Nos|, |\no|, |\nos|.
+% \item Two commands are provided to typeset the symbol for
+% ``degr\'e'': |\degre| prints the raw character and
+% |\degres| should be used to typeset temperatures (e.g.,
+% ``|20~\degres C|'' with an unbreakable space), or for
+% alcohols'' strengths (e.g., ``|45\degres|'' with \emph{no}
+% space in French).
+% \item In math mode the comma has to be surrounded with
+% braces to avoid a spurious space being inserted after it,
+% in decimal numbers for instance (see the \TeX{}book p.~134).
+% The command |\DecimalMathComma| makes the comma be an
+% ordinary character \emph{in French only} (no space added);
+% as a counterpart, if |\DecimalMathComma| is active, an
+% explicit space has to be added in lists and intervals:
+% |$[0,\ 1]$|, |$(x,\ y)$|. |\StandardMathComma| switches
+% back to the standard behaviour of the comma.
+% \item A command |\nombre| was provided in 1.x versions to easily
+% format numbers in slices of three digits separated either
+% by a comma in English or with a space in French; |\nombre|
+% is now mapped to |\numprint| from \file{numprint.sty}, see
+% \file{numprint.pdf} for more information.
+% \item |frenchb| has been designed to take advantage of the
+% \file{xspace} package if present: adding
+% |\usepackage{xspace}| in the preamble will force macros like
+% |\fg|, |\ier|, |\ieme|, |\dots|, \dots, to respect the
+% spaces you type after them, for instance typing
+% `|1\ier juin|' will print `1\textsuperscript{er} juin'
+% (no need for a forced space after |1\ier|).
+% \end{enumerate}
+%
+% \subsection{Customisation}
+% \label{ssec-custom}
+%
+% Up to version 1.6, customisation of |frenchb| was achieved
+% by entering commands in \file{frenchb.cfg}. This possibility
+% remains for compatibility, but \emph{should not longer be used}.
+% Version 2.0 introduces a new command |\frenchbsetup{}| using
+% the \file{keyval} syntax which should make it easier to choose
+% among the many options available. The command |\frenchbsetup{}|
+% is to appear in the preamble only (after loading \babel).
+%
+% \vspace{.5\baselineskip}
+% |\frenchbsetup{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,
+% boolean options (as |ShowOptions|) can be entered as
+% |ShowOptions=true| or just |ShowOptions|, the `|=true|' part
+% can be omitted.
+%
+% \vspace{.5\baselineskip}
+% The other options are listed below. Their default value is
+% shown between brackets, sometimes followed be a `\texttt{*}'.
+% The `\texttt{*}' means that the default shown applies when
+% |frenchb| is loaded as the \emph{last} option of \babel{}
+% ---\babel's \emph{main language}---, and is toggled otherwise:
+% \begin{itemize}
+% \item |StandardLayout=true [false*]| forces |frenchb| not to
+% interfere with the layout: no action on any kind of lists,
+% first paragraphs of sections are not indented (as in English),
+% no action on footnotes. This option replaces the former
+% command |\StandardLayout|. It might be used to avoid conflicts
+% with classes or packages which customise lists or footnotes.
+% \item |GlobalLayoutFrench=false [true*]| can be used, when French
+% is the main language, to emulate what prior versions of
+% |frenchb| (pre-2.2) did: lists, and first paragraphs
+% of sections will be displayed the standard way in other
+% languages than French, and ``\`a la fran\c{c}aise'' in French.
+% Note that the layout of footnotes is language independent
+% anyway (see below |FrenchFootnotes| and |AutoSpaceFootnotes|).
+% This option replaces the former command |\FrenchLayout|.
+% \item |ReduceListSpacing=false [true*]|; |frenchb| reduces the
+% values of the vertical spaces used in the \emph{all} list
+% environments in French (this includes itemize, enumerate,
+% description, but also abstract, quote, quotation and verse and
+% possibly others). Setting this option to |false|
+% reverts to the standard settings of |list|. This option
+% replaces the former command |\FrenchListSpacingfalse|.
+% \item |ListOldLayout=true [false]|; starting with version~2.6a,
+% the layout of lists has changed regarding leftmargins' sizes
+% and default itemize label (`---' instead of `--' up to~2.5k).
+% This option, provided for backward compatibility, displays
+% lists as they were up to version~2.5k.
+% \item |CompactItemize=false [true*]|; should no longer be used
+% (kept only for backward compatibility).
+% \item |StandardItemizeEnv=true [false*]|; |frenchb| redefines
+% the |itemize| environment to suppress any vertical space
+% between items of |itemize| lists in French and customize
+% leftmargins. Setting this option to |false| reverts to the
+% standard definition of |itemize|.
+% \item |StandardEnumerateEnv=true [false*]|; starting with
+% version~2.6a |frenchb| redefines the |enumerate| environment
+% to make leftmargins match those of the French version of
+% |itemize| lists. Setting this option to |false| reverts to
+% the standard definition of |enumerate|.
+% \item |StandardItemLabels=true [false*]| when set to |true| this
+% option stops |frenchb| from changing the labels in |itemize|
+% lists in French.
+% \item |ItemLabels=\textendash|, |\textbullet|, |\ding{43}|,
+% \dots, |[\textemdash*]|; when |StandardItemLabels=false| (the
+% default), this option enables to choose the label used in
+% |itemize| lists for all levels. The next three options do
+% the same but each one for one level only. Note that the
+% example |\ding{43}| requires |\usepackage{pifont}|.
+% \item |ItemLabeli=\textendash|, |\textbullet|, |\ding{43}|,
+% \dots,|[\textemdash*]|
+% \item |ItemLabelii=\textendash|, |\textbullet|, |\ding{43}|,
+% \dots, |[\textemdash*]|
+% \item |ItemLabeliii=\textendash|, |\textbullet|, |\ding{43}|,
+% \dots, |[\textemdash*]|
+% \item |ItemLabeliv=\textendash|, |\textbullet|, |\ding{43}|,
+% \dots, |[\textemdash*]|
+% \item |StandardLists=true [false*]| forbids |frenchb| to
+% customise any kind of list. Try the option |StandardLists|
+% in case of conflicts with classes or packages that customise
+% lists too. This option is just a shorthand for all four options
+% |ReduceListSpacing=false|, |StandardItemizeEnv=true|,
+% |StandardEnumerateEnv=true| and |StandardItemLabels=true|.
+% \item |IndentFirst=false [true*]|; |frenchb| normally forces
+% indentation of the first paragraph of sections.
+% When this option is set to |false|, the first paragraph of
+% will look the same in French and in English (not indented).
+% \item |FrenchFootnotes=false [true*]| reverts to the standard
+% layout of footnotes. By default |frenchb| typesets leading
+% numbers as `1.\hspace{.5em}' instead of `$\hbox{}^1$', but
+% has no effect on footnotes numbered with symbols (as in the
+% |\thanks| command). The former commands |\StandardFootnotes|
+% and |\FrenchFootnotes| are still there, |\StandardFootnotes|
+% can be useful when some footnotes are numbered with letters
+% (inside minipages for 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 |false|
+% reverts to the standard setting (no space added).
+% \item |FrenchSuperscripts=false [true]| ; then
+% |\up=\textsuperscript| (option added in version 2.1).
+% Should only be made |false| to recompile older documents.
+% By default |\up| now relies on |\fup| designed to produce
+% better looking superscripts.
+% \item |AutoSpacePunctuation=false [true]|; in French, the user
+% \emph{should} input a space before the four characters `|:;!?|'
+% but as many people forget about it (even among native French
+% writers!), the default behaviour of |frenchb| is to
+% automatically add a |\thinspace| before `|;|' `|!|' `|?|' and a
+% normal (unbreakable) space before~`|:|' (this is recommended by
+% the French Imprimerie nationale). This is convenient in most
+% cases but can lead to addition of spurious spaces in URLs or in
+% MS-DOS paths but only if they are no typed using |\texttt| or
+% verbatim mode. When the current font is a monospaced
+% (typewriter) font, |AutoSpacePunctuation| is locally switched
+% to |false|, no spurious space is added in that case, so the
+% default behaviour of of |frenchb| in that area should be fine
+% in most circumstances.
+%
+% Choosing |AutoSpacePunctuation=false| will ensure that
+% a proper space will be added before `|:;!?|' \emph{if and only
+% if} a (normal) space has been typed in. Those who are unsure
+% about their typing in this area should stick to the default
+% option and type |\string;| |\string:| |\string!| |\string?|
+% instead of |;| |:| |!| |?| in case an unwanted space is
+% added by |frenchb|.
+% \item |ThinColonSpace=true [false]| changes the normal
+% (unbreakable) space added before the colon `:' to a thin space,
+% so that the same amount of space is added before any of the
+% four double punctuation characters. The default setting is
+% supported by the French Imprimerie nationale.
+% \item |LowercaseSuperscripts=false [true]| ; by default |frenchb|
+% inhibits the uppercasing of superscripts (for instance when they
+% are moved to page headers). Making this option |false|
+% will disable this behaviour (not recommended).
+% \item |PartNameFull=false [true]|; when true, |frenchb| numbers
+% the title of |\part{}| commands as ``Premi\`ere partie'',
+% ``Deuxi\`eme partie'' and so on. With some classes which change
+% the|\part{}| command (AMS and SMF classes do so), you will get
+% ``Premi\`ere partie~I'', ``Deuxi\`eme partie~II'' instead;
+% when this occurs, this option should be set to |false|,
+% part titles will then be printed as ``Partie I'', ``Partie II''.
+% \item |SuppressWarning=true [false]|; when true |frenchb| issues
+% no warnings if |\@makecaption| has been redefined or if the
+% \file{bigfoot} package is in use.
+% \item |og=|\texttt{\guillemotleft}, |fg=|\texttt{\guillemotright};
+% when guillemets characters are available on the keyboard
+% (through a compose key for instance), it is nice to use them
+% instead of typing |\og| and |\fg|. This option tells |frenchb|
+% which characters are opening and closing French guillemets
+% (they depend on the input encoding), then you can type either
+% \texttt{\guillemotleft{} guillemets \guillemotright}, or
+% \texttt{\guillemotleft{}guillemets\guillemotright} (with or
+% without spaces), to get properly typeset French quotes.
+% This option requires \file{inputenc} to be loaded with the
+% proper encoding, it works with 8-bits encodings (latin1,
+% latin9, ansinew, applemac,\dots) and multi-byte encodings
+% (utf8 and utf8x).
+% \end{itemize}
+%
+% \subsection{Hyphenation checks}
+% \label{ssec-hyphen}
+%
+% Once you have built your format, a good precaution would be to
+% perform some basic tests about hyphenation in French.
+% For \LaTeXe{} I suggest this:
+% \begin{itemize}
+% \item run the following file, with the encoding suitable for
+% your machine (\textit{my-encoding} will be |latin1| for
+% \textsc{unix} machines, |ansinew| for PCs running~Windows,
+% |applemac| or |latin1| for Macintoshs, or |utf8|\dots\\[3mm]^^A\]
+% |%%% Test file for French hyphenation.|\\
+% |\documentclass{article}|\\
+% |\usepackage[|\textit{my-encoding}|]{inputenc}|\\
+% |\usepackage[T1]{fontenc} % Use LM fonts|\\
+% |\usepackage{lmodern} % for French|\\
+% |\usepackage[frenchb]{babel}|\\
+% |\begin{document}|\\
+% |\showhyphens{signal container \'ev\'enement alg\`ebre}|\\
+% |\showhyphens{|\texttt{signal container \'ev\'enement
+% alg\`ebre}|}|\\
+% |\end{document}|
+% \item check the hyphenations proposed by \TeX{} in your log-file;
+% in French you should get with both 7-bit and 8-bit encodings\\
+% \texttt{si-gnal contai-ner \'ev\'e-ne-ment al-g\`ebre}.\\
+% Do not care about how accented characters are displayed in the
+% log-file, what matters is the position of the `|-|' hyphen
+% signs \emph{only}.
+% \end{itemize}
+% If they are all correct, your installation (probably) works fine,
+% if one (or more) is (are) wrong, ask a local wizard to see what's
+% going wrong and perform the test again (or e-mail me about what
+% happens).\\
+% Frequent mismatches:
+% \begin{itemize}
+% \item you get |sig-nal con-tainer|, this probably means that the
+% hyphenation patterns you are using are for US-English, not for
+% French;
+% \item you get no hyphen at all in \texttt{\'ev\'e-ne-ment}, this
+% probably means that you are using CM fonts and the macro
+% |\accent| to produce accented characters.
+% Using 8-bits fonts with built-in accented characters avoids
+% this kind of mismatch.
+% \end{itemize}
+%
+% \textbf{Options' order} -- Please remember that options are read
+% in the order they appear inside the |\frenchbsetup| command.
+% Someone wishing that |frenchb| leaves the layout of lists
+% and footnotes untouched but caring for indentation of first
+% paragraph of sections could choose
+% |\frenchbsetup{StandardLayout,IndentFirst}| and get the expected
+% layout. Choosing |\frenchbsetup{IndentFirst,StandardLayout}|
+% would not lead to the expected result: option |IndentFirst| would
+% be overwritten by |StandardLayout|.
+%
+% \subsection{Changes}
+% \label{ssec-changes}
+%
+% \subsubsection*{What's new in version 2.0?}
+%
+% Here is the list of all changes:
+% \begin{itemize}
+% \item Support for \LaTeX-2.09 and for \LaTeXe{} in compatibility
+% mode has been dropped. This version is meant for \LaTeXe{} and
+% Plain based formats (like \file{bplain}). \LaTeXe{} formats
+% based on ml\TeX{} are no longer supported either (plenty of
+% good 8-bits fonts are available now, so T1 encoding should
+% be preferred for typesetting in French). A warning is issued
+% when OT1 encoding is in use at the |\begin{document}|.
+% \item Customisation should now be handled by command
+% |\frenchbsetup{}|, \file{frenchb.cfg} (kept for compatibility)
+% should no longer be used. See section~\ref{ssec-custom} for
+% the list of available options.
+% \item Captions in figures and table have changed in French: former
+% abbreviations ``Fig.'' and ``Tab.'' have been replaced by full
+% names ``Figure'' and ``Table''. If this leads to formatting
+% problems in captions, you can add the following two commands to
+% your preamble (after loading \babel) to get the former captions\\
+% |\addto\captionsfrench{\def\figurename{{\scshape Fig.}}}|\\
+% |\addto\captionsfrench{\def\tablename{{\scshape Tab.}}}|.
+% \item The |\nombre| command is now provided by the \file{numprint}
+% package which has to be loaded \emph{after} \babel{} with the
+% option |autolanguage| if number formatting should depend on the
+% current language.
+% \item The |\bsc| command no longer uses an |\hbox| to stop
+% hyphenation of names but a |\kern0pt| instead. This change
+% enables \file{microtype} to fine tune the length of the
+% argument of |\bsc|; as a side-effect, compound names like
+% Dupont-Durand can now be hyphenated on explicit hyphens.
+% You can get back to the former behaviour of |\bsc| by adding\\
+% |\renewcommand*{\bsc}[1]{\leavevmode\hbox{\scshape #1}}|\\
+% to the preamble of your document.
+% \item Footnotes are now displayed ``\`a la fran\c caise'' for the
+% whole document, except with an explicit\\
+% |\frenchbsetup{AutoSpaceFootnotes=false,FrenchFootnotes=false}|.\\
+% Add this command if you want standard footnotes. It is still
+% possible to revert locally to the standard layout of footnotes
+% by adding |\StandardFootnotes| (inside a |minipage| environment
+% for instance).
+% \end{itemize}
+%
+% \subsubsection*{What's new in version 2.1?}
+%
+% New command |\fup| to typeset better looking superscripts.
+% Former command |\up| is now defined as |\fup|, an option
+% |\frenchbsetup{FrenchSuperscripts=false}| is provided for
+% backward compatibility. |\fup| was designed using ideas from
+% Jacques Andr\'e, Thierry Bouche and Ren\'e Fritz, thanks to them!
+%
+% \subsubsection*{What's new in version 2.2?}
+%
+% Starting with version~2.2a, |frenchb| alters the layout of
+% lists, footnotes, and the indentation of first paragraphs of
+% sections) \emph{only if} French is the ``main language''
+% (i.e. babel's last language option). The layout is global for
+% the whole document: lists, etc.\ look the same in French and in
+% other languages, everything is typeset ``\`a la fran\c caise''
+% if French is the ``main language'', otherwise |frenchb| doesn't
+% change anything regarding lists, footnotes, and indentation of
+% paragraphs.
+%
+% \subsubsection*{What's new in version 2.3?}
+%
+% Starting with version~2.3a, |frenchb| no longer inserts spaces
+% automatically before `|:;!?|' when a typewriter font is in use;
+% this was suggested by Yannis Haralambous to prevent
+% spurious spaces in computer source code or expressions like
+% \texttt{C\string:/foo}, \texttt{http\string://foo.bar},
+% etc. An option (|OriginalTypewriter|) is provided to get back
+% to the former behaviour of |frenchb|.
+%
+% Another probably invisible change: lowercase conversion in
+% |\up{}| is now achieved by the \LaTeX{} command |\MakeLowercase|
+% instead of \TeX's |\lowercase| command. This prevents error
+% messages when diacritics are used inside |\up{}| (diacritics
+% should \emph{never} be used in superscripts though!).
+%
+% \subsubsection*{What's new in version 2.4?}
+%
+% A new option |SuppressWarning| has been added (desactivated by
+% default) to suppress warnings if |\@makecaption| has been
+% redefined or if the \file{bigfoot} package is in use.
+%
+% French hyphenation patterns are now coded in Unicode, see file
+% \file{hyph-fr.tex}. Extra code has been added to deal with
+% hyphenation of the French ``apostrophe'' with XeTeX and LuaTeX
+% engines.
+%
+% Better compatibility with the \file{enumitem} package.
+%
+% When typewriter fonts are in use (hence in verbatim mode) no
+% space is added after `\guillemotleft' and before
+% `\guillemotright' when they are entered as characters
+% (see |\frenchbsetup|).
+%
+% \subsubsection*{What's new in version 2.5?}
+%
+% The main change is that active characters are no longer used
+% in French with (recent) Xe\TeX-based engines (they still are
+% with \TeX-based engines). All the functionalities (automatic
+% insertion of missing spaces before |:;!?| or bare replacement
+% of typed spaces with suitable unbreabable ones, tuning of the
+% spaces width) remain available and the user interface is
+% unchanged. The use of active characters is replaced by the
+% |\XeTeXinterchartoks| mechanism (as in package
+% \file{polyglossia}).
+%
+% A new command |\NoAutoSpacing| has been added. It should be used
+% \emph{inside a group} instead of |\shorthandoff{;:!?}| whenever
+% active characters or automatic spacing of French punctuation or
+% quote characters conflict with other packages; it is designed to
+% work with \TeX- and Xe\TeX-based engines.
+%
+% Bug corrections: |\frenchspacing| and |\nonfrenchspacing| are no
+% longer messed up by \file{frenchb.ldf}.
+%
+% \subsubsection*{What's new in version 2.6?}
+%
+% The way |frenchb| handles list environments has been completely
+% redesigned in version~2.6a due to a long standing bug affecting
+% enumerate lists inside itemize lists. Horizontal indentation of
+% itemize and enumerate lists differs now from previous versions,
+% an option for backward compatibility is provided:
+% |\frenchbsetup{ListOldLayout}|.
+%
+% |frenchb| is now compatible with the \file{paralist} package.
+%
+% \StopEventually{}
+%
+% \subsection{File frenchb.cfg}
+% \label{sec-cfg}
+%
+% \file{frenchb.cfg} is now a dummy file just kept for compatibility
+% with previous versions.
+%
+% \iffalse
+%<*cfg>
+% \fi
+% \begin{macrocode}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%% WARNING: THIS FILE SHOULD NO LONGER BE USED %%%%%%%%%
+%% If you want to customise frenchb, please DO NOT hack into the code!
+%% Do no put any code in this file either, please use the new command
+%% \frenchbsetup{} with the proper options to customise frenchb.
+%%
+%% Add \frenchbsetup{ShowOptions} to your preamble to see the list of
+%% available options and/or read the documentation.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% \end{macrocode}
+% \iffalse
+%</cfg>
+% \fi
+%
+% \subsection{Initial setup}
+%
+% \changes{v2.1d}{2008/05/02}{Argument of \cs{ProvidesLanguage} changed
+% above from `french' to `frenchb' (otherwise \cs{listfiles} prints
+% no date/version information). The real name of current language
+% (french) as to be corrected before calling \cs{LdfInit}.}
+%
+% \iffalse
+%<*code>
+% \fi
+%
+% While this file was read through the option \Lopt{frenchb} we make
+% it behave as if \Lopt{french} was specified.
+% \begin{macrocode}
+\def\CurrentOption{french}
+% \end{macrocode}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once, checking the category code of the
+% \texttt{@} sign, etc.
+%
+% \begin{macrocode}
+\LdfInit\CurrentOption\datefrench
+% \end{macrocode}
+%
+% \changes{v2.1d}{2008/05/04}{Avoid warning ``\cs{end} occurred
+% when \cs{ifx} ... incomplete'' with LaTeX-2.09.}
+%
+% \begin{macro}{\ifLaTeXe}
+% No support is provided for late \LaTeX-2.09: issue a warning
+% and exit if \LaTeX-2.09 is in use. Plain is still supported.
+% \begin{macrocode}
+\newif\ifLaTeXe
+\let\bbl@tempa\relax
+\ifx\magnification\@undefined
+ \ifx\@compatibilitytrue\@undefined
+ \PackageError{frenchb.ldf}
+ {LaTeX-2.09 format is no longer supported.\MessageBreak
+ Aborting here}
+ {Please upgrade to LaTeX2e!}
+ \let\bbl@tempa\endinput
+ \else
+ \LaTeXetrue
+ \fi
+\fi
+\bbl@tempa
+% \end{macrocode}
+% \end{macro}
+%
+% Check if hyphenation patterns for the French language have been
+% loaded in language.dat; we allow for the names `french',
+% `francais', `canadien' or `acadian'. The latter two are both
+% names used in Canada for variants of French that are in use in
+% that country.
+%
+% \begin{macrocode}
+\ifx\l@french\@undefined
+ \ifx\l@francais\@undefined
+ \ifx\l@canadien\@undefined
+ \ifx\l@acadian\@undefined
+ \@nopatterns{French}
+ \adddialect\l@french0
+ \else
+ \let\l@french\l@acadian
+ \fi
+ \else
+ \let\l@french\l@canadien
+ \fi
+ \else
+ \let\l@french\l@francais
+ \fi
+\fi
+% \end{macrocode}
+% Now |\l@french| is always defined.
+%
+% The internal name for the French language is |french|;
+% |francais| and |frenchb| are synonymous for |french|:
+% first let both names use the same hyphenation patterns.
+% Later we will have to set aliases for |\captionsfrench|,
+% |\datefrench|, |\extrasfrench| and |\noextrasfrench|.
+% As French uses the standard values of |\lefthyphenmin| (2)
+% and |\righthyphenmin| (3), no special setting is required here.
+%
+% \begin{macrocode}
+\ifx\l@francais\@undefined
+ \let\l@francais\l@french
+\fi
+\ifx\l@frenchb\@undefined
+ \let\l@frenchb\l@french
+\fi
+% \end{macrocode}
+% When this language definition file was loaded for one of the
+% Canadian versions of French we need to make sure that a suitable
+% hyphenation pattern register will be found by \TeX.
+% \begin{macrocode}
+\ifx\l@canadien\@undefined
+ \let\l@canadien\l@french
+\fi
+\ifx\l@acadian\@undefined
+ \let\l@acadian\l@french
+\fi
+% \end{macrocode}
+%
+% This language definition can be loaded for different variants of
+% the French language. The `key' \babel\ macros are only defined
+% once, using `french' as the language name, but |frenchb| and
+% |francais| are synonymous.
+% \begin{macrocode}
+\def\datefrancais{\datefrench}
+\def\datefrenchb{\datefrench}
+\def\extrasfrancais{\extrasfrench}
+\def\extrasfrenchb{\extrasfrench}
+\def\noextrasfrancais{\noextrasfrench}
+\def\noextrasfrenchb{\noextrasfrench}
+% \end{macrocode}
+%
+% \begin{macro}{\extrasfrench}
+% \begin{macro}{\noextrasfrench}
+% The macro |\extrasfrench| will perform all the extra
+% definitions needed for the French language.
+% The macro |\noextrasfrench| is used to cancel the actions of
+% |\extrasfrench|.\\
+% In French, character ``apostrophe'' is a letter in expressions
+% like |l'ambulance| (French hyphenation patterns provide entries
+% for this kind of words). This means that the |\lccode| of
+% ``apostrophe'' has to be non null in French for proper hyphenation
+% of those expressions, and has to be reset to null when exiting
+% French.
+%
+% \begin{macro}{\ifFBunicode}
+% \begin{macro}{\ifFLuaTeX}
+% \begin{macro}{\ifFXeTeX}
+% French hyphenation patterns are now coded in Unicode, see file
+% \file{hyph-fr.tex}. XeTeX and LuaTeX engines require some extra
+% code to deal with the French ``apostrophe''.
+% Let's define three new `if': |\ifFBLuaTeX|, |\ifFBXeTeX| and
+% |\ifFBunicode| which will be true for XeTeX and LuaTeX engines
+% and false for 8-bits engines.
+%
+% \changes{v2.4a}{2009/11/23}{Added a new `if' \cs{FBunicode} and
+% some \cs{lccode} definitions to \cs{extrasfrench} and
+% \cs{noextrasfrench}.}
+%
+% \changes{v2.5d}{2011/01/17}{Added two new `if' \cs{FBXeTeX} and
+% \cs{FBLuaTeX} as XeTeX and behave differently regarding the status
+% of the French ``apostrophe''.}
+%
+% \begin{macrocode}
+\newif\ifFBunicode
+\newif\ifFBLuaTeX
+\newif\ifFBXeTeX
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname luatexversion\endcsname\relax
+\else
+ \FBunicodetrue \FBLuaTeXtrue
+\fi
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname XeTeXrevision\endcsname\relax
+\else
+ \FBunicodetrue \FBXeTeXtrue
+\fi
+% \end{macrocode}
+% These |\lccode| changes will ensure correct hyphenation of
+% words like |d'aventure|, |l'utopie|, with all TeX engines
+% (XeTeX, LuaTeX, pdfTeX) using \file{hyph-fr.tex} patterns.
+% \begin{macrocode}
+\@namedef{extras\CurrentOption}{\lccode`\'=`\'
+ \ifFBLuaTeX \lccode`\'="2019 \fi
+ \ifFBXeTeX \lccode"2019=`\' \fi}
+\@namedef{noextras\CurrentOption}{\lccode`\'=0
+ \ifFBXeTeX \lccode"2019=0 \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% One more thing |\extrasfrench| needs to do is to make sure that
+% ``Frenchspacing'' is in effect. |\noextrasfrench| will switch
+% ``Frenchspacing'' off again if necessary.
+% \begin{macrocode}
+\addto\extrasfrench{\bbl@frenchspacing}
+\addto\noextrasfrench{\bbl@nonfrenchspacing}
+% \end{macrocode}
+%
+% \subsection{Punctuation}
+% \label{sec-punct}
+%
+% \changes{v2.5a}{2010/08/10}{Punctation is no longer made active
+% with XeTeX-based engines.}
+%
+% As long as no better solution is available, the `double
+% punctuation' characters (|;| |!| |?| and |:|) have to be made
+% |\active| for an automatic control of the amount of space to
+% insert before them. Xe\TeX{} provides an alternative to active
+% characters and Lua\TeX{} will hopefully do so as well in the
+% (near?) future.
+%
+% Before doing so, we have to save the standard definition of
+% |\@makecaption| (which includes two ':') to compare it later to
+% its definition at the |\begin{document}|.
+% \begin{macrocode}
+\long\def\STD@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{#1: #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1: #2\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+% \end{macrocode}
+%
+% \changes{v2.5a}{2010/08/10}{Define \cs{Fthinspace} for those who want
+% to customise the width of the space before ; ! and ?.}
+%
+% According to the I.N.\ specifications, the `:' requires a normal
+% space before it, but some people prefer a |\thinspace| (just
+% like the other three). We define |\Fcolonspace| to hold the
+% required amount of space (user customisable). In case some users
+% are not satisfied with |\thinspace|'s width, it is also
+% customisable.
+% \begin{macrocode}
+\newcommand*{\Fcolonspace}{\space}
+\newcommand*{\Fthinspace}{\thinspace}
+% \end{macrocode}
+%
+% \begin{macro}{\ifF@active@punct}
+% \begin{macro}{\ifF@xetex@punct}
+% Check the availability of |\XeTeXinterchartokenstate| and decide
+% whether the `double punctuation' characters (|;| |!| |?| and |:|)
+% have to be made |\active| or not.
+% \begin{macrocode}
+\newif\ifFB@active@punct \FB@active@puncttrue
+\newif\ifFB@xetex@punct
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname XeTeXinterchartokenstate\endcsname\relax
+\else
+ \FB@xetex@puncttrue\FB@active@punctfalse
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% If |\XeTeXinterchartokenstate| is available, we use the
+% ``inter char'' mechanism (as in polyglossia, see
+% \file{gloss-french.ldf}) to provide correct spacing in French
+% before the four characters |;| |!| |?| and |:|. We use the same
+% mechanism for French quotes (\texttt{\guillemotleft} and
+% \texttt{\guillemotright}), when automatic spacing for quotes is
+% required by options \texttt{og=} and \texttt{fg=} in
+% |\frenchbsetup{}| (see section~\ref{sec-keyval}).
+%
+% For every character used in French text-mode (except spaces),
+% |\XeTeXcharclass| value must be 0.
+% |\XeTeXcharclass| value for spaces is assumed to be 255.
+% Otherwise, the spacing before the `double punctuation' characters
+% and inside quotes might not be correct.
+%
+% We switch |\XeTeXinterchartokenstate| to 1 and change the
+% |\XeTeXcharclass| values of |;| |!| |?| |:| |(| |]|
+% \texttt{\guillemotleft} and \texttt{\guillemotright} when
+% entering French. Special care is taken to restore them to their
+% inital values when leaving French.
+%
+% \changes{v2.5d}{2011/01/19}{Moved the \cs{newcount} command outside
+% \cs{ifFB@xetex@punct} ... \cs{fi} (it broke Plain formats).}
+%
+% \changes{v2.5g}{2012/01/02}{Add four \cs{newif} to control
+% spacing of quotes (characters and control sequences).}
+%
+% \changes{v2.5g}{2012/01/01}{Skip the message in Plain,
+% \cs{PackageInfo} undefined for Plain formats.}
+%
+% \begin{macrocode}
+\newif\ifFBAutoSpaceGuill \FBAutoSpaceGuilltrue
+\newif\ifFBguillo@addspace
+\newif\ifFBguillf@addspace
+\newif\ifFBog@addspace \FBog@addspacetrue
+\newif\ifFBfg@addspace \FBfg@addspacetrue
+\newcount\FB@interchartokenstateORI
+\ifFB@xetex@punct
+ \ifLaTeXe
+ \PackageInfo{frenchb.ldf}{No need for active punctuation characters
+ \MessageBreak with this version of XeTeX! reported}
+ \fi
+% \end{macrocode}
+% We will need the following code (borrowed from
+% \file{zhsusefulmacros.sty}) for loops:
+% \begin{macrocode}
+ \@ifundefined{@for}{%
+ \def\@nnil{\@nil}%
+ \def\@empty{}%
+ \def\@fornoop#1\@@#2#3{}%
+ \long\def\@for#1:=#2\do#3{%
+ \expandafter\def\expandafter\@fortmp\expandafter{#2}%
+ \ifx\@fortmp\@empty \else
+ \expandafter\@forloop#2,\@nil,\@nil\@@#1{#3}\fi}%
+ \long\def\@forloop#1,#2,#3\@@#4#5{\def#4{#1}\ifx #4\@nnil \else
+ #5\def#4{#2}\ifx #4\@nnil \else#5\@iforloop #3\@@#4{#5}\fi\fi}%
+ \long\def\@iforloop#1,#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@iforloop\fi#2\@@#3{#4}}%
+ \def\@tfor#1:={\@tf@r#1 }%
+ \long\def\@tf@r#1#2\do#3{\def\@fortmp{#2}\ifx\@fortmp\space\else
+ \@tforloop#2\@nil\@nil\@@#1{#3}\fi}%
+ \long\def\@tforloop#1#2\@@#3#4{\def#3{#1}\ifx #3\@nnil
+ \expandafter\@fornoop \else
+ #4\relax\expandafter\@tforloop\fi#2\@@#3{#4}}%
+ }{}%
+% \end{macrocode}
+% \changes{v2.5i}{2012/04/20}{Temporary fix: as long as
+% \file{xeCJK.sty} will not use \cs{newXeTeXintercharclass} to
+% allocate its classes, we will have to define 3 fake classes.}
+%
+% \changes{v2.5j}{2012/05/08}{Previous fix removed: bug fixed in
+% \file{xeCJK.sty} version 3.0.4 (06-May-2012).}
+%
+% Five new character classes are defined for |frenchb|.
+% \begin{macrocode}
+ \newXeTeXintercharclass\FB@punctthick
+ \newXeTeXintercharclass\FB@punctthin
+ \newXeTeXintercharclass\FB@punctnul
+ \newXeTeXintercharclass\FB@punctguilo
+ \newXeTeXintercharclass\FB@punctguilf
+% \end{macrocode}
+% We define a command to store the |\XeTeXcharclass| values which
+% will be modified for French (as a comma separated list) and a
+% command to retrieve them.
+% \begin{macrocode}
+ \def\FB@charclassesORI{}
+ \def\empty{}
+ \def\FB@parse#1,#2\endparse{\def\FB@class{#1}%
+ \def\FB@charclassesORI{#2}}%
+% \end{macrocode}
+%
+% \begin{macro}{\FB@xetex@punct@french}
+% The following command will be executed when entering French, it
+% first saves the values to be modified, then fits them to our
+% needs. It also redefines |\shorthandoff| and |\shorthandon|
+% (locally) to avoid error messages with XeTeX-based engines.
+%
+% \changes{v2.5g}{2011/12/31}{XeTeXcharclass(es) for French quotes will
+% be set to \cs{FB@punctguilo} and \cs{FB@punctguilf} by options
+% `og' and `fg' in \cs{frenchbsetup}. French quotes should behave
+% as normal characters by default in XeLaTeX as in LaTeX.}
+%
+% \changes{v2.5i}{2012/04/20}{\file{xeCJK.sty} changes the
+% \cs{XeTeXcharclass} of ASCII chars '-' ',' '.' ')' ']' '\}'
+% '\{' '\%' opening and closing single and double quotes.
+% We set their class to 0 in French and reset their class
+% to their original value when leaving French. See
+% \cs{FB@xetex@punct@nonfrench} below.}
+%
+% \begin{macrocode}
+ \newcommand*{\FB@xetex@punct@french}{%
+% \end{macrocode}
+% Saving must not be repeated if saved values are already in.
+% \begin{macrocode}
+ \ifx\FB@charclassesORI\empty
+ \FB@interchartokenstateORI=\XeTeXinterchartokenstate
+ \@for\FB@char:={`\:,`\;,`\!,`\?,"AB,"BB,`\(,`\[,`\{,`\,,`\.,%
+ `\-,`\),`\],`\},`\%,"22,"27,"60,"2019}\do
+ {\edef\FB@charclassesORI{\FB@charclassesORI%
+ \the\XeTeXcharclass\FB@char,}}%
+ \let\shorthandonORI\shorthandon
+ \let\shorthandoffORI\shorthandoff
+ \fi
+% \end{macrocode}
+% Set the classes and interactions between classes.
+% \begin{macrocode}
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\: = \FB@punctthick
+ \XeTeXinterchartoks \z@ \FB@punctthick = {%
+ \ifhmode\FDP@colonspace\fi}%
+ \XeTeXinterchartoks \FB@punctguilf \FB@punctthick = {%
+ \FDP@colonspace}%
+ \XeTeXinterchartoks 255 \FB@punctthick = {%
+ \ifhmode\unskip\penalty\@M\Fcolonspace\fi}%
+ \@for\FB@char:={`\;,`\!,`\?}\do
+ {\XeTeXcharclass\FB@char=\FB@punctthin}%
+ \XeTeXinterchartoks \z@ \FB@punctthin = {%
+ \ifhmode\FDP@thinspace\fi}%
+ \XeTeXinterchartoks \FB@punctguilf \FB@punctthin = {%
+ \FDP@thinspace}%
+ \XeTeXinterchartoks 255 \FB@punctthin = {%
+ \ifhmode\unskip\penalty\@M\Fthinspace\fi}%
+ \XeTeXinterchartoks \FB@punctguilo \z@ = {%
+ \ifFBAutoSpaceGuill\FBguill@spacing\fi}%
+ \XeTeXinterchartoks \FB@punctguilo 255 = {%
+ \ifFBAutoSpaceGuill\FBguill@spacing\ignorespaces\fi}%
+ \XeTeXinterchartoks \z@ \FB@punctguilf = {%
+ \ifFBAutoSpaceGuill\FBguill@spacing\fi}%
+ \XeTeXinterchartoks \FB@punctthin \FB@punctguilf = {%
+ \ifFBAutoSpaceGuill\FBguill@spacing\fi}%
+ \XeTeXinterchartoks 255 \FB@punctguilf = {%
+ \ifFBAutoSpaceGuill\unskip\FBguill@spacing\fi}%
+% \end{macrocode}
+% This avoids spurious spaces in (!), [?], etc.
+% \begin{macrocode}
+ \@for\FB@char:={`\[,`\(}\do
+ {\XeTeXcharclass\FB@char=\FB@punctnul}%
+% \end{macrocode}
+% These characters have their class changed by \file{xeCJK.sty},
+% let's reset them to 0 in French.
+% \begin{macrocode}
+ \@for\FB@char:={`\{,`\,,`\.,`\-,`\),`\],`\},`\%,%
+ "22,"27,"60,"2019}\do
+ {\XeTeXcharclass\FB@char=\z@}%
+% \end{macrocode}
+% With Xe(La)TeX, French defines no active shorthands.
+% \begin{macrocode}
+ \def\shorthandoff##1{%
+ \@ifundefined{PackageWarning}%
+ {\let\PackageWarning\undefined}%
+ {\PackageWarning{frenchb.ldf}{\protect\shorthandoff{;:!?} is
+ helpless with XeTeX,\MessageBreak use \protect\NoAutoSpacing
+ \space *inside a group* instead;\MessageBreak reported}%
+ }%
+ }%
+ \def\shorthandon##1{}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FB@xetex@punct@nonfrench}
+% The following command will be executed when leaving French for
+% restoring classes and commands modified in French.
+% When French is not the main language, |\noextrasfrench| is
+% executed `AtBeginDocument', so the test on
+% |\FB@charclassesORI| is mandatory.
+% \begin{macrocode}
+ \newcommand*{\FB@xetex@punct@nonfrench}{%
+ \ifx\FB@charclassesORI\empty
+ \else
+ \@for\FB@char:={`\:,`\;,`\!,`\?,"AB,"BB,`\(,`\[,`\{,`\,,`\.,%
+ `\-,`\),`\],`\},"22,"25,"27,"60,"2019}\do
+ {\expandafter\FB@parse\FB@charclassesORI\endparse
+ \XeTeXcharclass\FB@char=\FB@class}%
+ \def\FB@charclassesORI{}%
+ \XeTeXinterchartokenstate=\FB@interchartokenstateORI
+ \let\shorthandon\shorthandonORI
+ \let\shorthandoff\shorthandoffORI
+ \fi
+ }
+ \addto\extrasfrench{\FB@xetex@punct@french}
+ \addto\noextrasfrench{\FB@xetex@punct@nonfrench}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% Otherwise we need to make the four characters |;| |!| |?| and |:|
+% `active' and provide their definitions.
+% \begin{macrocode}
+\ifFB@active@punct
+ \initiate@active@char{:}%
+ \initiate@active@char{;}%
+ \initiate@active@char{!}%
+ \initiate@active@char{?}%
+% \end{macrocode}
+% We first tune the amount of space before \texttt{;}
+% \texttt{!} \texttt{?} and \texttt{:}. This should only happen
+% in horizontal mode, hence the test |\ifhmode|.
+%
+% In horizontal mode, if a space has been typed before `;' we
+% remove it and put an unbreakable |\thinspace| instead. If no
+% space has been typed, we add |\FDP@thinspace| which will be
+% defined, up to the user's wishes, as an automatic added
+% thin space, or as |\@empty|.
+% \begin{macrocode}
+ \declare@shorthand{french}{;}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\Fthinspace
+ \else
+ \FDP@thinspace
+ \fi
+ \fi
+% \end{macrocode}
+% Now we can insert a |;| character.
+% \begin{macrocode}
+ \string;}
+% \end{macrocode}
+% The next three definitions are very similar.
+% \begin{macrocode}
+ \declare@shorthand{french}{!}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\Fthinspace
+ \else
+ \FDP@thinspace
+ \fi
+ \fi
+ \string!}
+ \declare@shorthand{french}{?}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\Fthinspace
+ \else
+ \FDP@thinspace
+ \fi
+ \fi
+ \string?}
+ \declare@shorthand{french}{:}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\Fcolonspace
+ \else
+ \FDP@colonspace
+ \fi
+ \fi
+ \string:}
+% \end{macrocode}
+% When the active characters appear in an environment where their
+% French behaviour is not wanted they should give an `expected'
+% result. Therefore we define shorthands at system level as well.
+% \begin{macrocode}
+ \declare@shorthand{system}{:}{\string:}
+ \declare@shorthand{system}{!}{\string!}
+ \declare@shorthand{system}{?}{\string?}
+ \declare@shorthand{system}{;}{\string;}
+%}
+% \end{macrocode}
+% We specify that the French group of shorthands should be used when
+% switching to French.
+% \begin{macrocode}
+ \addto\extrasfrench{%
+ \languageshorthands{french}%
+% \end{macrocode}
+% These characters are `turned on' once, later their definition may
+% vary. Don't misunderstand the following code: they keep being
+% active all along the document, even when leaving French.
+% \begin{macrocode}
+ \bbl@activate{:}\bbl@activate{;}%
+ \bbl@activate{!}\bbl@activate{?}%
+ }
+ \addto\noextrasfrench{%
+ \bbl@deactivate{:}\bbl@deactivate{;}%
+ \bbl@deactivate{!}\bbl@deactivate{?}}
+\fi
+% \end{macrocode}
+%
+% A new `if' |\FBAutoSpacePunctuation| needs to be defined now.
+% \begin{macrocode}
+\newif\ifFBAutoSpacePunctuation \FBAutoSpacePunctuationtrue
+% \end{macrocode}
+%
+% \changes{v2.3a}{2008/10/10}{\cs{NoAutoSpaceBeforeFDP} and
+% \cs{AutoSpaceBeforeFDP} now set the flag
+% \cs{ifFBAutoSpacePunctuation} accordingly (LaTeX only).}
+%
+% \changes{v2.3e}{2009/10/10}{Execute \cs{AutoSpaceBeforeFDP}
+% also in LaTeX to define \cs{FDP@colonspace}: needed for
+% tex4ht, pointed out by MPG.}
+%
+% \begin{macro}{\AutoSpaceBeforeFDP}
+% \begin{macro}{\NoAutoSpaceBeforeFDP}
+% |\FDP@thinspace| and |\FDP@colonspace| are defined as unbreakable
+% spaces by |\autospace@beforeFDP| or as |\@empty| by
+% |\noautospace@beforeFDP| (internal commands), user commands
+% |\AutoSpaceBeforeFDP| and |\NoAutoSpaceBeforeFDP| do the same and
+% take care of the flag |\ifFBAutoSpacePunctuation| in \LaTeX{}.
+% Set the default now for Plain (done later for \LaTeX).
+% \begin{macrocode}
+\def\autospace@beforeFDP{%
+ \def\FDP@thinspace{\penalty\@M\Fthinspace}%
+ \def\FDP@colonspace{\penalty\@M\Fcolonspace}}
+\def\noautospace@beforeFDP{\let\FDP@thinspace\@empty
+ \let\FDP@colonspace\@empty}
+\ifLaTeXe
+ \def\AutoSpaceBeforeFDP{\autospace@beforeFDP
+ \FBAutoSpacePunctuationtrue}
+ \def\NoAutoSpaceBeforeFDP{\noautospace@beforeFDP
+ \FBAutoSpacePunctuationfalse}
+\else
+ \let\AutoSpaceBeforeFDP\autospace@beforeFDP
+ \let\NoAutoSpaceBeforeFDP\noautospace@beforeFDP
+ \fi
+\AutoSpaceBeforeFDP
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v2.3a}{2008/10/10}{In LaTeX, frenchb no longer adds spaces
+% before `double punctuation' characters in computer code.
+% Suggested by Yannis Haralambous.}
+%
+% \changes{v2.3c}{2009/02/07}{Commands \cs{ttfamily}, \cs{rmfamily}
+% and \cs{sffamily} have to be robust. Bug introduced in 2.3a,
+% pointed out by Manuel P\'egouri\'e-Gonnard.}
+%
+% In \LaTeXe{} |\ttfamily| (and hence |\texttt|) will be redefined
+% `AtBeginDocument' as |\ttfamilyFB| so that no space
+% is added before the four |; : ! ?| characters, even if
+% |AutoSpacePunctuation| is true. |\rmfamily| and |\sffamily| need
+% to be redefined also (|\ttfamily| is not always used inside a
+% group, its effect can be cancelled by |\rmfamily| or |\sffamily|).
+%
+% These redefinitions can be canceled if necessary, for instance to
+% recompile older documents, see option |OriginalTypewriter| below.
+%
+% \changes{v2.4c}{2010/05/23}{In \cs{ttfamilyFB}, also cancel
+% automatic spaces inside French guillemets entered as characters
+% (see \cs{frenchbsetup}).}
+%
+% To be consistent with what is done for the |; : ! ?|
+% characters, |\ttfamilyFB| also switches off insertion of spaces
+% inside French guillemets \emph{when they are typed in as
+% characters} with the `og'/`fg' options in |\frenchbsetup{}|.
+% This is also a workaround for the weird behaviour of these
+% characters in verbatim mode.
+%
+% \changes{v2.5g}{2012/01/02}{Switch flags \cs{ifFBog@addspace} and
+% \cs{ifFBfg@addspace} to true, otherwise \cs{og} and \cs{fg}
+% provide no spacing in XeLaTeX with options `og' and `fg'
+% activated in \cs{frenchbsetup} (bug v.~2.5a-f).}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \let\ttfamilyORI\ttfamily
+ \let\rmfamilyORI\rmfamily
+ \let\sffamilyORI\sffamily
+ \DeclareRobustCommand\ttfamilyFB{%
+ \FBAutoSpaceGuillfalse
+ \FBog@addspacetrue \FBfg@addspacetrue
+ \noautospace@beforeFDP\ttfamilyORI}%
+ \DeclareRobustCommand\rmfamilyFB{%
+ \FBAutoSpaceGuilltrue
+ \ifFBguillo@addspace\FBog@addspacefalse\fi
+ \ifFBguillf@addspace\FBfg@addspacefalse\fi
+ \ifFBAutoSpacePunctuation
+ \autospace@beforeFDP
+ \else
+ \noautospace@beforeFDP
+ \fi
+ \rmfamilyORI}%
+ \DeclareRobustCommand\sffamilyFB{%
+ \FBAutoSpaceGuilltrue
+ \ifFBguillo@addspace\FBog@addspacefalse\fi
+ \ifFBguillf@addspace\FBfg@addspacefalse\fi
+ \ifFBAutoSpacePunctuation
+ \autospace@beforeFDP
+ \else
+ \noautospace@beforeFDP
+ \fi
+ \sffamilyORI}%
+\fi
+% \end{macrocode}
+%
+% \changes{v2.5a}{2010/08/14}{New command \cs{NoAutoSpacing},
+% suggested by MPG.}
+%
+% \begin{macro}{\NoAutoSpacing}
+% The following command will switch off active punctuation
+% characters (if any) and disable automatic spacing for French quote
+% characters. It is engine independent (works for \TeX{} and
+% Xe\TeX{} based engines) and is meant to be used inside a group.
+%
+% \changes{v2.5g}{2012/01/02}{Switch flags \cs{ifFBog@addspace} and
+% \cs{ifFBfg@addspace} to true, otherwise \cs{og} and \cs{fg}
+% provide no spacing in XeLaTeX with options `og' and `fg'
+% activated in \cs{frenchbsetup} (bug v.~2.5a-f).}
+%
+% \begin{macrocode}
+\newcommand*{\NoAutoSpacing}{\FBAutoSpaceGuillfalse
+ \FBog@addspacetrue \FBfg@addspacetrue
+ \ifFB@active@punct\shorthandoff{;:!?}\fi
+ \ifFB@xetex@punct\XeTeXinterchartokenstate=0\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Commands for French quotation marks}
+% \label{sec-quotes}
+%
+% \begin{macro}{\og}
+% \begin{macro}{\fg}
+% The top macros for quotation marks will be called |\og|
+% (``\underline{o}uvrez \underline{g}uillemets'') and |\fg|
+% (``\underline{f}ermez \underline{g}uillemets'').
+% Another option for typesetting quotes in multilingual texts
+% is to use the package \file{csquotes.sty} and its command
+% |\enquote|.
+%
+% \begin{macrocode}
+\newcommand*{\og}{\@empty}
+\newcommand*{\fg}{\@empty}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\guillemotleft}
+% \begin{macro}{\guillemotright}
+% \begin{macro}{\textquoteddblleft}
+% \begin{macro}{\textquoteddblright}
+% \LaTeX{} users are supposed to use 8-bit output encodings (T1,
+% LY1,\dots) to typeset French, those who still stick to OT1 should
+% call \file{aeguill.sty} or a similar package. In both cases the
+% commands |\guillemotleft| and |\guillemotright| will print the
+% French opening and closing quote characters from the output font.
+% For XeLaTeX, |\guillemotleft| and |\guillemotright| are defined
+% by package \file{xunicode.sty}.
+% We will check `AtBeginDocument' that the proper output encodings
+% are in use (see end of section~\ref{sec-keyval}).
+%
+% \changes{v2.5a}{2010/08/20}{Change \cs{guillemotleft} and
+% \cs{guillemotright} definitions for Unicode anf provide
+% definitions for \cs{textquotedblleft} and
+% \cs{textquotedbright}. Insures correct printing of quotes
+% by \cs{og} and \cs{fg} in French and outside.}
+%
+% We give the following definitions for non-LaTeX users only as a
+% fall-back, they are welcome to change them for anything better.
+% \begin{macrocode}
+\ifLaTeXe
+\else
+ \ifFBunicode
+ \def\guillemotleft{{\char"00AB}}
+ \def\guillemotright{{\char"00BB}}
+ \def\textquotedblleft{{\char"201C}}
+ \def\textquotedblright{{\char"201D}}
+ \else
+ \def\guillemotleft{\leavevmode\raise0.25ex
+ \hbox{$\scriptscriptstyle\ll$}}
+ \def\guillemotright{\raise0.25ex
+ \hbox{$\scriptscriptstyle\gg$}}
+ \def\textquotedblleft{``}
+ \def\textquotedblright{''}
+ \fi
+ \let\xspace\relax
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% The next step is to provide correct spacing after |\guillemotleft|
+% and before |\guillemotright|: a space precedes and follows
+% quotation marks but no line break is allowed neither \emph{after}
+% the opening one, nor \emph{before} the closing one.
+% |\FBguill@spacing| which does the spacing, has been fine tuned by
+% Thierry Bouche. French quotes (including spacing) are printed by
+% |\FB@og| and |\FB@fg|, the expansion of the top level commands
+% |\og| and |\og| is different in and outside French.
+% We'll try to be smart to users of David~Carlisle's \file{xspace}
+% package: if this package is loaded there will be no need for |{}|
+% or |\ | to get a space after |\fg|, otherwise |\xspace| will be
+% defined as |\relax| (done at the end of this file).
+%
+% \changes{v2.5g}{2012/01/01}{\cs{FBguill@spacing} needs to be skipped
+% in commands \cs{FB@og} and \cs{FB@fg} only when XeTeX's ``inter
+% char'' mechanism is triggered for quotes, see \cs{frenchbsetup}.}
+%
+% \begin{macrocode}
+\newcommand*{\FBguill@spacing}{\penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font
+ minus.8\fontdimen4\font}
+\DeclareRobustCommand*{\FB@og}{\leavevmode\guillemotleft
+ \ifFBog@addspace\FBguill@spacing\fi}
+\DeclareRobustCommand*{\FB@fg}{\ifdim\lastskip>\z@\unskip\fi
+ \ifFBfg@addspace\FBguill@spacing\fi
+ \guillemotright\xspace}
+% \end{macrocode}
+%
+% The top level definitions for French quotation marks are switched
+% on and off through the |\extrasfrench| |\noextrasfrench|
+% mechanism. Outside French, |\og| and |\fg| will typeset standard
+% English opening and closing double quotes.
+%
+% \changes{v2.5a}{2010/08/20}{\cs{og} and \cs{fg} do not print
+% correctly in English when using XeTeX or LuaTeX, fixed by using
+% \cs{textquotedblleft} and \cs{textquotedblright} defined above.}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \def\bbl@frenchguillemets{\renewcommand*{\og}{\FB@og}%
+ \renewcommand*{\fg}{\FB@fg}}
+ \def\bbl@nonfrenchguillemets{\renewcommand*{\og}{\textquotedblleft}%
+ \renewcommand*{\fg}{\ifdim\lastskip>\z@\unskip\fi
+ \textquotedblright}}
+\else
+ \def\bbl@frenchguillemets{\let\og\FB@og
+ \let\fg\FB@fg}
+ \def\bbl@nonfrenchguillemets{\def\og{\textquotedblleft}%
+ \def\fg{\ifdim\lastskip>\z@\unskip\fi\textquotedblright}}
+\fi
+\addto\extrasfrench{\bbl@frenchguillemets}
+\addto\noextrasfrench{\bbl@nonfrenchguillemets}
+% \end{macrocode}
+%
+% \subsection{Date in French}
+%
+% \begin{macro}{\datefrench}
+% The macro |\datefrench| redefines the command |\today| to
+% produce French dates.
+%
+% \changes{v2.0}{2006/11/06}{2 '\cs{relax}' added in
+% \cs{today}'s definition.}
+%
+% \changes{v2.1a}{2008/03/25}{\cs{today} changed (correction in 2.0
+% was wrong: \cs{today} was printed without spaces in toc).}
+%
+% \changes{v2.5a}{2010/08/20}{Replaced \cs{'}e and \cs{\char94}u
+% by c.s. to work with XeTeX and LuaTeX.}
+%
+% \begin{macrocode}
+\@namedef{date\CurrentOption}{%
+ \def\today{{\number\day}\ifnum1=\day {\ier}\fi \space
+ \ifcase\month
+ \or janvier\or f{\FBeacute}vrier\or mars\or avril\or mai\or
+ juin\or juillet\or ao{\FBucirconflexe}t\or septembre\or
+ octobre\or novembre\or d{\FBeacute}cembre\fi
+ \space \number\year}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Extra utilities}
+%
+% Let's provide the French user with some extra utilities.
+%
+% \changes{v2.1a}{2008/03/24}{Command \cs{fup} added to produce
+% better superscripts than \cs{textsuperscript}.}
+%
+% \begin{macro}{\up}
+%
+% \changes{v2.1c}{2008/04/29}{Provide a temporary definition
+% (hyperref safe) of \cs{up} in case it has to be expanded in
+% the preamble (by beamer's \cs{title} command for instance).}
+%
+% \changes{v2.4d}{2010/07/28}{Command \cs{up} defined with
+% \cs{providecommand} instead of \cs{newcommand} as \cs{up} may be
+% defined elsewhere (catalan.ldf).
+% Bug pointed out by Felip Many\'e i Ballester.}
+%
+% \changes{v2.5a}{2010/08/21}{Test \cs{@ifundefined} leaves the
+% tested control sequence defined as \cs{relax} when TRUE.
+% Changed \cs{relax} to \cs{undefined} when testing
+% \cs{realsuperscript}.}
+%
+% \begin{macro}{\fup}
+%
+% \changes{v2.1b}{2008/04/02}{Command \cs{fup} changed to use
+% real superscripts from fourier v.~1.6.}
+%
+% \changes{v2.2a}{2008/05/08}{\cs{newif} and \cs{newdimen} moved
+% before \cs{ifLaTeXe} to avoid an error with plainTeX.}
+%
+% \changes{v2.3a}{2008/09/30}{\cs{lowercase} changed to
+% \cs{MakeLowercase} as the former doesn't work for non ASCII
+% characters in encodings like applemac, utf-8,\dots}
+%
+% |\up| eases the typesetting of superscripts like
+% `1\textsuperscript{er}'. Up to version 2.0 of |frenchb| |\up| was
+% just a shortcut for |\textsuperscript| in \LaTeXe, but several
+% users complained that |\textsuperscript| typesets superscripts
+% too high and too big, so we now define |\fup| as an attempt to
+% produce better looking superscripts. |\up| is defined as |\fup|
+% but |\frenchbsetup{FrenchSuperscripts=false}| redefines |\up|
+% as |\textsuperscript| for compatibility with previous versions.
+%
+% When a font has built-in superscripts, the best thing to do is
+% to just use them, otherwise |\fup| has to simulate superscripts
+% by scaling and raising ordinary letters. Scaling is done using
+% package \file{scalefnt} which will be loaded at the end of
+% \babel's loading (|frenchb| being an option of babel, it cannot
+% load a package while being read).
+%
+% \begin{macrocode}
+\newif\ifFB@poorman
+\newdimen\FB@Mht
+\ifLaTeXe
+ \AtEndOfPackage{\RequirePackage{scalefnt}}
+% \end{macrocode}
+% |\FB@up@fake| holds the definition of fake superscripts.
+% The scaling ratio is 0.65, raising is computed to put the top of
+% lower case letters (like `m') just under the top of upper case
+% letters (like `M'), precisely 12\% down. The chosen settings
+% look correct for most fonts, but can be tuned by the end-user
+% if necessary by changing |\FBsupR| and |\FBsupS| commands.
+%
+% |\FB@lc| is defined as |\MakeLowercase| to inhibit the uppercasing
+% of superscripts (this may happen in page headers with the standard
+% classes but is wrong); |\FB@lc| can be redefined to do nothing
+% by option |LowercaseSuperscripts=false| of |\frenchbsetup{}|.
+% \begin{macrocode}
+ \newcommand*{\FBsupR}{-0.12}
+ \newcommand*{\FBsupS}{0.65}
+ \newcommand*{\FB@lc}[1]{\MakeLowercase{#1}}
+ \DeclareRobustCommand*{\FB@up@fake}[1]{%
+ \settoheight{\FB@Mht}{M}%
+ \addtolength{\FB@Mht}{\FBsupR \FB@Mht}%
+ \addtolength{\FB@Mht}{-\FBsupS ex}%
+ \raisebox{\FB@Mht}{\scalefont{\FBsupS}{\FB@lc{#1}}}%
+ }
+% \end{macrocode}
+% The only packages I currently know to take advantage of real
+% superscripts are a) \file{xltxtra} used in conjunction with
+% XeLaTeX and OpenType fonts having the font feature
+% 'VerticalPosition=Superior' (\file{xltxtra} defines
+% |\realsuperscript| and |\fakesuperscript|) and b) \file{fourier}
+% (from version 1.6) when Expert Utopia fonts are available.
+%
+% |\FB@up| checks whether the current font is a Type1 `Expert'
+% (or `Pro') font with real superscripts or not (the code works
+% currently only with \file{fourier-1.6} but could work with any
+% Expert Type1 font with built-in superscripts, see below), and
+% decides to use real or fake superscripts.
+% It works as follows: the content of |\f@family| (family name of
+% the current font) is split by |\FB@split| into two pieces, the
+% first three characters (`|fut|' for Fourier, `|ppl|' for Adobe's
+% Palatino, \dots) stored in |\FB@firstthree| and the rest stored
+% in |\FB@suffix| which is expected to be `|x|' or `|j|' for expert
+% fonts.
+% \begin{macrocode}
+ \def\FB@split#1#2#3#4\@nil{\def\FB@firstthree{#1#2#3}%
+ \def\FB@suffix{#4}}
+ \def\FB@x{x}
+ \def\FB@j{j}
+ \DeclareRobustCommand*{\FB@up}[1]{%
+ \bgroup \FB@poormantrue
+ \expandafter\FB@split\f@family\@nil
+% \end{macrocode}
+% Then |\FB@up| looks for a \file{.fd} file named \file{t1fut-sup.fd}
+% (Fourier) or \file{t1ppl-sup.fd} (Palatino), etc.\ supposed to
+% define the subfamily (|fut-sup| or |ppl-sup|, etc.) giving access
+% to the built-in superscripts. If the \file{.fd} file is not found
+% by |\IfFileExists|, |\FB@up| falls back on fake superscripts,
+% otherwise |\FB@suffix| is checked to decide whether to use fake or
+% real superscripts.
+% \begin{macrocode}
+ \edef\reserved@a{\lowercase{%
+ \noexpand\IfFileExists{\f@encoding\FB@firstthree -sup.fd}}}%
+ \reserved@a
+ {\ifx\FB@suffix\FB@x \FB@poormanfalse\fi
+ \ifx\FB@suffix\FB@j \FB@poormanfalse\fi
+ \ifFB@poorman \FB@up@fake{#1}%
+ \else \FB@up@real{#1}%
+ \fi}%
+ {\FB@up@fake{#1}}%
+ \egroup}
+% \end{macrocode}
+% |\FB@up@real| just picks up the superscripts from the subfamily
+% (and forces lowercase).
+% \begin{macrocode}
+ \newcommand*{\FB@up@real}[1]{\bgroup
+ \fontfamily{\FB@firstthree -sup}\selectfont \FB@lc{#1}\egroup}
+% \end{macrocode}
+% |\fup| is now defined as |\FB@up| unless |\realsuperscript| is
+% defined (occurs with XeLaTeX calling \file{xltxtra.sty}).
+% \begin{macrocode}
+ \DeclareRobustCommand*{\fup}[1]{%
+ \@ifundefined{realsuperscript}%
+ {\FB@up{#1}\let\realsuperscript\undefined}%
+ {\bgroup\let\fakesuperscript\FB@up@fake
+ \realsuperscript{\FB@lc{#1}}\egroup}}
+% \end{macrocode}
+% Let's provide a temporary definition for |\up| (redefined
+% `AtBeginDocument' as |\fup| or |\textsuperscript| according to
+% |\frenchbsetup{}| options).
+% \begin{macrocode}
+ \providecommand*{\up}{\relax}
+% \end{macrocode}
+% Poor man's definition of |\up| for Plain.
+% \begin{macrocode}
+\else
+ \providecommand*{\up}[1]{\leavevmode\raise1ex\hbox{\sevenrm #1}}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\ieme}
+% \begin{macro}{\ier}
+% \begin{macro}{\iere}
+% \begin{macro}{\iemes}
+% \begin{macro}{\iers}
+% \begin{macro}{\ieres}
+% Some handy macros for those who don't know how to abbreviate ordinals:
+% \begin{macrocode}
+\def\ieme{\up{\lowercase{e}}\xspace}
+\def\iemes{\up{\lowercase{es}}\xspace}
+\def\ier{\up{\lowercase{er}}\xspace}
+\def\iers{\up{\lowercase{ers}}\xspace}
+\def\iere{\up{\lowercase{re}}\xspace}
+\def\ieres{\up{\lowercase{res}}\xspace}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{v2.1c}{2008/04/29}{Added commands \cs{Nos} and \cs{nos}.}
+%
+% \begin{macro}{\No}
+% \begin{macro}{\no}
+% \begin{macro}{\Nos}
+% \begin{macro}{\nos}
+% \begin{macro}{\primo}
+% \begin{macro}{\fprimo)}
+% And some more macros relying on |\up| for numbering,
+% first two support macros.
+% \begin{macrocode}
+\newcommand*{\FrenchEnumerate}[1]{%
+ #1\up{\lowercase{o}}\kern+.3em}
+\newcommand*{\FrenchPopularEnumerate}[1]{%
+ #1\up{\lowercase{o}})\kern+.3em}
+% \end{macrocode}
+%
+% Typing |\primo| should result in `$1^{\rm o}$\kern+.3em',
+% \begin{macrocode}
+\def\primo{\FrenchEnumerate1}
+\def\secundo{\FrenchEnumerate2}
+\def\tertio{\FrenchEnumerate3}
+\def\quarto{\FrenchEnumerate4}
+% \end{macrocode}
+% while typing |\fprimo)| gives `1$^{\rm o}$)\kern+.3em.
+% \begin{macrocode}
+\def\fprimo){\FrenchPopularEnumerate1}
+\def\fsecundo){\FrenchPopularEnumerate2}
+\def\ftertio){\FrenchPopularEnumerate3}
+\def\fquarto){\FrenchPopularEnumerate4}
+% \end{macrocode}
+%
+% Let's provide four macros for the common abbreviations
+% of ``Num\'ero''.
+% \begin{macrocode}
+\DeclareRobustCommand*{\No}{N\up{\lowercase{o}}\kern+.2em}
+\DeclareRobustCommand*{\no}{n\up{\lowercase{o}}\kern+.2em}
+\DeclareRobustCommand*{\Nos}{N\up{\lowercase{os}}\kern+.2em}
+\DeclareRobustCommand*{\nos}{n\up{\lowercase{os}}\kern+.2em}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bsc}
+% As family names should be written in small capitals and never be
+% hyphenated, we provide a command (its name comes from Boxed Small
+% Caps) to input them easily. Note that this command has changed
+% with version~2 of |frenchb|: a |\kern0pt| is used instead of |\hbox|
+% because |\hbox| would break microtype's font expansion; as a
+% (positive?) side effect, composed names (such as Dupont-Durand)
+% can now be hyphenated on explicit hyphens.
+% Usage: |Jean~\bsc{Duchemin}|.
+%
+% \changes{v2.0}{2006/11/06}{\cs{hbox} dropped, replaced by
+% \cs{kern0pt}.}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\bsc}[1]{\leavevmode\begingroup\kern0pt
+ \scshape #1\endgroup}
+\ifLaTeXe\else\let\scshape\relax\fi
+% \end{macrocode}
+% \end{macro}
+%
+% Some definitions for special characters. We won't define |\tilde|
+% as a Text Symbol not to conflict with the macro |\tilde| for math
+% mode and use the name |\tild| instead. Note that |\boi| may
+% \emph{not} be used in math mode, its name in math mode is
+% |\backslash|. |\degre| can be accessed by the command |\r{}|
+% for ring accent.
+%
+% \changes{v2.5f}{2011/07/18}{Changed definitions of \cs{at},
+% \cs{circonflexe}, \cs{tild}, \cs{boi} and \cs{degre} for
+% Unicode based engines.}
+%
+% \begin{macrocode}
+\ifFBunicode
+ \newcommand*{\at}{{\char"0040}}
+ \newcommand*{\circonflexe}{{\char"005E}}
+ \newcommand*{\tild}{{\char"007E}}
+ \newcommand*{\boi}{\textbackslash}
+ \newcommand*{\degre}{{\char"00B0}}
+\else
+ \ifLaTeXe
+ \DeclareTextSymbol{\at}{T1}{64}
+ \DeclareTextSymbol{\circonflexe}{T1}{94}
+ \DeclareTextSymbol{\tild}{T1}{126}
+ \DeclareTextSymbolDefault{\at}{T1}
+ \DeclareTextSymbolDefault{\circonflexe}{T1}
+ \DeclareTextSymbolDefault{\tild}{T1}
+ \DeclareRobustCommand*{\boi}{\textbackslash}
+ \DeclareRobustCommand*{\degre}{\r{}}
+ \else
+ \def\T@one{T1}
+ \ifx\f@encoding\T@one
+ \newcommand*{\degre}{{\char6}}
+ \else
+ \newcommand*{\degre}{{\char23}}
+ \fi
+ \newcommand*{\at}{{\char64}}
+ \newcommand*{\circonflexe}{{\char94}}
+ \newcommand*{\tild}{{\char126}}
+ \newcommand*{\boi}{$\backslash$}
+ \fi
+\fi
+% \end{macrocode}
+%
+% \changes{v2.5a}{2010/08/20}{New definitions needed for XeTeX/LuaTeX
+% to properly print some dates and captions: using c.s. like \cs{'e}
+% do not work with XeTeX (OK with XeLaTeX).}
+%
+% French dates and captions make use of four non-ascii characters
+% (\texttt{\`a}, \texttt{\`e}, \texttt{\'e} and \texttt{\^u}).
+% This is fine except for (plain) XeTeX (|\accent| commands are not
+% implemented), so we define four new commands to deal with this
+% issue.
+% \begin{macrocode}
+\newcommand*{\FBagrave}{\`a}
+\newcommand*{\FBegrave}{\`e}
+\newcommand*{\FBeacute}{\'e}
+\newcommand*{\FBucirconflexe}{\^u}
+\ifFBunicode
+ \ifLaTeXe
+ \else
+ \def\FBagrave{{\char"00E0}}
+ \def\FBegrave{{\char"00E8}}
+ \def\FBeacute{{\char"00E9}}
+ \def\FBucirconflexe{{\char"00FB}}
+ \fi
+\fi
+% \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|).
+%
+% If \TeX{} Companion fonts are available (\file{textcomp.sty}),
+% we pick up |\textdegree| from them instead of using emulating
+% `degrees' from the |\r{}| accent. Otherwise we overwrite the
+% (poor) definition of |\textdegree| given in \file{latin1.def},
+% \file{applemac.def} etc.\ (called by \file{inputenc.sty}) by
+% our definition of |\degres|. We also advice 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{v2.5h}{2012/03/21}{textcomp.sty has changed. The test
+% about \cs{M@TS1} is no longer relevant, let's change it.}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \newcommand*{\degres}{\degre}
+ \ifFBunicode
+ \DeclareRobustCommand*{\degres}{\degre}
+ \else
+ \def\Warning@degree@TSone{%
+ \PackageWarning{frenchb.ldf}{%
+ Degrees would look better in TS1-encoding:
+ \MessageBreak add \protect
+ \usepackage{textcomp} to the preamble.
+ \MessageBreak Degrees used}}
+ \AtBeginDocument{\@ifundefined{DeclareEncodingSubset}%
+ {\DeclareRobustCommand*{\degres}{%
+ \leavevmode\hbox to 0.3em{\hss\degre\hss}%
+ \Warning@degree@TSone
+ \global\let\Warning@degree@TSone\relax}%
+ \let\textdegree\degres}%
+ {\DeclareRobustCommand*{\degres}{%
+ \hbox{\UseTextSymbol{TS1}{\textdegree}}}}%
+ }
+ \fi
+\else
+ \newcommand*{\degres}{%
+ \leavevmode\hbox to 0.3em{\hss\degre\hss}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Formatting numbers}
+% \label{sec-numbers}
+%
+% \begin{macro}{\DecimalMathComma}
+% \begin{macro}{\StandardMathComma}
+% As mentioned in the \TeX{}book p.~134, the comma is of type
+% |\mathpunct| in math mode: it is automatically followed by a
+% space. This is convenient in lists and intervals but
+% unpleasant when the comma is used as a decimal separator
+% in French: it has to be entered as |{,}|.
+% |\DecimalMathComma| makes the comma be an ordinary character
+% (of type |\mathord|) in French \emph{only} (no space added);
+% |\StandardMathComma| switches back to the standard behaviour
+% of the comma.
+% \begin{macrocode}
+\newcount\std@mcc
+\newcount\dec@mcc
+\std@mcc=\mathcode`\,
+\dec@mcc=\std@mcc
+\@tempcnta=\std@mcc
+\divide\@tempcnta by "1000
+\multiply\@tempcnta by "1000
+\advance\dec@mcc by -\@tempcnta
+\newcommand*{\DecimalMathComma}{\iflanguage{french}%
+ {\mathcode`\,=\dec@mcc}{}%
+ \addto\extrasfrench{\mathcode`\,=\dec@mcc}}
+\newcommand*{\StandardMathComma}{\mathcode`\,=\std@mcc
+ \addto\extrasfrench{\mathcode`\,=\std@mcc}}
+\addto\noextrasfrench{\mathcode`\,=\std@mcc}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\nombre}
+%
+% \changes{v2.0}{2006/11/06}{\cs{nombre} requires now numprint.sty.}
+%
+% The command |\nombre| is now borrowed from \file{numprint.sty} for
+% \LaTeXe. There is no point to maintain the former tricky code
+% when a package is dedicated to do the same job and more.
+% For Plain based formats, |\nombre| no longer formats numbers,
+% it prints them as is and issues a warning about the change.
+%
+% Fake command |\nombre| for Plain based formats, warning users of
+% |frenchb| v.~1.x.\ of the change.
+% \begin{macrocode}
+\newcommand*{\nombre}[1]{{#1}\message{%
+ *** \noexpand\nombre no longer formats numbers\string! ***}}%
+% \end{macrocode}
+% \end{macro}
+%
+% The next definitions only make sense for \LaTeXe. Let's cleanup
+% and exit if the format in Plain based.
+%
+% \begin{macrocode}
+\let\FBstop@here\relax
+\def\FBclean@on@exit{\let\ifLaTeXe\undefined
+ \let\LaTeXetrue\undefined
+ \let\LaTeXefalse\undefined}
+\ifx\magnification\@undefined
+\else
+ \def\FBstop@here{\let\STD@makecaption\relax
+ \FBclean@on@exit
+ \ldf@quit\CurrentOption\endinput}
+\fi
+\FBstop@here
+% \end{macrocode}
+%
+% What follows now is for \LaTeXe{} \emph{only}.
+% We redefine |\nombre| for \LaTeXe. A warning is issued
+% at the first call of |\nombre| if |\numprint| is not
+% defined, suggesting what to do. The package \file{numprint}
+% is \emph{not} loaded automatically by |frenchb| because of
+% possible options conflict.
+%
+% \changes{v2.5a}{2010/08/21}{Test \cs{@ifundefined} leaves the
+% tested control sequence defined as \cs{relax} when TRUE.
+% Changed \cs{relax} to \cs{undefined} when testing
+% \cs{numprint}.}
+%
+% \begin{macrocode}
+\renewcommand*{\nombre}[1]{\Warning@nombre\numprint{#1}}
+\newcommand*{\Warning@nombre}{%
+ \@ifundefined{numprint}%
+ {\PackageWarning{frenchb.ldf}{%
+ \protect\nombre\space now relies on package numprint.sty,
+ \MessageBreak add \protect
+ \usepackage[autolanguage]{numprint}\MessageBreak
+ to your preamble *after* loading babel, \MessageBreak
+ see file numprint.pdf for more options.\MessageBreak
+ \protect\nombre\space called}%
+ \global\let\Warning@nombre\relax
+ \global\let\numprint\undefined
+ }{}%
+}
+% \end{macrocode}
+%
+% \changes{v2.0c}{2007/06/25}{There is no need to define here
+% numprint's command \cs{npstylefrench}, it will be redefined
+% `AtBeginDocument' by \cs{FBprocess@options}.}
+%
+% \changes{v2.0c}{2007/06/25}{\cs{ThinSpaceInFrenchNumbers} added
+% for compatibility with frenchb-1.x.}
+%
+% \begin{macrocode}
+\newcommand*{\ThinSpaceInFrenchNumbers}{%
+ \PackageWarning{frenchb.ldf}{%
+ Type \protect\frenchbsetup{ThinSpaceInFrenchNumbers}
+ \MessageBreak Command \protect\ThinSpaceInFrenchNumbers\space
+ is no longer\MessageBreak defined in frenchb v.~2,}}
+% \end{macrocode}
+%
+% \subsection{Caption names}
+%
+% The next step consists of defining the French equivalents for
+% the \LaTeX{} caption names.
+%
+% \begin{macro}{\captionsfrench}
+% Let's first define |\captionsfrench| which sets all strings used
+% in the four standard document classes provided with \LaTeX.
+%
+% \changes{v2.0}{2006/11/06}{`Fig.' changed to `Figure' and
+% `Tab.' to `Table'.}
+%
+% \changes{v2.0}{2006/12/15}{Set \cs{CaptionSeparator} in
+% \cs{extrasfrench} now instead of \cs{captionsfrench}
+% because it has to be reset when leaving French.}
+%
+% \changes{v2.5a}{2010/08/16}{\cs{emph} deleted in \cs{seename}
+% and \cs{alsoname} to match what is done for the other languages.
+% Suggested by Marc Baudoin.}
+%
+% \changes{v2.5a}{2010/08/20}{Replaced \cs{'e}, \cs{`e} and \cs{`a}
+% by c.s. to work with XeTeX.}
+%
+% \begin{macrocode}
+\@namedef{captions\CurrentOption}{%
+ \def\refname{R{\FBeacute}f{\FBeacute}rences}%
+ \def\abstractname{R{\FBeacute}sum{\FBeacute}}%
+ \def\bibname{Bibliographie}%
+ \def\prefacename{Pr{\FBeacute}face}%
+ \def\chaptername{Chapitre}%
+ \def\appendixname{Annexe}%
+ \def\contentsname{Table des mati{\FBegrave}res}%
+ \def\listfigurename{Table des figures}%
+ \def\listtablename{Liste des tableaux}%
+ \def\indexname{Index}%
+ \def\figurename{{\scshape Figure}}%
+ \def\tablename{{\scshape Table}}%
+% \end{macrocode}
+% ``Premi\`ere partie'' instead of ``Part I''.
+% \begin{macrocode}
+ \def\partname{\protect\@Fpt partie}%
+ \def\@Fpt{{\ifcase\value{part}\or Premi{\FBegrave}re\or
+ Deuxi{\FBegrave}me\or Troisi{\FBegrave}me\or
+ Quatri{\FBegrave}me\or Cinqui{\FBegrave}me\or
+ Sixi{\FBegrave}me\or Septi{\FBegrave}me\or Huiti{\FBegrave}me\or
+ Neuvi{\FBegrave}me\or Dixi{\FBegrave}me\or Onzi{\FBegrave}me\or
+ Douzi{\FBegrave}me\or Treizi{\FBegrave}me\or
+ Quatorzi{\FBegrave}me\or Quinzi{\FBegrave}me\or
+ Seizi{\FBegrave}me\or Dix-septi{\FBegrave}me\or
+ Dix-huiti{\FBegrave}me\or Dix-neuvi{\FBegrave}me\or
+ Vingti{\FBegrave}me\fi}\space\def\thepart{}}%
+ \def\pagename{page}%
+ \def\seename{voir}%
+ \def\alsoname{voir aussi}%
+ \def\enclname{P.~J. }%
+ \def\ccname{Copie {\FBagrave} }%
+ \def\headtoname{}%
+ \def\proofname{D{\FBeacute}monstration}%
+ \def\glossaryname{Glossaire}%
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% As some users who choose |frenchb| or |francais| as option of
+% \babel, might customise |\captionsfrenchb| or |\captionsfrancais|
+% in the preamble, we merge their changes at the |\begin{document}|
+% when they do so.
+% The other variants of French (canadien, acadian) are defined by
+% checking if the relevant option was used and then adding one extra
+% level of expansion.
+%
+% \changes{v2.5b}{2010/10/30}{\cs{captionsfrench} will be executed
+% `AtBeginDocument' after \cs{FBprocess@options}, no need to
+% add it here.}
+%
+% \begin{macrocode}
+\AtBeginDocument{\let\captions@French\captionsfrench
+ \@ifundefined{captionsfrenchb}%
+ {\let\captions@Frenchb\relax}%
+ {\let\captions@Frenchb\captionsfrenchb}%
+ \@ifundefined{captionsfrancais}%
+ {\let\captions@Francais\relax}%
+ {\let\captions@Francais\captionsfrancais}%
+ \def\captionsfrench{\captions@French
+ \captions@Francais\captions@Frenchb}%
+ \def\captionsfrancais{\captionsfrench}%
+ \def\captionsfrenchb{\captionsfrench}%
+ }
+\@ifpackagewith{babel}{canadien}{%
+ \def\captionscanadien{\captionsfrench}%
+ \def\datecanadien{\datefrench}%
+ \def\extrascanadien{\extrasfrench}%
+ \def\noextrascanadien{\noextrasfrench}%
+ }{}
+\@ifpackagewith{babel}{acadian}{%
+ \def\captionsacadian{\captionsfrench}%
+ \def\dateacadian{\datefrench}%
+ \def\extrasacadian{\extrasfrench}%
+ \def\noextrasacadian{\noextrasfrench}%
+ }{}
+% \end{macrocode}
+%
+% \begin{macro}{\CaptionSeparator}
+% Let's consider now captions in figures and tables.
+% In French, captions in figures and tables should be printed with
+% endash (`--') instead of the standard `:'.
+%
+% The standard definition of |\@makecaption| (e.g., the one provided
+% in article.cls, report.cls, book.cls which is frozen for \LaTeXe{}
+% according to Frank Mittelbach), has been saved in
+% |\STD@makecaption| before making `:' active
+% (see section~\ref{sec-punct}). `AtBeginDocument' we compare it to
+% its current definition (some classes like koma-script classes,
+% AMS classes, ua-thesis.cls\dots change it).
+% If they are identical, |frenchb| just adds a hook called
+% |\CaptionSeparator| to |\@makecaption|, |\CaptionSeparator|
+% defaults to `: ' as in the standard |\@makecaption|, and will be
+% changed to ` -- ' in French.
+% If the definitions differ, |frenchb| doesn't overwrite the changes,
+% but prints a message in the .log file.
+%
+% \changes{v2.4a}{2009/11/23}{\cs{PackageWarning} changed to
+% \cs{FBWarning} (in case \cs{@makecaption} has been customized).
+% \cs{FBWarning} is defined as \cs{PackageWarning} by default but
+% can be made silent using \cs{frenchbsetup}, (suggested by MPG).}
+%
+% \begin{macrocode}
+\newcommand{\FBWarning}[2]{\PackageWarning{#1}{#2}}
+\def\CaptionSeparator{\string:\space}
+\long\def\FB@makecaption#1#2{%
+ \vskip\abovecaptionskip
+ \sbox\@tempboxa{#1\CaptionSeparator #2}%
+ \ifdim \wd\@tempboxa >\hsize
+ #1\CaptionSeparator #2\par
+ \else
+ \global \@minipagefalse
+ \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
+ \fi
+ \vskip\belowcaptionskip}
+\AtBeginDocument{%
+ \ifx\@makecaption\STD@makecaption
+ \global\let\@makecaption\FB@makecaption
+ \else
+ \@ifundefined{@makecaption}%
+ {\let\@makecaption\undefined}%
+ {\FBWarning{frenchb.ldf}%
+ {The definition of \protect\@makecaption\space
+ has been changed,\MessageBreak
+ frenchb will NOT customise it;\MessageBreak reported}%
+ }%
+ \fi
+ \let\FB@makecaption\relax
+ \let\STD@makecaption\relax
+}
+\addto\extrasfrench{%
+ \def\CaptionSeparator{\space\textendash\space}}
+\addto\noextrasfrench{%
+ \def\CaptionSeparator{\string:\space}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{French lists}
+% \label{sec-lists}
+%
+% \changes{v2.6a}{2013/01/30}{Bug correction: changing \cs{leftmargin}
+% cannot be done only for itemize-lists: it messes up
+% embedded enumerate lists. Pointed out by Denis Bitouz\'e.
+% Lists have been completely redesigned in frenchb v.~2.6a.
+% An option for backward compatibility is provided.}
+%
+% \begin{macro}{\listFB}
+% \begin{macro}{\listORI}
+% \begin{macro}{\FB@listVsettings}
+% Vertical spacing in lists should be shorter in French texts than
+% the defaults provided by \LaTeX.
+% Note that the easy way, just changing values of vertical spacing
+% parameters when entering French and restoring them to their
+% defaults on exit would not work; so we define the command
+% |\FB@listVsettings| to hold the settings to be used by
+% the French variant |\listFB| of |\list|. Note that switching
+% to |\listFB| reduces vertical spacing in \emph{all} environments
+% built on |\list|: |itemize|, |enumerate|, |description|, but also
+% |abstract|, |quotation|, |quote| and |verse|\dots{}
+%
+% The amount of vertical space before and after a list is given by
+% |\topsep| + |\parskip| (+ |\partopsep| if the list starts a new
+% paragraph). IMHO, |\parskip| should be added \emph{only} when
+% the list starts a new paragraph, so I subtract |\parskip| from
+% |\topsep| and add it back to |\partopsep|; this will normally
+% make no difference because |\parskip|'s default value is 0pt, but
+% will be noticeable when |\parskip| is \emph{not} null.
+%
+% |\endlist| is not redefined, but |\endlistORI| and |\endlistFB|
+% will be defined as |\endlist| `AtBeginDocument' for users
+% who define their own lists using |\listORI| or |\listFB|.
+% \begin{macrocode}
+\let\listORI\list
+\def\FB@listVsettings{%
+ \setlength{\itemsep}{0.4ex plus 0.2ex minus 0.2ex}%
+ \setlength{\parsep}{0.4ex plus 0.2ex minus 0.2ex}%
+ \setlength{\topsep}{0.8ex plus 0.4ex minus 0.4ex}%
+ \setlength{\partopsep}{0.4ex plus 0.2ex minus 0.2ex}%
+% \end{macrocode}
+% |\parskip| is of type `skip', its mean value only (\emph{not
+% the glue}) should be subtracted from |\topsep| and added to
+% |\partopsep|, so convert |\parskip| to a `dimen' using
+% |\@tempdima|.
+% \begin{macrocode}
+ \@tempdima=\parskip
+ \addtolength{\topsep}{-\@tempdima}%
+ \addtolength{\partopsep}{\@tempdima}%
+}
+\def\listFB#1#2{\listORI{#1}{\FB@listVsettings #2}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% Let's now consider French itemize-lists. They differ from those
+% provided by the standard \LaTeXe{} classes:
+% \begin{itemize}
+% \item The `\textbullet' is never used in French itemize-lists,
+% an emdash `---' or an endash `--' is preferred for all
+% levels. The item label to be used in French is stored in
+% |\FrenchLabelItem}|, it defaults to `---' and can be changed
+% using |\frenchbsetup{}| (see section~\ref{sec-keyval}).
+% \item Vertical spacing between items, before and after
+% the list, should be \emph{null} with \emph{no glue} added;
+% \item In French the labels of itemize-lists are vertically
+% aligned as follows:\\
+% \fbox{\parbox[t]{.5\textwidth}{%
+% \parindent=1.5em
+% Text starting at `parindent' \\
+% \noindent$\Leftarrow$ Leftmargin\\
+% \hspace*{\parindent}\textendash{} first item\dots{}\\
+% \hspace*{\parindent}\hspace*{\labelsep}%
+% \textendash{} first second level item\\
+% \hspace*{\parindent}\hspace*{\labelsep}%
+% \textendash{} next one\dots{}\\
+% \hspace*{\parindent}\textendash{} second item\dots{}
+% }}\\
+% \end{itemize}
+%
+% \begin{macro}{\FrenchLabelItem}
+% \changes{v2.6a}{2013/01/30}{defaults to \cs{textemdash} instead of
+% \cs{textendash} up to v.~2.5k.}
+% \begin{macro}{\Frlabelitemi}
+% \begin{macro}{\Frlabelitemii}
+% \begin{macro}{\Frlabelitemiii}
+% \begin{macro}{\Frlabelitemiv}
+% Default labels for French itemize-lists (same label for all levels):
+% \begin{macrocode}
+\newcommand*{\FrenchLabelItem}{\textemdash}
+\newcommand*{\Frlabelitemi}{\FrenchLabelItem}
+\newcommand*{\Frlabelitemii}{\FrenchLabelItem}
+\newcommand*{\Frlabelitemiii}{\FrenchLabelItem}
+\newcommand*{\Frlabelitemiv}{\FrenchLabelItem}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bbl@frenchlabelitems}
+% \changes{v2.6a}{2013/01/30}{It now sets default values for
+% \cs{labelwidthFB} and \cs{listindentFB} and resets
+% \cs{FrenchLabelItem} to \cs{textendash} when compatibility
+% with former versions is requested.}
+% \begin{macro}{\bbl@nonfrenchlabelitems}
+% |\bbl@frenchlabelitems| saves current itemize labels and changes
+% them to their value in French. This code should never be executed
+% twice in a row, so we need a new flag that will be set and reset
+% by |\bbl@nonfrenchlabelitems| and |\bbl@frenchlabelitems|.
+% |\bbl@frenchlabelitems| also sets reasonable default values for
+% lengths |\labelwidthFB| and |\listindentFB| to be defined below,
+% but these lengths can still be customised in the preamble.
+% \begin{macrocode}
+\newif\ifFB@enterFrench \FB@enterFrenchtrue
+\def\bbl@frenchlabelitems{%
+ \ifFB@enterFrench
+ \let\@ltiORI\labelitemi
+ \let\@ltiiORI\labelitemii
+ \let\@ltiiiORI\labelitemiii
+ \let\@ltivORI\labelitemiv
+ \let\labelitemi\Frlabelitemi
+ \let\labelitemii\Frlabelitemii
+ \let\labelitemiii\Frlabelitemiii
+ \let\labelitemiv\Frlabelitemiv
+ \ifdim\labelwidthFB<\z@
+ \settowidth{\labelwidthFB}{\FrenchLabelItem}%
+ \fi
+ \ifdim\listindentFB<\z@
+ \ifdim\parindent=\z@
+ \setlength{\listindentFB}{1.5em}%
+ \else
+ \setlength{\listindentFB}{\parindent}%
+ \fi
+ \fi
+ \FB@enterFrenchfalse
+ \fi
+}
+\def\bbl@nonfrenchlabelitems{%
+ \ifFB@enterFrench
+ \else
+ \let\Frlabelitemi\labelitemi
+ \let\Frlabelitemii\labelitemii
+ \let\Frlabelitemiii\labelitemiii
+ \let\Frlabelitemiv\labelitemiv
+ \let\labelitemi\@ltiORI
+ \let\labelitemii\@ltiiORI
+ \let\labelitemiii\@ltiiiORI
+ \let\labelitemiv\@ltivORI
+ \FB@enterFrenchtrue
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\listindentFB}
+% \begin{macro}{\labelwidthFB}
+% Let's define two lengths |\listindentFB| and |\labelwidthFB| to
+% customise lists' horizontal indentations. They are given
+% silly values here ($-1$\,pt) in order to eventually
+% enable their customisation in the preamble. They will get
+% reasonnable defaults later when entering French (see
+% |\bbl@frenchlabelitems|) unless they have been customised.
+% \begin{macrocode}
+\newlength\listindentFB
+\setlength{\listindentFB}{-1pt}
+\newlength\labelwidthFB
+\setlength{\labelwidthFB}{-1pt}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\FB@listHsettings}
+% \begin{macro}{\leftmarginFB}
+% |\FB@listHsettings| holds the new horizontal settings chosen for
+% French lists itemize and enumerate starting with version~2.6a.
+% They are based on the look resquested in French for
+% itemize-lists.
+% \begin{macrocode}
+\newlength\leftmarginFB
+\def\FB@listHsettings{%
+ \leftmarginFB\labelwidthFB
+ \advance\leftmarginFB \labelsep
+ \leftmargini\leftmarginFB
+ \advance\leftmargini \listindentFB
+ \leftmarginii\leftmarginFB
+ \leftmarginiii\leftmarginFB
+ \leftmarginiv\leftmarginFB
+ \leftmargin\csname leftmargin\romannumeral\the\@listdepth\endcsname
+}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\itemizeFB}
+% \begin{macro}{\FB@itemizesettings}
+% New environment for French itemize-lists.\\ |\FB@itemizesettings|
+% does two things: first suppress all vertical spaces including
+% glue, then set horizontal indentations according to
+% |\FB@listHsettings| unless option |ListOldLayout| is true
+% (compatibility with lists up to v.~2.5k).
+% \begin{macrocode}
+\def\FB@itemizesettings{%
+ \setlength{\itemsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\partopsep}{\z@}%
+ \@tempdima=\parskip
+ \addtolength{\topsep}{-\@tempdima}%
+ \addtolength{\partopsep}{\@tempdima}%
+ \ifFBListOldLayout
+ \settowidth{\labelwidth}{\csname\@itemitem\endcsname}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \addtolength{\leftmargin}{\parindent}%
+ \else
+ \FB@listHsettings
+ \fi
+}
+% \end{macrocode}
+% The definition of |\itemizeFB| follows the one of |\itemize|
+% in standard \LaTeXe{} classes (see \file{ltlists.dtx}),
+% spaces are customised by |\FB@itemizesettings|.
+%
+% |\enditemizeFB| will be defined as |\endlist|=|\endlistORI|
+% `AtBeginDocument'.
+% \begin{macrocode}
+\def\itemizeFB{%
+ \ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter
+ \listORI
+ \csname\@itemitem\endcsname
+ \FB@itemizesettings
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\enumerateFB}
+% The definition of |\enumerateFB|, new to version~2.6a, follows
+% the one of |\enumerate| in standard \LaTeXe{} classes (see
+% \file{ltlists.dtx}), vertical spaces are customised (or not)
+% via |\list| (=|\listFB| or |\listORI|) and horizontal spaces
+% (leftmargins) are borrowed from |itemize| lists via
+% |\FB@listHsettings|.
+%
+% |\endenumerateFB| will be defined as |\endlist|=|\endlistORI|
+% `AtBeginDocument'.
+% \begin{macrocode}
+\def\enumerateFB{%
+ \ifnum \@enumdepth >\thr@@\@toodeep\else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \expandafter
+ \list
+ \csname label\@enumctr\endcsname
+ {\FB@listHsettings
+ \usecounter\@enumctr\def\makelabel##1{\hss\llap{##1}}}%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\descriptionFB}
+% \changes{v2.6b}{2013/02/10}{Settings of \cs{FB@listHsettings} should
+% apply to description lists too.}
+%
+% Same tuning for the |description| environment (see the original
+% definition in \file{classes.dtx}).
+%
+% \begin{macrocode}
+\def\descriptionFB{%
+ \list{}{\FB@listHsettings
+ \labelwidth\z@ \itemindent-\leftmargin
+ \let\makelabel\descriptionlabel}}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{French indentation of sections}
+% \label{sec-indent}
+%
+% \begin{macro}{\bbl@frenchindent}
+% \begin{macro}{\bbl@nonfrenchindent}
+% In French the first paragraph of each section should be indented,
+% this is another difference with US-English. This is controlled
+% by the flag |\if@afterindent|.
+%
+% \changes{v2.3d}{2009/03/16}{Bug correction: previous versions of
+% frenchb set the flag \cs{if@afterindent} to false outside
+% French which is correct for English but wrong for some languages
+% like Spanish. Pointed out by Juan Jos\'e Torrens.}
+%
+% We will need to save the value of the flag |\if@afterindent|
+% `AtBeginDocument' before eventually changing its value.
+%
+% \begin{macrocode}
+\def\bbl@frenchindent{\let\@afterindentfalse\@afterindenttrue
+ \@afterindenttrue}
+\def\bbl@nonfrenchindent{\let\@afterindentfalse\@aifORI
+ \@afterindentfalse}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Formatting footnotes}
+% \label{sec-footnotes}
+%
+% \changes{v2.0}{2006/11/06}{Footnotes are now printed
+% by default `\`a la fran\c caise' for the whole document.}
+%
+% \changes{v2.0b}{2007/04/18}{Footnotes: Just do nothing
+% (except warning) when the bigfoot package is loaded.}
+%
+% The \file{bigfoot} package deeply changes the way footnotes are
+% handled. When \file{bigfoot} is loaded, we just warn the user
+% that |frenchb| will drop the customisation of footnotes.
+%
+% The layout of footnotes is controlled by two flags
+% |\ifFBAutoSpaceFootnotes| and |\ifFBFrenchFootnotes| which are
+% set by options of |\frenchbsetup{}| (see section~\ref{sec-keyval}).
+% Notice that the layout of footnotes \emph{does not depend} on the
+% current language (just think of two footnotes on the same page
+% looking different because one was called in a French part, the
+% other one in English!).
+%
+% When |\ifFBAutoSpaceFootnotes| is true, |\@footnotemark| (whose
+% definition is saved at the |\begin{document}| in order to include
+% any customisation that packages might have done) is redefined to
+% add a thin space before the number or symbol calling a footnote
+% (any space typed in is removed first). This has no effect on
+% the layout of the footnote itself.
+%
+% \changes{v2.4a}{2009/11/23}{\cs{PackageWarning} changed to
+% \cs{FBWarning} (when bigfoot package in use).}
+%
+% \begin{macrocode}
+\AtBeginDocument{\@ifpackageloaded{bigfoot}%
+ {\FBWarning{frenchb.ldf}%
+ {bigfoot package in use.\MessageBreak
+ frenchb will NOT customise footnotes;\MessageBreak
+ reported}}%
+ {\let\@footnotemarkORI\@footnotemark
+ \def\@footnotemarkFB{\leavevmode\unskip\unkern
+ \,\@footnotemarkORI}%
+ \ifFBAutoSpaceFootnotes
+ \let\@footnotemark\@footnotemarkFB
+ \fi}%
+ }
+% \end{macrocode}
+%
+% We then define |\@makefntextFB|, a variant of |\@makefntext|
+% which is responsible for the layout of footnotes, to match the
+% specifications of the French `Imprimerie Nationale': footnotes
+% will be indented by |\parindentFFN|, numbers (if any) typeset on
+% the baseline (instead of superscripts) and followed by a dot
+% and an half quad space. Whenever symbols are used to number
+% footnotes (as in |\thanks| for instance), we switch back to the
+% standard layout (the French layout of footnotes is meant for
+% footnotes numbered by Arabic or Roman digits).
+%
+% \changes{v2.0}{2006/11/06}{\cs{parindentFFN} not changed if
+% already defined (required by JA for cah-gut.cls).}
+%
+% \changes{v2.3b}{2008/12/06}{New commands \cs{dotFFN} and
+% \cs{kernFFN} for more flexibility (suggested by JA).}
+%
+% The value of |\parindentFFN| will be redefined at the
+% |\begin{document}|, as the maximum of |\parindent| and 1.5em
+% \emph{unless} it has been set in the preamble (the weird value
+% 10in is just for testing whether |\parindentFFN| has been set
+% or not).
+%
+% \begin{macrocode}
+\newcommand*{\dotFFN}{.}
+\newcommand*{\kernFFN}{\kern .5em}
+\newdimen\parindentFFN
+\parindentFFN=10in
+\def\ftnISsymbol{\@fnsymbol\c@footnote}
+\long\def\@makefntextFB#1{\ifx\thefootnote\ftnISsymbol
+ \@makefntextORI{#1}%
+ \else
+ \parindent=\parindentFFN
+ \rule\z@\footnotesep
+ \setbox\@tempboxa\hbox{\@thefnmark}%
+ \ifdim\wd\@tempboxa>\z@
+ \llap{\@thefnmark}\dotFFN\kernFFN
+ \fi #1
+ \fi}%
+% \end{macrocode}
+%
+% We save the standard definition of |\@makefntext| at the
+% |\begin{document}|, and then redefine |\@makefntext| according to
+% the value of flag |\ifFBFrenchFootnotes| (true or false).
+%
+% \begin{macrocode}
+\AtBeginDocument{\@ifpackageloaded{bigfoot}{}%
+ {\ifdim\parindentFFN<10in
+ \else
+ \parindentFFN=\parindent
+ \ifdim\parindentFFN<1.5em\parindentFFN=1.5em\fi
+ \fi
+ \let\@makefntextORI\@makefntext
+ \long\def\@makefntext#1{%
+ \ifFBFrenchFootnotes
+ \@makefntextFB{#1}%
+ \else
+ \@makefntextORI{#1}%
+ \fi}%
+ }%
+ }
+% \end{macrocode}
+%
+% For compatibility reasons, we provide definitions for the commands
+% dealing with the layout of footnotes in |frenchb| version~1.6.
+% |\frenchbsetup{}| (see in section \ref{sec-keyval}) should be
+% preferred for setting these options. |\StandardFootnotes| may
+% still be used locally (in minipages for instance), that's why the
+% test |\ifFBFrenchFootnotes| is done inside |\@makefntext|.
+% \begin{macrocode}
+\newcommand*{\AddThinSpaceBeforeFootnotes}{\FBAutoSpaceFootnotestrue}
+\newcommand*{\FrenchFootnotes}{\FBFrenchFootnotestrue}
+\newcommand*{\StandardFootnotes}{\FBFrenchFootnotesfalse}
+% \end{macrocode}
+%
+% \subsection{Global layout}
+% \label{sec-global}
+%
+% In multilingual documents, some typographic rules must depend
+% on the current language (e.g., hyphenation, typesetting of
+% numbers, spacing before double punctuation\dots), others should,
+% IMHO, be kept global to the document: especially the layout of
+% lists (see~\ref{sec-lists}) and footnotes
+% (see~\ref{sec-footnotes}), and the indentation of the first
+% paragraph of sections (see~\ref{sec-indent}).
+%
+% From version 2.2 on, if |frenchb| is \babel's ``main language''
+% (i.e.\ last language option at \babel's loading), |frenchb|
+% customises the layout (i.e.\ lists, indentation of the first
+% paragraphs of sections and footnotes) in the whole document
+% regardless the current language. On the other hand, if |frenchb|
+% is \emph{not} \babel's ``main language'', it leaves the layout
+% unchanged both in French and in other languages.
+%
+% \begin{macro}{\FrenchLayout}
+% \begin{macro}{\StandardLayout}
+% The former commands |\FrenchLayout| and |\StandardLayout| are kept
+% for compatibility reasons but should no longer be used.
+%
+% \changes{v2.0g}{2008/03/23}{Flag \cs{ifFBStandardLayout} not checked
+% by \cs{FBprocess@options}, low-level flags have to be set
+% one by one.}
+%
+% \begin{macrocode}
+\newcommand*{\FrenchLayout}{%
+ \FBGlobalLayoutFrenchtrue
+ \PackageWarning{frenchb.ldf}%
+ {\protect\FrenchLayout\space is obsolete. Please use\MessageBreak
+ \protect\frenchbsetup{GlobalLayoutFrench} instead.}%
+}
+\newcommand*{\StandardLayout}{%
+ \FBReduceListSpacingfalse
+ \FBCompactItemizefalse
+ \FBStandardItemLabelstrue
+ \FBIndentFirstfalse
+ \FBFrenchFootnotesfalse
+ \FBAutoSpaceFootnotesfalse
+ \PackageWarning{frenchb.ldf}%
+ {\protect\StandardLayout\space is obsolete. Please use\MessageBreak
+ \protect\frenchbsetup{StandardLayout} instead.}%
+}
+\@onlypreamble\FrenchLayout
+\@onlypreamble\StandardLayout
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Dots\dots}
+% \label{sec-dots}
+%
+% \begin{macro}{\FBtextellipsis}
+% \LaTeXe's standard definition of |\dots| in text-mode is
+% |\textellipsis| which includes a |\kern| at the end;
+% this space is not wanted in some cases (before a closing brace
+% for instance) and |\kern| breaks hyphenation of the next word.
+% We define |\FBtextellipsis| for French (in \LaTeXe{} only).
+%
+% The |\if| construction in the \LaTeXe{} definition of |\dots|
+% doesn't allow the use of |xspace| (|xspace| is always followed
+% by a |\fi|), so we use the AMS-\LaTeX{} construction of |\dots|;
+% this has to be done `AtBeginDocument' not to be overwritten
+% when \file{amsmath.sty} is loaded after \babel.
+%
+% \changes{v2.0}{2006/11/06}{Added special case for LY1 encoding,
+% 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!
+% (reported by Maxime Chupin, 2011/06/04).}
+%
+% LY1 has a ready made character for |\textellipsis|, it should be
+% used in French too. The same is true for Unicode fonts in use
+% with XeTeX and LuaTeX.
+%
+% \begin{macrocode}
+\ifFBunicode
+ \let\FBtextellipsis\textellipsis
+\else
+ \DeclareTextSymbol{\FBtextellipsis}{LY1}{133}
+ \DeclareTextCommandDefault{\FBtextellipsis}{%
+ .\kern\fontdimen3\font.\kern\fontdimen3\font.\xspace}
+\fi
+% \end{macrocode}
+% |\Mdots@| and |\Tdots@ORI| hold the definitions of |\dots| in
+% Math and Text mode. They default to those of amsmath-2.0, and
+% will revert to standard \LaTeX{} definitions `AtBeginDocument',
+% if amsmath has not been loaded. |\Mdots@| doesn't change when
+% switching from/to French, while |\Tdots@| is |\FBtextellipsis|
+% in French and |\Tdots@ORI| otherwise.
+% \begin{macrocode}
+\newcommand*{\Tdots@ORI}{\@xp\textellipsis}
+\newcommand*{\Tdots@}{\Tdots@ORI}
+\newcommand*{\Mdots@}{\@xp\mdots@}
+\AtBeginDocument{\DeclareRobustCommand*{\dots}{\relax
+ \csname\ifmmode M\else T\fi dots@\endcsname}%
+ \@ifundefined{@xp}{\let\@xp\relax}{}%
+ \@ifundefined{mdots@}{\let\Tdots@ORI\textellipsis
+ \let\Mdots@\mathellipsis
+ \let\mdots@\undefined}{}}
+\def\bbl@frenchdots{\let\Tdots@\FBtextellipsis}
+\def\bbl@nonfrenchdots{\let\Tdots@\Tdots@ORI}
+\addto\extrasfrench{\bbl@frenchdots}
+\addto\noextrasfrench{\bbl@nonfrenchdots}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Setup options: keyval stuff}
+% \label{sec-keyval}
+%
+% \changes{v2.0}{2006/11/06}{New command \cs{frenchbsetup} added
+% for global customisation.}
+%
+% \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: [false] $\to$ [true] and
+% StandardLayout $\to$ StandardLists.}
+%
+% \changes{v2.0f}{2008/03/23}{StandardLayout option had no
+% effect on lists. Test moved to \cs{FBprocess@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@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@main@language}). Suggested by Ulrike Fischer.}
+%
+% \changes{v2.2a}{2008/05/08}{Values of flags
+% \cs{ifFBReduceListSpacing}, \cs{ifFBCompactItemize},
+% \cs{ifFBStandardItemLabels}, \cs{ifFBIndentFirst},
+% \cs{ifFBFrenchFootnotes}, \cs{ifFBAutoSpaceFootnotes} changed:
+% default now means `StandardLayout', it will be changed to
+% `FrenchLayout' AtEndOfPackage only if french is
+% \cs{bbl@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.3a}{2008/10/10}{New option: OriginalTypewriter. Now
+% frenchb switches to \cs{noautospace@beforeFDP} when a tt-font is
+% in use. When OriginalTypewriter is set to true, frenchb behaves
+% as in pre-2.3 versions.}
+%
+% \changes{v2.4a}{2009/11/23}{New option SuppressWarning.}
+%
+% \changes{v2.6a}{2013/01/30}{New options ListOldLayout,
+% StandardItemizeEnv and StandardEnumerateEnv (CompactItemize is
+% deprecated).}
+%
+% We first define a collection of conditionals with their defaults
+% (true or false).
+%
+% \begin{macrocode}
+\newif\ifFBStandardLayout \FBStandardLayouttrue
+\newif\ifFBGlobalLayoutFrench \FBGlobalLayoutFrenchfalse
+\newif\ifFBReduceListSpacing \FBReduceListSpacingfalse
+\newif\ifFBListOldLayout \FBListOldLayouttrue
+\newif\ifFBCompactItemize \FBCompactItemizefalse
+\newif\ifFBStandardItemizeEnv \FBStandardItemizeEnvtrue
+\newif\ifFBStandardEnumerateEnv \FBStandardEnumerateEnvtrue
+\newif\ifFBStandardItemLabels \FBStandardItemLabelstrue
+\newif\ifFBStandardLists \FBStandardListstrue
+\newif\ifFBIndentFirst \FBIndentFirstfalse
+\newif\ifFBFrenchFootnotes \FBFrenchFootnotesfalse
+\newif\ifFBAutoSpaceFootnotes \FBAutoSpaceFootnotesfalse
+\newif\ifFBOriginalTypewriter \FBOriginalTypewriterfalse
+\newif\ifFBThinColonSpace \FBThinColonSpacefalse
+\newif\ifFBThinSpaceInFrenchNumbers \FBThinSpaceInFrenchNumbersfalse
+\newif\ifFBFrenchSuperscripts \FBFrenchSuperscriptstrue
+\newif\ifFBLowercaseSuperscripts \FBLowercaseSuperscriptstrue
+\newif\ifFBPartNameFull \FBPartNameFulltrue
+\newif\ifFBSuppressWarning \FBSuppressWarningfalse
+\newif\ifFBShowOptions \FBShowOptionsfalse
+% \end{macrocode}
+%
+% The defaults values of these flags have been set so that |frenchb|
+% does not change anything regarding the global layout.
+% |\bbl@main@language|, set by the last option of babel, controls
+% the global layout of the document. `AtEndOfPackage' we check the
+% main language in |\bbl@main@language|; if it is French,
+% 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 |\frenchbsetup{}|.
+%
+% \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@french} and \cs{l@english} are 0.
+% Pointed out by G\"unter Milde.}
+%
+% \begin{macrocode}
+\def\FB@french{french}
+\AtEndOfPackage{%
+ \ifx\bbl@main@language\FB@french
+ \FBReduceListSpacingtrue
+ \FBListOldLayoutfalse
+ \FBCompactItemizetrue
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \FBStandardItemLabelsfalse
+ \FBIndentFirsttrue
+ \FBFrenchFootnotestrue
+ \FBAutoSpaceFootnotestrue
+ \FBGlobalLayoutFrenchtrue
+ \fi
+}
+% \end{macrocode}
+%
+% \begin{macro}{\frenchbsetup}
+% From version 2.0 on, all setup options are handled by \emph{one}
+% command |\frenchbsetup| using the keyval syntax.
+% Let's now define this command which reads and sets the options
+% to be processed later (at |\begin{document}|) by
+% |\FBprocess@options|. It can only be called in the preamble.
+% \begin{macrocode}
+\newcommand*{\frenchbsetup}[1]{%
+ \setkeys{FB}{#1}%
+}%
+\@onlypreamble\frenchbsetup
+% \end{macrocode}
+% |frenchb| being an option of babel, it cannot load a package
+% (\file{keyval}) while \file{frenchb.ldf} is read, so we defer the
+% loading of \file{keyval} and the options setup at the end of
+% \babel's loading.
+%
+% |StandardLayout| resets the layout in French to the standard layout
+% defined par the \LaTeX{} class and packages loaded. It deals with
+% lists, indentation of first paragraphs of sections and footnotes.
+% Other keys, entered \emph{after} |StandardLayout| in
+% |\frenchbsetup|, can overrule some of the |StandardLayout|
+% settings.
+%
+% When French is the main language, |GlobalLayoutFrench| forces the
+% layout in French and (as far as possible) outside French to meet
+% the French typographic standards.
+%
+% \changes{v2.3d}{2009/03/16}{Warning added to \cs{GlobalLayoutFrench}
+% when French is not the main language.}
+%
+% \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@french} and \cs{l@english} are 0.
+% Pointed out by G\"unter Milde.}
+%
+% \begin{macrocode}
+\AtEndOfPackage{%
+ \RequirePackage{keyval}%
+ \define@key{FB}{StandardLayout}[true]%
+ {\csname FBStandardLayout#1\endcsname
+ \ifFBStandardLayout
+ \FBReduceListSpacingfalse
+ \FBStandardItemizeEnvtrue
+ \FBStandardEnumerateEnvtrue
+ \FBStandardItemLabelstrue
+ \FBIndentFirstfalse
+ \FBFrenchFootnotesfalse
+ \FBAutoSpaceFootnotesfalse
+ \FBGlobalLayoutFrenchfalse
+ \else
+ \FBReduceListSpacingtrue
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \FBStandardItemLabelsfalse
+ \FBIndentFirsttrue
+ \FBFrenchFootnotestrue
+ \FBAutoSpaceFootnotestrue
+ \fi}%
+ \define@key{FB}{GlobalLayoutFrench}[true]%
+ {\csname FBGlobalLayoutFrench#1\endcsname
+ \ifFBGlobalLayoutFrench
+ \ifx\bbl@main@language\FB@french
+ \FBReduceListSpacingtrue
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \FBStandardItemLabelsfalse
+ \FBIndentFirsttrue
+ \FBFrenchFootnotestrue
+ \FBAutoSpaceFootnotestrue
+ \else
+ \PackageWarning{frenchb.ldf}%
+ {Option `GlobalLayoutFrench' skipped:
+ \MessageBreak French is *not*
+ babel's last option.\MessageBreak}%
+ \fi
+ \fi}%
+ \define@key{FB}{ReduceListSpacing}[true]%
+ {\csname FBReduceListSpacing#1\endcsname}%
+ \define@key{FB}{ListOldLayout}[true]%
+ {\csname FBListOldLayout#1\endcsname
+ \ifFBListOldLayout
+ \renewcommand*{\FrenchLabelItem}{\textendash}%
+ \fi}%
+ \define@key{FB}{CompactItemize}[true]%
+ {\csname FBCompactItemize#1\endcsname
+ \ifFBCompactItemize
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \else
+ \FBStandardItemizeEnvtrue
+ \FBStandardEnumerateEnvtrue
+ \fi}%
+ \define@key{FB}{StandardItemizeEnv}[true]%
+ {\csname FBStandardItemizeEnv#1\endcsname}%
+ \define@key{FB}{StandardEnumerateEnv}[true]%
+ {\csname FBStandardEnumerateEnv#1\endcsname}%
+ \define@key{FB}{StandardItemLabels}[true]%
+ {\csname FBStandardItemLabels#1\endcsname}%
+ \define@key{FB}{ItemLabels}{%
+ \renewcommand*{\FrenchLabelItem}{#1}}%
+ \define@key{FB}{ItemLabeli}{%
+ \renewcommand*{\Frlabelitemi}{#1}}%
+ \define@key{FB}{ItemLabelii}{%
+ \renewcommand*{\Frlabelitemii}{#1}}%
+ \define@key{FB}{ItemLabeliii}{%
+ \renewcommand*{\Frlabelitemiii}{#1}}%
+ \define@key{FB}{ItemLabeliv}{%
+ \renewcommand*{\Frlabelitemiv}{#1}}%
+ \define@key{FB}{StandardLists}[true]%
+ {\csname FBStandardLists#1\endcsname
+ \ifFBStandardLists
+ \FBReduceListSpacingfalse
+ \FBCompactItemizefalse
+ \FBStandardItemizeEnvtrue
+ \FBStandardEnumerateEnvtrue
+ \FBStandardItemLabelstrue
+ \else
+ \FBReduceListSpacingtrue
+ \FBCompactItemizetrue
+ \FBStandardItemizeEnvfalse
+ \FBStandardEnumerateEnvfalse
+ \FBStandardItemLabelsfalse
+ \fi}%
+ \define@key{FB}{IndentFirst}[true]%
+ {\csname FBIndentFirst#1\endcsname}%
+ \define@key{FB}{FrenchFootnotes}[true]%
+ {\csname FBFrenchFootnotes#1\endcsname}%
+ \define@key{FB}{AutoSpaceFootnotes}[true]%
+ {\csname FBAutoSpaceFootnotes#1\endcsname}%
+ \define@key{FB}{AutoSpacePunctuation}[true]%
+ {\csname FBAutoSpacePunctuation#1\endcsname}%
+ \define@key{FB}{OriginalTypewriter}[true]%
+ {\csname FBOriginalTypewriter#1\endcsname}%
+ \define@key{FB}{ThinColonSpace}[true]%
+ {\csname FBThinColonSpace#1\endcsname}%
+ \define@key{FB}{ThinSpaceInFrenchNumbers}[true]%
+ {\csname FBThinSpaceInFrenchNumbers#1\endcsname}%
+ \define@key{FB}{FrenchSuperscripts}[true]%
+ {\csname FBFrenchSuperscripts#1\endcsname}
+ \define@key{FB}{LowercaseSuperscripts}[true]%
+ {\csname FBLowercaseSuperscripts#1\endcsname}
+ \define@key{FB}{PartNameFull}[true]%
+ {\csname FBPartNameFull#1\endcsname}%
+ \define@key{FB}{SuppressWarning}[true]%
+ {\csname FBSuppressWarning#1\endcsname
+ \ifFBSuppressWarning
+ \renewcommand{\FBWarning}[2]{\relax}%
+ \else
+ \renewcommand{\FBWarning}[2]{%
+ \PackageWarning{##1}{##2}}%
+ \fi}
+ \define@key{FB}{ShowOptions}[true]%
+ {\csname FBShowOptions#1\endcsname}%
+% \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|.
+% The purpose of the following code is to map the French quote
+% characters to |\og\ignorespaces| and |{\fg}| respectively when
+% the current language is French, and to |\guillemotleft| and
+% |\guillemotright| otherwise (think of German quotes); thus correct
+% unbreakable spaces will be added automatically to French quotes.
+% The quote characters typed in depend on the input encoding,
+% it can be single-byte (latin1, latin9, applemac,\dots) or
+% multi-bytes (utf-8, utf8x). We first check whether XeTeX or
+% LuaTeX engines are used, if not the \file{inputenc} package has to
+% be loaded before the |\begin{document}| with the proper coding
+% option, so we check if |\DeclareInputText| is defined.
+%
+% \changes{v2.4c}{2010/05/23}{In \cs{ttfamilyFB}, also cancel
+% automatic spaces inside French guillemets coded as characters
+% (see \cs{frenchbsetup}).}
+%
+% \changes{v2.5a}{2010/08/21}{Test \cs{@ifundefined} leaves the
+% tested control sequence defined as \cs{relax} when TRUE.
+% Changed \cs{relax} to \cs{undefined} when testing
+% \cs{XeTeXrevision}, \cs{DeclareInputText}, \cs{uc@dclc},
+% \cs{DeclareUnicodeCharacter}, \cs{mule@def} in \cs{og} and
+% \cs{fg}.}
+%
+% \changes{v2.5c}{2011/01/16}{The code meant for XeTeX also works for
+% LuaTeX, we just need to change the test.}
+%
+% \changes{v2.5g}{2011/12/31}{When \cs{ifFB@xetex@punct} is true,
+% `og' and `fg' options now set XeTeXcharclasses of these characters
+% to \cs{FB@punctguilo} and \cs{FB@punctguilf}. Otherwise French
+% quotes behave as normal characters (their XeTeXcharclass is 0).}
+%
+% \begin{macrocode}
+ \define@key{FB}{og}{%
+ \newcommand*{\FB@@og}{%
+ \iflanguage{french}%
+ {\ifFBAutoSpaceGuill\FB@og\ignorespaces
+ \else\guillemotleft
+ \fi}%
+ {\guillemotleft}}%
+ \ifFBunicode
+% \end{macrocode}
+% LuaTeX or XeTeX in use,
+% \begin{macrocode}
+ \ifFB@xetex@punct
+% \end{macrocode}
+% |\XeTeXinterchartokenstate| is defined, we just need to set
+% |\XeTeXcharclass| to |\FB@punctguilo| for the French opening
+% quote (see subsection~\ref{sec-punct}) and to switch
+% |\ifFBog@addspace| to false, otherwise commands |\og| and
+% |\fg| would produce a double space; the |\ifFBguillo@addspace|
+% flag is needed when switching from |\ttfamily| back to |\sf| or
+% |\rm|.
+% \begin{macrocode}
+ \XeTeXcharclass"00AB = \FB@punctguilo
+ \FBguillo@addspacetrue \FBog@addspacefalse
+ \else
+% \end{macrocode}
+% then LuaTeX or an old XeTeX in use, the following trick
+% for defining the active quote character is borrowed from
+% \file{inputenc.dtx}.
+% \begin{macrocode}
+ \catcode`#1=\active
+ \bgroup
+ \uccode`\~`#1%
+ \uppercase{%
+ \egroup
+ \def~%
+ }{\FB@@og}%
+ \fi
+ \else
+% \end{macrocode}
+% This is for conventional TeX engines:
+% \begin{macrocode}
+ \AtBeginDocument
+ {\@ifundefined{DeclareInputText}%
+ {\PackageWarning{frenchb.ldf}%
+ {Option `og' requires package inputenc.\MessageBreak}%
+ \let\DeclareInputText\undefined
+ }%
+ {\@ifundefined{uc@dclc}%
+% \end{macrocode}
+% if |\uc@dclc| is undefined, utf8x is not loaded\dots
+% \begin{macrocode}
+ {\@ifundefined{DeclareUnicodeCharacter}%
+% \end{macrocode}
+% if |\DeclareUnicodeCharacter| is undefined, utf8 is not loaded
+% either, we assume 8-bit character input encoding.
+% Package \file{MULEenc.sty} (from CJK) defines |\mule@def| to map
+% characters to control sequences.
+% \begin{macrocode}
+ {\@tempcnta`#1\relax
+ \@ifundefined{mule@def}%
+ {\DeclareInputText{\the\@tempcnta}{\FB@@og}%
+ \let\mule@def\undefined}%
+ {\mule@def{11}{{\FB@@og}}}%
+ \let\DeclareUnicodeCharacter\undefined
+ }%
+% \end{macrocode}
+% utf8 loaded, use |\DeclareUnicodeCharacter|,
+% \begin{macrocode}
+ {\DeclareUnicodeCharacter{00AB}{\FB@@og}}%
+ \let\uc@dclc\undefined
+ }%
+% \end{macrocode}
+% utf8x loaded, use |\uc@dclc|,
+% \begin{macrocode}
+ {\uc@dclc{171}{default}{\FB@@og}}%
+ }%
+ }%
+ \fi
+ }%
+% \end{macrocode}
+% Same code for the closing quote.
+% \begin{macrocode}
+ \define@key{FB}{fg}{%
+ \newcommand*{\FB@@fg}{%
+ \iflanguage{french}%
+ {\ifFBAutoSpaceGuill\FB@fg
+ \else\guillemotright
+ \fi}%
+ {\guillemotright}}%
+ \ifFBunicode
+ \ifFB@xetex@punct
+ \XeTeXcharclass"00BB = \FB@punctguilf
+ \FBguillf@addspacetrue \FBfg@addspacefalse
+ \else
+ \catcode`#1=\active
+ \bgroup
+ \uccode`\~`#1%
+ \uppercase{%
+ \egroup
+ \def~%
+ }{{\FB@@fg}}%
+ \fi
+ \else
+ \AtBeginDocument
+ {\@ifundefined{DeclareInputText}%
+ {\PackageWarning{frenchb.ldf}%
+ {Option `fg' requires package inputenc.\MessageBreak}%
+ \let\DeclareInputText\undefined
+ }%
+ {\@ifundefined{uc@dclc}%
+ {\@ifundefined{DeclareUnicodeCharacter}%
+ {\@tempcnta`#1\relax
+ \@ifundefined{mule@def}%
+ {\DeclareInputText{\the\@tempcnta}{{\FB@@fg}}%
+ \let\mule@def\undefined
+ }%
+ {\mule@def{27}{{\FB@@fg}}}%
+ \let\DeclareUnicodeCharacter\undefined
+ }%
+ {\DeclareUnicodeCharacter{00BB}{{\FB@@fg}}%
+ }%
+ \let\uc@dclc\undefined
+ }%
+ {\uc@dclc{187}{default}{{\FB@@fg}}}%
+ }%
+ }%
+ \fi
+ }%
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\FBprocess@options}
+% |\FBprocess@options| processes the options, it is called \emph{once}
+% at |\begin{document}|.
+% \begin{macrocode}
+\newcommand*{\FBprocess@options}{%
+% \end{macrocode}
+% Nothing has to be done here for |StandardLayout| and
+% |StandardLists| (the involved flags have already been set in
+% |\frenchbsetup{}| or before (at babel's EndOfPackage).
+%
+% The next three options deal with the layout of lists in French.
+%
+% |ReduceListSpacing| reduces the vertical spaces in lists
+% in French (done by changing |\list| to |\listFB|).
+% When |GlobalLayoutFrench| is true (the default), the same is
+% done outside French except for languages that force a different
+% setting.
+% \begin{macrocode}
+ \ifFBReduceListSpacing
+ \addto\extrasfrench{\let\list\listFB
+ \let\endlist\endlistFB}%
+ \addto\noextrasfrench{\ifFBGlobalLayoutFrench
+ \let\list\listFB
+ \let\endlist\endlistFB
+ \else
+ \let\list\listORI
+ \let\endlist\endlistORI
+ \fi}%
+ \else
+ \addto\extrasfrench{\let\list\listORI
+ \let\endlist\endlistORI
+ }%
+ \addto\noextrasfrench{\let\list\listORI
+ \let\endlist\endlistORI
+ }%
+ \fi
+% \end{macrocode}
+%
+% When |ListOldLayout=true|, set |StandardEnumerateEnv=true|
+% (before v.~2.6a |enumerate| was not redefined).
+% \begin{macrocode}
+ \ifFBListOldLayout
+ \FBStandardEnumerateEnvtrue
+ \fi
+% \end{macrocode}
+%
+% \changes{v2.4b}{2010/04/30}{Warning and set flag CompactItemize=false
+% when the enumitem package is loaded (ensures compatibility).}
+%
+% \changes{v2.5k}{2012/12/27}{No warning if flag CompactItemize already
+% set to false by user.}
+%
+% \changes{v2.6a}{2013/01/30}{Flag CompactItemize deprecated.
+% Set flags StandardItemizeEnv and StandardEnumerateEnv to true
+% when the enumitem package is loaded.}
+%
+% \changes{v2.6a}{2013/01/30}{Ensure compatibility with paralist and
+% enumerate packages.}
+%
+% To ensure compatibility with the \file{enumitem} package, when
+% |enumitem| is loaded, force flags |StandardItemizeEnv| and
+% |StandardEnumerateEnv| to true.
+% \begin{macrocode}
+ \@ifpackageloaded{enumitem}{%
+ \ifFBStandardItemizeEnv
+ \else
+ \FBWarning{frenchb.ldf}%
+ {Setting StandardItemizeEnv=true for\MessageBreak
+ compatibility with enumitem package,\MessageBreak}%
+ \FBStandardItemizeEnvtrue
+ \fi
+ \ifFBStandardEnumerateEnv
+ \else
+ \FBWarning{frenchb.ldf}%
+ {Setting StandardEnumerateEnv=true for\MessageBreak
+ compatibility with enumitem package,\MessageBreak}%
+ \FBStandardEnumerateEnvtrue
+ \fi}%
+ {}%
+% \end{macrocode}
+%
+% To ensure compatibility with the \file{paralist} package, when
+% \file{paralist} is loaded; force flags |StandardItemizeEnv| and
+% |StandardEnumerateEnv| to true.
+% \begin{macrocode}
+ \@ifpackageloaded{paralist}{%
+ \ifFBStandardItemizeEnv
+ \else
+ \FBWarning{frenchb.ldf}%
+ {Setting StandardItemizeEnv=true for\MessageBreak
+ compatibility with paralist package,\MessageBreak}%
+ \FBStandardItemizeEnvtrue
+ \fi
+ \ifFBStandardEnumerateEnv
+ \else
+ \FBWarning{frenchb.ldf}%
+ {Setting StandardEnumerateEnv=true for\MessageBreak
+ compatibility with paralist package,\MessageBreak}%
+ \FBStandardEnumerateEnvtrue
+ \fi}%
+ {}%
+% \end{macrocode}
+%
+% To ensure compatibility with the \file{enumerate} package, when
+% |enumerate| is loaded, force flag |StandardEnumerateEnv| to true.
+% \begin{macrocode}
+ \@ifpackageloaded{enumerate}{%
+ \ifFBStandardEnumerateEnv
+ \else
+ \FBWarning{frenchb.ldf}%
+ {Setting StandardEnumerateEnv=true for\MessageBreak
+ compatibility with enumerate package,\MessageBreak}%
+ \FBStandardEnumerateEnvtrue
+ \fi}%
+ {}%
+% \end{macrocode}
+%
+% Let's now process flags |StandardItemizeEnv| and
+% |StandardEnumerateEnv|. Mind that
+% |StandardEnumerateEnv|'s value decides for both environments
+% |enumerate| and |description|).
+% \begin{macrocode}
+ \ifFBStandardItemizeEnv
+ \addto\extrasfrench{\let\itemize\itemizeORI}%
+ \addto\noextrasfrench{\let\itemize\itemizeORI}%
+ \else
+ \addto\extrasfrench{\let\itemize\itemizeFB}%
+ \addto\noextrasfrench{\ifFBGlobalLayoutFrench
+ \let\itemize\itemizeFB
+ \else
+ \let\itemize\itemizeORI
+ \fi}%
+ \fi
+ \ifFBStandardEnumerateEnv
+ \addto\extrasfrench{\let\enumerate\enumerateORI
+ \let\description\descriptionORI}%
+ \addto\noextrasfrench{\let\enumerate\enumerateORI
+ \let\description\descriptionORI}%
+ \else
+ \addto\extrasfrench{\let\enumerate\enumerateFB
+ \let\description\descriptionFB}%
+ \addto\noextrasfrench{\ifFBGlobalLayoutFrench
+ \let\enumerate\enumerateFB
+ \let\description\descriptionFB
+ \else
+ \let\enumerate\enumerateORI
+ \let\description\descriptionORI
+ \fi}%
+ \fi
+% \end{macrocode}
+%
+% |StandardItemLabels| resets labelitems in French to their
+% standard values set by the \LaTeX{} class and packages loaded.
+% When |GlobalLayoutFrench| is true, labelitems are identical
+% whether the current language is French or not.
+% \begin{macrocode}
+ \ifFBStandardItemLabels
+ \addto\extrasfrench{\bbl@nonfrenchlabelitems}%
+ \addto\noextrasfrench{\bbl@nonfrenchlabelitems}%
+ \else
+ \addto\extrasfrench{\bbl@frenchlabelitems}%
+ \addto\noextrasfrench{\ifFBGlobalLayoutFrench
+ \bbl@frenchlabelitems
+ \else
+ \bbl@nonfrenchlabelitems
+ \fi}%
+ \fi
+% \end{macrocode}
+%
+% |IndentFirst| forces the first paragraphs of sections to be
+% indented just like the other ones in French.
+% When |GlobalLayoutFrench| is true, the same is done outside French
+% except for languages that force a different setting.
+% |\bbl@nonfrenchindent| has been designed to be smart with other
+% languages (like Spanish) who also indent every first paragraphs of
+% sections (see section~\ref{sec-indent}).
+% \begin{macrocode}
+ \ifFBIndentFirst
+ \addto\extrasfrench{\bbl@frenchindent}%
+ \addto\noextrasfrench{\ifFBGlobalLayoutFrench
+ \bbl@frenchindent
+ \else
+ \bbl@nonfrenchindent
+ \fi}%
+ \else
+ \addto\extrasfrench{\bbl@nonfrenchindent}%
+ \addto\noextrasfrench{\bbl@nonfrenchindent}%
+ \fi
+% \end{macrocode}
+%
+% The layout of footnotes is handled at the |\begin{document}|
+% depending on the values of flags |FrenchFootnotes|
+% and |AutoSpaceFootnotes| (see section~\ref{sec-footnotes}),
+% nothing has to be done here for footnotes.
+%
+% |AutoSpacePunctuation| adds an unbreakable space (in French only)
+% before the four active characters (:;!?) even if none has been
+% typed before them.
+% \begin{macrocode}
+ \ifFBAutoSpacePunctuation
+ \autospace@beforeFDP
+ \else
+ \noautospace@beforeFDP
+ \fi
+% \end{macrocode}
+%
+% When |OriginalTypewriter| is set to |false| (the default),
+% |\ttfamily|, |\rmfamily| and |\sffamily| are redefined as
+% |\ttfamilyFB|, |\rmfamilyFB| and |\sffamilyFB| respectively
+% to prevent addition of automatic spaces before the four active
+% characters in computer code.
+% \begin{macrocode}
+ \ifFBOriginalTypewriter
+ \else
+ \let\ttfamily\ttfamilyFB
+ \let\rmfamily\rmfamilyFB
+ \let\sffamily\sffamilyFB
+ \fi
+% \end{macrocode}
+%
+% |ThinColonSpace| changes the normal unbreakable space typeset in
+% French before `:' to a thin space.
+% \begin{macrocode}
+ \ifFBThinColonSpace\renewcommand*{\Fcolonspace}{\Fthinspace}\fi
+% \end{macrocode}
+%
+% When |true|, |ThinSpaceInFrenchNumbers| redefines |numprint.sty|'s
+% command |\npstylefrench| to set |\npthousandsep| to |\,|
+% (thinspace) instead of |~| (default) . This option has no effect
+% if package \file{numprint.sty} is not loaded with `|autolanguage|'.
+% As old versions of \file{numprint.sty} did not define
+% |\npstylefrench|, we have to provide this command.
+% \begin{macrocode}
+ \@ifpackageloaded{numprint}%
+ {\ifnprt@autolanguage
+ \providecommand*{\npstylefrench}{}%
+ \ifFBThinSpaceInFrenchNumbers
+ \renewcommand*\npstylefrench{%
+ \npthousandsep{\,}%
+ \npdecimalsign{,}%
+ \npproductsign{\cdot}%
+ \npunitseparator{\,}%
+ \npdegreeseparator{}%
+ \nppercentseparator{\nprt@unitsep}%
+ }%
+ \else
+ \renewcommand*\npstylefrench{%
+ \npthousandsep{~}%
+ \npdecimalsign{,}%
+ \npproductsign{\cdot}%
+ \npunitseparator{\,}%
+ \npdegreeseparator{}%
+ \nppercentseparator{\nprt@unitsep}%
+ }%
+ \fi
+ \npaddtolanguage{french}{french}%
+ \fi}{}%
+% \end{macrocode}
+%
+% |FrenchSuperscripts|: if |true| |\up=\fup|, else
+% |\up=\textsuperscript|. Anyway |\up*=\FB@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.
+% \begin{macrocode}
+ \ifFBFrenchSuperscripts
+ \DeclareRobustCommand*{\up}{\@ifstar{\FB@up@fake}{\fup}}%
+ \else
+ \DeclareRobustCommand*{\up}{\@ifstar{\FB@up@fake}%
+ {\textsuperscript}}%
+ \fi
+% \end{macrocode}
+%
+% |LowercaseSuperscripts|: if |true| let |\FB@lc| be |\lowercase|,
+% else |\FB@lc| is redefined to do nothing.
+% \begin{macrocode}
+ \ifFBLowercaseSuperscripts
+ \else
+ \renewcommand*{\FB@lc}[1]{##1}%
+ \fi
+% \end{macrocode}
+%
+% |PartNameFull|: if |false|, redefine |\partname|.
+% \begin{macrocode}
+ \ifFBPartNameFull
+ \else\addto\captionsfrench{\def\partname{Partie}}\fi
+% \end{macrocode}
+%
+% |ShowOptions|: if |true|, print the list of all options to the
+% \file{.log} file.
+% \begin{macrocode}
+ \ifFBShowOptions
+ \GenericWarning{* }{%
+ * **** List of possible options for frenchb ****\MessageBreak
+ [Default values between brackets when frenchb is loaded *LAST*]%
+ \MessageBreak
+ ShowOptions=true [false]\MessageBreak
+ StandardLayout=true [false]\MessageBreak
+ GlobalLayoutFrench=false [true]\MessageBreak
+ StandardLists=true [false]\MessageBreak
+ IndentFirst=false [true]\MessageBreak
+ ReduceListSpacing=false [true]\MessageBreak
+ ListOldLayout=true [false]\MessageBreak
+ StandardItemizeEnv=true [false]\MessageBreak
+ StandardEnumerateEnv=true [false]\MessageBreak
+ StandardItemLabels=true [false]\MessageBreak
+ ItemLabels=\textemdash, \textbullet,
+ \protect\ding{43},... [\textendash]\MessageBreak
+ ItemLabeli=\textemdash, \textbullet,
+ \protect\ding{43},... [\textendash]\MessageBreak
+ ItemLabelii=\textemdash, \textbullet,
+ \protect\ding{43},... [\textendash]\MessageBreak
+ ItemLabeliii=\textemdash, \textbullet,
+ \protect\ding{43},... [\textendash]\MessageBreak
+ ItemLabeliv=\textemdash, \textbullet,
+ \protect\ding{43},... [\textendash]\MessageBreak
+ FrenchFootnotes=false [true]\MessageBreak
+ AutoSpaceFootnotes=false [true]\MessageBreak
+ AutoSpacePunctuation=false [true]\MessageBreak
+ OriginalTypewriter=true [false]\MessageBreak
+ ThinColonSpace=true [false]\MessageBreak
+ ThinSpaceInFrenchNumbers=true [false]\MessageBreak
+ FrenchSuperscripts=false [true]\MessageBreak
+ LowercaseSuperscripts=false [true]\MessageBreak
+ PartNameFull=false [true]\MessageBreak
+ SuppressWarning=true [false]\MessageBreak
+ og= <left quote character>, fg= <right quote character>
+ \MessageBreak
+ *********************************************
+ \MessageBreak\protect\frenchbsetup{ShowOptions}}
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{v2.0}{2006/12/15}{AtBeginDocument, save again the
+% definitions of the `list' and `itemize' environments and the
+% values of labelitems. As of frenchb v.~1.6, `ORI' values were
+% set when reading frenchb.ldf, later changes were ignored.}
+%
+% \changes{v2.0}{2006/12/06}{Added warning for OT1 encoding.}
+%
+% \changes{v2.1b}{2008/04/07}{Disable some commands in bookmarks.}
+%
+% \changes{v2.5a}{2010/08/21}{Test \cs{@ifundefined} leaves the
+% tested control sequence defined as \cs{relax} when TRUE.
+% Changed \cs{relax} to \cs{undefined} when testing
+% \cs{pdfstringdefDisableCommands} AtBeginDocument.}
+%
+% \changes{v2.5e}{2011/04/03}{The redefinition of
+% \cs{pdfstringdefDisableCommands} from \cs{relax} to \cs{undefined}
+% was misplaced. Reported by S\'ebastien Gouezel.}
+%
+% \changes{v2.5e}{2011/04/03}{\cs{pdfstringdefDisableCommands} should
+% redefine \cs{FB@og} and \cs{FB@fg} instead of \cs{og} and \cs{fg}
+% so that it works also when quotes are entered as characters.
+% Reported by S\'ebastien Gouezel.}
+%
+% At |\begin{document}| we save again the value of
+% |\if@afterindent|, definitions of the list environments and the
+% values of labelitems so that all changes made in the preamble are
+% taken into account in languages other than French and in French
+% with the StandardLayout option.
+% We also have to provide an |\xspace| command in case the
+% \file{xspace.sty} package is not loaded.
+%
+% \begin{macrocode}
+\AtBeginDocument{%
+ \ifx\@afterindentfalse\@afterindenttrue
+ \let\@aifORI\@afterindenttrue
+ \else \let\@aifORI\@afterindentfalse
+ \fi
+ \let\listORI\list
+ \let\endlistORI\endlist
+ \let\endlistFB\endlist
+ \let\itemizeORI\itemize
+ \let\enditemizeORI\endlist
+ \let\enditemizeFB\endlist
+ \let\enumerateORI\enumerate
+ \let\endenumerateORI\endlist
+ \let\endenumerateFB\endlist
+ \let\descriptionORI\description
+ \let\enddescriptionORI\endlist
+ \let\enddescriptionFB\endlist
+ \let\@ltiORI\labelitemi
+ \let\@ltiiORI\labelitemii
+ \let\@ltiiiORI\labelitemiii
+ \let\@ltivORI\labelitemiv
+ \providecommand*{\xspace}{\relax}%
+% \end{macrocode}
+%
+% \changes{v2.5g}{2011/11/13}{Redefine \cs{degre}, \cs{degres} \cs{at}
+% \cs{circonflexe} and \cs{tild} for bookmarks. Add \cs{fup} also.}
+%
+% Let's redefine some commands in \file{hyperref}'s bookmarks.
+% \begin{macrocode}
+ \@ifundefined{pdfstringdefDisableCommands}%
+ {\let\pdfstringdefDisableCommands\undefined}%
+ {\pdfstringdefDisableCommands{%
+ \let\up\relax
+ \let\fup\relax
+ \let\degre\textdegree
+ \let\degres\textdegree
+ \def\ieme{e\xspace}%
+ \def\iemes{es\xspace}%
+ \def\ier{er\xspace}%
+ \def\iers{ers\xspace}%
+ \def\iere{re\xspace}%
+ \def\ieres{res\xspace}%
+ \def\FrenchEnumerate#1{#1\degre\space}%
+ \def\FrenchPopularEnumerate#1{#1\degre)\space}%
+ \def\No{N\degre\space}%
+ \def\no{n\degre\space}%
+ \def\Nos{N\degre\space}%
+ \def\nos{n\degre\space}%
+ \def\FB@og{\guillemotleft\space}%
+ \def\FB@fg{\space\guillemotright}%
+ \def\at{@}%
+ \def\circonflexe{\string^}%
+ \def\tild{\string~}%
+ \let\bsc\textsc
+ }%
+ }%
+% \end{macrocode}
+%
+% It is time to process the options set with |\frenchboptions{}|.
+% Then we need to execute either |\extrasfrench| and
+% |\captionsfrench| or |\noextrasfrench| according to the current
+% language at the |\begin{document}| (these three commands have been
+% updated by |\FBprocess@options|). \emph{But}, when French is the
+% main language, |\extrasfrench| is executed \emph{again} now
+% (French has been switched on `AtBeginDocument' some time before).
+% This is harmless, except for |\bbl@frenchspacing| which will
+% redefine |\bbl@nonfrenchspacing| to |\relax|, this will be
+% wrong if the user switches to English.
+% When French is \emph{not} the main language, |\noextrasfrench|
+% executes |\bbl@nonfrenchspacing| (=|\nonfrenchspacing|), thus
+% eventually overwriting a |\frenchspacing| command issued by the
+% main language (German, Spanish, etc.).
+% So we have to define |\bbl@nonfrenchspacing| as |\relax| here
+% and restore it's meaning afterwards.
+%
+% \changes{v2.5a}{2010/08/15}{Define \cs{bbl@nonfrenchspacing} locally
+% as \cs{relax}, otherwise the \cs{bbl@frenchspacing} command
+% included in germanb.ldf is overwritten here by
+% \cs{noextrasfrench}. Bug pointed out by Ulrike Fischer.}
+%
+% \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@french} and \cs{l@english} are 0.
+% Pointed out by G\"unter Milde.}
+%
+% \begin{macrocode}
+ \FBprocess@options
+ \let\bbl@nonfrenchspacingORI\bbl@nonfrenchspacing
+ \let\bbl@nonfrenchspacing\relax
+ \ifx\bbl@main@language\FB@french
+ \extrasfrench\captionsfrench
+ \else
+ \noextrasfrench
+ \fi
+ \let\bbl@nonfrenchspacing\bbl@nonfrenchspacingORI
+% \end{macrocode}
+% Some warnings are issued when output font encodings are not
+% properly set. With XeLaTeX, \file{fontspec.sty} and
+% \file{xunicode.sty} should be loaded; with (pdf)\LaTeX, a warning
+% is issued when OT1 encoding is in use at the |\begin{document}|.
+% Mind that |\encodingdefault| is defined as `long', defining
+% |\FBOTone| with |\newcommand*| would fail!
+% \begin{macrocode}
+ \ifFBXeTeX
+ \@ifundefined{DeclareUTFcharacter}%
+ {\PackageWarning{frenchb.ldf}%
+ {Add \protect\usepackage{xltxtra} to the\MessageBreak
+ preamble of your document,}%
+ \let\DeclareUTFcharacter\undefined}%
+ {}%
+ \else
+ \begingroup \newcommand{\FBOTone}{OT1}%
+ \ifx\encodingdefault\FBOTone
+ \PackageWarning{frenchb.ldf}%
+ {OT1 encoding should not be used for French.
+ \MessageBreak
+ Add \protect\usepackage[T1]{fontenc} to the
+ preamble\MessageBreak of your document,}%
+ \fi
+ \endgroup
+ \fi
+}
+% \end{macrocode}
+%
+% \subsection{Clean up and exit}
+%
+% Load |frenchb.cfg| (should do nothing, just for compatibility).
+% \begin{macrocode}
+\loadlocalcfg{frenchb}
+% \end{macrocode}
+% Final cleaning.
+% The macro |\ldf@quit| takes care for setting the main language
+% to be switched on at |\begin{document}| and resetting the
+% category code of \texttt{@} to its original value.
+% The config file searched for has to be |frenchb.cfg|, and
+% |\CurrentOption| has been set to `french', so
+% |\ldf@finish\CurrentOption| cannot be used: we first load
+% |frenchb.cfg|, then call |\ldf@quit\CurrentOption|.
+% \begin{macrocode}
+\FBclean@on@exit
+\ldf@quit\CurrentOption
+% \end{macrocode}
+% \iffalse
+%</code>
+%<*dtx>
+% \fi
+%%
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
+% \iffalse
+%</dtx>
+% \fi
+%
+% \Finale
+% \clearpage\PrintChanges
+\endinput
diff --git a/Master/texmf-dist/source/generic/babel-french/frenchb.ins b/Master/texmf-dist/source/generic/babel-french/frenchb.ins
new file mode 100644
index 00000000000..d6ffaa5abcd
--- /dev/null
+++ b/Master/texmf-dist/source/generic/babel-french/frenchb.ins
@@ -0,0 +1,118 @@
+%%
+%% This file will generate fast loadable files and documentation
+%% driver files from the doc files in this package when run through
+%% LaTeX or TeX.
+%%
+%% Copyright 2001-2013 Daniel Flipo. All rights reserved.
+%%
+%% This file is part of the Babel system, release 3.9.
+%% ---------------------------------------------------
+%%
+%% It may be distributed under the terms of the LaTeX Project Public
+%% License, as described in lppl.txt in the base LaTeX distribution.
+%% Either version 1.2 or, at your option, any later version.
+%%
+%% --------------- start of docstrip commands ------------------
+%%
+\def\filedate{2013/03/22}
+\def\batchfile{frenchb.ins}
+\input docstrip.tex
+
+{\ifx\generate\undefined
+\Msg{**********************************************}
+\Msg{*}
+\Msg{* This installation requires docstrip}
+\Msg{* version 2.3c or later.}
+\Msg{*}
+\Msg{* An older version of docstrip has been input}
+\Msg{*}
+\Msg{**********************************************}
+\errhelp{Move or rename old docstrip.tex.}
+\errmessage{Old docstrip in input path}
+\batchmode
+\csname @@end\endcsname
+\fi}
+
+\declarepreamble\mainpreamble
+This is a generated file of the Babel system.
+---------------------------------------------------------
+
+It may be distributed and/or modified under the
+conditions of the LaTeX Project Public License, either version 1.3
+of this license or (at your option) any later version.
+The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+and version 1.3 or later is part of all distributions of LaTeX
+version 2003/12/01 or later.
+
+This work has the LPPL maintenance status "maintained".
+
+The Current Maintainer of this work is Daniel Flipo.
+
+This file may only be distributed together with a copy of the Babel
+system. You may however distribute the Babel system without
+such generated files.
+
+The list of all files belonging to the Babel distribution is
+given in the file `manifest.bbl'. See also `legal.bbl for additional
+information.
+
+The list of derived (unpacked) files belonging to the distribution
+and covered by LPPL is defined by the unpacking scripts (with
+extension .ins) which are part of the distribution.
+
+\endpreamble
+
+\declarepreamble\fdpreamble
+
+This is a generated file.
+
+Copyright 2001-2013 Daniel Flipo. All rights reserved.
+
+This file is part of the Babel system, release 3.9.
+---------------------------------------------------
+
+It may be distributed under the terms of the LaTeX Project Public
+License, as described in lppl.txt in the base LaTeX distribution.
+Either version 1.2 or, at your option, any later version.
+
+In particular, permission is granted to customize the declarations in
+this file to serve the needs of your installation.
+
+However, NO PERMISSION is granted to distribute a modified version
+of this file under its original name.
+
+\endpreamble
+
+\keepsilent
+
+\usedir{tex/generic/babel}
+
+\usepreamble\mainpreamble
+\generate{\file{frenchb.ldf}{\from{frenchb.dtx}{code}}
+ }
+\nopreamble
+\nopostamble
+\generate{\file{frenchb.cfg}{\from{frenchb.dtx}{cfg}}
+ }
+
+\ifToplevel{
+\Msg{***********************************************************}
+\Msg{*}
+\Msg{* To finish the installation you have to move the following}
+\Msg{* files into a directory searched by TeX:}
+\Msg{*}
+\Msg{* \space\space All *.def, *.fd, *.ldf, *.sty}
+\Msg{*}
+\Msg{* To produce the documentation run the files ending with}
+\Msg{* '.dtx' and `.fdd' through LaTeX.}
+\Msg{*}
+\Msg{* Happy TeXing}
+\Msg{***********************************************************}
+}
+
+\endinput
+
+
+
+