summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/generic/babel/frenchb.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/generic/babel/frenchb.dtx')
-rw-r--r--Master/texmf-dist/source/generic/babel/frenchb.dtx2477
1 files changed, 2477 insertions, 0 deletions
diff --git a/Master/texmf-dist/source/generic/babel/frenchb.dtx b/Master/texmf-dist/source/generic/babel/frenchb.dtx
new file mode 100644
index 00000000000..279ee712f9b
--- /dev/null
+++ b/Master/texmf-dist/source/generic/babel/frenchb.dtx
@@ -0,0 +1,2477 @@
+% \iffalse meta-comment
+%
+% Copyright 1989-2005 Johannes L. Braams and any individual authors
+% listed elsewhere in this file. All rights reserved.
+%
+% This file is part 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 Johannes Braams.
+%
+% The list of all files belonging to the Babel system 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.
+% \fi
+% \CheckSum{1985}
+%
+% \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>
+%<code>\ProvidesLanguage{french}
+%\ProvidesFile{frenchb.dtx}
+%<*!cfg>
+ [2005/02/06 v1.6g French support from the babel system]
+%</!cfg>
+%<*cfg>
+%% frenchb.cfg: configuration file for frenchb.ldf
+%% Daniel Flipo Daniel.Flipo at univ-lille1.fr
+%</cfg>
+%% File `frenchb.dtx'
+%% Babel package for LaTeX version 2e
+%% Copyright (C) 1989 - 2005
+%% by Johannes Braams, TeXniek
+%
+%<*!cfg>
+%% Frenchb language Definition File
+%% Copyright (C) 1989 - 2005
+%% by Johannes Braams, TeXniek
+%% Daniel Flipo, GUTenberg
+%
+%% Please report errors to: Daniel Flipo, GUTenberg
+%% Daniel.Flipo at univ-lille1.fr
+%</!cfg>
+%
+% This file is part of the babel system, it provides the source
+% code for the French language definition file.
+% For differences with francais.sty (author J. Braams) and with
+% french.sty (author B. Gaulle), see documentation printed by
+% |latex frenchb.dtx|.
+%
+%<*filedriver>
+\documentclass[a4paper]{ltxdoc}
+\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}}
+\begin{document}
+\parindent = 0pt
+\begin{center}
+ \textbf{\Large A Babel language definition file for French}\\[3mm]^^A\]
+ Daniel \textsc{Flipo}\\
+ \texttt{Daniel.Flipo@univ-lille1.fr}
+\end{center}
+ \DocInput{frenchb.dtx}
+\end{document}
+%</filedriver>
+%\fi
+% \GetFileInfo{frenchb.dtx}
+%
+% \changes{frenchb-1.1}{1995/12/23}{Added a hook to insert space or
+% not before `double punctuation'.}
+%
+% \changes{frenchb-1.1b}{1996/08/07}{Replaced \cs{undefined} with
+% \cs{@undefined} and \cs{empty} with \cs{@empty} for consistency
+% with \LaTeX}
+%
+% \changes{frenchb-1.1b}{1996/10/10}{Moved the definition of
+% \cs{atcatcode} right to the beginning.}
+%
+% \changes{frenchb-1.3f}{1999/04/11}{Deleted sectioning command
+% \cs{section}\{About French Typography\}.}
+%
+% \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.}, derived from \file{frenchy.sty}, defines all
+% the language definition macros for the French language.
+%
+% Customization 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.
+%
+% This file has been designed to be used with \LaTeXe, \LaTeX-2.09
+% and Plain\TeX{} formats. If you are still using \LaTeX-2.09, you
+% \emph{should} consider switching to \LaTeXe!
+%
+% 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 for correct spacing
+% in French;
+% \item |\today| prints the date in French;
+% \item the caption names are translated into French
+% (\LaTeX{} only);
+% \item the default items in itemize environment are set to `--'
+% instead of \textbullet, and all vertical spacing and glue
+% is deleted, a hook to reset standard \LaTeX{} spacing
+% is provided (|\FrenchItemizeSpacingfalse|);
+% it is possible to change `--' to something else (`---'
+% for instance) by redefining |\FrenchLabelItem|;
+% apart from the global hook |\FrenchLabelItem|, it is
+% also possible to change the `labelitems' at any level
+% (1 to 4) in French, using the standard \LaTeX{} syntax,
+% for instance: |\renewcommand{\labelitemii}{\textbullet}|;
+% in order to be effective in French, the redefinitions
+% have to be made when French is the current language
+% (i.e.\ \emph{after} the |\begin{document}|), the changes are
+% saved when switching to another language and will be
+% remembered of, when switching back to French;
+% \item vertical spacing in general \LaTeX{} lists is
+% shortened, a hook to reset standard \LaTeX{} settings
+% is provided (|\FrenchListSpacingfalse|) ;
+% \item the first paragraph of each section is indented
+% (\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, \LaTeX-2.09 and
+% Plain\TeX{}, their appearance depending on what is
+% available to draw them; if you use \LaTeXe{} \emph{and}
+% |T1|-encoding you can also enter them as
+% |<<~French quotation marks~>>| but then
+% \emph{don't forget} the unbreakable spaces, (|\og| and
+% |\fg| provide for correct line breaks and better
+% horizontal spacing).
+% |\og| and |\fg| can be used outside French, they provide
+% 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'').
+% \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}}.
+% \item Commands |\primo|, |\secundo|, |\tertio| and |\quarto|
+% may be used to enumerate in lists.
+% \item Abbreviations for ``Num\'ero'' and ``num\'ero'' are
+% obtained via the commands |\No|, |\no|.
+% \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| is provided to easily typeset numbers:
+% it works both in text and in math mode: inputting
+% |\nombre{3141,592653}| will format this number properly
+% according to the current language (French or non-French):
+% each slice of three digits will be separated either with
+% a comma in English or with a space in French (if you prefer
+% a thin space instead of a normal space, just add the command
+% |\ThinSpaceInFrenchNumbers| to the preamble of your document,
+% or to |frenchb.cfg|).
+% The command |\nombre| is a contribution of Vincent Jalby
+% using ideas of David Carlisle in comma.sty.
+% \item |frenchb| has been designed to take advantage of the |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|).
+% \item Two commands, |\FrenchLayout| and |\StandardLayout| (to be
+% used \emph{only in the preamble}) are provided to unify the
+% layout of multilingual documents (it mainly concerns lists)
+% regardless the current language (see section~\ref{sec-global}
+% for details).
+% \item Two commands |\AddThinSpaceBeforeFootnotes| and
+% |\FrenchFootnotes| enable to customize the layout of
+% footnotes following the French IN's specifications;
+% the first one, which can only be used \emph{before} the
+% |\begin{document}|, adds a thinspace in the running text
+% before the number or symbol calling the footnote; the
+% second one modifies the footnote's layout: it typesets
+% leading numbers as `1.\hspace{.5em}' instead of
+% `$\hbox{}^1$'. |\FrenchFootnotes| has no effect on footnotes
+% numbered with symbols (as in the |\thanks| command).
+%
+% None of these commands are active by default, both can
+% be best added to |frenchb.cfg| or to the preamble of the
+% document. |\FrenchFootnotes| and |\StandardFootnotes|,
+% which cancels the effect of |\FrenchFootnotes| for the
+% text coming next, can be used anywhere in the document.
+% The command |\StandardFootnotes| may be useful when
+% some footnotes are numbered with letters (inside minipages
+% for instance).
+%
+% |\AddThinSpaceBeforeFootnotes| and |\FrenchFootnotes| act
+% on \emph{all} footnotes whatever the current language is.
+% \end{enumerate}
+%
+% \vspace{\baselineskip}
+% All commands previously available in |francais.ldf| have been
+% included in |frenchb.ldf| for compatibility, sometimes with
+% updated definitions.
+%
+% The |french| package, by Bernard~\textsc{Gaulle}, was not
+% designed to run with \babel\ (although the latest versions claim
+% to be \babel\ compatible), but rather as a stand-alone package
+% for the French language.
+% It provides many more functionalities (like |\lettrine|,
+% |\sommaire|\dots) not available in |frenchb|,
+% at the cost of a much greater complexity and possible
+% incompatibilities with other languages.
+%
+% As |french| is known to produce the best layout available for
+% French typography, I have borrowed many ideas from Bernard's file.
+% I did my best to help users of both packages (|french| and
+% |frenchb|) to exchange their sources files easily (see the example
+% configuration file below in section~\ref{sec-cfg}), with one
+% exception which affects the way French quotation marks are
+% entered: |frenchb| uses \emph{macros} (|\og| and |\fg|) while
+% |french| uses active characters (|<<| and |>>|).
+%
+% \vspace{\baselineskip}
+% French typographic rules specify that some white space should be
+% present before `double punctuation' characters. These characters
+% are |;| |!| |?| and |:|.
+% In order to get this white space automatically, the category code
+% of these characters is made |\active|. In French, the user
+% \emph{should} input these four characters preceded with a space,
+% 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 the rule in French
+% typography). It's up to the user to add or not a space
+% \emph{after} `double punctuation' characters: usually a space is
+% necessary, but not always (before a full point or a closing brace
+% for instance), so this cannot done automatically.
+%
+% In (rare) cases where no space should be added before a `double
+% punctuation', either use |\string;| |\string:| |\string!|
+% |\string?| instead of |;| |:| |!| |?|, or switch locally to
+% English. For instance you can type |C\string:TEX| or
+% |\begin{otherlanguage}{english}{C:TEX}\end{otherlanguage}| to
+% avoid the space before~|:| in a MS-DOS path.
+%
+% Some users dislike this automatic insertion of a space before
+% `double punctuation', and prefer to decide themselves whether a
+% space should be added or not; so a hook |\NoAutoSpaceBeforeFDP|
+% is provided: if this command is added (in file |frenchb.cfg|, or
+% anywhere in a document) |frenchb| will respect your typing, and
+% introduce a suitable space before `double punctuation' \emph{if
+% and only if} a space is typed in the source file before those
+% signs.
+%
+% The command |\AutoSpaceBeforeFDP| switches back to the
+% default behaviour of |frenchb|.
+%
+% \vspace{\baselineskip}
+% 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 and PCs running~Windows, |applemac|
+% for Macintoshs, or |cp850| for PCs running~DOS). \\[3mm]^^A\]
+% |%%% Test file for French hyphenation.|\\
+% |\documentclass{article}|\\
+% |\usepackage[|\textit{my-encoding}|]{inputenc}|\\
+% |\usepackage[T1]{fontenc} % Use EC fonts for French|\\
+% |%\usepackage{aeguill} % Uncomment this line and|\\
+% | % comment out the preceeding one|\\
+% | % to use AE virtual fonts.|\\
+% |\usepackage[francais]{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 EC fonts with built-in accented characters or Ml\TeX{}
+% with CM fonts avoids this type of mismatch.
+% \end{itemize}
+%
+% \vspace{\baselineskip}
+% |frenchb| has been improved using helpful suggestions from many
+% people, the main contributions came from Vincent~Jalby.
+% Thanks to all of them!
+%
+% \subsection*{Changes}
+%
+% First version released: 1.1 as of 1996/05/31 part of
+% \babel-3.6beta.
+%
+% \textbf{Changes in version 1.1b}: update for \babel-3.6.
+%
+% \textbf{Changes in version 1.2}: new command |\nombre| to
+% format numbers; removed command |\fup| borrowed from the
+% |french| package (|\up| does a better job in \LaTeXe);
+% also removed aliases |\french| and |\english| (frenchb.cfg
+% is a better place for these).
+%
+% \textbf{Changes in version 1.3}:
+% \begin{itemize}
+% \item The `xspace' package, when present, now controls
+% spacing after all (sensible) macros, formerly `xspace'
+% worked on |\fg| (suggested by Vincent~Jalby);
+% \item spacing after opening and before closing guillemets
+% improved as suggested by Thierry~Bouche;
+% \item a replacement for poor looking guillemets in OT1 encoding
+% (\emph{math} fonts are used to emulate them) is provided
+% if the file |ot2wncyr.fd| is found: this file defines an
+% OT2 encoding using AMS Cyrillic fonts; these
+% have built-in guillemets, they are \emph{text} fonts,
+% are free, and are distributed as METAFONT and Type1 fonts
+% (good for pdftex!), the replacement was suggested by
+% G\'erard~Degrez; if the files |ot2wncyr.fd|, |wncy*.mf|,
+% |wncy*.tfm|, and |wncy*.pfb| aren't available on your
+% system, you \emph{should} get them from \mbox{CTAN};
+% if your system complains about missing |wncy*.tfm| fonts,
+% it means your \TeX{} system is \emph{incomplete}, as a
+% quick fix, you can either remove |ot2wncyr.fd| or add the
+% command |\LasyGuillemets| to the preamble of your document
+% or to |frenchb.cfg|, then |frenchb| will behave as it did
+% in the previous versions.\\
+% In case Cyrillic guillemets do not fit, it is possible
+% to pick French guillemets from any font using the
+% command |\FrenchGuillemetsFrom| which requires 4 arguments
+% |\FrenchGuillemetsFrom{|{\it coding}|}{|{\it font}\relax
+% |}{|{\it char-left}|}{|{\it char-right}|}|, for instance,
+% add |\FrenchGuillemetsFrom{T1}{ppl}{19}{20}| to the
+% preamble of your document or to |frenchb.cfg|, to pick
+% French guillemets from Palatino (fontname=ppl, char 19
+% and 20 are left and right guillemets in T1-encoding).
+% This was suggested by Michel~Bovani.
+% \item the environment `itemize' has been redesigned in French
+% according to specifications from Jacques~Andr\'e
+% and Thierry~Bouche; it is possible to switch back to the
+% settings of version~1.2: add |\FrenchItemizeSpacingfalse|
+% \emph{after} loading |frenchb| in the preamble (this can
+% be useful to process old documents);
+% \item two switches have been added to go back to standard
+% \LaTeX{} list spacing |\FrenchItemizeSpacingfalse|
+% and |\FrenchListSpacingfalse|;
+% \item |\nombre| now properly handles signs in \LaTeXe;
+% \item definition of |\dots| changed in French;
+% \item in French, with the standard \LaTeX{} classes, captions
+% in figures and tables are printed with an endash instead
+% of a colon.
+% \end{itemize}
+%
+% \textbf{Changes in version 1.4}:
+% \begin{itemize}
+% \item the redefinition of|\@makecaption| is changed not to
+% overwrite the changes made by some classes (koma-script,
+% amsart, ua-thesis\dots) as pointed out by Werner~Lemberg;
+% \item a hook, |\FrenchGuillemetsFrom|, is provided to pick
+% French guillemets from any font (suggested by
+% Michel~Bovani, works \emph{only} in OT1-encoding);
+% \item a hook, |\FrenchLabelItem|, is provided to enable marks
+% other than `--' (|\textendash|) in French lists
+% (also suggested by Michel~Bovani);
+% \item |\DecimalMathComma|, |\StandardMathComma|,
+% |\ThinSpaceInFrenchNumbers| added;
+% \item |\FrenchLayout| and |\StandardLayout| added;
+% \item an example of customization file |frenchb.cfg| is
+% included in |frenchb.dtx|.
+% \end{itemize}
+%
+% \textbf{Changes in version 1.5}:
+% \begin{itemize}
+% \item The settings for spacing in French lists are no longer
+% tuned at the |\@trivlist| level but within |\list|; this
+% enables the users to provide their own settings for the
+% lists they define with |\list| (suggested by P. Pichaureau).
+% Although the layout of the standard lists
+% \emph{has not changed}, some lists, based directly on
+% |\@trivlist| or |\trivlist|, could possibly be typeset
+% differently when upgrading from version 1.4 to 1.5.
+% The command |\FrenchOldTrivlisttrue| could then, be useful
+% to process older documents.
+% \item Apart from the global hook |\FrenchLabelItem|, it is
+% now also possible to change the `labelitems' at any level
+% (1 to 4) in French, using the standard \LaTeX{} syntax,
+% for instance: |\renewcommand{\labelitemii}{\textbullet}|.
+% \item The internal name for the French language has been
+% changed from |frenchb| to |french|, it means that
+% |\captionsfrench|, |\datefrench|, |\extrasfrench|,
+% |\noextrasfrench|, are to be used now instead of
+% |\captionsfrenchb|, |\datefrenchb|, |\extrasfrenchb|,
+% |\noextrasfrenchb|.
+% \item From version 1.5f on, it is possible to customize
+% the space inserted before a colon in French; its default
+% value is |\space| (as in previous versions of |frenchb|),
+% but it can now be changed to |\thinspace| by redefining
+% |\Fcolonspace|.
+% \end{itemize}
+%
+% \textbf{Changes in version 1.6}:
+% \begin{itemize}
+% \item Two new commands are provided:
+% |\AddThinSpaceBeforeFootnotes| and |\FrenchFootnotes|;
+% they enable to typeset footnotes according to the
+% French IN's specifications (suggested by Jacques~Andr\'e).
+% \item |frenchb| will make use of |\textdegree| (TS1 encoding)
+% to typeset degrees whenever possible.
+% \item Default guillemets have been changed \emph{in OT1
+% encoding only} in version~1.6c: the former ones were picked
+% up in the wncyr fonts, which forced the cyrillic encoding to
+% OT2 when \babel{} was loaded with option |frenchb| before a
+% cyrillic language (|russian|, |ukrainian| or |bulgarian|).
+% Now, LM fonts for T1-encoding are available, we pick up the
+% guillemets from them, for OT1-encoding.
+% \item The config file |frenchb.cfg| is now loaded only when
+% \LaTeXe{} is used (from version~1.6g).
+% \item The command |\degres| now works also in math mode (from
+% version~1.6g), but not in bold versions (it is a text
+% character basically).
+% \end{itemize}
+%
+% \StopEventually{}
+%
+% \subsection*{Customizing frenchb: an example of configuration file}
+% \label{sec-cfg}
+%
+% \changes{frenchb-1.4d}{1999/12/19}{Do NOT set catcodes of French
+% quotes to 12 before launching \cs{initiate@active@char} in
+% frenchb.cfg, (problem on Mac reported by M.Bovani).}
+%
+% \begin{macrocode}
+%<*cfg>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% If you want to customize frenchb, please DO NOT hack into the code,
+%% copy this file into a directory searched by TeX, preferably a
+%% personal one on multi-user systems, and customize it as you like.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% WARNING: If you exchange your documents with colleagues using
+%% a different TeX installation, it is best NOT TO HAVE a frenchb.cfg
+%% file, and add instead the customization commands to the preamble
+%% of your documents after babel and frenchb have been loaded.
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%
+%% Uncomment the following line if you dislike frenchb automatically
+%% adding a space before French double punctuation (see frenchb.dtx
+%% for more information).
+%%
+%%\NoAutoSpaceBeforeFDP
+%%
+%% frenchb inserts a normal space before a colon in French (following
+%% I.N. specifications), but some people prefer a thinspace instead;
+%% uncomment the following line if you prefer a thinspace.
+%%
+%%\renewcommand{\Fcolonspace}{\thinspace}
+%%
+%% Uncomment the following line to force lasy font emulation for
+%% French guillemets in OT1 encoding; Polish guillemets are
+%% FAR BETTER LOOKING, you should normally leave this line commented out.
+%%
+%%\LasyGuillemets
+%%
+%% The following option is for backward compatibility ONLY
+%% (it might conflict with the russian option of babel).
+%% Uncomment the following line if you want to get back to
+%% the default guillemets used in versions $<$ 1.6b for OT1-encoding
+%% (no effect in T1-encoding).
+%%
+%%\CyrillicGuillemets
+%%
+%% If you dislike Polish guillemets in OT1-encoding, you can easily
+%% pick up yours from other fonts, examples below: Palatino or
+%% cyrillic CMR T2A encoded font.
+%% The four arguments are: encoding, font name, character codes of
+%% the opening and closing guillemets in the selected font.
+%%
+%%\FrenchGuillemetsFrom{T1}{ppl}{19}{20}
+%%\FrenchGuillemetsFrom{T2A}{cmr}{190}{191}
+%%
+%% Uncomment the following line if you don't want frenchb to change
+%% LaTeX standard settings for vertical spacing in 'itemize' lists.
+%% LaTeX standard settings were used by frenchb in versions < 1.3,
+%% so you may want to uncomment the following line to process older
+%% documents.
+%%
+%%\FrenchItemizeSpacingfalse
+%%
+%% frenchb tunes vertical spaces in all lists (at \list level),
+%% uncomment the following line if you prefer LaTeX standard settings
+%% (this flag is new in version 1.3). When \ifFrenchItemizeSpacing is
+%% `true' (default setting), this flag has no effect on itemize lists.
+%%
+%%\FrenchListSpacingfalse
+%%
+%% The command \FrenchLabelItem can be used to set the `labelitems'
+%% for all levels in French. For instance, to get long dashes, use:
+%%
+%%\renewcommand{\FrenchLabelItem}{\textemdash}
+%%
+%% You can also have different `labelitems' for each level in French:
+%%
+%%\renewcommand{\Frlabelitemi}{\textemdash}
+%%\renewcommand{\Frlabelitemii}{\bfseries\textendash}
+%%\renewcommand{\Frlabelitemiii}{\textbullet}
+%%\renewcommand{\Frlabelitemiv}{}
+%%
+%% Uncomment the following line if you want a thinspace to be added
+%% in the running text before the footnote number or symbol.
+%%
+%%\AddThinSpaceBeforeFootnotes
+%%
+%% Uncomment the following line if you want footnotes to be typeset
+%% according the specifications of the French `Imprimerie Nationale'.
+%%
+%%\FrenchFootnotes
+%%
+%% Uncomment the following line if you want the command \nombre to
+%% insert thin spaces (1/6em) instead of normal spaces (0.3em)
+%% between slices of 3 digits when typesetting numbers in French.
+%%
+%%\ThinSpaceInFrenchNumbers
+%%
+%% If you are bored to type {,} every time you want a decimal comma in
+%% math mode, uncomment the following line (and don't forget to add a
+%% forced space after the comma in lists and intervals: $(x,\ y)$ and
+%% $[0,\ 1]$). I suggest NOT TO UNCOMMENT the following line,
+%% and to switch between the decimal comma and the standard comma
+%% using \DecimalMathComma and \StandardMathComma inside the document.
+%%
+%%\DecimalMathComma
+%%
+%% If you do not want the appearance of lists to depend on the current
+%% language, add ONE of these two commands: \FrenchLayout (for a
+%% document mainly in French) or \StandardLayout (for a document
+%% mainly in English).
+%%
+%%\FrenchLayout
+%%\StandardLayout
+%%
+%% With the standard LaTeX classes (article.cls, report.cls, book.cls)
+%% you can change the separator used in figure and table captions in
+%% French with \CaptionSeparator, for instance (the default value of
+%% \CaptionSeparator in French is '\space\textendash\space'):
+%%
+%%\addto\captionsfrench{\def\CaptionSeparator{\space\textemdash\space}}
+%%
+%% You might want to change some of the translations of caption names,
+%% you can do it this way, for instance:
+%%
+%%\addto\captionsfrench{\def\figurename{{\scshape Figure}}}
+%%\addto\captionsfrench{\def\tablename{{\scshape Table}}}
+%%\addto\captionsfrench{\def\proofname{Preuve}}
+%%
+%% If French guillemets are available on your keyboard, you can use
+%% them instead of the commands \og and \fg: REPLACE << and >> in
+%% the following code by your ready-made guillemets (2 occurrences
+%% for each) AND uncomment the resulting code.
+%% WARNINGS:
+%% 1) This will reduce the portability of your source files!
+%% 2) This adds two active characters.
+%% 3) If you add this stuff to the preamble of a document, you'll
+%% need to wrap it in \makeatletter ... \makeatother.
+%%
+%% \ifx\mule@def\undefined
+%% \initiate@active@char{<<}
+%% \initiate@active@char{>>}
+%% \AtBeginDocument{%
+%% \def<<{\og\ignorespaces}%
+%% \def>>{{\fg}}%
+%% }%
+%% \else %%% For the CJK package, see MULEenc.sty.
+%% \mule@def{11}{\og\ignorespaces}
+%% \mule@def{27}{{\fg}}
+%% \fi
+%%
+%% The rest is for compatibility with Bernard Gaulle's french.sty:
+%% if you want to typeset with babel/frenchb files originally written
+%% for french.sty, you will probably want to uncomment these lines.
+%%
+%% Uncomment these lines if you want the aliases \numero and \Numero
+%% (as in french.sty) for \no and \No.
+%%
+%%\let\numero=\no
+%%\let\Numero=\No
+%%
+%% Uncomment the following lines if you want to substitute `\bsc' to
+%% either (or both) of french.sty macros `\fsc' and `\lsc'.
+%%
+%%\let\fsc=\bsc
+%%\let\lsc=\bsc
+%%
+%% Uncomment the following line if you want to substitute `\up' to
+%% french.sty macro `\fup'.
+%%
+%%\let\fup=\up
+%%
+%% Uncomment the following lines if you intend to use commands \french
+%% and \english to switch between languages, as in french.sty.
+%%
+%%\def\french{\leavevmode\selectlanguage{french}}
+%%\def\english{\leavevmode\selectlanguage{english}}
+%%
+%% Uncomment the following lines if you intend to use the command
+%% \AllTeX to refer to all flavours of TeX, (this command has been
+%% made popular by french.sty).
+%%
+%%\newcommand*{\AllTeX}{%
+%% (L\kern-.36em\raise.3ex\hbox{\sc a}\kern-.15em)%
+%% T\kern-.1667em\lower.7ex\hbox{E}\kern-.125emX}
+%</cfg>
+% \end{macrocode}
+%
+% \section{\TeX{}nical details}
+%
+% \subsection{Initial setup}
+%
+% The macro |\LdfInit| takes care of preventing that this file is
+% loaded more than once, checking the category code of the
+% \texttt{@} sign, etc.
+%
+% \changes{frenchb-1.1b}{1996/11/02}{Now use \cs{LdfInit} to perform
+% initial checks}
+%
+% \changes{frenchb-1.5g}{2001/09/09}{Let \cs{LdfInit} check for
+% \cs{datefrench} instead of \cs{NoAutoSpaceBeforeFDP},
+% as the later is also defined by russianb.ldf!}
+%
+% \begin{macrocode}
+%<*code>
+%%
+\LdfInit\CurrentOption\datefrench
+% \end{macrocode}
+%
+% \begin{macro}{\ifLaTeX}
+% \begin{macro}{\ifLaTeXe}
+% \changes{frenchb-1.1}{1996/02/12}{Use \cs{fmtname} to check
+% the format instead of \cs{newcommand}; define \cs{PlainFmtName}
+% and \cs{LaTeXeFmtName}.}
+%
+% \changes{frenchb-1.3f}{1999/04/11}{Use \cs{magnification} to check
+% if the format is plain (i.e \emph{not} \LaTeX). Checking the
+% format's name was not reliable: plain-like formats may not be
+% called just `plain' but `babel-plain'.}
+%
+% To check the format in use (plain, \LaTeX{} or \LaTeXe),
+% we'll need two new `if'.
+% \begin{macrocode}
+\newif\ifLaTeX
+\ifx\magnification\@undefined\LaTeXtrue\fi
+\newif\ifLaTeXe
+\ifx\@compatibilitytrue\@undefined\else\LaTeXetrue\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\if@Two@E}
+% \changes{frenchb-1.1}{1996/03/01}{New test \cs{if@Two@E}.}
+%
+% We will need another `if' : |\if@Two@E| is true if and only if
+% \LaTeXe{} is running \emph{not} in compatibility mode. It is
+% used in the definitions of the command |\nombre| and |\up|.
+% The definition is somewhat complicated, due to the fact that
+% |\if@compatibility| is not recognized as a |\if| in
+% \LaTeX-2.09 based formats.
+% \begin{macrocode}
+\newif\if@Two@E \@Two@Etrue
+\def\@FI@{\fi}
+\ifx\@compatibilitytrue\@undefined
+ \@Two@Efalse \def\@FI@{\relax}
+\else
+ \if@compatibility \@Two@Efalse \fi
+\@FI@
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{frenchb-1.1b}{1996/11/07}{Removed test for \cs{l@english}}
+%
+% \changes{frenchb-1.2}{1997/01/05}{Check for hyphenation patterns}
+%
+% 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.
+%
+% \changes{frenchb-1.5b}{2001/02/09}{Added support for canadien and
+% acadian}
+%
+% \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}
+% After the statement above |\l@french| is sure to always be
+% defined.
+%
+% \changes{frenchb-1.2}{1997/01/05}{`french' `frenchb' and
+% `francais' are synonymous regardless of \cs{CurrentOption}.}
+% The internal name for the French language will be `french';
+% `francais' and `frenchb' will be 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.
+%
+% \changes{frenchb-1.5d}{2001/02/16}{The internal name for the
+% French language is changed from `frenchb' to `french'.}
+%
+% \begin{macrocode}
+\def\CurrentOption{french}
+\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.
+%
+% \changes{babel-1.5b}{2001/02/09}{Added support for canadien and
+% acadian}
+%
+% \begin{macrocode}
+\ifx\l@canadien\@undefined
+ \let\l@canadien\l@french
+\fi
+\ifx\l@acadian\@undefined
+ \let\l@acadian\l@french
+\fi
+% \end{macrocode}
+%
+% \changes{frenchb-1.5g}{2001/09/09}{Instead of issuing a warning when
+% \cs{captionsfrancais} or \cs{captionsfrenchb} are customized in
+% the preamble, we merge the changes into \cs{captionsfrench}.}
+%
+% 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. As some users who choose |frenchb|
+% or |francais| as option of \babel, might customize
+% |\captionsfrenchb| or |\captionsfrancais| in the preamble,
+% we merge their changes at the |\begin{document}| when they do so
+% (only possible in \LaTeXe).
+% The other three commands for |\date|, |\extras|, and |\noextras|
+% are not likely to be modified by end-users.
+% The other variants of languages are defined by checking if the
+% relevant option was used and then adding one extra level of
+% expansion.
+%
+% \changes{frenchb-1.6c}{2003/06/30}{Bug correction: it is necessary
+% to re-execute \cs{captionsfrench} after merging
+% \cs{captionsfrenchb} and \cs{captionsfrancais}.}
+%
+% \begin{macrocode}
+\def\datefrancais{\datefrench}
+\def\extrasfrancais{\extrasfrench}
+\def\noextrasfrancais{\noextrasfrench}
+\def\datefrenchb{\datefrench}
+\def\extrasfrenchb{\extrasfrench}
+\def\noextrasfrenchb{\noextrasfrench}
+\ifLaTeXe
+ \AtBeginDocument{\let\captions@French\captionsfrench
+ \ifx\captionsfrenchb\@undefined
+ \let\captions@Frenchb\relax
+ \else
+ \let\captions@Frenchb\captionsfrenchb
+ \fi
+ \ifx\captionsfrancais\@undefined
+ \let\captions@Francais\relax
+ \else
+ \let\captions@Francais\captionsfrancais
+ \fi
+ \def\captionsfrench{\captions@French
+ \captions@Francais\captions@Frenchb}%
+ \def\captionsfrancais{\captionsfrench}%
+ \def\captionsfrenchb{\captionsfrench}%
+ \iflanguage{french}{\captionsfrench}{}%
+ }
+\else
+ \def\captionsfrancais{\captionsfrench}
+ \def\captionsfrenchb{\captionsfrench}
+\fi
+\@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}{\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 ``apostrophe'' is used in hyphenation in expressions
+% like |l'ambulance| (French 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 to be reset to null when exiting French.
+%
+% \changes{frenchb-1.2}{1997/01/05}{`french' `frenchb' and
+% `francais' are synonymous regardless of \cs{CurrentOption}.}
+%
+% \begin{macrocode}
+\@namedef{extras\CurrentOption}{\lccode`\'=`\'}
+\@namedef{noextras\CurrentOption}{\lccode`\'=0}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{frenchb-1.1}{1996/01/29}{Add some font changing
+% definitions.}
+%
+% It is best to use \LaTeXe{}'s font changing commands, and to
+% emulated those we need when they are not available, as in
+% Plain\TeX{} or \LaTeX-2.09. Be aware that old commands |\sc|,
+% |\it|, \textit{etc.} exist in \LaTeXe{}, but they behave like
+% they did in \LaTeX-2.09 (i.\,e., they switch back to
+% |\normalfont| instead of keeping the other font attributes
+% unchanged).
+% \begin{macrocode}
+\ifx\scshape\@undefined
+ \ifx\sc\@undefined
+ \let\scshape\relax
+ \else
+ \let\scshape\sc
+ \fi
+\fi
+\ifx\emph\@undefined
+ \ifx\em\@undefined
+ \let\emph\relax
+ \else
+ \def\emph#1{\em #1}
+ \fi
+\fi
+% \end{macrocode}
+%
+% \subsection{Caption names}
+%
+% The next step consists of defining the French equivalents for
+% the \LaTeX{} caption names.
+%
+% \changes{frenchb-1.3c}{1997/10/08}{changed \cs{@makecaption}
+% definition to add a hook \cs{CaptionSeparator}.}
+%
+% In French, captions in figures and tables should be printed with
+% endash (`--') instead of the standard `:'. If another separator
+% is preferred, see in the example configuration file above
+% (section~\ref{sec-cfg}) how to change the default value of
+% |\CaptionSeparator|.
+%
+% \changes{frenchb-1.4a}{1999/10/23}{frenchb-1.3 silently redefined
+% \cs{@makecaption}, overwriting changes made by some classes
+% like koma-script, ua-thesis\dots (pointed out by Werner~Lemberg).
+% New implementation suggested by Vincent~Jalby.}
+%
+% \changes{frenchb-1.4e}{2000/03/12}{Captions print twice with AMS
+% classes (amsart, amsbook). Bug reported by Jean-Fran\c cois
+% Mertens. Revert to implementation of version 1.4, which is
+% safer as \@makecaption can be changed unpredictably.}
+%
+% We first store 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),
+% in |\STD@makecaption|. `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{frenchb-1.4f}{2000/04/07}{Only issue a warning if
+% \cs{@makecaption} exists}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \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}
+ \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
+ \let\@makecaption\FB@makecaption
+ \else
+ \ifx\@makecaption\@undefined\else
+ \PackageWarning{frenchb.ldf}%
+ {The definition of \protect\@makecaption\space
+ has been changed,\MessageBreak
+ frenchb will NOT customize it;\MessageBreak reported}%
+ \fi
+ \fi
+ \let\FB@makecaption\relax
+ \let\STD@makecaption\relax}
+ \expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \def\CaptionSeparator{\string:\space}}
+\fi
+% \end{macrocode}
+%
+% \begin{macro}{\captionsfrench}
+% The macro |\captionsfrench| defines all strings used in the four
+% standard document classes provided with \LaTeX. Some authors do
+% not like some of these names; it is easy to change them in the
+% preamble \emph{after} loading |frenchb| (or in your file
+% |frenchb.cfg|), e.g
+% |\addto\captionsfrench{\def\figurename{Figure}}| will print
+% `Figure' in Roman instead of `\textsc{Fig.}'.
+%
+% \changes{frenchb-1.1}{1996/01/30}{This code is useless in Plain\TeX,
+% check the format before loading it.}
+%
+% \changes{frenchb-1.2}{1997/01/05}{Added aliases \cs{captionsfrenchb}
+% and \cs{captionsfrancais}.}
+%
+% \changes{frenchb-1.3c}{1997/10/08}{Added \cs{CaptionSeparator}.}
+%
+% \changes{frenchb-1.4a}{1999/10/23}{Changed `--' to
+% \cs{textendash} in \cs{CaptionSeparator} in case the ligature
+% doesn't exist (tt-fonts).}
+%
+% \changes{frenchb-1.4f}{2000/04/06}{Added \cs{glossaryname}}
+%
+% \begin{macrocode}
+\ifLaTeX
+\@namedef{captions\CurrentOption}{%
+ \def\refname{R\'ef\'erences}%
+ \def\abstractname{R\'esum\'e}%
+ \def\bibname{Bibliographie}%
+ \def\prefacename{Pr\'eface}%
+ \def\chaptername{Chapitre}%
+ \def\appendixname{Annexe}%
+ \def\contentsname{Table des mati\`eres}%
+ \def\listfigurename{Table des figures}%
+ \def\listtablename{Liste des tableaux}%
+ \def\indexname{Index}%
+ \def\figurename{{\scshape Fig.}}%
+ \def\tablename{{\scshape Tab.}}%
+ \def\CaptionSeparator{\space\textendash\space}%
+% \end{macrocode}
+% ``Premi\`ere partie'' instead of ``Part I''
+% \begin{macrocode}
+ \def\partname{\protect\@Fpt partie}%
+ \def\@Fpt{{\ifcase\value{part}\or Premi\`ere\or Deuxi\`eme\or
+ Troisi\`eme\or Quatri\`eme\or Cinqui\`eme\or Sixi\`eme\or
+ Septi\`eme\or Huiti\`eme\or Neuvi\`eme\or Dixi\`eme\or Onzi\`eme\or
+ Douzi\`eme\or Treizi\`eme\or Quatorzi\`eme\or Quinzi\`eme\or
+ Seizi\`eme\or Dix-septi\`eme\or Dix-huiti\`eme\or Dix-neuvi\`eme\or
+ Vingti\`eme\fi}\space\def\thepart{}}%
+ \def\pagename{page}%
+ \def\seename{{\emph{voir}}}%
+ \def\alsoname{{\emph{voir aussi}}}%
+ \def\enclname{P.~J. }%
+ \def\ccname{Copie \`a }%
+ \def\headtoname{}%
+ \def\proofname{D\'emonstration}% for AMS-\LaTeX
+ \def\glossaryname{Glossaire}%
+ }
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Punctuation}
+%
+% The `double punctuation' characters (|;| |!| |?| and |:|) have to
+% be made |\active| for an automatic control of the amount of space
+% to insert before them.
+% \begin{macrocode}
+\initiate@active@char{:}
+\initiate@active@char{;}
+\initiate@active@char{!}
+\initiate@active@char{?}
+% \end{macrocode}
+% We specify that the French group of shorthands should be used.
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \languageshorthands{french}}
+% \end{macrocode}
+% These characters are `turned on' once, later their definition may
+% vary.
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@activate{:}\bbl@activate{;}%
+ \bbl@activate{!}\bbl@activate{?}}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@deactivate{:}\bbl@deactivate{;}%
+ \bbl@deactivate{!}\bbl@deactivate{?}}
+% \end{macrocode}
+%
+% One more thing |\extrasfrench| needs to do is to make sure that
+% |\frenchspacing| is in effect. If this is not the case the
+% execution of |\noextrasfrench| will switch it off again.
+% \begin{macrocode}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchspacing}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchspacing}
+% \end{macrocode}
+%
+% \begin{macro}{\french@sh@;@}
+% We have to tune the amount of white space before \texttt{;}
+% \texttt{!} \texttt{?} and \texttt{:}. This should only happen
+% in horizontal mode, hence the test |\ifhmode|.
+%
+% \changes{frenchb-1.1}{1995/12/23}{Added a hook to insert space
+% or not before `double punctuation'.}
+%
+% 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\thinspace
+ \else
+ \FDP@thinspace
+ \fi
+ \fi
+% \end{macrocode}
+% Now we can insert a |;| character.
+% \begin{macrocode}
+ \string;}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\french@sh@!@}
+% \begin{macro}{\french@sh@?@}
+%
+% Because these definitions are very similar only one is displayed
+% in a way that the definition can be easily checked.
+%
+% \begin{macrocode}
+\declare@shorthand{french}{!}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\thinspace
+ \else
+ \FDP@thinspace
+ \fi
+ \fi
+ \string!}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\declare@shorthand{french}{?}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\thinspace
+ \else
+ \FDP@thinspace
+ \fi
+ \fi
+ \string?}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\french@sh@:@}
+%
+% The `:' requires a normal space before it, instead of
+% a |\thinspace|.
+%
+% \begin{macrocode}
+\declare@shorthand{french}{:}{%
+ \ifhmode
+ \ifdim\lastskip>\z@
+ \unskip\penalty\@M\Fcolonspace
+ \else
+ \FDP@colonspace
+ \fi
+ \fi
+ \string:}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{frenchb-1.1}{1995/12/23}{Added a hook to insert space
+% or not before `double punctuation'.}
+%
+% \changes{frenchb-1.5f}{2001/06/02}{Added a hook to customize
+% the space before the colon in French (thin or normal).}
+%
+% \begin{macro}{\Fcolonspace}
+% \begin{macro}{\AutoSpaceBeforeFDP}
+% \begin{macro}{\NoAutoSpaceBeforeFDP}
+% |\FDP@thinspace| and |\FDP@space| are defined as unbreakable
+% spaces by\\ |\AutoSpaceBeforeFDP| or as |\@empty| by
+% |\NoAutoSpaceBeforeFDP|.\\
+% Default is |\AutoSpaceBeforeFDP|.
+% \begin{macrocode}
+\newcommand{\Fcolonspace}{\space}
+\def\AutoSpaceBeforeFDP{%
+ \def\FDP@thinspace{\penalty\@M\thinspace}%
+ \def\FDP@colonspace{\penalty\@M\Fcolonspace}}
+\def\NoAutoSpaceBeforeFDP{\let\FDP@thinspace\@empty
+ \let\FDP@colonspace\@empty}
+\AutoSpaceBeforeFDP
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\system@sh@:@}
+% \begin{macro}{\system@sh@!@}
+% \begin{macro}{\system@sh@?@}
+% \begin{macro}{\system@sh@;@}
+%
+% 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}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{French quotation marks}
+%
+% \changes{frenchb-1.3}{1997/04/24}{New implementation of guillemets.}
+%
+% \changes{frenchb-1.4}{1999/07/08}{Add a hook to pick French
+% guillemets from any font (suggested by Michel Bovani).}
+%
+% \changes{frenchb-1.3e}{1999/01/02}{Try to use AMS Cyrillic fonts
+% to provide better looking guillemets in OT1 encoding.}
+%
+% \changes{frenchb-1.6b}{2003/04/05}{Default OT1 guillemets are
+% now borrowed from Polish fonts, rather than from wncyr.}
+%
+% \changes{frenchb-1.6c}{2003/06/30}{OT1 `Polish' guillemets are
+% now taken from the LM fonts which will be part of TL8.}
+%
+% EC/LM fonts and standard PostScript fonts have built-in
+% guillemets, we of course use them. CM fonts have no French
+% guillemets built-in, so we have to emulate them:
+% \begin{itemize}
+% \item if a file `t1lmr.fd' is found, we expect the LM fonts
+% to be present on the system, so we pick up French guillemets
+% from them; before version 1.6b, French guillemets were
+% borrowed from the `wncyr' fonts, this has been changed because
+% it resulted in a conflict with the russian option of \babel.
+% Former Cyrillic guillemets are still available through the
+% command |\CyrillicGuillemets| (for backward compatibility).
+% \item otherwise we use math symbols, either \LaTeX's `lasy' font
+% if available, or \TeX{}~symbols |\ll| and |\gg| otherwise;
+% \end{itemize}
+%
+% The standard names for French quotation marks are |\guillemotleft|
+% and |\guillemotright|, these commands are defined in |t1enc.def|
+% for T1-encoding.
+% In \LaTeXe{} formats, we first define these commands for
+% OT1-encoding (for CM fonts), using either the Polish `pl*' fonts
+% or \LaTeX{}'s `lasy' fonts.
+% Other local text encodings \emph{should} define them too,
+% but if they don't, the OT1 definitions will be used.
+% The standard PostScript fonts should \emph{always} be used together
+% with T1-encoding (\emph{not} OT1), for proper hyphenation and
+% built-in (better looking) French quotation marks.
+%
+% \changes{frenchb-1.2b}{1997/04/24}{Spacing after opening and before
+% closing guillemets slightly enlarged and some glue added,
+% as suggested by Th.~Bouche. Unlike \cs{kern}, \cs{hskip} doesn't
+% inhibit hyphenation, nothing like \cs{allowhyphens} is required.}
+%
+% 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.
+% |\guill@spacing| which does the spacing, has been fine tuned by
+% Thierry Bouche.
+%
+% \changes{frenchb-1.3d}{1998/04/20}{Spacing after opening and before
+% closing guillemets changed again: normal space with little glue
+% (suggested by Th. Bouche).}
+%
+% The top macros for quotation marks will be called |\og|
+% (``\underline{o}uvrez \underline{g}uillemets'') and |\fg|
+% (``\underline{f}ermez \underline{g}uillemets'').\\
+% 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.\\
+% As |\DeclareTextCommand| cannot be used after the
+% |\begin{document}| we introduce internal definitions
+% |\begin@guill| and |\end@guill|.\\
+% We'll try to be smart to users of D.~\textsc{Carlisle}'s |xspace|
+% package: if this package is loaded there will be no need for |{}|
+% or |\ | to get a space after |\fg|.
+%
+% \begin{macro}{\guillemotleft}
+% \begin{macro}{\guillemotright}
+% \begin{macro}{\og}
+% \begin{macro}{\fg}
+% \changes{frenchb-1.1}{1996/01/20}{A warning is now issued if \cs{og}
+% or \cs{fg} have been defined elsewhere in a \LaTeXe{} document
+% (suggested by Vincent Jalby).}
+% In \LaTeXe{} we provide a dummy definition for |\og| and |\fg|,
+% just to display an error message in case |\og| or |\fg| have been
+% defined elsewhere.
+%
+% \changes{frenchb-1.2b}{1997/04/24}{Define \cs{xspace} as \relax if
+% it is not defined by D. Carlisle `xspace.sty'. Will be used in
+% \cs{fg}, and \cs{ieme} ... \cs{ieres} (new for this release).}
+%
+% \changes{frenchb-1.5f}{2001/04/21}{\cs{og} and \cs{fg} should not
+% be expanded when written to a file; use \cs{renewcommand} (in
+% \cs{LaTeX}) to redefine them instead of \cs{let} or \cs{def}.}
+%
+% \begin{macrocode}
+\newcommand{\og}{\@empty}
+\newcommand{\fg}{\@empty}
+% \end{macrocode}
+% \begin{macro}{\FrenchGuillemetsFrom}
+% \begin{macrocode}
+\ifLaTeXe
+ \def\FrenchGuillemetsFrom#1#2#3#4{%
+ \DeclareFontEncoding{#1}{}{}%
+ \DeclareFontSubstitution{#1}{#2}{m}{n}%
+ \DeclareTextCommand{\guillemotleft}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#3}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{%
+ {\fontencoding{#1}\fontfamily{#2}\selectfont\char#4}}}
+% \end{macrocode}
+% \begin{macro}{\CyrillicGuillemets}
+% \begin{macro}{\PolishGuillemets}
+% \begin{macro}{\LasyGuillemets}
+% \begin{macro}{\bbl@frenchguillemets}
+% \begin{macro}{\bbl@nonfrenchguillemets}
+% \begin{macrocode}
+ \def\CyrillicGuillemets{\FrenchGuillemetsFrom{OT2}{wncyr}{60}{62}}
+ \def\PolishGuillemets{\FrenchGuillemetsFrom{T1}{lmr}{19}{20}}
+ \def\LasyGuillemets{%
+ \DeclareTextCommand{\guillemotleft}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont(\kern-0.20em(}}%
+ \DeclareTextCommand{\guillemotright}{OT1}{\hbox{%
+ \fontencoding{U}\fontfamily{lasy}\selectfont)\kern-0.20em)}}}
+ \IfFileExists{t1lmr.fd}{\PolishGuillemets}{\LasyGuillemets}
+ \DeclareTextSymbolDefault{\guillemotleft}{OT1}
+ \DeclareTextSymbolDefault{\guillemotright}{OT1}
+ \def\guill@spacing{\penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font
+ minus.8\fontdimen4\font}
+ \DeclareRobustCommand*{\begin@guill}{\leavevmode
+ \guillemotleft\penalty\@M\guill@spacing}
+ \DeclareRobustCommand*{\end@guill}{\ifdim\lastskip>\z@\unskip\fi
+ \penalty\@M\guill@spacing\guillemotright\xspace}
+ \AtBeginDocument{\ifx\xspace\@undefined\let\xspace\relax\fi}
+ \def\bbl@frenchguillemets{\renewcommand{\og}{\begin@guill}%
+ \renewcommand{\fg}{\end@guill}}
+ \def\bbl@nonfrenchguillemets{\renewcommand{\og}{``}%
+ \renewcommand{\fg}{\ifdim\lastskip>\z@\unskip\fi ''}}
+% \end{macrocode}
+% For \emph{Plain}\TeX, and \LaTeX-2.09 we define |\begin@guill|
+% and |\end@guill| using math symbols |\ll| and |\gg|.
+% \begin{macrocode}
+\else
+ \def\begin@guill{\leavevmode\raise0.25ex
+ \hbox{$\scriptscriptstyle\ll$}%
+ \penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font
+ minus.3\fontdimen4\font}
+ \def\end@guill{\ifdim\lastskip>\z@\unskip\penalty\@M\fi
+ \penalty\@M\hskip.8\fontdimen2\font
+ plus.3\fontdimen3\font minus.3\fontdimen4\font
+ \raise0.25ex\hbox{$\scriptscriptstyle\gg$}}
+ \let\xspace\relax
+ \def\bbl@frenchguillemets{\let\og\begin@guill
+ \let\fg\end@guill}
+ \def\bbl@nonfrenchguillemets{\def\og{``}%
+ \def\fg{\ifdim\lastskip>\z@\unskip\fi ''}}
+\fi
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchguillemets}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchguillemets}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{French lists}
+% \label{sec-lists}
+%
+% \begin{macro}{\bbl@frenchlistspacing}
+% \begin{macro}{\bbl@nonfrenchlistspacing}
+% Vertical spacing in general 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; as most lists are based on
+% |\list| we will redefine |\list| (up to version~1.4, the more
+% internal command |\@trivlist| was redefined, this ensured that
+% all lists would have common settings, but didn't allow the users
+% to provide their own settings, as pointed out by P.~Pichaureau).
+% If standard LaTeX{} settings are preferred, it is easy to issue
+% the command |\FrenchListSpacingfalse| in the preamble or in
+% |frenchb.cfg|. Please note that changing the flag
+% |\FrenchListSpacing| will \emph{not} take effect immediately,
+% but next time language French is switched on.
+%
+% 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.\\
+% Of course, this code is only for \LaTeX.
+%
+% \changes{frenchb-1.3}{1997/05/30}{Add a switch to allow \cs{LaTeXe}
+% standard settings.}
+%
+% \changes{frenchb-1.5a}{2001/01/02}{Redefine \cs{list} instead of
+% \cs{@trivlist} to provide more freedom to the user, but still
+% allow the former way with \cs{ifFrenchOldTrivlist}.}
+%
+% \changes{frenchb-1.5g}{2001/09/09}{\cs{parskip} is of type `skip',
+% its mean value only (not the glue) should be moved from
+% \cs{topsep} to \cs{partopsep}: substracting glue can lead to
+% weird results. Bug pointed out by Michel Bovani.}
+%
+% \begin{macrocode}
+\newif\ifFrenchListSpacing \FrenchListSpacingtrue
+\newif\ifFrenchOldTrivlist
+\ifLaTeX
+ \let\listORI\list
+% \end{macrocode}
+% |\endlist| is not redefined, but |\endlistORI| is provided for
+% the users who prefer to define their own lists from the original
+% command, they can code: |\begin{listORI}{}{} \end{listORI}|.
+% \begin{macrocode}
+ \let\endlistORI\endlist
+ \def\FR@listsettings{%
+ \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 substracted 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\listFR#1#2{\listORI{#1}{\FR@listsettings #2}}%
+% \end{macrocode}
+% Keep the |\@trivlist| redefinition from version 1.4 (only
+% for compatibility reasons). The flag |\ifFrenchOldTrivlist|
+% could happen to be useful to process older documents.
+% \begin{macrocode}
+ \let\@trivlistORI\@trivlist
+ \def\@trivlistFR{\FR@listsettings\@trivlistORI}
+ \def\bbl@frenchlistspacing{\ifFrenchListSpacing\let\list\listFR\fi
+ \ifFrenchOldTrivlist\let\@trivlist\@trivlistFR
+ \let\list\listORI\fi}
+ \def\bbl@nonfrenchlistspacing{\let\list\listORI
+ \let\@trivlist\@trivlistORI}
+ \expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchlistspacing}
+ \expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchlistspacing}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\bbl@frenchitemize}
+% \begin{macro}{\bbl@nonfrenchitemize}
+% The layout of French itemize-lists has changed between version~1.2
+% and~1.3. Jacques Andr\'e and Thierry Bouche pointed out to me
+% that vertical spacing between items, before and after the list,
+% should \emph{null} with \emph{no glue} added. Moreover
+% horizontal spacing was not correct either: the item labels of a
+% first level list should be vertically aligned on the paragraph's
+% first character (at |\parindent| from the left margin).
+% Checking the book ``Lexique des r\`egles typographiques en usage
+% \`a l'Imprimerie nationale'' confirmed their points, so the itemize
+% environment has been totally redefined for French in version~1.3.
+%
+% Several people pointed out to me that the layout of lists can
+% either be set by the current language or be tuned independently of
+% the language as part of the layout of the document. So hooks should
+% be provided to switch off the special settings made in |frenchb|.
+% Setting |\FrenchItemizeSpacingfalse| \emph{after} loading |frenchb|
+% in the preamble switches back to settings of version~1.2 (this can
+% be useful to process old documents). If you want all list spacings
+% to be exactly what they are in standard \LaTeXe{}, then add also
+% |\FrenchListSpacingfalse| in the preamble \emph{after} loading
+% |frenchb|. Both switches can also be set in |frenchb.cfg|.
+% Please note that changing the flags |\FrenchItemizeSpacing| and
+% |\FrenchListSpacing| will \emph{not} take effect immediately,
+% but next time language French is switched on.
+%
+% The \textbullet{} is never used in French itemize-lists,
+% a long dash `--' is preferred for all levels. The item label used
+% in French is stored in |\FrenchLabelItem}|, it defaults to '--' and
+% can be changed using |\renewcommand| (see the example
+% configuration file above).
+%
+% \changes{frenchb-1.1}{1996/01/25}{Save original definitions of label
+% items, instead of hard coding them in \cs{bbl@nonfrenchitems}
+% (suggested by Vincent Jalby).}
+%
+% \changes{frenchb-1.1}{1996/01/26}{Tune vertical spacing in
+% French lists.}
+%
+% \changes{frenchb-1.3}{1997/05/30}{Change -{}- to \cs{textendash},
+% completely redesign the itemize environment in French and add
+% a hook to switch back to \cs{LaTeXe} standard itemize lists.}
+%
+% \changes{frenchb-1.4}{1999/07/08}{\cs{newif} only in LaTeX.}
+%
+% \changes{frenchb-1.4}{1999/07/08}{Add a hook \cs{FrenchLabelItem}
+% which defaults to \cs{textendash}, this was suggested by
+% Michel Bovani to allow some customization of label items.}
+%
+% \changes{frenchb-1.5a}{2001/01/02}{Redesign \cs{itemize} to allow
+% users to change the markers of any level in itemize lists.}
+%
+% \changes{frenchb-1.5g}{2001/09/09}{\cs{parskip} is of type `skip',
+% its mean value only (not the glue) should be moved from
+% \cs{topsep} to \cs{partopsep}: substracting glue can lead to
+% weird results. Bug pointed out by Michel Bovani.}
+%
+% \begin{macrocode}
+\newif\ifFrenchItemizeSpacing \FrenchItemizeSpacingtrue
+\ifLaTeX
+ \newcommand{\FrenchLabelItem}{\textendash}
+ \newcommand{\Frlabelitemi}{\FrenchLabelItem}
+ \newcommand{\Frlabelitemii}{\FrenchLabelItem}
+ \newcommand{\Frlabelitemiii}{\FrenchLabelItem}
+ \newcommand{\Frlabelitemiv}{\FrenchLabelItem}
+ \def\bbl@frenchitemize{%
+ \let\@ltiORI\labelitemi
+ \let\@ltiiORI\labelitemii
+ \let\@ltiiiORI\labelitemiii
+ \let\@ltivORI\labelitemiv
+ \let\itemizeORI\itemize
+ \let\labelitemi\Frlabelitemi
+ \let\labelitemii\Frlabelitemii
+ \let\labelitemiii\Frlabelitemiii
+ \let\labelitemiv\Frlabelitemiv
+ \ifFrenchItemizeSpacing
+% \end{macrocode}
+% Make sure |\itemize| uses |\@trivlistORI| even with
+% |\FrenchOldTrivlisttrue|.
+% \begin{macrocode}
+ \def\itemize{\let\@trivlist\@trivlistORI
+ \ifnum \@itemdepth >\thr@@\@toodeep\else
+ \advance\@itemdepth\@ne
+ \edef\@itemitem{labelitem\romannumeral\the\@itemdepth}%
+ \expandafter
+ \listORI
+ \csname\@itemitem\endcsname
+ {\settowidth{\labelwidth}{\csname\@itemitem\endcsname}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \ifnum\@listdepth=0
+ \setlength{\itemindent}{\parindent}%
+ \else
+ \addtolength{\leftmargin}{\parindent}%
+ \fi
+ \setlength{\itemsep}{\z@}%
+ \setlength{\parsep}{\z@}%
+ \setlength{\topsep}{\z@}%
+ \setlength{\partopsep}{\z@}%
+% \end{macrocode}
+% |\parskip| is of type `skip', its mean value only (\emph{not
+% the glue}) should be substracted from |\topsep| and added to
+% |\partopsep|, so convert |\parskip| to a `dimen' using
+% |\@tempdima|.
+% \begin{macrocode}
+ \@tempdima=\parskip
+ \addtolength{\topsep}{-\@tempdima}%
+ \addtolength{\partopsep}{\@tempdima}}%
+ \fi}%
+ \fi}
+% \end{macrocode}
+% The user's changes in labelitems are saved when leaving French
+% for further use when switching back to French.
+% \begin{macrocode}
+ \def\bbl@nonfrenchitemize{\let\Frlabelitemi\labelitemi
+ \let\Frlabelitemii\labelitemii
+ \let\Frlabelitemiii\labelitemiii
+ \let\Frlabelitemiv\labelitemiv
+ \let\labelitemi\@ltiORI
+ \let\labelitemii\@ltiiORI
+ \let\labelitemiii\@ltiiiORI
+ \let\labelitemiv\@ltivORI
+ \let\itemize\itemizeORI}
+ \expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchitemize}
+ \expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchitemize}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \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.
+% Add this code only in \LaTeX.
+%
+% \changes{frenchb-1.2}{1996/12/27}{Corrected typo
+% \cs{bbl@nonfrenchident}.}
+%
+% \begin{macrocode}
+\ifLaTeX
+ \let\@aifORI\@afterindentfalse
+ \def\bbl@frenchindent{\let\@afterindentfalse\@afterindenttrue
+ \@afterindenttrue}
+ \def\bbl@nonfrenchindent{\let\@afterindentfalse\@aifORI
+ \@afterindentfalse}
+ \expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchindent}
+ \expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchindent}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Formatting footnotes}
+%
+% \changes{frenchb-1.6a}{2003/02/02}{Add two hooks to customize
+% footnotes: \cs{AddThinSpaceBeforeFootnotes} and
+% \cs{FrenchFootnotes} (suggested by Jacques Andr\'e).}
+%
+% \begin{macro}{\AddThinSpaceBeforeFootnotes}
+% \begin{macro}{\FrenchFootnotes}
+% \begin{macro}{\StandardFootnotes}
+% |\AddThinSpaceBeforeFootnotes| redefines |\@footnotemark| (whose
+% definition is saved at the |\begin{document}| in order to include
+% any customization that packages might have done) to add a thinspace
+% before the number or symbol calling a footnote (any space typed
+% in is removed first). |\AddThinSpaceBeforeFootnotes| has no effect
+% on the layout of the footnote itself. Note that |\thanks| in
+% |\maketitle| also relies on |\@footnotemark|, so the thinspace
+% is added there too.
+%
+% \changes{frenchb-1.6f}{2003/04/02}{Move \cs{newif} and
+% \cs{newdimen} commands outside \cs{ifLaTeXe} ... \cs{fi}
+% for compatibility with the plain format.}
+%
+% \begin{macrocode}
+\newif\ifthinspace@FN
+\newif\ifFR@fntlayout
+\newdimen\parindentFFN
+\ifLaTeXe
+ \newcommand{\AddThinSpaceBeforeFootnotes}{\thinspace@FNtrue}
+ \AtBeginDocument{\let\@footnotemarkORI\@footnotemark
+ \def\@footnotemarkFR{\leavevmode\unskip\unkern
+ \,\@footnotemarkORI}%
+ \ifthinspace@FN
+ \let\@footnotemark\@footnotemarkFR
+ \fi}
+% \end{macrocode}
+%
+% We then define |\@makefntextFR|, 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 textsuperscripts) 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).
+% The value of |\parindentFFN| will be defined at the
+% |\begin{document}|, as the maximum of |\parindent| and 1.5em.
+%
+% \begin{macrocode}
+ \def\ftnISsymbol{\@fnsymbol\c@footnote}
+ \long\def\@makefntextFR#1{\ifx\thefootnote\ftnISsymbol
+ \@makefntextORI{#1}%
+ \else
+ \parindent=\parindentFFN
+ \rule\z@\footnotesep
+ \setbox\@tempboxa\hbox{\@thefnmark}%
+ \ifdim\wd\@tempboxa>\z@
+ \llap{\@thefnmark}.\kern.5em
+ \fi #1
+ \fi}%
+% \end{macrocode}
+% We now define two commands |\FrenchFootnotes| and
+% |\StandardFootnotes| which select French or Standard layout
+% for footnotes; we have to save the standard definition of
+% |\@makefntext| at the |\begin{document}|, and then redefine
+% |\@makefntext| according to the value of an internal flag set
+% by |\FrenchFootnotes| and reset by |\StandardFootnotes|.
+% \begin{macrocode}
+ \AtBeginDocument{\parindentFFN=\parindent
+ \ifdim\parindentFFN<1.5em\parindentFFN=1.5em\fi
+ \let\@makefntextORI\@makefntext
+ \long\def\@makefntext#1{%
+ \ifFR@fntlayout
+ \@makefntextFR{#1}%
+ \else
+ \@makefntextORI{#1}%
+ \fi
+ }%
+ }
+ \newcommand{\FrenchFootnotes}{\FR@fntlayouttrue}
+ \newcommand{\StandardFootnotes}{\FR@fntlayoutfalse}
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Formatting numbers}
+% \label{sec-numbers}
+%
+% \changes{frenchb-1.4}{1999/10/02}{Add a hook to let the comma
+% be in math mode of type \cs{mathord} in French, as a decimal
+% separator should be.}
+%
+% \changes{frenchb-1.6e}{2003/11/09}{The change from \cs{mathpunct}
+% to \cs{mathord} should be encoding independent (suggested by
+% Michel Bovani): just strip the highest hexadecimal digit to
+% switch from type \cs{mathpunct} to type \cs{mathord}.}
+%
+% \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}}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \mathcode`\,=\std@mcc}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{frenchb-1.2}{1996/12/27}{New macros \cs{nombre}
+% \cs{decimalsep} and \cs{thousandsep} added to format numbers.}
+%
+% In English the decimal part starts with a point and thousands
+% should be separated by a comma: an approximation of $1000\pi$
+% should be inputed as |$3{,}141.592{,}653$| in math mode and
+% as |3,141.592,653| in text.\\
+% In French the decimal part starts with a comma and thousands
+% should be separated by a space; the same approximation of
+% $1000\pi$ should be inputed as |$3\;141{,}592\;653$| in math mode
+% and as something like |3~141,592~653| in text: in math mode, the
+% comma is of type |\mathpunct| (thus normally followed by a space)
+% while the point is of type |\mathord| (no space added).
+%
+% Thierry Bouche suggested that a second type of comma, of type
+% |\mathord| would be useful in math mode, and proposed to
+% introduce a command (named |\decimalsep| in this package),
+% the expansion of which would depend on the current language.
+%
+% Vincent Jalby suggested a command |\nombre| to conveniently
+% typeset numbers: inputting |\nombre{3141,592653}| either in
+% text or in math mode will format this number properly according
+% to the current language (French or non-French).
+%
+% |\nombre| accepts an optional argument which happens to be
+% useful with the package `dcolumn', it specifies the decimal
+% separator used in the \emph{source code}:
+% |\newcolumntype{d}{D{,}{\decimalsep}{-1}}| \\
+% |\begin{tabular}{|d|}\hline | \\
+% | 3,14 \\ | \\
+% | \nombre[,]{123,4567} \\ | \\
+% | \nombre[,]{9876,543}\\\hline| \\
+% |\end{tabular} | \\
+% will print a column of numbers aligned on the decimal point
+% (comma or point depending on the current language), each slice
+% of 3 digits being separated by a space or a comma according to
+% the current language.
+%
+% \begin{macro}{\decimalsep}
+% \begin{macro}{\thousandsep}
+% We need a internal definition, valid in both text and math mode,
+% for the comma (|\@comma@|) and another one for the unbreakable
+% fixed length space (no glue) used in French (|\f@thousandsep|).
+%
+% The commands |\decimalsep| and |\thousandsep| get default
+% definitions (for the English language) when |frenchb| is loaded;
+% these definitions will be updated when the current language is
+% switched to or from French.
+%
+% \changes{frenchb-1.2b}{1997/04/24}{Extra care taken to handle
+% signs properly inside \cs{nombre} in \LaTeXe.}
+%
+% \changes{frenchb-1.2b}{1997/04/24}{Definition of \cs{nombre} changed
+% to correct a bug with moving arguments in \LaTeX-2.09.}
+%
+% \changes{frenchb-1.4g}{2000/10/07}{Added a new hook
+% \cs{ThinSpaceInFrenchNumbers} to have thin spaces instead of
+% normal spaces (the default) when formatting French numbers.}
+%
+% \begin{macrocode}
+\mathchardef\m@comma=\dec@mcc
+\def\@comma@{\ifmmode\m@comma\else,\fi}
+\def\f@thousandsep{\ifmmode\mskip5.5mu\else\penalty\@M\kern.3em\fi}
+\def\ThinSpaceInFrenchNumbers{\def\f@thousandsep{%
+ \ifmmode\mskip3mu\else\penalty\@M\kern.16667em\fi}}
+\newcommand{\decimalsep}{.}
+\newcommand{\thousandsep}{\@comma@}
+\expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \def\decimalsep{\@comma@}%
+ \def\thousandsep{\f@thousandsep}}
+\expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \def\decimalsep{.}%
+ \def\thousandsep{\@comma@}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \changes{frenchb-1.3}{1997/05/24}{Avoid mixing text and math mode
+% whenever possible: check if \cs{textminus} and co. are available.}
+% Signs can now be entered inside |\nombre|. When |\nombre| is
+% used in text-mode, signs should be text symbols to get the
+% series, shape... from the current text-font. When signs are not
+% available in text-mode, we provide some defaults.
+%
+% \begin{macrocode}
+\providecommand{\textminus}{\textendash}
+\providecommand{\textplusminus}{\ensuremath{\pm}}
+\providecommand{\textminusplus}{\ensuremath{\mp}}
+\def\fb@minus{\ifmmode-\else\textminus\fi}
+\def\fb@plusminus{\ifmmode\pm\else\textplusminus\fi}
+\def\fb@minusplus{\ifmmode\mp\else\textminusplus\fi}
+% \end{macrocode}
+%
+% \begin{macro}{\nombre}
+% The decimal separator used when \emph{inputing} a number
+% with |\nombre| \emph{has to be a comma}.
+% |\nombre| splits the inputed number into two parts: what
+% comes before the first comma will be formatted by
+% \cs{@integerpart} while the rest (if not empty) will be
+% formatted by \cs{@decimalpart}. Both parts, once formatted
+% separately will be merged together with between them, either
+% the decimal separator \cs{decimalsep} or (in \LaTeXe{}
+% \emph{only}) the optional argument of |\nombre|.
+%
+% \changes{frenchb-1.3}{1997/05/24}{Added \cs{@empty} to the
+% definitions of \cs{nb@first} and \cs{nb@suite}, as suggested
+% by V. Jalby, to cope with possibly empty integer part as in
+% \cs{nombre{,123}}.}
+%
+% \begin{macrocode}
+\if@Two@E
+ \newcommand{\nombre}[2][\decimalsep]{\def\@decimalsep{#1}%
+ \@@nombre#2\@empty,\@empty,\@nil}
+\else
+ \def\@decimalsep{\decimalsep}
+ \newcommand{\nombre}[1]{\@nombre#1\@empty,\@empty,\@nil}
+\fi
+\def\@firstofmany#1#2,{#1}
+\def\@@nombre#1,#2,#3\@nil{%
+ \def\nb@sign{}%
+ \edef\nb@first{\@firstofmany #1\@empty,}%
+ \edef\nb@suite{\@secondoftwo #1\@empty,}%
+ \if+\nb@first \def\nb@sign{+}\fi
+ \if-\nb@first \def\nb@sign{\fb@minus}\fi
+ \expandafter\ifx\nb@first\pm \def\nb@sign{\fb@plusminus}\fi
+ \expandafter\ifx\nb@first\mp \def\nb@sign{\fb@minusplus}\fi
+ \ifx\@empty\nb@sign
+ \let\@tmp\nb@suite\edef\nb@suite{\nb@first\@tmp}%
+ \fi
+ \nb@sign\expandafter\@nombre\nb@suite#2,#3\@nil}
+\def\@nombre#1,#2,#3\@nil{%
+ \ifx\@empty#2%
+ \@integerpart{#1}%
+ \else
+ \@integerpart{#1}\@decimalsep\@decimalpart{#2}%
+ \fi}
+% \end{macrocode}
+% The easiest bit is the decimal part:
+% We attempt to read the first four digits of the decimal part, if
+% it has less than 4 digits, we just have to print them, otherwise
+% |\thousandsep| has to be appended after the third digit, and the
+% algorithm is applied recursively to the rest of the decimal part.
+% \begin{macrocode}
+\def\@decimalpart#1{\@@decimalpart#1\@empty\@empty\@empty}
+\def\@@decimalpart#1#2#3#4{#1#2#3%
+ \ifx\@empty#4%
+ \else
+ \thousandsep\expandafter\@@decimalpart\expandafter#4%
+ \fi}
+% \end{macrocode}
+% Formatting the integer part is more difficult because the slices
+% of 3 digits start from the \emph{bottom} while the number is
+% read from the top!
+% This (tricky) code is borrowed from David Carlisle's comma.sty.
+% \begin{macrocode}
+\def\@integerpart#1{\@@integerpart{}#1\@empty\@empty\@empty}
+\def\@@integerpart#1#2#3#4{%
+ \ifx\@empty#2%
+ \@addthousandsep#1\relax
+ \else
+ \ifx\@empty#3%
+ \@addthousandsep\@empty\@empty#1#2\relax
+ \else
+ \ifx\@empty#4%
+ \@addthousandsep\@empty#1#2#3\relax
+ \else
+ \@@integerpartafterfi{#1#2#3#4}%
+ \fi
+ \fi
+ \fi}
+\def\@@integerpartafterfi#1\fi\fi\fi{\fi\fi\fi\@@integerpart{#1}}
+\def\@addthousandsep#1#2#3#4{#1#2#3%
+ \if#4\relax
+ \else
+ \thousandsep\expandafter\@addthousandsep\expandafter#4%
+ \fi}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Dots\dots}
+% \label{sec-dots}
+%
+% \changes{frenchb-1.3}{1997/06/03}{Added this section.}
+% \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 |\Frtextellipsis| for French (in \LaTeXe{} only).
+%
+% \changes{frenchb-1.4c}{1999/11/17}{Bug correction: \cs{xspace}
+% didn't work in \cs{dots} without amsmath.sty.}
+% 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{frenchb-1.4d}{2000/02/01}{AMS-LaTeX 2.0 provides a much
+% better spacing for \cs{dots} than 1.2, so let's take advantage
+% of it when amsmath (up to 1.2 or newer) is loaded.}
+%
+% \begin{macro}{\Frtextellipsis}
+% \begin{macrocode}
+\ifLaTeXe
+ \DeclareTextCommandDefault{\Frtextellipsis}{%
+ .\kern\fontdimen3\font.\kern\fontdimen3\font.\xspace}
+% \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 |\Frtextellipsis|
+% 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}%
+ \ifx\@xp\@undefined\let\@xp\relax\fi
+ \ifx\mdots@\@undefined\let\Tdots@ORI\textellipsis
+ \let\Mdots@\mathellipsis\fi}
+ \def\bbl@frenchdots{\let\Tdots@\Frtextellipsis}
+ \def\bbl@nonfrenchdots{\let\Tdots@\Tdots@ORI}
+ \expandafter\addto\csname extras\CurrentOption\endcsname{%
+ \bbl@frenchdots}
+ \expandafter\addto\csname noextras\CurrentOption\endcsname{%
+ \bbl@nonfrenchdots}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Global layout}
+% \label{sec-global}
+%
+% \changes{frenchb-1.4}{1999/10/03}{Added this section.}
+%
+% 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 the indentation of the first paragraph of sections
+% (see~\ref{sec-indent}).
+%
+% \begin{macro}{\FrenchLayout}
+% \begin{macro}{\StandardLayout}
+% In a multilingual document, a unified look, either the French
+% one or the standard one, can be assigned to the whole document:
+% adding |\FrenchLayout| will give a global ``French look'' to
+% the document (e.g., lists, regardless the current language, will
+% be typeset as in French) and |\StandardLayout| forces a global
+% ``US-English'' look.
+% Both of these commands can only be used \emph{before} the
+% |\begin{document}|.
+% |\StandardLayout| can also be of interest for class designers
+% who do not want |frenchb| to interfere with their global layout
+% choices.
+%
+% As of version~1.4, |\FrenchLayout| and |\StandardLayout| only
+% affect:
+% \begin{itemize}
+% \item the layout of lists (see~\ref{sec-lists}),
+% \item the indentation of the first paragraph of sections
+% (see~\ref{sec-indent}).
+% \end{itemize}
+%
+% \changes{frenchb-1.6c}{2003/06/30}{Bug correction: the definitions
+% of \cs{labelitemi} ... \cs{itemize} need to be saved in
+% \cs{StandardLayout}.}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \newcommand{\FrenchLayout}{%
+ \renewcommand{\StandardLayout}{%
+ \PackageWarning{frenchb.ldf}%
+ {\protect\StandardLayout\space makes no change\MessageBreak
+ (\protect\FrenchLayout\space has been selected before
+ \MessageBreak for the whole document)}%
+ }%
+ \AtBeginDocument{\bbl@frenchitemize\bbl@frenchlistspacing
+ \bbl@frenchindent}%
+ \let\bbl@nonfrenchitemize\relax
+ \let\bbl@nonfrenchlistspacing\relax
+ \let\bbl@nonfrenchindent\relax}
+ \newcommand{\StandardLayout}{%
+ \renewcommand{\FrenchLayout}{%
+ \PackageWarning{frenchb.ldf}%
+ {\protect\FrenchLayout\space makes no change\MessageBreak
+ (\protect\StandardLayout\space has been selected before
+ \MessageBreak for the whole document)}%
+ }%
+ \let\@ltiORI\labelitemi
+ \let\@ltiiORI\labelitemii
+ \let\@ltiiiORI\labelitemiii
+ \let\@ltivORI\labelitemiv
+ \let\itemizeORI\itemize
+ \let\bbl@frenchitemize\relax
+ \let\bbl@frenchlistspacing\relax
+ \let\bbl@frenchindent\relax}
+ \@onlypreamble\FrenchLayout
+ \@onlypreamble\StandardLayout
+\fi
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Extra utilities}
+%
+% All that is left to do now is to provide the French user
+% with some extra utilities.
+%
+% \begin{macro}{\up}
+% \begin{macro}{\ieme}
+% |\up| eases the typesetting of superscripts like
+% `1\raise0.55ex\hbox{\small er}'. |\up| relies on
+% |\textsuperscript| when available (i.\,e., in \LaTeXe).
+%
+% \changes{frenchb-1.1}{1996/01/20}{Use \cs{textsuperscript} in \LaTeXe,
+% as suggested by Vincent Jalby.}
+%
+% \changes{frenchb-1.1}{1996/01/26}{Internal macro \cs{up@size}
+% introduced by Johannes Braams to replace \cs{small},
+% too fragile in 2.09).}
+%
+% \changes{frenchb-1.1}{1996/05/03}{\cs{@ptsize} may not be undefined,
+% i.\,e. in slides.cls.}
+%
+% \begin{macro}{\up@size}
+% The internal macro |\up@size| holds the size at which the
+% superscript will be typeset. The reason for this is that we have
+% to specify it differently for different formats.
+% \begin{macrocode}
+\ifx\sevenrm\@undefined
+ \ifx\@ptsize\@undefined
+ \let\up@size\small
+ \else
+ \ifx\selectfont\@undefined
+% \end{macrocode}
+% In this case the format is the original \LaTeX-2.09:
+% \begin{macrocode}
+ \ifcase\@ptsize
+ \let\up@size\ixpt\or
+ \let\up@size\xpt\or
+ \let\up@size\xipt
+ \fi
+% \end{macrocode}
+% When |\selectfont| is defined we probably have NFSS available:
+% \begin{macrocode}
+ \else
+ \ifcase\@ptsize
+ \def\up@size{\fontsize\@ixpt{10pt}\selectfont}\or
+ \def\up@size{\fontsize\@xpt{11pt}\selectfont}\or
+ \def\up@size{\fontsize\@xipt{12pt}\selectfont}
+ \fi
+ \fi
+ \fi
+\else
+% \end{macrocode}
+% If we end up here it must be a plain based \TeX{} format, so:
+% \begin{macrocode}
+ \let\up@size\sevenrm
+\fi
+% \end{macrocode}
+% \end{macro}
+% Now we can define |\up|. When \LaTeXe{} runs in
+% compatibility mode (\LaTeX-2.09 emulation), |\textsuperscript| is
+% also defined, but does no good job, so we give two different
+% definitions for |\up| using |\if@Two@E|.
+% \begin{macrocode}
+\if@Two@E
+ \DeclareRobustCommand*{\up}[1]{\textsuperscript{#1}}
+\else
+ \DeclareRobustCommand*{\up}[1]{\leavevmode\raise1ex\hbox{\up@size#1}}
+\fi
+% \end{macrocode}
+%
+% \changes{frenchb-1.1}{1996/05/31}{Added 5 macros from french.sty and
+% missing \cs{lowercase}.}
+%
+% \changes{frenchb-1.2b}{1997/04/24}{Use \cs{xspace} to control spacing
+% after \cs{ieme} ... \cs{ieres}.}
+%
+% |\ieme| is provided for compatibility with |francais.sty|,
+% the other 5 for compatibility with |french.sty|:
+% \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}
+%
+% \begin{macro}{\No}
+% \begin{macro}{\no}
+% \begin{macro}{\primo}
+% \begin{macro}{\fprimo)}
+% And some more macros for numbering, first two support macros.
+%
+% \changes{frenchb-1.1}{1996/01/25}{Avoid using math superscripts
+% in text mode (suggested by V.~Jalby), use \cs{up} instead.
+% The symbol `degree' has nothing to do in
+% \cs{FrenchPopularEnumerate}, replace it by a small `o'.}
+%
+% \begin{macrocode}
+\DeclareRobustCommand*{\FrenchEnumerate}[1]{%
+ #1\up{\lowercase{o}}\kern+.3em}
+\DeclareRobustCommand*{\FrenchPopularEnumerate}[1]{%
+ #1\up{\lowercase{o}})\kern+.3em}
+% \end{macrocode}
+%
+% \changes{frenchb-1.3c}{1997/10/08}{Typos corrected: quatro, fquatro}
+%
+% 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 two 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}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \changes{frenchb-1.1}{1996/01/29}{Added command \cs{bsc}.}
+%
+% \changes{frenchb-1.1}{1996/05/31}{Added \cs{leavevmode} in \cs{bsc}}
+%
+% \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; this is a simpler implementation of
+% commands |\fsc| and |\lsc| from |french.sty| : no automatic
+% uppercase/lowercase conversion is performed.
+% Usage: |Jean~\bsc{Duchemin}|.
+% \begin{macrocode}
+\DeclareRobustCommand*{\bsc}[1]{\leavevmode\hbox{\scshape #1}}
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{frenchb-1.1}{1996/05/31}{Added \cs{AllTeX}.}
+%
+% \changes{frenchb-1.2}{1997/01/08}{Removed \cs{AllTeX}.}
+%
+% \changes{frenchb-1.1}{1996/02/12}{Added T1-encodings for \oe, \OE,
+% \ae, \AE. \emph{Do not} re-define these symbols outside \LaTeXe.}
+%
+% \changes{frenchb-1.1}{1996/02/14}{Corrected definitions of
+% \cs{boi}.}
+%
+% \changes{frenchb-1.3}{1997/05/24}{Use \cs{textbackslash} to define
+% \cs{boi}.}
+%
+% Some definitions for special characters. The first eight are
+% mandatory for |\oe| etc. to work properly in moving arguments,
+% the others just for convenience. 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|.
+%
+% \changes{frenchb-1.3}{1997/05/24}{Use \cs{r{}} to access the
+% character `degree', as suggested by V. Jalby.}
+%
+% |\degre| needs a special treatment: it is |\char6|
+% in T1-encoding and |\char23| in OT1-encoding, both can be
+% accessed by the command |\r{}| for ring accent.
+%
+% \changes{frenchb-1.1}{1996/03/03}{Do not use commands related to
+% encodings outside \LaTeXe.}
+%
+% \changes{frenchb-1.4}{1999/10/03}{Add definitions for \cs{at},
+% \cs{circonflexe} and \cs{tild} in other encodings (mlTeX's LO1).}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \DeclareTextSymbol{\ae}{T1}{230}
+ \DeclareTextSymbol{\ae}{OT1}{26}
+ \DeclareTextSymbol{\oe}{T1}{247}
+ \DeclareTextSymbol{\oe}{OT1}{27}
+ \DeclareTextSymbol{\AE}{T1}{198}
+ \DeclareTextSymbol{\AE}{OT1}{29}
+ \DeclareTextSymbol{\OE}{T1}{215}
+ \DeclareTextSymbol{\OE}{OT1}{30}
+ \DeclareTextSymbol{\at}{T1}{64}
+ \DeclareTextSymbol{\at}{OT1}{64}
+ \DeclareTextSymbol{\circonflexe}{T1}{94}
+ \DeclareTextSymbol{\circonflexe}{OT1}{94}
+ \DeclareTextSymbol{\tild}{T1}{126}
+ \DeclareTextSymbol{\tild}{OT1}{126}
+ \DeclareTextSymbolDefault{\at}{OT1}
+ \DeclareTextSymbolDefault{\circonflexe}{OT1}
+ \DeclareTextSymbolDefault{\tild}{OT1}
+ \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
+% \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 the \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{frenchb-1.1}{1996/01/25}{Fixed width bounding box for
+% correct spacing with both CM, EC and PostScript fonts}
+%
+% \changes{frenchb-1.1}{1996/05/31}{Added \cs{leavevmode} in the
+% \cs{degres}'s definition}
+%
+% \changes{frenchb-1.6a}{2003/02/02}{Replace \cs{degres} by
+% \cs{textdegree} from textcomp.sty when possible (suggested
+% by Michel Bovani).}
+%
+% \changes{frenchb-1.6g}{2005/02/06}{Add \cs{hbox} in the definition
+% of \cs{degres} when textcomp.sty is loaded, so that \cs{degres}
+% can be used in math mode.}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \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{\expandafter\ifx\csname M@TS1\endcsname\relax
+ \DeclareRobustCommand*{\degres}{%
+ \leavevmode\hbox to 0.3em{\hss\degre\hss}%
+ \Warning@degree@TSone
+ \global\let\Warning@degree@TSone\relax}%
+ \let\textdegree\degres
+ \else
+ \DeclareRobustCommand*{\degres}{%
+ \hbox{\UseTextSymbol{TS1}{\textdegree}}}%
+ \fi}
+\else
+ \DeclareRobustCommand*{\degres}{%
+ \leavevmode\hbox to 0.3em{\hss\degre\hss}}
+\fi
+% \end{macrocode}
+% \end{macro}
+%
+% \changes{frenchb-1.1}{1996/01/16}{Special care has to be taken
+% with Ml\TeX.}
+%
+% The following macros are used in the redefinition of |\^| and
+% |\"| to handle the letter~i: they allow users to type simply
+% |\^i| and |\"i| instead of |\^{\i}| and |\"{\i}|.\\
+% Ml\TeX{}'s macros dealing with accents conflict with those of
+% \LaTeXe{}, so we check whether |\csubinverse| is defined or not.
+% If |\csubinverse| is \emph{defined}, we are in Ml\TeX.
+%
+% \changes{frenchb-1.1}{1996/03/02}{Do this only in \LaTeXe.}
+%
+% \changes{frenchb-1.1}{1996/03/12}{Do not redefine \cs{\char94} and
+% \cs{"} in Ml\TeX, because it would break hyphenation. The correct
+% place to redefine \cs{\char94i} and \cs{"i} is in the format
+% itself, see MLTeX.cfg.}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \AtBeginDocument{%
+ \ifx\csubinverse\@undefined
+ \DeclareTextCompositeCommand{\^}{OT1}{i}{\^\i}%
+ \DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i}%
+ \fi}
+\fi
+% \end{macrocode}
+%
+% \subsection{Date and clean up}
+%
+% \begin{macro}{\datefrench}
+% The macro |\datefrench| redefines the command |\today| to
+% produce French dates.
+%
+% \changes{frenchb-1.2}{1997/01/05}{Added aliases \cs{datefrenchb}
+% and \cs{datefrancais}. Use \cs{ier} instead of \cs{up}.}
+%
+% \changes{frenchb-1.3b}{1997/10/01}{Use \cs{edef} to define
+% \cs{today} to save memory}
+%
+% \changes{frenchb-1.3d}{1998/07/04}{Move this code to the end
+% of file, until \cs{ier} is defined (due to use of \cs{edef});
+% expansion of \cs{ier} has to be stopped anyway.}
+%
+% \changes{frenchb-1.3g}{1999/08/18}{Replaced \cs{edef} with \cs{def}
+% to prevent problems with unexpandable accent commands}
+%
+% \changes{frenchb-1.4d}{2000/02/01}{Changed \cs{noexpand}\cs{ier}
+% to \cs{ier}, as a result of the replacement of \cs{edef} by
+% \cs{def}, see previous change. Also add braces around \cs{ier}
+% for xspace.sty.}
+%
+% \begin{macrocode}
+\@namedef{date\CurrentOption}{%
+ \def\today{\number\day
+ \ifnum1=\day {\ier}\fi
+ \space \ifcase\month
+ \or janvier\or f\'evrier\or mars\or avril\or mai\or juin\or
+ juillet\or ao\^ut\or septembre\or octobre\or novembre\or
+ d\'ecembre\fi
+ \space \number\year}}
+% \end{macrocode}
+% \end{macro}
+%
+% 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' (in LaTeX2e only), then call
+% |\ldf@quit\CurrentOption|.
+% The macro-space used by some control sequences we do not
+% need any longer, is freed.
+%
+% \changes{frenchb-1.1b}{1996/11/02}{Now use \cs{ldf@finish} to wrap
+% up.}
+%
+% \changes{frenchb-1.2}{1997/01/05}{The config file searched for is
+% `frenchb.cfg' regardless \cs{CurrentOption}.}
+%
+% \changes{frenchb-1.5d}{2001/02/16}{Load frenchb.cfg first and
+% change \cs{ldf@finish} to \cs{ldf@quit}.}
+%
+% \changes{frenchb-1.6g}{2005/02/06}{frenchb.cfg is now loaded only
+% with LaTeX2e, as the customization makes sense only in LaTeX2e.
+% Suggested by J.F. Burnol.}
+%
+% \begin{macrocode}
+\ifLaTeXe
+ \loadlocalcfg{frenchb}
+\fi
+\let\T@one\relax
+\let\@FI@\relax
+\let\ifLaTeX\@undefined
+\let\LaTeXtrue\@undefined
+\let\LaTeXfalse\@undefined
+\let\ifLaTeXe\@undefined
+\let\LaTeXetrue\@undefined
+\let\LaTeXefalse\@undefined
+\ldf@quit\CurrentOption
+%</code>
+% \end{macrocode}
+%
+% \Finale
+%%
+%% \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 \~}
+%%
+\endinput