% \iffalse meta-comment
%
% Copyright 1989-1996 Johannes L. Braams and any individual authors
% listed elsewhere in this file.  All rights reserved.
% 
% For further copyright information see any other copyright notices in 
% this file.
% 
% This file is part of the Babel system release 3.6.
% --------------------------------------------------
%   This system is distributed in the hope that it will be useful,
%   but WITHOUT ANY WARRANTY; without even the implied warranty of
%   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
% 
%   For error reports concerning UNCHANGED versions of this file no
%   more than one year old, see bugs.txt.
% 
%   Please do not request updates from me directly.  Primary
%   distribution is through the CTAN archives.
% 
% 
% IMPORTANT COPYRIGHT NOTICE:
% 
% You are NOT ALLOWED to distribute this file alone.
% 
% You are allowed to distribute this file under the condition that it
% is distributed together with all the files listed in manifest.txt.
% 
% If you receive only some of these files from someone, complain!
% 
% Permission is granted to copy this file to another file with a
% clearly different name and to customize the declarations in that
% copy to serve the needs of your installation, provided that you
% comply with the conditions in the file legal.txt from the LaTeX2e
% distribution.
% 
% However, NO PERMISSION is granted to produce or to distribute a
% modified version of this file under its original name.
%  
% You are NOT ALLOWED to change this file.
% 
% 
% \fi
% \CheckSum{1039}
%
% \iffalse
%    Tell the \LaTeX\ system who we are and write an entry on the
%    transcript.
%<*dtx>
\ProvidesFile{frenchb.dtx}
%</dtx>
%<code>\ProvidesFile{frenchb.ldf}
%\fi
%\ProvidesFile{frenchb.dtx}
        [1997/01/11 v1.2a French support from the babel system]
%\iffalse
%    Babel package for LaTeX version 2e
%    Copyright (C) 1989 - 1997
%              by Johannes Braams, TeXniek
%
%    Frenchb language Definition File
%    Copyright (C) 1989 - 1997
%              by Johannes Braams, TeXniek
%                 Daniel Flipo, GUTenberg
%
%    Please report errors to: Daniel Flipo, GUTenberg
%                             Daniel.Flipo@univ-lille1.fr
%
%    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{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]
  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.}
%
%
%  \section{The French Language}
%
%  \subsection{About French typography}
%
%    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!
%
%    Any of the commands |\selectlanguage{french}|,
%    |\selectlanguage{francais}|,  or |\selectlanguage{frenchb}|
%    switches to the French language 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 list items are set to `--' instead of $\bullet$
%          (\LaTeX{} only);
%    \item the vertical spacing in lists is shortened
%          (\LaTeX{} only);
%    \item the first paragraph of each section is indented
%          (\LaTeX{} only);
%    \item French quotation marks can be typeset 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{} with
%          |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);
%    \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 abbreviations 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 an command |\nombre| is provided to ease the typesetting of
%          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)%
%          \footnote{In math-mode the comma has to be surrounded with
%          braces to avoid a spurious space being inserted after it
%          (see the \TeX{}book p.~134). Besides this, each slice of
%          three digits should be separated either with a comma in
%          English or with a space in French.}.
%          The command |\nombre| is a contribution of Vincent Jalby
%          using ideas of David Carlisle in comma.sty.
%    \end{enumerate}
%
%    \vspace{5mm}
%    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, 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{5mm}
%    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 behavior of |frenchb|.
%
%    \vspace{5mm}
%    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. If you are
%      using Ml\TeX{} together with CMR fonts, comment out the
%      line \\
%      |\usepackage[|\textit{my-encoding}|]{inputenc}|.\\[3mm]
%      |%%% Test file for French hyphenation.|\\
%      |\documentclass{article}|\\
%      |\usepackage[|\textit{my-encoding}|]{inputenc}|\\
%      |\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 USenglish, not for
%    French;
%    \item you get no hyphen at all in \texttt{\'ev\'e-ne-ment}, this
%    probably means that you are using CMR fonts and the macro
%    |\accent| to produce accented characters.
%    Consider switching to DC/EC fonts and T1-encoding or use Ml\TeX.
%    \end{itemize}
%
%    \vspace{5mm}
%    |frenchb| has been improved using helpful suggestions from many
%     people, the main contributions came from Vincent~Jalby.
%    Thanks to all of them!
%
%    \vspace{5mm}
%    First version released: 1.1 as of 1996/05/31 part of
%    \babel-3.6beta.
%
%    Changes in version 1.1b: update for \babel-3.6.
%
%    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).
%
% \StopEventually{}
%
%  \subsection{\TeX{}nical details}
%
%    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}
%    \begin{macrocode}
%<*code>
%% Please report errors to: Daniel Flipo, GUTenberg
%%                          Daniel.Flipo@univ-lille1.fr
%%
\LdfInit{frenchb}\NoAutoSpaceBeforeFDP
%    \end{macrocode}
%
% \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: requested name `french' or `francais'.
%    \begin{macrocode}
\ifx\l@french\@undefined
  \ifx\l@francais\@undefined
    \@nopatterns{French}
    \adddialect\l@french0
  \fi
