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