% \iffalse meta-comment % % Copyright 1989-2001 Johannes L. Braams and any individual authors % listed elsewhere in this file. All rights reserved. % % This file is part of the Babel system release 3.7. % -------------------------------------------------- % % It may be distributed under the terms of the LaTeX Project Public % License, as described in lppl.txt in the base LaTeX distribution. % Either version 1.2 or, at your option, any later version. % \fi % \CheckSum{1826} % % \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} % %\ProvidesLanguage{french} %\ProvidesFile{frenchb.dtx} %<*!cfg> [2001/09/09 v1.5g French support from the babel system] % %<*cfg> %% frenchb.cfg: configuration file for frenchb.ldf %% Daniel Flipo % %% File `frenchb.dtx' %% Babel package for LaTeX version 2e %% Copyright (C) 1989 - 2001 %% by Johannes Braams, TeXniek % %<*!cfg> %% Frenchb language Definition File %% Copyright (C) 1989 - 2001 %% 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]^^A\] Daniel \textsc{Flipo}\\ \texttt{Daniel.Flipo@univ-lille1.fr} \end{center} \DocInput{frenchb.dtx} \end{document} % %\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 no vertical spacing and no % glue is added, 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). % \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{mltex} % Uncomment this line and|\\ % | % comment out the preceeding one|\\ % | % to use standard CM 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); % \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} % % \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; Cyrillic guillemets are FAR BETTER LOOKING, %% you should normally leave this line commented out. %% %%\LasyGuillemets %% %% If you dislike Cyrillic guillemets in OT1-encoding and prefer, %% those from the Palatino font or Polish guillemets, you can comment %% out one of the following lines. %% 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{OT4}{cmr}{174}{175} %% %% Vertical spacing in itemize lists has been changed in version 1.3. %% Uncomment the following line if you want to have the same settings %% as in version 1.2 (to process older documents for instance). %% %%\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 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} % % \end{macrocode} % % \section{\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} % \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. % \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}% } \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.} % Several shapes of French quotation marks are provided for use % with CM or EC fonts, or PostScript fonts. CM fonts have no % quotation marks built-in, so we have to emulate them: % \begin{itemize} % \item if a file `ot2wncyr.fd' is found, we expect AMS Cyrillic % fonts `wncy*' to be present on the system, so we use them; % \item otherwise we use math symbols, either \LaTeX's `lasy' font % if available, or \TeX{}~symbols |\ll| and |\gg| otherwise; % \item as incomplete \LaTeX{} installations might include a file % `ot2wncyr.fd', but no `wncy*.mf' or `wncy*.tfm' files, a % command |\LasyGuillemets| is provided to force usage % of \LaTeX's `lasy' symbols to emulate French quotation marks. % \end{itemize} % EC fonts and PostScript fonts have built-in quotation marks. % % 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 AMS Cyrillic `wncy*' % 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. % 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} % \begin{macro}{\FrenchGuillemetsFrom} % \begin{macro}{\CyrillicGuillemets} % \begin{macro}{\LasyGuillemets} % \begin{macro}{\bbl@frenchguillemets} % \begin{macro}{\bbl@nonfrenchguillemets} % \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} \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}}} \def\CyrillicGuillemets{\FrenchGuillemetsFrom{OT2}{wncyr}{60}{62}} \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{ot2wncyr.fd}{\CyrillicGuillemets}{\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} % % \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}.} % \begin{macrocode} % \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.} \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.} % \begin{macrocode} % \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.} \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 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.} % \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} \newcommand{\DecimalMathComma}{\iflanguage{french}% {\mathcode`\,="013B}{}% \addto\extrasfrench{\mathcode`\,="013B}} \newcommand{\StandardMathComma}{\mathcode`\,="613B% \addto\extrasfrench{\mathcode`\,="613B}} \expandafter\addto\csname noextras\CurrentOption\endcsname{% \mathcode`\,="613B} % \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} % \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} \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} % \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\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}.} % |\ieme| is provided for compatibility with |francais.sty|, % the other 5 for compatibility with |french.sty|: % \changes{frenchb-1.2b}{1997/04/24}{Use \cs{xspace} to control spacing % after \cs{ieme} ... \cs{ieres}.} % \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} % % Typing |\primo| should result in `$1^{\rm o}$\kern+.3em', % \changes{frenchb-1.3c}{1997/10/08}{Typos corrected: quatro, fquatro} % \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} % 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 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|). % \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} % \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} \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} % % Finally the macro-space used by some control sequences we do not % need any longer, is freed. % \begin{macrocode} \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 % \end{macrocode} % % The macro |\ldf@quit| takes care for setting the main language % to be switched on at |\begin{document}| and resetting the % category code of \texttt{@} to its original value. % The config file searched for has to be `frenchb.cfg', and % |\CurrentOption| has been set to `french', so % |\ldf@finish\CurrentOption| cannot be used: we first load % `frenchb.cfg', then call |\ldf@quit\CurrentOption|. % \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}.} % \begin{macrocode} \loadlocalcfg{frenchb} \ldf@quit\CurrentOption % % \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