\fi
%    \end{macrocode}
%
% \changes{frenchb-1.2}{1997/01/05}{`french' `frenchb' and
%    `francais' are synonymous regardless of \cs{CurrentOption}.}
%    Regardless of |\CurrentOption| the internal name for the
%    French language will be `frenchb'; `francais' and `french'
%    will be synonymous for `frenchb': first let both names use the
%    same hyphenation patterns. Later we will have to set aliases
%    for |\captionsfrenchb|, |\datefrenchb|, |\extrasfrenchb| and
%    |\noextrasfrenchb|. As French uses the standard values of
%    |\lefthyphenmin| (2) and |\righthyphenmin| (3), no special
%    setting is required here.
%
%    \begin{macrocode}
\def\CurrentOption{frenchb}
\ifx\l@francais\@undefined
  \let\l@francais\l@french
\else
  \let\l@french\l@francais
\fi
\let\l@frenchb\l@french
%    \end{macrocode}
%
% \changes{frenchb-1.1}{1996/02/12}{Use \cs{fmtname} to check
%   the format instead of \cs{newcommand}; define \cs{PlainFmtName}
%   and \cs{LaTeXeFmtName}.}
%    To check the format in use (plain or LaTeX), we'll need macros
%    to hold the names of the plain and \LaTeXe{} formats.
%    \begin{macrocode}
\def\PlainFmtName{plain}
\def\LaTeXeFmtName{LaTeX2e}
%    \end{macrocode}
%
%  \begin{macro}{\if@Two@E}
% \changes{frenchb~1.1}{1996/03/01}{New test \cs{if@Two@E}.}
%    We will need a new `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}
%
% \begin{macro}{\extrasfrenchb}
% \begin{macro}{\noextrasfrenchb}
%    The macro |\extrasfrenchb| will perform all the extra
%    definitions needed for the French language.
%    The macro |\noextrasfrenchb| is used to cancel the actions of
%    |\extrasfrenchb|.\\
%    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}
\def\extrasfrancais{\extrasfrenchb}
\def\extrasfrench{\extrasfrenchb}
\def\noextrasfrancais{\noextrasfrenchb}
\def\noextrasfrench{\noextrasfrenchb}
%    \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{Captionnames and date}
%
%    The next step consists of defining the French equivalents for
%    the \LaTeX{} captionnames.
%
% \begin{macro}{\captionsfrenchb}
%    The macro |\captionsfrenchb| 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\captionsfrenchb{\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{captionsfrench}
%    and \cs{captionsfrancais}.}
%    \begin{macrocode}
\ifx\fmtname\PlainFmtName
\else
\@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.}}%
%    \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\captionsfrench{\captionsfrenchb}
   \def\captionsfrancais{\captionsfrenchb}
\fi
%    \end{macrocode}
% \end{macro}
%
% \begin{macro}{\datefrenchb}
%    The macro |\datefrenchb| redefines the command |\today| to
%    produce French dates.
% \changes{frenchb-1.2}{1997/01/05}{added aliases \cs{datefrench}
%    and \cs{datefrancais}. Use \cs{ier} instead of \cs{up}.}
%    \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}}
\def\datefrench{\datefrenchb}
\def\datefrancais{\datefrenchb}
%    \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{frenchb}}
%    \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 |\extrasfrenchb| needs to do is to make sure that
%    |\frenchspacing| is in effect.  If this is not the case the
%    execution of |\noextrasfrenchb| 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}{\frenchb@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
%    thinspace, or as |\@empty|.
%
%    \begin{macrocode}
\declare@shorthand{frenchb}{;}{%
    \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}{\frenchb@sh@!@}
% \begin{macro}{\frenchb@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{frenchb}{!}{%
    \ifhmode
      \ifdim\lastskip>\z@
        \unskip\penalty\@M\thinspace
      \else
        \FDP@thinspace
      \fi
    \fi
    \string!}
%    \end{macrocode}
%
%    \begin{macrocode}
\declare@shorthand{frenchb}{?}{%
    \ifhmode
      \ifdim\lastskip>\z@
        \unskip\penalty\@M\thinspace
      \else
        \FDP@thinspace
      \fi
    \fi
    \string?}
%    \end{macrocode}
% \end{macro}
% \end{macro}
%
% \begin{macro}{\frenchb@sh@:@}
%
%    The `:' requires a normal space before it, instead of
%    a |\thinspace|.
%
%    \begin{macrocode}
\declare@shorthand{frenchb}{:}{%
    \ifhmode
      \ifdim\lastskip>\z@
        \unskip\penalty\@M\
      \else
        \FDP@space
      \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'.}
%  \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}
\def\AutoSpaceBeforeFDP{%
      \def\FDP@thinspace{\penalty\@M\thinspace}%
      \def\FDP@space{\penalty\@M\ }}
\def\NoAutoSpaceBeforeFDP{\let\FDP@thinspace\@empty
                          \let\FDP@space\@empty}
\AutoSpaceBeforeFDP
%    \end{macrocode}
%  \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}
%
%    Several shapes of French quotation marks are provided for use
%    with CMR or EC/DC fonts, or PostScript fonts.  CMR fonts have no
%    quotation marks built-in, so we have to emulate them using math
%    symbols, either \LaTeX{}'s `lasy' font if available, or
%    \TeX{}~symbols |\ll| and |\gg| otherwise.  EC/DC fonts and
%    PostScript fonts have built-in quotation marks, so we will of
%    course use them.\\
%    The following definitions will take care for correct spacing of
%    French quotation marks (a white space precedes and follows
%    quotation marks but no line break is allowed neither \emph{after}
%    the opening one, nor \emph{before} the closing one).
%
%  \begin{macro}{\oPlainGuill}
%  \begin{macro}{\fPlainGuill}
%    For \emph{Plain}\TeX, we define |\oPlainGuill| and |\fPlainGuill|
%    using math symbols |\ll| and |\gg|. In order to have the word
%    following opening guillemets hyphenated properly we have to end
%    the definitions with the \TeX{} equivalent for |\allowhyphens|
%    which is |\penalty\@M\hskip\z@skip|.
%    \begin{macrocode}
\def\oPlainGuill{\leavevmode\raise0.25ex%
                 \hbox{$\scriptscriptstyle\ll$\kern 0.15em}%
                 \penalty\@M\hskip\z@skip}
\def\fPlainGuill{\ifdim\lastskip>\z@\unskip\penalty\@M\fi
                 \leavevmode\raise0.25ex%
                 \hbox{\kern 0.15em$\scriptscriptstyle\gg$}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\oLasyGuill}
%  \begin{macro}{\fLasyGuill}
% \changes{frenchb-1.1}{1996/03/01}{Guillemets changed in \LaTeX-2.09
%    because of protection problems in moving arguments, now use the
%    same guillemets as in plain\TeX.}
%    In \LaTeXe{} better looking quotation marks are available via the
%    `lasy' font (`lasy' stands for \LaTeX{} Symbol).
%    \begin{macrocode}
\ifx\fmtname\LaTeXeFmtName
  \def\oLasyGuill{\leavevmode
                  \hbox{\fontencoding{U}\fontfamily{lasy}\selectfont
                        (\kern-0.20em(\kern 0.20em}\allowhyphens}
  \def\fLasyGuill{\ifdim\lastskip>\z@\unskip\penalty\@M\fi\leavevmode
                  \hbox{\kern0.20em%
                        \fontencoding{U}\fontfamily{lasy}\selectfont
                        )\kern-0.20em)}}
\fi
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\oECGuill}
%  \begin{macro}{\fECGuill}
%    Now let's define French quotation marks for T1 encoding.
% \changes{frenchb-1.1}{1996/01/20}{\cs{char 19} and \cs{char 20}
%    changed to \cs{guillemotleft} and \cs{guillemotright} as
%    suggested by V.~Jalby.}
%    \begin{macrocode}
\def\oECGuill{\leavevmode\hbox{\guillemotleft\kern 0.15em}%
              \allowhyphens}
\def\fECGuill{\ifdim\lastskip>\z@\unskip\penalty\@M\fi
              \leavevmode\hbox{\kern 0.15em\guillemotright}}
%    \end{macrocode}
%  \end{macro}
%  \end{macro}
%
%  \begin{macro}{\og}
%  \begin{macro}{\fg}
%  \begin{macro}{\bbl@frenchguillemets}
%  \begin{macro}{\bbl@nonfrenchguillemets}
%    Now let's define which kind of French quotation marks will be
%    used.  The top macros for quotation marks will be called |\og|
%    (``\underline{o}uvrez \underline{g}uillemets'') and |\fg|
%    (``\underline{f}ermez \underline{g}uillemets'').\\
%    Make the top level definitions for French quotation marks
%    available through the |\extrasfrenchb| |\noextrasfrenchb|
%    mechanism.\\
%    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|.\\
% \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.
%    \begin{macrocode}
\ifx\fmtname\LaTeXeFmtName
   \newcommand{\og}{\@empty}
   \newcommand{\fg}{\@empty}
   \DeclareTextCommand{\begin@guill}{T1}{\oECGuill}
   \DeclareTextCommand{\end@guill}{T1}{\fECGuill}
   \DeclareTextCommand{\begin@guill}{OT1}{\oLasyGuill}
   \DeclareTextCommand{\end@guill}{OT1}{\fLasyGuill}
   \DeclareTextSymbolDefault{\begin@guill}{OT1}
   \DeclareTextSymbolDefault{\end@guill}{OT1}
\else
   \let\begin@guill\oPlainGuill
   \let\end@guill\fPlainGuill
\fi
\def\bbl@frenchguillemets{\ifx\xspace\@undefined\let\xspace\relax\fi
                          \def\og{\begin@guill}%
                          \def\fg{\end@guill\xspace}}
\def\bbl@nonfrenchguillemets{\def\og{``}%
                             \def\fg{\ifdim\lastskip>\z@\unskip\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}
%
%  \subsection{French lists}
%
%  \begin{macro}{\bbl@frenchitems}
%  \begin{macro}{\bbl@nonfrenchitems}
%  \begin{macro}{\bbl@frenchlistspacing}
%  \begin{macro}{\bbl@nonfrenchlistspacing}
%    French lists are different from USenglish ones: the $\bullet$ is
%    never used (long dash `--' is prefered for all levels), and
%    vertical spacing between items, before and after the list, should
%    be shorter in French texts than the defaults provided by \LaTeX.
%    Note that the easy way, just changing values of vertical spacing
%    parameters when entering French and restoring them to their
%    defaults on exit would not work, so we have to redefine
%    |\@trivlist|.\\
%    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.\\
%    I would appreciate feedback from experts in French typography,
%    about the (somewhat experimental) values set here for
%    |\partopsep|, |\topsep|, |\itemsep| and |\parsep|.\\
%    Of course, this code is only for \LaTeX.
% \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.}
%    \begin{macrocode}
\ifx\fmtname\PlainFmtName
\else
  \let\@ltiORI\labelitemi
  \let\@ltiiORI\labelitemii
  \let\@ltiiiORI\labelitemiii
  \let\@ltivORI\labelitemiv
  \def\bbl@frenchitems{%
    \def\labelitemi{--}%
    \def\labelitemii{--}%
    \def\labelitemiii{--}%
    \def\labelitemiv{--}}
  \def\bbl@nonfrenchitems{%
    \let\labelitemi\@ltiORI
    \let\labelitemii\@ltiiORI
    \let\labelitemiii\@ltiiiORI
    \let\labelitemiv\@ltivORI}
  \expandafter\addto\csname extras\CurrentOption\endcsname{%
    \bbl@frenchitems}
  \expandafter\addto\csname noextras\CurrentOption\endcsname{%
    \bbl@nonfrenchitems}
  \let\@trivlistORI\@trivlist
  \def\bbl@frenchlistspacing{%
    \def\@trivlist{\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}%
                   \addtolength{\topsep}{-\parskip}%
                   \addtolength{\partopsep}{\parskip}%
                   \@trivlistORI}}
  \def\bbl@nonfrenchlistspacing{\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}
%  \end{macro}
%  \end{macro}
%
%  \subsection{French indentation of sections}
%
%  \begin{macro}{\bbl@frenchindent}
%  \begin{macro}{\bbl@nonfrenchindent}
%    In French the first paragraph of each section should be indented,
%    this is another difference with USenglish.
%    Add this code only in \LaTeX.
% \changes{frenchb-1.2}{1996/12/27}{Corrected typo
%    \cs{bbl@nonfrenchident}.}
%
%    \begin{macrocode}
\ifx\fmtname\PlainFmtName
\else
  \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 numbers}
%  \label{numbers}
%
% \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.
%    Remember braces are mandatory around the comma in math-mode, the
%    reason is mentioned in the \TeX{}book p.~134: 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 extension `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.
%    \begin{macrocode}
\mathchardef\m@comma="013B
\def\@comma@{\ifmmode\m@comma\else,\fi}
\def\f@thousandsep{\ifmmode\mskip5.5mu\else\penalty\@M\kern.3em\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}
%
%  \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|.
%
%    \begin{macrocode}
\if@Two@E
  \newcommand{\nombre}[2][\decimalsep]{%
         \def\@decimalsep{#1}\@nombre#2\@empty,\@empty,\@nil}
\else
  \newcommand{\nombre}[1]{%
         \def\@decimalsep{\decimalsep}\@nombre#1\@empty,\@empty,\@nil}
\fi
\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{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}.}
%    |\ieme| is provided for compatibility with |francais.sty|,
%    the other 5 for compatibility with |french.sty|:
%    \begin{macrocode}
\def\ieme{\up{\lowercase{e}}}
\def\iemes{\up{\lowercase{es}}}
\def\ier{\up{\lowercase{er}}}
\def\iers{\up{\lowercase{ers}}}
\def\iere{\up{\lowercase{re}}}
\def\ieres{\up{\lowercase{res}}}
%    \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}
%
%    Typing |\primo| should result in `$1^{\rm o}$\kern+.3em',
%    \begin{macrocode}
\def\primo{\FrenchEnumerate1}
\def\secundo{\FrenchEnumerate2}
\def\tertio{\FrenchEnumerate3}
\def\quatro{\FrenchEnumerate4}
%    \end{macrocode}
%    while typing |\fprimo)| gives `1$^{\rm o}$)\kern+.3em.
%    \begin{macrocode}
\def\fprimo){\FrenchPopularEnumerate1}
\def\fsecundo){\FrenchPopularEnumerate2}
\def\ftertio){\FrenchPopularEnumerate3}
\def\fquatro){\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}.}
%    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|.
%    |\degre| needs a special treatment: it is |\char6|
%    in T1-encoding and |\char23| in OT1-encoding.
% \changes{frenchb-1.1}{1996/03/03}{Do not use commands related to
%   encodings outside \LaTeXe.}
%    \begin{macrocode}
\ifx\fmtname\LaTeXeFmtName
  \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{\degre}{T1}{6}
  \DeclareTextSymbol{\degre}{OT1}{23}
  \DeclareTextSymbol{\boi}{T1}{92}
  \DeclareTextCommand{\boi}{OT1}{{$\backslash$}}
  \DeclareTextSymbol{\at}{T1}{64}
  \DeclareTextSymbol{\at}{OT1}{64}
  \DeclareTextSymbol{\circonflexe}{T1}{94}
  \DeclareTextSymbol{\circonflexe}{OT1}{94}
  \DeclareTextSymbol{\tild}{T1}{126}
  \DeclareTextSymbol{\tild}{OT1}{126}
\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}
%    Macro for typesetting the abbreviation for `degrees' (as in
%    `degrees Celsius'). As the bounding box of the character `degree'
%    has \emph{very} different widths in CMR/DC 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|).
% \changes{frenchb-1.1}{1996/01/25}{Fixed width bounding box for
%   correct spacing with both CMR/DC and PostScript fonts}
% \changes{frenchb-1.1}{1996/05/31}{Added \cs{leavevmode} in the
%   \cs{degres}'s definition}
%    \begin{macrocode}
\DeclareRobustCommand*{\degres}{%
                       \leavevmode\hbox to 0.3em{\hss\degre\hss}}
%    \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}
\ifx\fmtname\LaTeXeFmtName
  \AtBeginDocument{%
    \ifx\csubinverse\@undefined
      \DeclareTextCompositeCommand{\^}{OT1}{i}{\^\i}%
      \DeclareTextCompositeCommand{\"}{OT1}{i}{\"\i}%
    \fi}
\fi
%    \end{macrocode}
%
%    Finally the macrospace used by some control sequences we do not
%    need any longer, is freed.
%    \begin{macrocode}
\let\T@one\relax
\let\@FI@\relax
\let\PlainFmtName\relax
\let\LaTeXeFmtName\relax
%    \end{macrocode}
%
%    The macro |\ldf@finish| takes care of looking for a
%    configuration file, setting the main language to be switched on
%    at |\begin{document}| and resetting the category code of
%    \texttt{@} to its original value.
% \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}.}
%    The config file searched for will always be `frenchb.cfg'.
%    Remember that |\CurrentOption| has been set to `frenchb', and
%    that `francais' and `french' are aliases for `frenchb'.
%    \begin{macrocode}
\ldf@finish\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
