summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/lettre
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2020-04-13 21:36:45 +0000
committerKarl Berry <karl@freefriends.org>2020-04-13 21:36:45 +0000
commit43a2b534750cd2a1b3f42e66d337ba315fa3a40d (patch)
treee81d5859afc211c82f707384efa091935e2b1932 /Master/texmf-dist/tex/latex/lettre
parent14385a83aba04a74751f5bb9f27eb9b704e75f31 (diff)
lettre (13apr20)
git-svn-id: svn://tug.org/texlive/trunk@54722 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/lettre')
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-USenglish.ldf52
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-amg.cfg2
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-english.ldf51
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-french.ldf62
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-german.ldf51
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-institut.tpl18
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-obs.cfg13
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-romand.ldf52
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre-telefax.tpl110
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre.cls1486
-rw-r--r--Master/texmf-dist/tex/latex/lettre/lettre.tpl124
11 files changed, 1691 insertions, 330 deletions
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-USenglish.ldf b/Master/texmf-dist/tex/latex/lettre/lettre-USenglish.ldf
index 12f41cb64f4..7522ecc1768 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-USenglish.ldf
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-USenglish.ldf
@@ -1,24 +1,29 @@
-% file name : `lettre-USenglish.ldf'.
-% package name: lettre
-% maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
-% author : Denis Mégevand - Observatoire de Genève
-% email : vincentb1@users.sourceforge.net
-% version : v3.000
-% date : 2017/08/03
-%
-% This file is part of the "lettre" package.
-% This work 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 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Vincent Belaïche.
-%
-% This work consists of all files listed in file README
+%^^A file name : `lettre-USenglish.ldf'.
+%^^A package name: lettre
+%^^A maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
+%^^A author : Denis Mégevand - Observatoire de Genève
+%^^A email : vincentb1@users.sourceforge.net
+%^^A version : v3.002
+%^^A date :
+%^^A
+%^^A This file is part of the "lettre" package.
+%^^A This work may be distributed and/or modified under the conditions of the
+%^^A LaTeX Project Public License, either version 1.3 of this license or (at your
+%^^A option) any later version. The latest version of this license is in
+%^^A http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+%^^A distributions of LaTeX version 2005/12/01 or later.
+%^^A
+%^^A This work has the LPPL maintenance status `maintained'.
+%^^A
+%^^A The Current Maintainer of this work is Vincent Belaïche.
+%^^A
+%^^A This work consists of all files listed in file README
+%^^A
+%\subsubsection{Définitions pour la langue \texttt{americain}}
%
+%\DescribeMacro{\lettre@select@USenglish@labels}
+%\DescribeMacro{\lettre@mlp@USenglish@use}
+% \begin{macrocode}
\LettreDeclareLanguage{USenglish}[english]{%
\sigflag=1\relax
\def\cejour{\ifcase\month\or
@@ -47,4 +52,9 @@
}%
\LettreProvidesLanguage{USenglish}[2015/11/18]%
\endinput
-% End of file `lettre-USenglish.ldf'.
+% \end{macrocode}
+%^^A End of file `lettre-USenglish.ldf'.
+\iffalse Local Variables: \fi
+\iffalse mode: DocTeX\fi
+\iffalse ispell-dictionary: "english"\fi
+\iffalse End: \fi \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-amg.cfg b/Master/texmf-dist/tex/latex/lettre/lettre-amg.cfg
index 706bc50a455..1c0479cd2d4 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-amg.cfg
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-amg.cfg
@@ -10,7 +10,7 @@
\newcommand{\hvtwfv}{\hvfam\fontsize{25}{30pt}\selectfont}
\address{\centering
\vskip -10mm
- \includegraphics[bb=1 0 75 160,totalheight=4cm]{amgmono.eps}%
+ \includegraphics[bb=1 0 75 160,totalheight=4cm]{amgmono.mps}%
\vskip -1mm
\mbox{\hss\hvten École de ski\hss}}%
\location{\hvten Denis Mégevand\\Président}%
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-english.ldf b/Master/texmf-dist/tex/latex/lettre/lettre-english.ldf
index 743a9f5aa83..d67159df8bf 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-english.ldf
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-english.ldf
@@ -1,24 +1,28 @@
-% file name : `lettre-english.ldf'.
-% package name: lettre
-% maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
-% author : Denis Mégevand - Observatoire de Genève
-% email : vincentb1@users.sourceforge.net
-% version : v3.000
-% date : 2017/08/03
-%
-% This file is part of the "lettre" package.
-% This work 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 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Vincent Belaïche.
-%
-% This work consists of all files listed in file README
+%^^A file name : `lettre-english.ldf'.
+%^^A package name: lettre
+%^^A maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
+%^^A author : Denis Mégevand - Observatoire de Genève
+%^^A email : vincentb1@users.sourceforge.net
+%^^A version : v3.002
+%^^A date :
+%^^A
+%^^A This file is part of the "lettre" package.
+%^^A This work may be distributed and/or modified under the conditions of the
+%^^A LaTeX Project Public License, either version 1.3 of this license or (at your
+%^^A option) any later version. The latest version of this license is in
+%^^A http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+%^^A distributions of LaTeX version 2005/12/01 or later.
+%^^A
+%^^A This work has the LPPL maintenance status `maintained'.
+%^^A
+%^^A The Current Maintainer of this work is Vincent Belaïche.
+%^^A
+%^^A This work consists of all files listed in file README
+%^^A
+%\subsubsection{Définitions pour la langue \texttt{anglais}}
%
+%\DescribeMacro{\lettre@select@english@labels}
+% \begin{macrocode}
\LettreDeclareLanguage{english}{%
\sigflag=1\space
\def\cejour{\ifcase\month\or
@@ -47,4 +51,9 @@
}%
\LettreProvidesLanguage{english}[2015/11/18]%
\endinput
-% End of file `lettre-english.ldf'.
+% \end{macrocode}
+%^^A End of file `lettre-english.ldf'.
+\iffalse Local Variables: \fi
+\iffalse mode: DocTeX\fi
+\iffalse ispell-dictionary: "english"\fi
+\iffalse End: \fi \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-french.ldf b/Master/texmf-dist/tex/latex/lettre/lettre-french.ldf
index d0129e11d1a..e479df1c761 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-french.ldf
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-french.ldf
@@ -1,26 +1,34 @@
-% file name : `lettre-french.ldf'.
-% package name: lettre
-% maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
-% author : Denis Mégevand - Observatoire de Genève
-% email : vincentb1@users.sourceforge.net
-% version : v3.000
-% date : 2017/08/03
-%
-% This file is part of the "lettre" package.
-% This work 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 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Vincent Belaïche.
-%
-% This work consists of all files listed in file README
+%^^A file name : `lettre-french.ldf'.
+%^^A package name: lettre
+%^^A maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
+%^^A author : Denis Mégevand - Observatoire de Genève
+%^^A email : vincentb1@users.sourceforge.net
+%^^A version : v3.002
+%^^A date :
+%^^A
+%^^A This file is part of the "lettre" package.
+%^^A This work may be distributed and/or modified under the conditions of the
+%^^A LaTeX Project Public License, either version 1.3 of this license or (at your
+%^^A option) any later version. The latest version of this license is in
+%^^A http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+%^^A distributions of LaTeX version 2005/12/01 or later.
+%^^A
+%^^A This work has the LPPL maintenance status `maintained'.
+%^^A
+%^^A The Current Maintainer of this work is Vincent Belaïche.
+%^^A
+%^^A This work consists of all files listed in file README
+%^^A
+%\subsubsection{Définitions pour la langue \texttt{francais}}
%
+%\DescribeMacro{\lettre@select@french@labels}
+% \begin{macrocode}
\LettreDeclareLanguage{french}{%
\sigflag=0\space
+% \end{macrocode}
+% \changes{2.352}{2014-08-02}{Correction \href{https://gna.org/bugs/?22259}{bug\#22259} en rendant \cs{cejour}
+% entièrement développable si \texttt{babel} n'est pas chargé, de sorte à éviter tout problème de fragilité}%
+% \begin{macrocode}
\def\cejour{le
\ifnum\day=1\space 1\ifx\ier\undefined er\else\expandafter\ier\fi
\else\number\day\fi
@@ -48,11 +56,14 @@
\def\vrefname{V.\raise.4ex\hbox{\tiny /}r\'ef.~}
\def\nrefname{N.\raise.4ex\hbox{\tiny /}r\'ef.~}
}%
+% \end{macrocode}
+% \DescribeMacro{\lettre@set@french@envs}La macro \cs{lettre@set@french@envs} redéfinit les listes à la
+% françaises. Le seul environnement redéfini est \texttt{itemize}.
+% \begin{macrocode}
\newcommand*{\lettre@set@french@envs}{%
\renewenvironment{itemize}%
{\begin{list}{\textendash}%
{\settowidth{\labelwidth}{\textendash}%
- \setlength{\leftmargin}{\listmargin}%
\addtolength{\leftmargin}{\labelwidth}%
\addtolength{\leftmargin}{\labelsep}%
\ifnum\@listdepth=0
@@ -70,6 +81,13 @@
}%
{\end{list}}%
}
+% \end{macrocode}
+% \begin{macrocode}
\LettreProvidesLanguage{french}[2015/11/18]%
\endinput
-% End of file `lettre-french.ldf'.
+% \end{macrocode}
+%^^A End of file `lettre-french.ldf'.
+\iffalse Local Variables: \fi
+\iffalse mode: DocTeX\fi
+\iffalse ispell-dictionary: "francais"\fi
+\iffalse End: \fi \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-german.ldf b/Master/texmf-dist/tex/latex/lettre/lettre-german.ldf
index 43a6d8ced61..85dc11d0a17 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-german.ldf
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-german.ldf
@@ -1,24 +1,28 @@
-% file name : `lettre-german.ldf'.
-% package name: lettre
-% maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
-% author : Denis Mégevand - Observatoire de Genève
-% email : vincentb1@users.sourceforge.net
-% version : v3.000
-% date : 2017/08/03
-%
-% This file is part of the "lettre" package.
-% This work 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 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Vincent Belaïche.
-%
-% This work consists of all files listed in file README
+%^^A file name : `lettre-german.ldf'.
+%^^A package name: lettre
+%^^A maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
+%^^A author : Denis Mégevand - Observatoire de Genève
+%^^A email : vincentb1@users.sourceforge.net
+%^^A version : v3.002
+%^^A date :
+%^^A
+%^^A This file is part of the "lettre" package.
+%^^A This work may be distributed and/or modified under the conditions of the
+%^^A LaTeX Project Public License, either version 1.3 of this license or (at your
+%^^A option) any later version. The latest version of this license is in
+%^^A http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+%^^A distributions of LaTeX version 2005/12/01 or later.
+%^^A
+%^^A This work has the LPPL maintenance status `maintained'.
+%^^A
+%^^A The Current Maintainer of this work is Vincent Belaïche.
+%^^A
+%^^A This work consists of all files listed in file README
+%^^A
+%\subsubsection{Définitions pour la langue \texttt{allemand}}
%
+%\DescribeMacro{\lettre@select@german@labels}
+% \begin{macrocode}
\LettreDeclareLanguage{german}{%
\sigflag=1\relax
\def\cejour{den \number\day .\space\ifcase\month\or
@@ -48,4 +52,9 @@
}%
\LettreProvidesLanguage{german}[2015/11/18]%
\endinput
-% End of file `lettre-german.ldf'.
+% \end{macrocode}
+%^^A End of file `lettre-german.ldf'.
+\iffalse Local Variables: \fi
+\iffalse mode: DocTeX\fi
+\iffalse ispell-dictionary: "francais"\fi
+\iffalse End: \fi \ No newline at end of file
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-institut.tpl b/Master/texmf-dist/tex/latex/lettre/lettre-institut.tpl
new file mode 100644
index 00000000000..0d2c7b1dc49
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-institut.tpl
@@ -0,0 +1,18 @@
+% This file is part of the "lettre" package.
+% This package is distributed under the terms of the LaTeX Project
+% Public License (LPPL) described in the file lppl.txt.
+%
+% Denis Mégevand - Observatoire de Genève.
+%
+% Ce fichier fait partie de la distribution du paquetage "lettre".
+% Ce paquetage est distribué sous les termes de la licence publique
+% du projet LaTeX (LPPL) décrite dans le fichier lppl.txt.
+%
+% ********************************
+% * DEFINITIONS LOCALES *
+% ********************************
+%
+\address{Nom\\Adresse}
+\telephone{Numero de telephone} %|\notelephone
+\fax{Numero de telefax} %|\nofax
+\lieu{Lieu} %|\nolieu
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-obs.cfg b/Master/texmf-dist/tex/latex/lettre/lettre-obs.cfg
index 4cb9a33e08b..aafbbd71093 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-obs.cfg
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-obs.cfg
@@ -29,12 +29,11 @@
\def\fromaddress{\centering
\vskip -5mm%
\if@letter
- \treit RÉPUBLIQUE\\[-1mm]%
- \treit ET CANTON DE GENÈVE\\[-1mm]%
+ \treit R\'EPUBLIQUE\\[-1mm]%
+ \treit ET CANTON DE GEN\`EVE\\[-1mm]%
\fi
- \includegraphics[viewport=-5.5 -7 55 65,clip=true,height=2.5cm]{ecusson55.pdf}\\
-% {\unitlength1mm\begin{picture}(0,0)\put(0,20){\makebox(0,0){$\diamond$}}\end{picture}}\\
- \mbox{\hss\trfvtn OBSERVATOIRE DE GENÈVE\hss}\\[2mm]%
+ \raisebox{0.5mm}[22.55mm][2.45mm]{\includegraphics[height=1.565cm]{ecusson55.mps}}\\
+ \mbox{\hss\trfvtn OBSERVATOIRE DE GEN\`EVE\hss}\\[2mm]%
\if@letter
%\trten Ch. des Maillettes 51\\%
\fi
@@ -55,7 +54,7 @@
\newcommand{\CMD}{\dhfam\fontsize{14}{17pt}\selectfont}
\long\def\addressobs{%
\def\fromaddress{\centering
- \CMD OBSERVATOIRE DE GENÈVE\rule[6pt]{0pt}%
+ \CMD OBSERVATOIRE DE GEN\`EVE\rule[6pt]{0pt}%
{1.0\baselineskip}\\[3mm]%
\cmd
\if@letter
@@ -76,7 +75,7 @@
\def\telephoneobs{\def\telephonenum{+41 (22) 755 26 11}}%
\def\faxobs{\def\faxnum{+41 (22) 755 39 83}}%
\def\ccpobs{\ccp{12-2130-4}}%
-\def\ccittobs{\l@@warning{L'adresse X400 de l'Observatoire (\string\ccittobs) ne doit plus être utilisée}}%
+\def\ccittobs{\l@@warning{L'adresse X400 de l'Observatoire (\string\ccittobs) ne doit plus \^etre utilis\'ee}}%
\def\internetobs{\internet{obs.unige.ch}}%
\def\ftpobs{{\tt obsftp.unige.ch \rm(129.194.65.3)}}
\def\wwwobs{{\tt http://obswww.unige.ch/ \rm(129.194.65.3)}}
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-romand.ldf b/Master/texmf-dist/tex/latex/lettre/lettre-romand.ldf
index 68c821db870..4d09d5fc3e9 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre-romand.ldf
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-romand.ldf
@@ -1,24 +1,29 @@
-% file name : `lettre-romand.ldf'.
-% package name: lettre
-% maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
-% author : Denis Mégevand - Observatoire de Genève
-% email : vincentb1@users.sourceforge.net
-% version : v3.000
-% date : 2017/08/03
-%
-% This file is part of the "lettre" package.
-% This work 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 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Vincent Belaïche.
-%
-% This work consists of all files listed in file README
+%^^A file name : `lettre-romand.ldf'.
+%^^A package name: lettre
+%^^A maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
+%^^A author : Denis Mégevand - Observatoire de Genève
+%^^A email : vincentb1@users.sourceforge.net
+%^^A version : v3.002
+%^^A date :
+%^^A
+%^^A This file is part of the "lettre" package.
+%^^A This work may be distributed and/or modified under the conditions of the
+%^^A LaTeX Project Public License, either version 1.3 of this license or (at your
+%^^A option) any later version. The latest version of this license is in
+%^^A http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+%^^A distributions of LaTeX version 2005/12/01 or later.
+%^^A
+%^^A This work has the LPPL maintenance status `maintained'.
+%^^A
+%^^A The Current Maintainer of this work is Vincent Belaïche.
+%^^A
+%^^A This work consists of all files listed in file README
+%^^A
+%\subsubsection{Définitions pour la langue \texttt{romand}}
%
+%\DescribeMacro{\lettre@select@romand@labels}
+%\DescribeMacro{\lettre@mlp@romand@use}
+% \begin{macrocode}
\LettreDeclareLanguage{romand}[french]{%
\sigflag=0 %
\def\cejour{le
@@ -50,4 +55,9 @@
}%
\LettreProvidesLanguage{romand}[2015/11/18]%
\endinput
-% End of file `lettre-romand.ldf'.
+% \end{macrocode}
+%^^A End of file `lettre-romand.ldf'.
+\iffalse Local Variables: \fi
+\iffalse mode: DocTeX\fi
+\iffalse ispell-dictionary: "francais"\fi
+\iffalse End: \fi
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre-telefax.tpl b/Master/texmf-dist/tex/latex/lettre/lettre-telefax.tpl
new file mode 100644
index 00000000000..62f20238418
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/lettre/lettre-telefax.tpl
@@ -0,0 +1,110 @@
+% This file is part of the "lettre" package.
+% This package is distributed under the terms of the LaTeX Project
+% Public License (LPPL) described in the file lppl.txt.
+%
+% Denis Mégevand - Observatoire de Genève.
+%
+% Ce fichier fait partie de la distribution du paquetage "lettre".
+% Ce paquetage est distribué sous les termes de la licence publique
+% du projet LaTeX (LPPL) décrite dans le fichier lppl.txt.
+
+\documentclass[10pt|11pt|12pt,twoside,leqno,fleqn,%
+ francais|romand||allemand|anglais|americain,%
+ origdate]{lettre}
+%\usepackage{french}
+%\usepackage{babel}
+%
+\begin{document}
+%
+% Declaration du fichier de defauts
+% =================================
+%
+% Permet d'ecrire des telefax personalises
+% sans repreciser a chaque fois les parametres de l'expediteur
+%
+%\institut{fichier}
+%
+% Declaration du destinataire et environnement
+% ============================================
+%
+\begin{telefax}{numero}{Destinataire \\
+ Adresse \\
+ no, rue \\
+ NPA Lieu }
+%
+% Parametre obligatoire
+% =====================
+%
+\name{Nom de l'expediteur}
+%
+% Parametres facultatifs de l'entete % (defauts)
+% ===============================================
+%
+%\address{Adresse d'expedition} % ( OBSERVATOIRE DE )
+% % ( GENEVE )
+% % ( )
+% % ( CH-1290 Sauverny )
+%\psobs % ( Logo de l'Observatoire )
+%\detailledaddress % ( Suisse )
+%
+%\lieu{Se met devant la date} % (Sauverny, )
+%\nolieu
+%\date{date fixe} % (date courante)
+%\nodate
+%
+% Parametre de mise en page % (defauts)
+% ==============================================
+%
+%\marge{largeur} % (15mm)
+%
+% Parametres facultatifs % (defauts)
+% ==============================================
+%
+%\pagestyle{empty|headings} % ( plain par defaut )
+%\francais|\anglais| %\_______________(\francais)
+%\americain|\allemand %/
+%
+%\addpages{nombre} % ()
+%
+%\location{Expediteur} % (\name)
+%\signature{signature} % (\name)
+%\secondsignature{signature} % ()
+%\thirdsignature{signature} % ()
+%
+%\telephone{No de tel expediteur} % ( +41(22) 755 26 11 )
+%\fax{numero} % ( +41(22) 755 39 83 )
+%\email{adresse} % ( )
+%\telex{numero} % ( )
+%
+%\basedepage{texte} % ()
+%\username{nom d'utilisateur} % ()
+%\internet{adresse RFC 822} % ()
+%\ccitt{adresse X400} % ()
+%\bitnet{adresse bitnet} % ()
+%\telepac{numero telepac} % ()
+%\decnet{numero decnet} % ()
+%\internetobs % ([username@]scsun.unige.ch)
+%\ccittobs % ([S=username;]OU=scsun;O=unige;%
+% % PRMD=switch;ADMD=arcom;C=ch)
+%
+%\conc{Sujet du message} % ()
+%
+% Corps du fax
+% ============
+%
+\opening{Cher Ami,}
+%
+ Texte du message
+%
+\closing{Salutations}
+%
+% Paragraphes supplementaires
+% ===========================
+%
+%\ps{label}{texte du post-scriptum}
+%\encl{annexes separees par des \\}
+%\cc{destinataires de copies conformes separes par des \\}
+%
+\end{telefax}
+%
+\end{document}
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre.cls b/Master/texmf-dist/tex/latex/lettre/lettre.cls
index 5b1f29b6fb0..d25c212c0ea 100644
--- a/Master/texmf-dist/tex/latex/lettre/lettre.cls
+++ b/Master/texmf-dist/tex/latex/lettre/lettre.cls
@@ -1,31 +1,62 @@
-% file name : `lettre.cls'.
-% package name: lettre
-% maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
-% author : Denis Mégevand - Observatoire de Genève
-% email : vincentb1@users.sourceforge.net
-% version : v3.000
-% date : 2017/08/03
-%
-% This file is part of the "lettre" package.
-% This work 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 2005/12/01 or later.
-%
-% This work has the LPPL maintenance status `maintained'.
-%
-% The Current Maintainer of this work is Vincent Belaïche.
-%
-% This work consists of all files listed in file README
+%^^A file name : `lettre.cls'.
+%^^A package name: lettre
+%^^A maintenance : Vincent Belaïche (vincentb1@users.sourceforge.net)
+%^^A author : Denis Mégevand - Observatoire de Genève
+%^^A email : vincentb1@users.sourceforge.net
+%^^A version : v3.002
+%^^A date :
+%^^A
+%^^A This file is part of the "lettre" package.
+%^^A This work may be distributed and/or modified under the conditions of the
+%^^A LaTeX Project Public License, either version 1.3 of this license or (at your
+%^^A option) any later version. The latest version of this license is in
+%^^A http://www.latex-project.org/lppl.txt and version 1.3 or later is part of all
+%^^A distributions of LaTeX version 2005/12/01 or later.
+%^^A
+%^^A This work has the LPPL maintenance status `maintained'.
+%^^A
+%^^A The Current Maintainer of this work is Vincent Belaïche.
+%^^A
+%^^A This work consists of all files listed in file README
+%^^A
%
+%\subsection{Préambule}
+% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+%\changes{2.354}{2014-09-19}{Ajout \texttt{etoolbox} requis: c'est pour avoir \cs{ifcsundef}}%
+% \begin{macrocode}
\RequirePackage{etoolbox}
+% \end{macrocode}
+% \begin{macrocode}
\RequirePackage{graphicx}
-\ProvidesClass{lettre}[2017/08/03 v3.000]\typeout{Copyleft Denis Megevand - Observatoire de Geneve}%
+% \end{macrocode}
+% \begin{macrocode}
+\ProvidesClass{lettre}[ v3.002]%
+\typeout{Copyleft Denis Megevand - Observatoire de Geneve}%
+% \end{macrocode}
+%\subsection{Déclaration des options de paquetage}
+%\subsubsection{Options pour la mise en forme}
+% \begin{macrocode}
\DeclareOption{10pt}{\renewcommand\@ptsize{0}}
\DeclareOption{11pt}{\renewcommand\@ptsize{1}}
\DeclareOption{12pt}{\renewcommand\@ptsize{2}}
+% \end{macrocode}
+% \changes{2.351}{2014-07-26}{Ajout option \texttt{a4paper}}%
+% \changes{2.354}{2014-10-02}{Ajout options \texttt{letterpaper},
+% \texttt{legalpaper}, \texttt{executivepaper}, \texttt{b5paper} et
+% \texttt{a5paper}, pour cela on définit les longueurs \cs{lettre@x@mm}
+% et \cs{lettre@y@mm}}%
+% La longueur \cs{lettre@x@mm} et \cs{lettre@y@mm} permettent de
+% ramener les longueurs données pour du format A4 dans le format
+% courant. C'est à dire que la longueur \cs{lettre@x@mm} est telle
+% que~:
+% \[\cs{lettre@x@mm} =
+% \frac{\cs{paperwidth}}{\SI{210}{\milli\metre}}\si{\milli\metre}\]
+% De même la longueur \cs{lettre@y@mm} est telle que~:
+% \[\cs{lettre@y@mm} =
+% \frac{\cs{paperheight}}{\SI{297}{\milli\metre}}\si{\milli\metre}\]
+% \begin{macrocode}
\newlength\lettre@x@mm
\setlength\lettre@x@mm{1mm}%
\newlength\lettre@y@mm
@@ -37,6 +68,8 @@
\lettre@x@mm=1mm%
\lettre@y@mm=1mm%
}
+% \end{macrocode}
+% \begin{macrocode}
\DeclareOption{letterpaper}
{\setlength\paperheight {11.00in}%
\setlength\paperwidth {8.50in}%
@@ -81,9 +114,20 @@
\DeclareOption{final}{\setlength\overfullrule{0pt}}
\DeclareOption{leqno}{\input{leqno.clo}}
\DeclareOption{fleqn}{\input{fleqn.clo}}
-\DeclareOption{keepenvs=true}{\lettre@keep@envstrue}%
-\DeclareOption{keepenvs=false}{\lettre@keep@envsfalse}%
+% \end{macrocode}
+%\changes{3.000}{2015-12-28}{Ajout option \texttt{keep envs}}%
+%\changes{3.001}{2019-07-23}{Refonte implémentation option \texttt{keep envs}, pour prendre en charge détection auto.}%
+% \begin{macrocode}
+\DeclareOption{keepenvs=true}{\lettre@keep@envs1}%
+\DeclareOption{keepenvs=false}{\lettre@keep@envs2}%
\DeclareOption{keepenvs}{\ExecuteOptions{keepenvs=true}}%
+% \end{macrocode}
+%\subsubsection{Options pour la langue}
+% Tout d'abord on se fait un petit itérateur, histoire de gérer l'ensemble des langues de façon
+% programatique. Le principe c'est que si on appelle
+% \cs{lettre@iterate}\meta{liste}\texttt{,}\cs{@nil}\texttt{,}, alors \cs{lettre@iterate@body} est appelé sur
+% chaque élément de la liste \meta{liste} qui est une liste dont les items sont séparés par des virgules.
+% \begin{macrocode}
\def\lettre@iterate#1,{%
{%
\def\@tempa{#1}%
@@ -98,15 +142,35 @@
\expandafter
}\@tempa
}%
+% \end{macrocode}
+%\begin{macro}{\lettre@supported@language@list}
+% Liste des langues prises en charge par la classe \texttt{lettre}. C'est une liste dont les éléments sont
+% séparés par des virgules (sans espaces ni éléments vides). Chaque élément de la liste est un langage pour
+% lequel \texttt{lettre} a une option de langue et est capable de charger les définitions
+% correspondantes. La raison d'être de cette liste est de factoriser les itérations pour les cas suivants:
+% \begin{itemize}
+% \item charger les définitions lorsque le langage en question est utilisé par \texttt{babel} ou \texttt{mlp}~;
+% \item charger les définitions lorsque le langage est demandé par une option de classe.
+% \end{itemize}
+% \begin{macrocode}
\newcommand*\lettre@supported@language@list{%
francais,french,frenchb,romand,%
allemand,german,germanb,ngerman,ngermanb,%
americain,american,USenglish,%
anglais,english,british,UKenglish%
}%
+% \end{macrocode}
+%\end{macro}
+% Cependant, toutes les langues \meta{langue} dans \cs{lettre@supported@language@list} ne correspondent pas à
+% un fichier \texttt{lettre-}\meta{langue}\texttt{.ldf}, car certaines ne sont que des alias. Aussi on commence
+% par définir que par défaut une langue n'a pas d'alias (en d'autres termes elle est l'alias d'elle-même).
+% \begin{macrocode}
\newcommand*\lettre@iterate@body[1]{%
\expandafter\def\csname lettre@#1@alias@of\endcsname{#1}}%
\expandafter\lettre@iterate\lettre@supported@language@list,\@nil,%
+% \end{macrocode}
+% Ceci étant fait, on définit celles des langues qui sont des alias d'une autre langue~:
+% \begin{macrocode}
\def\@tempa#1#2{\expandafter\def\csname lettre@#1@alias@of\endcsname{#2}}%
\@tempa{frenchb}{french}
\@tempa{francais}{french}
@@ -118,10 +182,34 @@
\@tempa{british}{english}
\@tempa{american}{USenglish}
\@tempa{americain}{USenglish}
+% \end{macrocode}
+% \DescribeMacro{\lettre@languages} \cs{lettre@languages} contient la liste des langues pour lesquelles les
+% définitions ont été chargées. Le chargement ne se fait pas immédiatement, mais après le \cs{ProcessOption} de
+% sorte à rendre possible que dans le fichier de définitions il y ait un \cs{RequirePackage}. Cette
+% possibilité n'est pas utilisée actuellement.
+% \begin{macrocode}
\newcommand*\lettre@languages{}%
+% \end{macrocode}
+% \DescribeMacro{\lettre@mainlang}\cs{lettre@mainlang} est la langue demandée par l'utilisateur. C'est
+% nécessairement un élément de la liste \cs{lettre@supported@language@list}.
+% \begin{macrocode}
\newcommand*\lettre@mainlang{}%
+% \end{macrocode}
+% \DescribeMacro{\lettre@ldf@version} \cs{lettre@ldf@version}\marg{lang} est la version de chaque fichier
+% \texttt{lettre-}\meta{langue}\texttt{.ldf}
+% \begin{macrocode}
\newcommand*\lettre@ldf@filename[1]{lettre-#1.ldf}%
\newcommand*\lettre@ldf@version[1]{ver@\lettre@ldf@filename{#1}}%
+% \end{macrocode}
+% Toutes ces langues \meta{langue} n'ont pas leur propre fichier de définition
+% \texttt{lettre-\meta{langue}.ldf}, en effet certaines de ces langues ne sont juste que des alias.
+% \changes{3.000}{2015-12-20}{Listage des options de langue dans \cs{lettre@languages} dans l'ordre de
+% déclaration au sein de \cs{documentclass}}%
+%
+% Par contre pour chacune des ces \meta{langue} une option \meta{langue} est définie, c'est l'une des façons
+% dont l'utilisateur peut charger les définitions correspondant à cette langue. La dernière options passée
+% donne la langue par défaut au début du document.
+% \begin{macrocode}
\def\lettre@iterate@body#1{%
\DeclareOption{#1}{%
\edef\@tempa{\csname lettre@#1@alias@of\endcsname}%
@@ -144,20 +232,54 @@
}%
}%
\expandafter\lettre@iterate\lettre@supported@language@list,\@nil,%
+% \end{macrocode}
+% \changes{3.000}{2015-12-20}{Ajout option \texttt{pass lang}}%
+% \begin{macrocode}
\DeclareOption{passlang=true}{\lettre@pass@langtrue}%
\DeclareOption{passlang=false}{\lettre@pass@langfalse}%
\DeclareOption{passlang}{\ExecuteOptions{pass lang=true}}%
+% \end{macrocode}
+%\changes{2.354}{2014-10-04}{Ajout des options \texttt{noinfo}, \texttt{loghighlight}, et \texttt{strict}}%
+%\subsubsection{Options pour la gestion des relevés du journal de compliation}
+% Le journal de compilation est le fichier \meta{jobname}\texttt{.log} produit par la compilation. Il contient
+% des relevés de trois types : erreur, avertissement, et info.
+%
+% Suppression des relevés d'info dans le journal, on peut aussi faire ça avec la commande \cs{noinfo} mais dans
+% ce cas on aura quand même, s'il en est, les relevés d'info provoqués par le traitement des options.
+% \begin{macrocode}
\DeclareOption{noinfo}{\c@infos=0}
+% \end{macrocode}
+% Désactive ou active les traces de type \texttt{LETTRE INFO ===} ou \texttt{LETTRE AVERTISSEMENT ===} placé au
+% début des relevés. Elles ne sont pas utiles dans un environnement de développement qui colorise le journal.
+%\changes{2.354}{2015-11-30}{Remplacement option `nologhighlight' par `loghighlight=false'}%
+% \begin{macrocode}
\DeclareOption{loghighlight=false}{\lettre@loghighlightfalse}
\DeclareOption{loghighlight=true}{\lettre@loghighlighttrue}
\DeclareOption{loghighlight}{\ExecuteOptions{loghighlight=true}}
+% \end{macrocode}
+% Mue certains relevés d'avertissement en relevés d'erreur, rendant ainsi la classe moins permissive.
+%\changes{2.354}{2015-11-30}{Ajout options `strict=false' \& `strict=true'}%
+% \begin{macrocode}
\DeclareOption{strict}{\ExecuteOptions{strict=true}}
\DeclareOption{strict=true}{\lettre@stricttrue\l@@info{Mode `strict': traite certains avertissements comme des erreurs}}
\DeclareOption{strict=false}{\lettre@strictfalse\l@@info{Mode `strict' desactive}}
+% \end{macrocode}
+%\subsubsection{Options par défaut}
+% \begin{macrocode}
\if@compatibility\else
\DeclareOption*{\l@@warning{Option inconnue : `\CurrentOption', assurez-vous que
c'est une option globale passee aux paquetages utilises dans votre document}}
\fi
+% \end{macrocode}
+%\subsection{Messages et avertissements}
+% Envoyés à la console et dans le fichier journal \meta{jobname}\texttt{.log}.
+%
+% On peut supprimer allumer ou éteindre en tout temps les
+% relevés d'informations par les commandes \cs{infos} et \cs{noinfos}.
+% Les avertissements ne peuvent être supprimés. L'option \texttt{strict} fait que les avertissements causent
+% une erreur en appelant \cs{ClassError} au lieu de \cs{ClassWarning}.
+%\changes{2.354}{2014-10-04}{Ajout des options \texttt{noinfo}, \texttt{nologhighlight}, et \texttt{strict}}%
+% \begin{macrocode}
\def\l@@error#1{\ClassError{lettre}{#1}}%
\def\infos{\c@infos=1\relax}
\def\noinfos{\c@infos=0\relax}
@@ -188,15 +310,41 @@
}{%
Class lettre Message: #1\@gobble}%
\fi}%
+% \end{macrocode}
+%\subsection{Macros utiles aux fichier de définitions de langue}
+% \DescribeMacro{\LettreProvidesLanguage}
+% \begin{macrocode}
\newcommand*{\LettreProvidesLanguage}[1]{%
\ProvidesFile{lettre-#1.ldf}%
}%
+% \end{macrocode}
+% \begin{macro}{\LettreDeclareLanguage}\cs{LettreDeclareLanguage}\marg{dialècte}\oarg{langue-de-base}\marg{définitions},
+% cette macro définit globalement soit une, soit deux macros~:
+% \begin{itemize}
+% \item La macro \cs{lettre@select@\meta{dialecte}@labels} est définie pour se développer en \meta{définitions}, et
+% \item La macro \cs{lettre@lmp@\meta{dialecte}@use} (où \og \texttt{lmp}\fg{} veut dire \og language for
+% multilang processor\fg) n'est définie que si l'argument optionnel \meta{langue-de-base} est fourni, et
+% auquel cas est définie pour se développer en \meta{langue-de-base}.
+% \end{itemize}
+% \begin{macrocode}
\newcommand*{\LettreDeclareLanguage}[1]{%
\begingroup
+% \end{macrocode}
+% La première chose qu'on fait c'est de mettre \meta{dialecte} dans \cs{toks0}. Quant à \cs{toks2} il
+% contiendra le code définissant ou non la macro \cs{lettre@lmp@\meta{dialecte}@use}. La macro
+% \cs{lettre@declare@language@arg@ii} sert à récupérer l'argument \meta{langue-de-base} lorsqu'il est présent.
+% \begin{macrocode}
\toks0{#1}%
\@ifnextchar[\lettre@declare@language@arg@ii
{%
+% \end{macrocode}
+% En cas d'absence de l'argument optionnel \meta{langue-de-base} \cs{toks2} est donc vide, puisqu'on ne
+% définit pas \cs{lettre@lmp@\meta{dialecte}@use}~:
+% \begin{macrocode}
\toks2{}%
+% \end{macrocode}
+% La macro \cs{lettre@declare@language@arg@iii} sert à récupérer l'argument \meta{définitions}~:
+% \begin{macrocode}
\lettre@declare@language@arg@iii
}%
}%
@@ -213,7 +361,8 @@
\toks3{#1}%
\edef\@tempa{%
\noexpand\ifcsdef{lettre@select@\the\toks0 @labels}{%
- \noexpand\l@@error{Macro `\string\lettre@select@\the\toks0 @labels\space d'ej`a d'efinie}%
+ \noexpand\l@@error{Macro `\string\lettre@select@\the\toks0 @labels\space
+ d'ej`a d'efinie}%
}{%
\noexpand\gdef
\expandafter\noexpand\csname lettre@select@\the\toks0@labels\endcsname{%
@@ -223,16 +372,42 @@
}%
\expandafter\endgroup\@tempa
}%
+% \end{macrocode}
+% \end{macro}
+%
+%\subsection{Déclaration des sorties des options de paquetage, et exécutions des options}
+%\label{sec:sortie-opt-pako}
+% \begin{macrocode}
\newcommand\@ptsize{}
\newcount\c@infos\c@infos=1\relax
\newif\if@origdate\@origdatefalse
\newif\if@etiq\@etiqfalse
+% \end{macrocode}
+% \changes{3.000}{2015-12-20}{Ajout option \texttt{pass lang}}%
+% \begin{macrocode}
\newif\iflettre@pass@lang\lettre@pass@langtrue
-\newif\iflettre@keep@envs\lettre@keep@envsfalse
+% \end{macrocode}
+% \changes{3.001}{2019-07-23}{Option \texttt{keep envs} avec détection par défaut}%
+% L'option \texttt{keep envs} se traduit dans le compteur \cs{lettre@keep@envs} de la manière suivante~:\\
+% \begin{tabular}{>{\rrab}p{3cm}p{\dimexpr\linewidth-3cm-4\tabcolsep}}\toprule
+% \cs{lettre@keep@envs}&Signification\\\midrule
+% 0&Détection automatique du comportement \texttt{keep envs=true}, ou \texttt{keep envs=false}\\
+% 1&Correspond à \texttt{keep envs=true}, c.-à-d.\ que \texttt{lettre} ne redéfinit pas les
+% environnements \texttt{itemize} et consorts\\
+% 2&Correspond à \texttt{keep envs=false}, c.-à-d.\ que \texttt{lettre} redéfinit selon la langue les
+% environnements \texttt{itemize} et consorts\\\bottomrule
+% \end{tabular}
+% \begin{macrocode}
+\newcount\lettre@keep@envs
+\lettre@keep@envs0 %
\newif\iflettre@strict\lettre@strictfalse
\newif\iflettre@loghighlight\lettre@loghighlightfalse
\ExecuteOptions{10pt,oneside,final}
\ProcessOptions
+% \end{macrocode}
+% Chargement des définitions de langue. On fait un \cs{input} de tous les fichiers \meta{nomfic} dont la macro
+% version \cs{ver@}\meta{nomfic} a été durant le traitements des options configurée à \og To be loaded\fg.
+% \begin{macrocode}
\def\lettre@iterate@body#1{%
\edef\@tempa{\csname lettre@#1@alias@of\endcsname}%
\def\@tempb{To be loaded}%
@@ -243,8 +418,21 @@
\fi
}%
\expandafter\lettre@iterate\lettre@supported@language@list,\@nil,%
+% \end{macrocode}
+% Passage des options de langue au paquetages tels
+% \texttt{babel}.\newline\DescribeMacro{\lettre@languageable@packages}Tout d'abord on se fait une liste de
+% paquetages auxquels passer les options de langues. C'est à dire qu'on gère ces options comme si elles étaient
+% globales vis à vis de ces paquetages là seulement.
+% \begin{macrocode}
\newcommand\lettre@languageable@packages{babel,fmtcount,mlp}%
+% \end{macrocode}
+% Maintenant on passe toutes les options stockées dans \cs{lettre@languages} à tous les paquetage listés dans
+% \cs{lettre@languageable@packages}.
+% \begin{macrocode}
\ifx\lettre@languages\@empty\else
+% \end{macrocode}
+% \changes{3.000}{2015-12-20}{Ajout option \texttt{pass lang}}%
+% \begin{macrocode}
\iflettre@pass@lang
\def\lettre@iterate@body#1{%
\let\@tempb\lettre@iterate@body
@@ -257,6 +445,9 @@
\expandafter\lettre@iterate\lettre@languages,\@nil,%
\fi
\fi
+% \end{macrocode}
+%\subsection{Polices}
+% \begin{macrocode}
\input{size1\@ptsize.clo}
\DeclareOldFontCommand{\rm}{\rmfamily}{\mathrm}
\DeclareOldFontCommand{\sl}{\slshape}{\@nomath\sl}
@@ -267,6 +458,9 @@
\DeclareOldFontCommand{\tt}{\ttfamily}{\mathtt}
\DeclareRobustCommand*{\cal}{\@fontswitch{\relax}{\mathcal}}
\DeclareRobustCommand*{\mit}{\@fontswitch{\relax}{\mathnormal}}
+% \end{macrocode}
+%\subsubsection{Paramètres pour le contrôle des paragraphes}
+% \begin{macrocode}
\lineskip 1pt%
\normallineskip 1pt%
\parskip .7em%
@@ -275,28 +469,79 @@
\partopsep 0pt%
\itemsep .2em%
\renewcommand\baselinestretch{1}
+% \end{macrocode}
+%
+% \begin{macrocode}
\@lowpenalty 51\relax
\@medpenalty 151\relax
\@highpenalty 301\relax
\@beginparpenalty -\@lowpenalty
\@endparpenalty -\@lowpenalty
\@itempenalty -\@lowpenalty
+% \end{macrocode}
+%\subsubsection{Paramètres pour le contrôle de la mise en page}
+%\changes{2.354}{2014-10-04}{Utilisation des longueurs \cs{lettre@x@mm} et \cs{lettre@y@mm} pour la prise en
+% charge des options \texttt{letterpaper}, \texttt{legalpaper}, \texttt{executivepaper}, \texttt{b5paper} et
+% \texttt{a5paper}.}%
+% Marge supérieure
+% \begin{macrocode}
\topmargin 25\lettre@y@mm
+% \end{macrocode}
+% suppression de l'offset vertical
+% \begin{macrocode}
\advance\topmargin by -1in
+% \end{macrocode}
+% Separation d'entête \SI{4}{\milli\metre}
+% \begin{macrocode}
\headheight 0pt%
\headsep 4\lettre@y@mm
+% \end{macrocode}
+% hauteur texte \SI{250}{\milli\metre}
+% \begin{macrocode}
\textheight 250\lettre@y@mm
+% \end{macrocode}
+% sep d'embase \SI{9}{\milli\metre}
+% \begin{macrocode}
\footskip 9\lettre@y@mm
+% \end{macrocode}
+% Total vertical \(25+4+250+9=\SI{288}{\milli\metre}\), reste \SI{9}{\milli\metre} sur A4 = 297 mm.
+% \begin{macrocode}
\footnotesep 5\lettre@y@mm
\marginparpush 1\lettre@x@mm
+% \end{macrocode}
+% marge gauche \SI{25}{\milli\metre}
+% \begin{macrocode}
\oddsidemargin 25\lettre@x@mm
\evensidemargin 25\lettre@x@mm
+% \end{macrocode}
+% suppression de l'offset horizontal
+% \begin{macrocode}
\advance\oddsidemargin by -1in
\advance\evensidemargin by -1in
+% \end{macrocode}
+% largeur texte 160mm
+% \begin{macrocode}
\textwidth 160\lettre@x@mm
+% \end{macrocode}
+% sep. note lat. 4mm
+% \begin{macrocode}
\marginparsep 4\lettre@x@mm
+% \end{macrocode}
+% larg. note lat 15mm
+% \begin{macrocode}
\marginparwidth 15\lettre@x@mm
+% \end{macrocode}
+% Total horizontal \(25+160+4+15=\SI{204}{\milli\metre}\), reste \SI{6}{\milli\metre} sur A4 =
+% \SI{210}{\milli\metre}.
+% \begin{macrocode}
\skip\footins 4mm plus 2pt minus 4pt%
+% \end{macrocode}
+%
+%\subsection{Le format lettre et fax de l'observatoire de Genève}
+%
+%\subsubsection{newcounts, newdimens, newifs, et newwrite}
+% Il y a aussi un \cs{newcount} dans la \S~\ref{sec:sortie-opt-pako}.
+% \begin{macrocode}
\newcount\auxcount
\newcount\c@labelstart
\newcount\c@lettre
@@ -323,25 +568,43 @@
\newdimen\faxbox@width
\newdimen\toaddress@fax@width
\newdimen\fromname@fax@width
+% \end{macrocode}
+%\changes{2.354}{2014-10-21}{Ajout \cs{lettre@vref@width} et \cs{lettre@nref@width}}%
+% \begin{macrocode}
\newlength\lettre@vref@width
\newlength\lettre@nref@width
+% \end{macrocode}
+%Il y a aussi des \cs{newif} dans la \S~\ref{sec:sortie-opt-pako}.
+% \begin{macrocode}
\newif\if@letter\@lettertrue
\newif\if@detail\@detailfalse
+% \end{macrocode}
+% Fichiers auxiliaires
+% \begin{macrocode}
\newwrite\@tensionaux
\newwrite\@dateaux
\newwrite\@etiqaux
\newwrite\@faxaux
+% \end{macrocode}
+%\subsubsection{Macros internes}
+%\label{sec:macros-internes}
+% \begin{macrocode}
+\let\lettre@par\@par
\@ifundefined{lettre@t}{}{\ClassError{lettre}{Definition en double}%
- {Redefinition de la macro `lettre@t'}}
+ {Redefinition de la macro \protect\lettre@t}}
\def\lettre@t#1#2{\begin{list}{#1}{\setlength{\labelsep}{10pt}%
- \setlength{\labelwidth}{\listmargin}%
- \setlength{\leftmargin}{\listmargin}%
- \setlength{\listparindent}{0pt}}%
- \item #2%
- \end{list}}
+ \setlength{\labelwidth}{\listmargin}%
+ \setlength{\leftmargin}{\listmargin}%
+ \setlength{\listparindent}{0pt}}%
+ \item\relax #2%
+ \end{list}}
\def\detailledaddress{\@detailtrue}%
+% \end{macrocode}
+% \begin{macrocode}
\def\stopletter{\vskip0ptplus1filll}%
\def\stopfax{\vskip0ptplus1filll}%
+% \end{macrocode}
+% \begin{macrocode}
\def\resetopenenv{%
\faxpage=0\relax
\csuse{\lettre@mainlang}%
@@ -358,6 +621,12 @@
\def\resetauxenv{
\def\auxflag{}
\auxcount=0\relax
+% \end{macrocode}
+% Les macro \cs{toref} et \cs{fromref} sont intialisé à \cs{space} de sorte à ce que par défaut la
+% configuration de l'une des deux références entraîne l'affichage des deux boîtes de référence, avec
+% éventuellement l'autre boîte à blanc (c.-à-d. contenant juste un espace).%
+% \changes{2.354}{2014-10-21}{Un argument vide à \cs{Vref} ou \cs{Nref} supprime la référence}%
+% \begin{macrocode}
\let\toref\space\let\fromref\space
\def\telexnum{}\def\ccpnum{}
}
@@ -365,33 +634,72 @@
\def\emailflag{}
\emailcount=0\relax
\def\@username{}
- \def\ccittnum{}\def\internetnum{}\def\bitnetnum{}\def\telepacnum{}\def\decnetnum{}
+ \def\ccittnum{}\def\internetnum{}\def\bitnetnum{}%
+ \def\telepacnum{}\def\decnetnum{}
}
-\long\def\@processto#1{\@xproc #1\\@@@\ifx\toaddress\@empty
- \else \@yproc #1@@@\fi}%
-\long\def\@xproc #1\\#2@@@{\def\toname{#1}\def\toaddress{#2}}%
-\long\def\@yproc #1\\#2@@@{\def\toaddress{#2}}%
-\def\stopbreaks{\interlinepenalty \@M
- \def\par{\@@par\nobreak}\let\\=\@nobreakcr
+% \end{macrocode}
+% \DescribeMacro{\lettre@processto}\cs{lettre@processto} extrait \cs{toname} et \cs{toaddress} de l'argument
+% adresse passé aux environnements \texttt{letter} ou \texttt{telefax}.
+% \changes{3.001}{2017-08-10}{Renommage \cs{@processto}, \cs{@xproc} et \cs{yproc} pour préfixer par
+% \texttt{lettre} afin d'être à l'épreuve du temps contre des conflits de nommage potentiels. Utilisation
+% \cs{@nil} comme terminateur plutôt que \texttt{@@@} que l'utilisateur pourrait utiliser dans son adresse.}
+% \begin{macrocode}
+\long\def\lettre@processto#1{\lettre@xproc #1\\\@nil\ifx\toaddress\@empty
+ \else \lettre@yproc #1\@nil\fi}%
+\long\def\lettre@xproc #1\\#2\@nil{\def\toname{#1}\def\toaddress{#2}}%
+\long\def\lettre@yproc #1\\#2\@nil{\def\toaddress{#2}}%
+% \end{macrocode}
+% \DescribeMacro{\lettre@stopbreaks}La macro \cs{lettre@stopbreaks} fait rentrer dans un mode où l'on empèche
+% les sauts de ligne.
+% \changes{3.001}{2019-06-30}{Correction anomalie
+% \href{https://puszcza.gnu.org.ua/bugs/index.php?428}{\#428}. Les
+% \og\cs{def}\cs{par}\texttt{\{}\ldots\texttt{\}}\fg\ sont remplacés par des
+% \og\cs{@setpar}\texttt{\{}\ldots\texttt{\}}\fg}
+% \begin{macrocode}
+\def\lettre@stopbreaks{%
+ \interlinepenalty \@M
+ \@setpar{\@@par\nobreak\lettre@parshape}\let\\=\@nobreakcr
\let\vspace\@nobreakvspace}%
\def\@nobreakvspace{\@ifstar{\@nobreakvspacex}{\@nobreakvspacex}}%
\def\@nobreakvspacex#1{\ifvmode\nobreak\vskip #1\relax\else
\@bsphack\vadjust{\nobreak\vskip #1}\@esphack\fi}%
\def\@nobreakcr{\vadjust{\penalty\@M}\@ifstar{\@xnewline}{\@xnewline}}%
-\def\startbreaks{\let\\=\@normalcr
- \interlinepenalty 200\relax\def\par{\@@par\penalty -100\relax}}%
+% \end{macrocode}
+% \DescribeMacro{\lettre@startbreaks}La macro \cs{lettre@startbreaks} fait rentrer dans un mode où l'on
+% autorise les sauts de ligne.
+% \begin{macrocode}
+\def\lettre@startbreaks{%
+ \let\\=\@normalcr
+ \interlinepenalty 200\relax
+ \@setpar{\@@par\penalty -100\relax
+ \lettre@parshape}}%
+% \end{macrocode}
+%\subsection{Étiquettes}
+% La commande \cs{startlabels} suivante définit des pages A4 de 2 colonnes d'étiquettes avec
+% \SI{15}{\milli\metre} de marges gauche et droite sur chaque étiquette. Si l'on change le nombre
+% d'étiquettes sur une page, il faut aussi modifier la macro \cs{@startlabels}.
+%\DescribeMacro{\startlabels}
+% \begin{macrocode}
\def\startlabels{%
\baselineskip=0pt\lineskip=0pt%
\pagestyle{empty}%
\let\@texttop=\relax
\topmargin=0pt\headsep=0pt%
\oddsidemargin=15mm\evensidemargin=15mm%
+% \end{macrocode}
+% modifications des dimensions de la page à faire ici
+% \begin{macrocode}
\textheight=297mm\textwidth=180mm\columnsep=30mm%
\@colht=\textheight\@colroom=\textheight\vsize=\textheight
\small
\baselineskip=0pt\lineskip=0pt%
\boxmaxdepth=0pt%
\twocolumn\relax}%
+% \end{macrocode}
+% La commande \cs{@startlabels} suivante définit la position de la
+% première étiquette sur la page, à partir de la valeur du
+% compteur \texttt{labelstart}.
+% \begin{macrocode}
\def\@startlabels{%
\l@@info{Position de la premiere etiquette: \the\c@labelstart}%
\ifnum\c@labelstart>\z@
@@ -406,36 +714,81 @@
\l@@warning@strictable{Position de la premiere etiquette ignoree}%
\fi
}%
+% \end{macrocode}
+% \DescribeMacro{\mlabel}La commande \cs{mlabel}\marg{l'étiquette} fabrique une étiquette de
+% \SI{37}{\milli\metre} de hauteur, la largeur étant définie dans \cs{startlabels}
+% (\(\SI{105}{\milli\metre}-\SI{30}{\milli\metre}\) de marges) chacune contenant \SI{70}{\milli\metre} de
+% texte \meta{l'étiquette} au centre de l'étiquette.
+% \begin{macrocode}
\def\mlabel#1{\setbox0\vbox{\parbox[b]{70mm}{\rm\strut\ignorespaces #1}}%
\vbox to 37mm{\vskip5mmplus1fil \box0 \vskip5mmplus1fil}}%
+% \end{macrocode}
+% \DescribeMacro{\makelabels}\cs{makelabels}\oarg{num label} demande à \verb+\begin{document}+ d'imprimer
+% sur le fichier auxiliaire \verb+.etq+ l'ordre de préparer les étiquettes. Son argument optionnel
+% \meta{num label} est un numéro définissant quelle est la prochaine étiquette libre sur la page en
+% partant du numéro \(1\), de manière à utiliser des feuilles déjà partiellement utilisées. Dans ce cas,
+% \verb+\begin{document}+ imprime autant d'étiquettes vides que nécessaire.
+% \begin{macrocode}
\def\makelabels{%
\@etiqtrue
\l@@info{On demande des etiquettes}%
\@ifnextchar [{\i@makelabels}{\i@makelabels[1]}}%
\def\i@makelabels[#1]{\c@labelstart=#1}%
+% \end{macrocode}
+%\subsection{Interface utilisateur}
+%\subsubsection{Adaptations des paramètres par défaut}
+%\DescribeMacro{\institut}
+% \changes{3.000}{2015-10-21}{Nom fichier institut en \texttt{lettre-\meta{institut}.cfg}}
+% \begin{macrocode}
\newcommand*\lettre@institut[1]{%
\l@@info{Fichier de defaut: #1}%
\def\lettre@input@institut{\makeatletter
\input{#1}%
\makeatother}}%
+% \end{macrocode}
+% On prend en compte le cas où l'utilisateur malicieux aurait mis un chemin à l'institut. C'est surtout pour
+% être rétro-compatible avec l'utilisation de l'extention \textsf{.ins} pour les fichiers instituts qu'on fait
+% ça. On utilise la macro \cs{filename@parse} du noyeau \LaTeX\ dont le résultat l'analyse va dans les macros
+% \cs{filename@area}, \cs{filename@base} et \cs{filename@ext}. On détourne \cs{filename@area} pour recevoir le
+% nom du fichier insititut en \texttt{.cfg}.
+% \begin{macrocode}
\newcommand*\lettre@institut@parse[1]{%
\filename@parse{#1}%
- \edef\filename@area{\filename@area lettre-\filename@base\unless\ifx\filename@ext\relax.\filename@ext\fi.cfg}%
+ \edef\filename@area{\filename@area lettre-\filename@base
+ \unless\ifx\filename@ext\relax.\filename@ext\fi.cfg}%
}%
+% \end{macrocode}
+% Avec l'option \texttt{strict} le fichier institut doit se nommer que \texttt{lettre-\meta{institut}.cfg}.
+% \begin{macrocode}
\iflettre@strict
\newcommand*\institut[1]{%
\lettre@institut@parse{#1}%
\expandafter\lettre@institut\expandafter{\filename@area}}%
\else
+% \end{macrocode}
+% Sans l'option \texttt{strict} le fichier institut peut se nommer soit \texttt{lettre-\meta{institut}.cfg},
+% soit \texttt{\meta{institut}.ins}, on teste la première possibilité en premier.
+% \begin{macrocode}
\newcommand*\institut[1]{%
\lettre@institut@parse{#1}%
- \IfFileExists{\filename@area}{\expandafter\lettre@institut\expandafter{\filename@area}}{%
- \l@@warning{Le nommage des fichiers instituts en `<institut>.ins' est obsolete, veuillez les nommer en
- `lettre-<institut>.cfg'}%
+ \IfFileExists{\filename@area}{%
+ \expandafter\lettre@institut\expandafter{\filename@area}}{%
+ \l@@warning{Le nommage des fichiers instituts en `<institut>.ins' est obsolete,
+ veuillez les nommer en `lettre-<institut>.cfg'}%
\lettre@institut{#1.ins}}%
}
\fi
+% \end{macrocode}
+%
+%\subsubsection{Environnements letter et fax}
+%
+%\DescribeEnv{letter} L'environnement \cs{begin\{letter\}}\marg{adresse}\ldots\cs{end\{letter\}} définit une
+% lettre
+% \changes{2.354}{2014-09-19}{Utilisation de \protect\ifcsundef\space pour tester \protect\csname
+% letter\protect\the\expandafter\protect\csname c@lettre\endcsname\protect\endcsname}
+% \begin{macrocode}
\long\def\letter#1{%
+ \global\let\lettre@tns@vspace\lettre@letter@tns@vspace
\rm
\global\advance\c@lettre\@ne
\l@@info{Lettre \the\c@lettre}%
@@ -454,14 +807,21 @@
\fi
\fi
\c@page\@ne
+% \end{macrocode}
+% \changes{2.354}{2014-10-22}{Correction bug \href{https://gna.org/bugs/?23959}{\#23959}~: \og\cs{c@footnote}
+% n'est pas re-initialisé au début de chaque lettre\fg}
+% \begin{macrocode}
\c@footnote0 %
\resetopenenv\resetcloseenv\resetauxenv\resetemailenv
\@lettertrue
\lettre@input@institut
\let\opening=\letteropening
\interlinepenalty=200\relax
- \@processto{#1}
+ \lettre@processto{#1}
}%
+% \end{macrocode}
+%\DescribeEnv{endletter}
+% \begin{macrocode}
\def\endletter{\par
\ifdim\pagetotal < 50pt
\immediate\write\@tensionaux{%
@@ -535,7 +895,16 @@
\\\toaddress}}%
\endgroup
\fi}%
+% \end{macrocode}
+% \DescribeEnv{telefax}L'environnement \texttt{telefax} permet de formater une télécopie. Liste des
+% arguments~:\newline
+% \begin{tabular}{@{\#}l@{ : }l@{}}
+% 1&Numéro du destinataire\\
+% 2&Nom+adresse du destinataire\\
+% \end{tabular}
+% \begin{macrocode}
\long\def\telefax#1#2{%
+ \global\let\lettre@tns@vspace\@empty
\rm
\global\advance\c@telefax\@ne
\l@@info{Telefax \the\c@telefax}%
@@ -563,8 +932,11 @@
\@input{\jobname.fax}%
\l@@info{Lecture du fichier auxiliaire de fax: Nombre total de pages=\totalpages}%
\makeatother
- \@processto{#2}
+ \lettre@processto{#2}
}%
+% \end{macrocode}
+% \DescribeMacro{\endtelefax}
+% \begin{macrocode}
\def\endtelefax{%
\stopfax
\begingroup
@@ -574,14 +946,27 @@
\def\protect##1{\string##1\space}%
\immediate\openout\@faxaux=\jobname.fax%
\immediate\write\@faxaux{\string\def\string\totalpages{\the\faxpage}}%
- \if\totalpages\the\faxpage\else
- \l@@warning{Le nombre de pages du fax a change, \MessageBreak
- (ancien=\totalpages, nouveau=\the\faxpage) \MessageBreak
- veuillez recompiler pour le corriger dans l'entete}%
- \fi
+ \ifx\totalpages\@empty
+ \let\@tempa\@firstoftwo
+ \else\ifnum\totalpages=\the\faxpage
+ \let\@tempa\@firstoftwo
+ \else
+ \let\@tempa\@secondoftwo
+ \fi\fi
+ \@tempa
+ {}{\l@@warning{Le nombre de pages du fax a change, \MessageBreak
+ (ancien=\totalpages, nouveau=\the\faxpage) \MessageBreak
+ veuillez recompiler pour le corriger dans l'entete}}%
\endgroup
\@@par\pagebreak\@@par
}%
+% \end{macrocode}
+%\subsubsection{Les commandes \cs{opening} et \cs{closing}}
+% \DescribeMacro{\lettre@write@pdate@to@dateaux}\cs{lettre@write@pdate@to@dateaux} permet d'écrire dans le
+% fichier \cs{jobname}\texttt{.odt} la date de première compilation en cas de mode \texttt{origdate}. Cette
+% action est effectuée au moment de la commande \cs{opening}.
+% \changes{2.352}{2014-08-02}{Création macro \cs{lettre@write@pdate@to@dateaux} pour correction \href{https://gna.org/bugs/index.php?22423}{bogue\#22423}}
+% \begin{macrocode}
\def\lettre@write@pdate@to@dateaux{%
\l@@info{`\pdate' ecrit dans \jobname.odt}%
{%
@@ -590,15 +975,43 @@
\string\expandafter\string\def%
\string\csname\space origdate\the\c@lettre
\string\endcsname{\pdate}}}}
+% \end{macrocode}
+% \DescribeMacro{\lettre@get@date}\cs{lettre@get@date} permet de relire la date à partir de
+% \cs{jobname}\texttt{.odt} lorsqu'elle y est disponible.
+% \changes{2.352}{2014-08-06}{Nouvelle macro \cs{lettre@get@date}}
+% \changes{2.354}{2014-09-19}{Utilisation de \protect\ifcsundef\space pour tester \protect\csname
+% origdate\protect\the\expandafter\protect\csname c@lettre\endcsname\protect\endcsname}
+% \begin{macrocode}
\def\lettre@get@date{%
\if@origdate
\ifcsundef{origdate\the\c@lettre}{}{%
\l@@info{Date originale lue dans \jobname.odt}%
\def\pdate{\csname origdate\the\c@lettre\endcsname}%
}%
+% \end{macrocode}
+% On re-écrit systématiquement dans le fichier \cs{jobname}\texttt{.odt} même lorsque la date n'a pas changé,
+% ce qui fait que son horodate change à chaque compilation même si le contenu peut rester inchangé. La raison
+% c'est que~:
+% \begin{enumerate}
+% \item l'implémentation est plus simple (on ouvre systématiquement le \cs{write})
+% \item dans le cas où il y a plusieurs plusieurs lettres dans le même document, disons deux, il se peut que
+% la seconde soit ajoutée au document alors que la première y était déjà, dans ce cas il faut quand même
+% re-écrire \cs{pdate} dans le \cs{jobname}\texttt{.odt} pour la première lettre, même si c'est inchangé, à
+% cause de la nouvelle lettre.
+% \end{enumerate}
+% \changes{2.352}{2014-08-02}{Correction \href{https://gna.org/bugs/index.php?22423}{bug\#22423} avec macro
+% \cs{lettre@write@pdate@to@dateaux}}
+% \begin{macrocode}
\lettre@write@pdate@to@dateaux
\fi
}
+% \end{macrocode}
+% \DescribeMacro{\lettre@put@fromlieu@date}La macro \cs{lettre@put@fromlieu@date} place \cs{fromlieu} et la
+% date \cs{pdate} séparés d'une virgule. La virgule n'est présente que si ni l'un ni l'autre n'est vide.
+% \changes{2.352}{2014-08-02}{Correction \href{https://gna.org/bugs/index.php?22383}{bug\#22383}, la virgule
+% après \cs{fromlieu} est rendue conditionnelle à ce que \cs{fromlieu} soit non-vide. Lorsqu'il n'y a pas de
+% date on ne met rien, et non plus un espace insécable}%
+% \begin{macrocode}
\def\lettre@put@fromlieu@date{%
\ifx\@empty\fromlieu
\else
@@ -606,12 +1019,22 @@
\ifx\@empty\pdate\else, \fi
\fi
\ifx\@empty\pdate\else\pdate\fi}
+% \end{macrocode}
+%\paragraph{Dans le cas d'une lettre, \cs{opening}}
+%\label{sec:lettre-opening}
+%
+%\DescribeMacro{\letteropening}La macro \cs{opening} pointe par un \cs{let} sur \cs{letteropening} dans le cas
+% de l'environnement \texttt{letter}.
+% \begin{macrocode}
\def\letteropening#1{%
+% \end{macrocode}
+% \changes{2.352}{2014-08-06}{Factorisation du code entre \cs{faxopening} et \cs{letteropening} avec la macro
+% \cs{lettre@get@date}}
+% \begin{macrocode}
\lettre@get@date
\hbadness=10000\relax
\thispagestyle{empty}%
\setlength{\unitlength}{1mm}%
- \advance\rightskip -75pt%
\begin{picture}(\pict@let@width,\pict@let@height)%
(\pict@let@hoffset,\pict@let@voffset)%
\put(\rule@hpos,\rule@vpos){\line(1,0){\rule@length}}%
@@ -632,39 +1055,56 @@
\fi}}}
\put(\fromlieu@let@hpos,\fromlieu@let@vpos){\makebox(0,0)[bl]{%
\parbox[t]{\fromlieu@let@width}{%
+% \end{macrocode}
+% \changes{2.352}{2014-08-06}{Factorisation du code entre \cs{faxopening} et \cs{letteropening} avec la macro
+% \cs{lettre@put@fromlieu@date}}
+% \begin{macrocode}
\lettre@put@fromlieu@date
}}}%
\put(\toaddress@let@hpos,\toaddress@let@vpos){\makebox(0,0)[tl]{%
\parbox{\toaddress@let@width}{%
\toname\\\toaddress}}}%
\end{picture}%
- \par\vskip\csname letter\the\c@lettre\endcsname mm
- \advance\leftskip\lettermargin
- \advance\rightskip75pt%
+ \par
+% \end{macrocode}
+% Espacement vertical lu dans le fichier \texttt{.tns} destiné à optimiser la mise en page.
+% \begin{macrocode}
+ \lettre@letter@tns@vspace
+% \end{macrocode}
+% \changes{3.001}{2017-08-05}{Correction de l'anomalie \href{http://gna.org/bugs/?25373}{GNA\No 25373}; aka
+% \href{https://puszcza.gnu.org.ua/bugs/index.php?397}{\No 397}, on corrige la gestion de la marge}%
+% \begin{macrocode}
+ \lettre@adjust@margin
+% \end{macrocode}
+% Références, Télex, \& CCP de la lettre, s'il en est.
+% \begin{macrocode}
\ifx\@empty\auxflag
\vspace{2\openingspace}%
\else
\vspace{\openingspace}\auxline\vspace{\openingspace}%
\fi
- \vskip\csname letter\the\c@lettre\endcsname mm
- \ifx\@empty\concdecl
- \vspace{\openingspace}%
- \else
- \concline\vspace{\openingspace}%
- \fi
- \vskip\csname letter\the\c@lettre\endcsname mm
- \hbadness=1000\relax
- {\parindent=\openingindent
- #1}\par\startbreaks\nobreak
- \let\flushleft=\letterflushleft
- \let\raggedright=\letterraggedright
- \let\center=\lettercenter
- \let\centering=\lettercentering}%
+% \end{macrocode}
+% Espacement vertical lu dans le fichier \texttt{.tns} destiné à optimiser la mise en page.
+% \begin{macrocode}
+ \lettre@letter@tns@vspace
+% \end{macrocode}
+% Objet de la lettre, s'il en est, suivi de la formule de salutation.
+% \changes{3.001}{2017-11-28}{Factorisation de code entre \cs{faxopening} et \cs{letteropening} avec la macro
+% \cs{lettre@start@body}.}
+% \begin{macrocode}
+ \lettre@start@body{#1}%
+}%
+% \end{macrocode}
+%\paragraph{Dans le cas d'une télécopie, \cs{opening}}
+%\label{sec:fax-opening}
+%
+%\DescribeMacro{\faxopening}\cs{opening} pointe par un \cs{let} sur \cs{faxopening} dans le cas d'une
+% télécopie.
+% \begin{macrocode}
\def\faxopening#1{%
\hbadness=10000\relax
\thispagestyle{empty}%
\setlength{\unitlength}{1mm}%
- \advance\rightskip -75pt%
\begin{picture}(\pict@fax@width,\pict@fax@height)
(\pict@fax@hoffset,\pict@fax@voffset)%
\put(\fromaddress@fax@hpos,\fromaddress@fax@vpos){\makebox(0,0)[tl]{
@@ -701,63 +1141,75 @@
\begin{tabular*}{\faxbox@width}[t]{@{}r@{}}%
\vrule height 0pt depth 0pt width \faxbox@width\\
\multicolumn{1}{r}{%
+% \end{macrocode}
+% \changes{2.352}{2014-08-06}{Factorisation du code entre \cs{faxopening} et \cs{letteropening} avec les macro
+% \cs{lettre@get@date} et \cs{lettre@put@fromlieu@date}}%
+% \begin{macrocode}
\lettre@get@date
\lettre@put@fromlieu@date
}\\%
\end{tabular*}%
\par
\vspace{\openingspace}%
- \advance\leftskip \lettermargin
- \advance\rightskip 75pt%
- \ifx\@empty\concdecl
- \vspace{\openingspace}%
- \else
- \concline\vspace{\openingspace}%
- \fi
- \hbadness=1000\relax
- {\parindent=\openingindent
- #1}\par\startbreaks\nobreak
- \let\flushleft=\letterflushleft
- \let\raggedright=\letterraggedright
- \let\center=\lettercenter
- \let\centering=\lettercentering}%
+ \lettre@adjust@margin
+% \end{macrocode}
+% Objet du fax, s'il en est, suivi de la formule de salutation.
+% \changes{3.001}{2017-11-28}{Factorisation de code entre \cs{faxopening} et \cs{letteropening} avec la macro
+% \cs{lettre@start@body}.}
+% \begin{macrocode}
+ \lettre@start@body{#1}%
+}%
+% \end{macrocode}
+%\paragraph{\cs{closing}}
+%\label{sec:closing}
+%\DescribeMacro{\closing}
+% \begin{macrocode}
\long\def\closing#1{%
\let\center=\normalcenter
\let\centering=\normalcentering
\let\flushleft=\normalflushleft
\let\raggedright=\normalraggedright
- \par\stopbreaks
- \if@letter
- \vskip\csname letter\the\c@lettre\endcsname mm
- \fi
+ \par\lettre@stopbreaks
+% \end{macrocode}
+% Espacement vertical lu dans le fichier \texttt{.tns} destiné à optimiser la mise en page, seulement dans le
+% cas d'une lettre et non d'une télécopie.
+% \begin{macrocode}
+ \lettre@tns@vspace
+% \end{macrocode}
+% \strut
+% \begin{macrocode}
\par\vspace{2\parskip}%
\nobreak
\noindent
\l@@info{Signature \ifcase\signum manquante\or simple\or double\or triple\fi}%
+% \end{macrocode}
+% Dans le cas où \cs{signum} est nul, la signature est générée à partir de \cs{fromname}. Il est donc
+% nécessaire que \cs{name}\marg{Mon nom} ait été appelé dans le préambule ou indirectement via la commande
+% \cs{institut}.
+% \changes{3.000}{2016-02-26}{Message d'erreur explicite en cas d'absence de \cs{name}\marg{Mon nom}.}
+% \begin{macrocode}
\ifnum\signum=0\space\ifx\fromname\undefined
\l@@error{\protect\fromname\space non d'efini, vous avez sans
doute omis de sp'ecifier \protect\name\space ou
\protect\institut\space!}
\fi\fi
+% \end{macrocode}
+% Le compteur \cs{sigflag} permet de sélectionner une présentation de la signature en fonction de la locale.
+% \changes{3.001}{2017-08-05}{Factorisation de code dans \cs{closing} sur le \cs{ifcase}\cs{sigflag}.}
+% \begin{macrocode}
\ifcase\sigflag
+ \parbox[t]{\letterwidth}{#1}%
+ \par\vspace*{4\parskip}%
+ \vspace*{\sigspace}%
\ifcase\signum
- \parbox[t]{\letterwidth}{#1}%
- \par\vspace*{4\parskip}%
- \vspace*{\sigspace}%
\hspace*{\ssigindent}%
\noindent
\parbox[t]{\ssigwidth}{\centering \ignorespaces\fromname}%
\or
- \parbox[t]{\letterwidth}{#1}%
- \par\vspace*{4\parskip}%
- \vspace*{\sigspace}%
\hspace*{\ssigindent}%
\noindent
\parbox[t]{\ssigwidth}{\centering \ignorespaces\fromsig}%
\or
- \parbox[t]{\letterwidth}{#1}%
- \par\vspace*{4\parskip}%
- \vspace*{\sigspace}%
\msigwidth=\letterwidth
\divide\msigwidth by 2\relax
\advance\msigwidth -3pt%
@@ -765,9 +1217,6 @@
\mbox{\parbox[t]{\msigwidth}{\centering\ignorespaces\fromsig}%
\parbox[t]{\msigwidth}{\centering\ignorespaces\fromssig}}%
\or
- \parbox[t]{\letterwidth}{#1}%
- \par\vspace*{4\parskip}%
- \vspace*{\sigspace}%
\msigwidth=\letterwidth
\divide\msigwidth by 3\relax
\advance\msigwidth -3pt%
@@ -816,27 +1265,116 @@
\parbox[t]{\msigwidth}{\centering\ignorespaces\fromtsig}}%
\fi
\fi
- \par\vfill\startbreaks
+ \par\vfill
+% \end{macrocode}
+% Fin du corps de la lettre sous la marge définie par \cs{marge}.
+% \begin{macrocode}
+ \lettre@endadjust@margin
+ \lettre@startbreaks
+ \let\@par\lettre@par
+ \let\lettre@parshape\@empty
+% \end{macrocode}
+% Fin de la macro \cs{closing}.
+% \begin{macrocode}
}%
+\newdimen\lettre@save@leftmargin
+\newdimen\lettre@save@leftskip
+\newdimen\lettre@leftmargin
+% \end{macrocode}
+% \DescribeMacro{\lettre@adjust@margin}Début du corps de lettre dans lequel la marge est réglée selon la
+% commande \cs{marge} qui a été passée avant le \cs{opening}.
+% \begin{macrocode}
+\newcommand*\lettre@adjust@margin{%
+ \@setpar{\@@par\lettre@parshape}%
+ \lettre@save@leftmargin\leftmargin
+ \lettre@leftmargin\lettermargin
+ \advance\@totalleftmargin by \lettre@leftmargin
+ \leftmargin\lettre@leftmargin
+ \advance\linewidth by -\lettre@leftmargin
+ \lettre@save@leftskip\leftskip
+ \def\lettre@parshape{\parshape \@ne\@totalleftmargin \linewidth}%
+ \lettre@parshape
+}
+% \end{macrocode}
+% \DescribeMacro{\lettre@endadjust@margin}Fin du corps de lettre. Après cette commande la marge n'est plus
+% contrôlée selon le réglage fait pas la commande \cs{marge}.
+% \begin{macrocode}
+\newcommand*\lettre@endadjust@margin{%
+ \advance\@totalleftmargin by -\lettre@leftmargin
+ \advance\linewidth by \lettre@leftmargin
+ \leftmargin\lettre@save@leftmargin
+ \leftskip\lettre@save@leftskip
+ }
+% \end{macrocode}
+% \DescribeMacro{\lettre@letter@tns@vspace}La macro \cs{lettre@letter@tns@vspace} insère l'espace vertical
+% utilisé pour optimiser la mise en page des lettres via le fichier \texttt{.tns}. Cette macro n'est utilisée
+% que dans le cas des lettres, et pas dans celui des télécopies.
+% \begin{macrocode}
+\newcommand*\lettre@letter@tns@vspace{%
+ \vskip\csname letter\the\c@lettre\endcsname mm}
+% \end{macrocode}
+% \DescribeMacro{\lettre@tns@vspace}La macro \cs{lettre@tns@vspace} pointe en fait sur
+% \cs{lettre@letter@tns@vspace} dans le cas des lettres, ou sur \cs{@empty} dans celui d'une télécopie. Elle
+% permet d'appeler l'une ou l'autre macro dans les parties communes aux deux types de missives, par ex.\ au
+% sein de \cs{closing} ou de \cs{lettre@start@body}.
+% \begin{macrocode}
+\newcommand*\lettre@tns@vspace{}
+% \end{macrocode}
+% \DescribeMacro{\lettre@start@body}La macro \cs{lettre@start@body} insère l'objet, s'il en est, suivi de la
+% formule de salutation, puis débute le corps de la lettre en terminant \cs{opening} par l'espacement
+% nécessaire et en redéfinissant les environnement \texttt{center} et consorts de manière adéquate.
+% \begin{macrocode}
+\newcommand*\lettre@start@body[1]{%
+ \ifx\@empty\concdecl
+ \vspace{\openingspace}%
+ \else
+ \concline\vspace{\openingspace}%
+ \fi
+ \lettre@tns@vspace
+ \hbadness=1000\relax
+ {\parindent=\openingindent
+ #1}\par\lettre@startbreaks\nobreak
+ \let\flushleft=\letterflushleft
+ \let\raggedright=\letterraggedright
+ \let\center=\lettercenter
+ \let\centering=\lettercentering
+}
+% \end{macrocode}
+% \DescribeMacro{\marge}La macro \cs{marge} règle la marge du corps de la lettre. Elle est à appelé entre le
+% \cs{begin\{letter\}} et le \cs{opening}.
+% \begin{macrocode}
\def\marge#1{%
\lettermargin=#1%
\listmargin=#1%
- \leftmargini=\listmargin%
- \advance\leftmargini 2.5em%
\letterwidth=\textwidth
- \advance\letterwidth by -\lettermargin
- \advance\letterwidth by 0pt}%
+ \advance\letterwidth by -\lettermargin
+}%
+% \end{macrocode}
+%\DescribeMacro{\basdepage}
+% \begin{macrocode}
\def\basdepage#1{%
\def\bdp{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\tension}
+% \begin{macrocode}
\def\tension#1{%
\if@letter
\expandafter\def\csname letter\the\c@lettre\endcsname{#1}%
\fi
}%
+% \end{macrocode}
+%\DescribeMacro{\addpages}
+% \begin{macrocode}
\def\addpages#1{%
\l@@info{Pages additionnelles: #1}%
\advance\faxpage by #1}%
+% \end{macrocode}
+%\DescribeMacro{\name}
+% \begin{macrocode}
\def\name#1{\def\fromname{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\signature}
+% \begin{macrocode}
\def\signature#1{%
\ifnum\signum=0\relax
\def\fromsig{#1}\signum=1\relax
@@ -844,6 +1382,9 @@
\l@@warning@strictable{Signature deja definie}%
\fi
}%
+% \end{macrocode}
+%\DescribeMacro{\secondsignature}
+% \begin{macrocode}
\def\secondsignature#1{%
\ifnum\signum=1\relax
\def\fromssig{#1}\signum=2\relax
@@ -851,6 +1392,9 @@
\l@@warning@strictable{Seconde signature illegale ou deja definie}%
\fi
}%
+% \end{macrocode}
+%\DescribeMacro{\thirdsignature}
+% \begin{macrocode}
\def\thirdsignature#1{%
\ifnum\signum=2\relax
\def\fromtsig{#1}\signum=3\relax
@@ -858,7 +1402,16 @@
\l@@warning@strictable{Troisieme signature illegale ou deja definie}%
\fi
}%
-\def\vref{\l@@warning@strictable{La commande \protect\Vref\space devrait etre utilisee}\Vref}
+% \end{macrocode}
+%\DescribeMacro{\vref}
+% \begin{macrocode}
+\def\vref{\l@@warning@strictable{La commande \protect\Vref\space devrait etre
+ utilisee}\Vref}
+% \end{macrocode}
+%\DescribeMacro{\Vref}
+%\changes{2.354}{2014-10-21}{Ajout \cs{lettre@vref@width}}%
+%\changes{2.354}{2014-10-21}{Un argument vide à \cs{Vref} supprime la référence}%
+% \begin{macrocode}
\def\Vref#1{%
\def\@tempa{#1}%
\ifx\@empty\@tempa
@@ -868,7 +1421,16 @@
\def\toref{\parbox[t]{\lettre@vref@width}{#1}}%
\fi
}%
-\def\nref{\l@@warning@strictable{La commande \protect\Nref\space devrait etre utilisee}\Nref}
+% \end{macrocode}
+%\DescribeMacro{\nref}
+% \begin{macrocode}
+\def\nref{\l@@warning@strictable{La commande \protect\Nref\space devrait etre
+ utilisee}\Nref}
+% \end{macrocode}
+%\DescribeMacro{\Nref}
+%\changes{2.354}{2014-10-21}{Ajout \cs{lettre@nref@width}}%
+%\changes{2.354}{2014-10-21}{Un argument vide à \cs{Nref} supprime la référence}%
+% \begin{macrocode}
\def\Nref#1{%
\def\@tempa{#1}%
\ifx\@empty\@tempa
@@ -878,10 +1440,17 @@
\def\fromref{\parbox[t]{\lettre@nref@width}{#1}}%
\fi
}%
+% \end{macrocode}
+%\DescribeMacro{\concline}La macro \cs{concline} contient l'objet de la lettre ou du fax.
+% \begin{macrocode}
\def\concline{%
\noindent\parbox[t]{\letterwidth}%
{\@hangfrom{\textrm{\concname}}\ignorespaces\concdecl\strut}%
\par}%
+% \end{macrocode}
+% \DescribeMacro{\auxline}La macro \cs{auxline} contient les références, ainsi que les numéro télex ou
+% \textsc{ccp}.
+% \begin{macrocode}
\def\auxline{%
\l@@info{Ligne auxiliaire demandee}%
{\scriptsize
@@ -890,7 +1459,7 @@
\ifx\space\toref
\hspace{\lettre@vref@width}%
\else
- {\small\toref}
+ {\small\toref}%
\fi
\hfill
\fi
@@ -899,7 +1468,7 @@
\ifx\space\fromref
\hspace{\lettre@nref@width}%
\else
- {\small\fromref}
+ {\small\fromref}%
\fi
\hfill
\fi
@@ -914,6 +1483,9 @@
\else
C.C.P.\ \ccpnum\hspace{5mm}%
\fi}\par}%
+% \end{macrocode}
+%\DescribeMacro{\emailine}
+% \begin{macrocode}
\def\emailine{%
\l@@info{Ligne d'E-Mail demandee}%
{\scriptsize
@@ -941,6 +1513,9 @@
\ifnum\emailcount<3\relax
\hfill\mbox{}%
\fi}}%
+% \end{macrocode}
+%\DescribeMacro{\address}
+% \begin{macrocode}
\long\def\address#1{\l@@info{Adresse precisee}\def\fromaddress{#1}}%
%\long\def\address*#1{\if@letter
% \l@@info{Adresse avec nom precisee}%
@@ -948,85 +1523,149 @@
% \else
% \l@@warning@strictable{Commande illegale dans un fax}
% \fi}%
+% \end{macrocode}
+%\DescribeMacro{\nodate}
+% \begin{macrocode}
\def\nodate{\l@@info{Date supprimee}\def\pdate{}}%
\def\date#1{\l@@info{Date precisee}\def\pdate{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\nolieu}
+% \begin{macrocode}
\def\nolieu{\l@@info{Lieu supprime}\def\fromlieu{}}%
+% \end{macrocode}
+%\DescribeMacro{\lieu}
+% \begin{macrocode}
\def\lieu#1{\l@@info{Lieu precise}\def\fromlieu{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\conc}
+% \begin{macrocode}
\def\conc#1{\l@@info{Champ d'objet defini}\def\concdecl{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\location}
+% \begin{macrocode}
\def\location#1{\l@@info{Precision d'adresse definie}\def\fromlocation{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\notelephone}
+% \begin{macrocode}
\def\notelephone{\l@@info{Numero de telephone supprime}\def\telephonenum{}}%
+% \end{macrocode}
+%\DescribeMacro{\telephone}
+% \begin{macrocode}
\def\telephone#1{\l@@info{Numero de telephone precise}\def\telephonenum{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\nofax}
+% \begin{macrocode}
\def\nofax{\l@@info{Numero de fax supprime}\def\faxnum{}}%
+% \end{macrocode}
+%\DescribeMacro{\fax}
+% \begin{macrocode}
\def\fax#1{\l@@info{Numero de fax precise}\def\faxnum{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\email}
+% \begin{macrocode}
\def\email#1{\l@@info{Numero d'E-Mail precise}\def\emailnum{#1}}%
+% \end{macrocode}
+%\DescribeMacro{\username}
+% \begin{macrocode}
\def\username#1{\def\@username{#1}}%
-\def\ccitt#1{\ifnum\emailcount<3\relax
- \def\emailflag{.}%
- \advance\emailcount by 1\relax
- \def\ccittnum{\ifx\@empty \@username
- \l@@warning@strictable{<<username>> indefini}
- #1%
- \else
- S=\@username;#1%
- \fi}%
- \else
- \def\ccittnum{}%
- \fi}%
-\def\internet#1{\ifnum\emailcount<3\relax
- \def\emailflag{.}%
- \advance\emailcount by 1\relax
- \def\internetnum{\ifx\@empty \@username
- \l@@warning@strictable{<<username>> indefini}
- #1\relax
- \else
- \@username @#1\relax
- \fi}%
- \else
- \def\internetnum{}%
- \fi}%
-\def\bitnet#1{\ifnum\emailcount<3\relax
- \def\emailflag{.}%
- \advance\emailcount by 1\relax
- \def\bitnetnum{\ifx\@empty \@username
- \l@@warning@strictable{<<username>> indefini}
- #1\relax
- \else
- \@username\ at #1\relax
- \fi}%
- \else
- \def\bitnetnum{}%
- \fi}%
-\def\telepac#1{\ifnum\emailcount<3\relax
- \def\emailflag{.}%
- \advance\emailcount by 1\relax
- \def\telepacnum{\ifx\@empty \@username
- \l@@warning@strictable{<<username>> indefini}
- #1\relax
- \else
- #1::\@username
- \fi}%
- \else
- \def\telepacnum{}%
- \fi}%
-\def\decnet#1{\ifnum\emailcount<3\relax
- \def\emailflag{.}%
- \advance\emailcount by 1\relax
- \def\decnetnum{\ifx\@empty \@username
- \l@@warning@strictable{<<username>> indefini}
- #1\relax
- \else
- #1::\@username
- \fi}%
- \else
- \def\decnetnum{}%
- \fi}%
+% \end{macrocode}
+%\DescribeMacro{\ccitt}
+% \begin{macrocode}
+\def\ccitt#1{%
+ \ifnum\emailcount<3\relax
+ \def\emailflag{.}%
+ \advance\emailcount by 1\relax
+ \def\ccittnum{%
+ \ifx\@empty \@username
+ \l@@warning@strictable{<<username>> indefini}
+ #1%
+ \else
+ S=\@username;#1%
+ \fi}%
+ \else
+ \def\ccittnum{}%
+ \fi}%
+% \end{macrocode}
+%\DescribeMacro{\internet}
+% \begin{macrocode}
+\def\internet#1{%
+ \ifnum\emailcount<3\relax
+ \def\emailflag{.}%
+ \advance\emailcount by 1\relax
+ \def\internetnum{%
+ \ifx\@empty\@username
+ \l@@warning@strictable{<<username>> indefini}
+ #1\relax
+ \else
+ \@username @#1\relax
+ \fi}%
+ \else
+ \def\internetnum{}%
+ \fi}%
+% \end{macrocode}
+%\DescribeMacro{\bitnet}
+% \begin{macrocode}
+\def\bitnet#1{%
+ \ifnum\emailcount<3\relax
+ \def\emailflag{.}%
+ \advance\emailcount by 1\relax
+ \def\bitnetnum{%
+ \ifx\@empty \@username
+ \l@@warning@strictable{<<username>> indefini}
+ #1\relax
+ \else
+ \@username\ at #1\relax
+ \fi}%
+ \else
+ \def\bitnetnum{}%
+ \fi}%
+% \end{macrocode}
+%\DescribeMacro{\telepac}
+% \begin{macrocode}
+\def\telepac#1{%
+ \ifnum\emailcount<3\relax
+ \def\emailflag{.}%
+ \advance\emailcount by 1\relax
+ \def\telepacnum{%
+ \ifx\@empty \@username
+ \l@@warning@strictable{<<username>> indefini}
+ #1\relax
+ \else
+ #1::\@username
+ \fi}%
+ \else
+ \def\telepacnum{}%
+ \fi}%
+% \end{macrocode}
+%\DescribeMacro{\decnet}
+% \begin{macrocode}
+\def\decnet#1{%
+ \ifnum\emailcount<3\relax
+ \def\emailflag{.}%
+ \advance\emailcount by 1\relax
+ \def\decnetnum{%
+ \ifx\@empty \@username
+ \l@@warning@strictable{<<username>> indefini}
+ #1\relax
+ \else
+ #1::\@username
+ \fi}%
+ \else
+ \def\decnetnum{}%
+ \fi}%
+% \end{macrocode}
+%\DescribeMacro{\telex}
+% \begin{macrocode}
\def\telex#1{\ifnum\auxcount<2\relax
- \def\auxflag{.}%
- \advance\auxcount by 1\relax
- \def\telexnum{#1}%
- \else
- \def\telexnum{}%
- \fi}%
+ \def\auxflag{.}%
+ \advance\auxcount by 1\relax
+ \def\telexnum{#1}%
+ \else
+ \def\telexnum{}%
+ \fi}%
+% \end{macrocode}
+%\DescribeMacro{\ccp}
+% \begin{macrocode}
\def\ccp#1{\ifnum\auxcount<2\relax
\def\auxflag{.}%
\advance\auxcount by 1\relax
@@ -1034,58 +1673,125 @@
\else
\def\ccpnum{}%
\fi}%
+% \end{macrocode}
+%\DescribeMacro{\ps}
+% \begin{macrocode}
\def\ps#1#2{\penalty100\relax
- \if@letter
- \vskip\csname letter\the\c@lettre\endcsname mm
- \fi
+ \lettre@tns@vspace
\l@@info{Post-scriptum defini}%
\noindent\lettre@t{#1}{#2\\}\vfill\penalty-100\relax}%
+% \end{macrocode}
+%\DescribeMacro{\cc}
+% \begin{macrocode}
\def\cc#1{\penalty100\relax
- \if@letter
- \vskip\csname letter\the\c@lettre\endcsname mm
- \fi
+ \lettre@tns@vspace
\l@@info{Copies declarees}%
\noindent\lettre@t{\ccname}{#1\\}\vfill\penalty-100\relax}%
+% \end{macrocode}
+%\DescribeMacro{\encl}
+% \begin{macrocode}
\def\encl#1{\penalty100\relax
- \if@letter
- \vskip\csname letter\the\c@lettre\endcsname mm
- \fi
+ \lettre@tns@vspace
\l@@info{Annexes declarees}%
\noindent\lettre@t{\enclname}{#1\\}\vfill\penalty-100\relax}%
+% \end{macrocode}
+%\DescribeMacro{\mencl}
+% \begin{macrocode}
\def\mencl{\penalty100\relax
- \if@letter
- \vskip\csname letter\the\c@lettre\endcsname mm
- \fi
+ \lettre@tns@vspace
\l@@info{Annexes mentionnees}%
\noindent\lettre@t{\mentionname\\}{~}\vfill\penalty-100\relax}%
+% \end{macrocode}
+%
+%\subsubsection{Définitions dépendant du langage}
+%
+%\DescribeMacro{\lettrelmpselectlanguage}La macro \cs{lettrelmpselectlanguage} permet, lorsque une langue est
+% chargée dans dans un processeur multilingue (par ex.\ \texttt{babel}) de sélectionner cette langue et de
+% redéfinir les environnements de liste tels qu'\texttt{itemize} pour le français.
+% \begin{macrocode}
\newcommand*{\lettrelmpselectlanguage}[1]{%
+% \end{macrocode}
+% Si l'utilisateur n'a pas chargé les définitions de cette langue, on essaie de le faire ici :
+% \begin{macrocode}
\lettreloadlang{#1}%
+% \end{macrocode}
+% Ensuite, en premier lieu on vérifie que la langue \texttt{\#1} est bien prise en charge.
+% \begin{macrocode}
{%
\ifcsundef{lettre@#1@alias@of}{%
\l@@warning@strictable{Langue #1 non ger'ee par lettre}%
\let\@tempa\@empty
}{%
- \toks0\expandafter\expandafter\expandafter{\csname lettre@#1@alias@of\endcsname}%
+% \end{macrocode}
+% Ensuite, il s'agit d'appeler \cs{lettre@lmp@selectlanguage}. En fait si l'on pose que
+% \meta{lang}$=$\texttt{\#1}, alors on ne veut pas appeler
+% \cs{lettre@lmp@selectlanguage}\texttt{\{}\meta{lang}\texttt{\}} mais
+% \cs{lettre@lmp@selectlanguage}\texttt{\{}\meta{lang$^{\prime\prime}$}\texttt{\}}, où ci-après on déduit
+% \meta{lang$^{\prime}$} de \meta{lang}, puis \meta{lang$^{\prime\prime}$} de \meta{lang$^{\prime}$}. On
+% regarde donc d'abord de quoi \meta{lang}$=$\texttt{\#1} est l'alias, et on met le résultat dans
+% \meta{lang$^\prime$}$=$\cs{toks}$0$. Par ex.\ si \meta{lang}$=$\texttt{french}, alors on a aussi
+% \meta{lang$^\prime$}$=$\texttt{french}, parce que \texttt{french} est l'alias de lui-même (en d'autre terme ce
+% n'est pas un alias d'autre chose), mais si \meta{lang}$=$\texttt{francais}, alors on aura
+% \meta{lang$^\prime$}$=$\texttt{french}, parce que \texttt{francais} est un alias de \texttt{french}.
+% \begin{macrocode}
+ \toks0\expandafter\expandafter\expandafter
+ {\csname lettre@#1@alias@of\endcsname}%
+% \end{macrocode}
+% Puis, si pour cette langue \meta{lang$^\prime$}, par ex.\ \texttt{romand}, on a déclaré d'utiliser une autre
+% langue pour le gestionnaire de langue, par ex.\ \texttt{french}, on utilise celle-là au lieu de celle-ci, on
+% met le résultat dans \meta{lang$^{\prime\prime}$}$=$\cs{toks}$1$.
+% \begin{macrocode}
\ifcsundef{lettre@lmp@\the\toks0@use}{%
\toks1\toks0 %
}{%
- \toks1\expandafter\expandafter\expandafter{\csname lettre@lmp@\the\toks0@use\endcsname}%
+ \toks1\expandafter\expandafter\expandafter
+ {\csname lettre@lmp@\the\toks0@use\endcsname}%
}%
+% \end{macrocode}
+% En définitive, on va appeler \cs{lettre@lmp@selectlanguage}\texttt{\{}\meta
+% {lang$^{\prime\prime}$}\texttt{\}}, et cet appel est préparé dans \cs{toks}$4$. Mais pas tout à fait, on
+% gère en plus la modification par \texttt{lettre} des environnements de base (par ex.\ \texttt{itemize}) en
+% fonction de la langue, de sorte qu'en fin de compte c'est la séquence
+% \cs{the}\cs{toks}$3$\cs{the}\cs{toks}$4$\cs{the}\cs{toks}$5$ qui sera appelé.
+% \begin{macrocode}
\toks4\expandafter{%
\expandafter\lettre@lmp@selectlanguage\expandafter{%
\the\toks1}}%
- \iflettre@keep@envs
+% \end{macrocode}
+% Il y a trois cas possibles. Le premier c'est que la gestion des environnements par \texttt{lettre} est
+% désactivée, ou en d'autres termes que le compteur \cs{lettre@keep@envs} est à 1. Dans ce cas on ne
+% fait rien de plus qu'appeler \cs{lettre@lmp@selectlanguage}\texttt{\{}\meta
+% {lang$^{\prime\prime}$}\texttt{\}}, c.-à-d.\ que \cs{toks}$3$ et \cs{toks}$5$ sont vide.
+% \begin{macrocode}
+ \ifnum\lettre@keep@envs=1 %
\toks3{}%
\toks5{}%
\else
+% \end{macrocode}
+% Dans le deuxième cas, la gestion des environnements par \texttt{lettre} est activée, mais il n'y a pas de
+% redéfinition d'environnements disponible pour la langue \meta{lang$^{\prime\prime}$}. Dans ce cas on
+% appelle \cs{lettre@restore@orig@envs} avant \cs{lettre@lmp@selectlanguage}\texttt{\{}\meta
+% {lang$^{\prime\prime}$}\texttt{\}}, et \cs{lettre@store@orig@envs}. Si \meta{lang$^{\prime\prime}$} est la
+% seule langue utilisée dans tout le document, cela ne sert à rien, mais au cas où le document contiendrait
+% avant la lettre utilisant \meta{lang$^{\prime\prime}$} une lettre qui aurait redéfini les environnements,
+% on a besoin du \cs{lettre@restore@orig@envs} pour ne pas perturber le paquetage de gestion de langue.
+% \begin{macrocode}
\toks3{\lettre@restore@orig@envs}%
\ifcsundef{lettre@set@\the\toks1@envs}{%
\toks5{\lettre@store@orig@envs}%
}{%
+% \end{macrocode}
+% Dans le troisième cas, une redéfinition d'environnements est disponible pour la langue
+% \meta{lang$^{\prime\prime}$}. Dans ce cas on fait la même chose que dans le deuxième cas, à ceci près
+% qu'on appelle en tout dernier lieu \cs{lettre@set@}\meta{lang$^{\prime\prime}$}\texttt{@envs}.
+% \begin{macrocode}
\toks5\expandafter{\expandafter\lettre@store@orig@envs
\csname lettre@set@\the\toks1 @envs\endcsname}%
}%
\fi
+% \end{macrocode}
+% Il ne reste plus qu'à appeler ce qu'on a préparé dans les \cs{toks} allant de $3$ à $5$.
+% \begin{macrocode}
\edef\@tempa{%
\the\toks3 %
\the\toks4 %
@@ -1094,12 +1800,34 @@
\expandafter
}\@tempa
}%
+% \end{macrocode}
+%\DescribeMacro{\FAXSTR}
+% \begin{macrocode}
\def\FAXSTR{\fontfamily{cmdh}\fontseries{m}\fontshape{n}\selectfont}%
+% \end{macrocode}
+%\DescribeMacro{\lettre@lmp@selectlanguage}La macro \cs{lettrelmpselectlanguage} n'est en fait qu'un pointeur
+% qui appelle le \cs{selectlanguage} ou son équivalent selon le processeur multilingue utilisé (typiquement
+% \texttt{mlp}, \texttt{babel}, ou \texttt{polyglossia}). Ici on définit une implémentation par défaut qui ne
+% fait rien en attendant un \cs{let} vers la bonne macro.
+% \begin{macrocode}
\newcommand*\lettre@lmp@selectlanguage[1]{%
- \l@@warning{ `\string\lettre@lmp@selectlanguage{#1}' appel'e, mais ne fait rien. Vous n'avez charg'e ni babel,
-ni mlp, ni polyglossia, ni french}}
+ \l@@warning{ `\string\lettre@lmp@selectlanguage{#1}' appel'e, mais ne
+ fait rien. Vous n'avez charg'e ni babel, ni mlp, ni polyglossia, ni
+ french}}
+% \end{macrocode}
+%\DescribeMacro{\lettrelabelselectlanguage}\cs{lettrelabelselectlanguage} change la langue des étiquettes de
+% la lettre, ainsi que la disposition de la signature.
+% \begin{macrocode}
\newcommand*\lettrelabelselectlanguage[1]{%
+% \end{macrocode}
+% Si l'utilisateur n'a pas chargé les définitions de cette langue, on essaie de le faire ici :
+% \begin{macrocode}
\lettreloadlang{#1}%
+% \end{macrocode}
+% Et maintenant on sélectionne la langue \meta{langue}$=$\texttt{\#1}, ce qui correspond à appeler la macro
+% \cs{lettre@select@\meta{langue}@labels} avec quelques gardefous. Au-passage, si aucun des gardefous n'est
+% franchi, \cs{lettre@mainlang} est redéfini à \texttt{\#1}.
+% \begin{macrocode}
{%
\ifcsundef{lettre@#1@alias@of}{%
\l@@warning@strictable{La langue <<#1>> n'est pas prise en charge par lettre}%
@@ -1118,12 +1846,30 @@ ni mlp, ni polyglossia, ni french}}
\expandafter
}\@tempa
}%
+% \end{macrocode}
+% \DescribeMacro{\lettreloadlang}La macro \cs{lettreloadlang}\marg{langue} charge les définitions pour la
+% langue \meta{langue}. Ceci revient à faire un \cs{input} du fichier nommé \texttt{lettre-\meta{langue}.ldf}.
+% \begin{macrocode}
\newcommand*\lettreloadlang[1]{%
+% \end{macrocode}
+% On ouvre un groupe pour pouvoir y faire des définitions locales.
+% \begin{macrocode}
{%
+% \end{macrocode}
+% On vérifie tout d'abord si la langue \texttt{\#1} fait partie des langues prises en charge par
+% \texttt{lettre}. On met dans \cs{@tempa} la valeur \meta{lang$^{\prime}$} à laquelle \texttt{\#1} est égale,
+% ou en est l'alias. On met dans \cs{toks0} tout traitement éventuel de redéfinition de
+% \cs{lettre@\#1@alias@of}.
+% \begin{macrocode}
\newif\iflettre@lang@not@supported
\ifcsundef{lettre@#1@alias@of}{%
\lettre@lang@not@supportedtrue
- \l@@warning@strictable{La langue <<#1>> ne fait pas partie des langues prises en charge par lettre}%
+ \l@@warning@strictable{La langue <<#1>> ne fait pas partie des
+ langues prises en charge par lettre}%
+% \end{macrocode}
+% Le code suivant consiste à définir \cs{lettre@\#1@alias@of} comme \texttt{\#1}, de sorte que la langue
+% \texttt{\#1} soit dorénavant considérée comme prise en charge.
+% \begin{macrocode}
\def\@tempb##1{\toks0{\def##1{#1}}}%
\expandafter\@tempb\csname lettre@#1@alias@of\endcsname
\def\@tempa{#1}%
@@ -1135,7 +1881,8 @@ ni mlp, ni polyglossia, ni french}}
\edef\@tempc{\lettre@ldf@filename{\@tempa}}%
\IfFileExists{\@tempc}{%
\iflettre@lang@not@supported
- \l@@info{Un fichier `\@tempc' ne faisant pas partie de lettre a 'et'e trouv'e, et va etre charg'e.}%
+ \l@@info{Un fichier `\@tempc' ne faisant pas partie de lettre a 'et'e
+ trouv'e, et va etre charg'e.}%
\fi
\ifcsundef{\lettre@ldf@version{\@tempa}}{%
\edef\@tempa{%
@@ -1149,28 +1896,75 @@ ni mlp, ni polyglossia, ni french}}
\expandafter
}\@tempa
}%
+% \end{macrocode}
+% \DescribeMacro{\lettreselectlanguage} \cs{lettreselectlanguage} Sélectionne la langue à la fois pour le
+% paquetage de gestion de langue (césure, environnements liste, etc\ldots) en appelant
+% \cs{lettrelmpselectlanguage} et pour la présentation de la lettre (étiquettes, disposition signature) en
+% appelant \cs{lettrelabelselectlanguage}. L'ordre d'appel est important, parce que certains paquetages de
+% gestion de langue redéfinissent certaines des macros de l'environnement \texttt{letter}. Notamment pour le
+% romand avec le paquetage de gestion de langue \texttt{french}, ce dernier définit \cs{enclname} (l'étiquette
+% introduisant la pièce jointe) comme \texttt{P. j.~:}, c-à-d.\ à la française, au lieu de le définir comme
+% \texttt{Ann.~:}, c-à-d.\ à la romande, ce que fait \texttt{lettre}.
+% \begin{macrocode}
\newcommand*\lettreselectlanguage[1]{%
\lettrelmpselectlanguage{#1}%
\lettrelabelselectlanguage{#1}%
}%
+% \end{macrocode}
+% \begin{macro}{\lettre@babel@selectlanguage}La macro \cs{lettre@babel@selectlanguage} est une émulation de
+% la macro \cs{selectlanguage} quand le paquetage \texttt{babel} est chargé. Le but est de faire un
+% traitement particulier pour le cas \texttt{german}.
+% \begin{macrocode}
\newcommand*\lettre@babel@selectlanguage[1]{%
\ifcsdef{lettre@babel@#1}{\csname lettre@babel@#1\endcsname}{\selectlanguage{#1}}%
}%
+% \end{macrocode}
+% Le traitement particulier pour \texttt{german} est effectué par \cs{lettre@babel@german}, et c'est le
+% suivant :
+% \begin{itemize}
+% \item si \texttt{babel} a chargé \texttt{ngerman}, ce que l'on teste avec
+% \cs{ifcsdef}\texttt{\{ver@ngerman.ldf\}\ldots}, alors on appelle \cs{selectlanguage}\texttt{\{ngerman\}},
+% \item sinon, on appelle \cs{selectlanguage}\texttt{\{german\}}
+% \end{itemize}
+%
+% \begin{macrocode}
\newcommand*\lettre@babel@german{%
- \ifcsdef{ver@ngerman.ldf}{\selectlanguage{ngerman}}{\selectlanguage{german}}%
+ \ifcsdef{ver@ngerman.ldf}{\selectlanguage{ngerman}}%
+ {\selectlanguage{german}}%
}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\lettre@efrench@selectlanguage} La macro \cs{lettre@efrench@selectlanguage} est une émulation de la
+% macro \cs{selectlanguage} quand le paquetage \texttt{french} est chargé.
+% \begin{macrocode}
\newcommand*\lettre@efrench@selectlanguage[1]{%
\ifx\undefined\frenchname
- \l@@warning@strictable{L'un des paquetages mlp ou french n'a pas 'et'e charg'e correctement}%
+ \l@@warning@strictable{L'un des paquetages mlp ou french n'a pas 'et'e
+ charg'e correctement}%
\else
- \def\@tempb{\l@@warning@strictable{La langue `#1' n'est pas dans \string{french, german, english\string} qui sont les trois seules langues que lettre peut demander `a mlp}}%
+% \end{macrocode}
+% Préparation d'un avertissement, au cas où \texttt{\#1} ne serait pas l'une des langues prises en charge par \texttt{mlp}.
+% \begin{macrocode}
+ \def\@tempb{\l@@warning@strictable{La langue `#1' n'est pas dans
+ \string{french, german, english\string} qui sont les trois seules
+ langues que lettre peut demander `a mlp}}%
\def\@tempc{#1}%
\def\lettre@iterate@body##1{%
\def\@tempd{##1}%
\ifx\@tempc\@tempd
+% \end{macrocode}
+% Suppression de l'avertissement, car \texttt{\#1} est bien l'une des langues prises en charge par \texttt{mlp}.
+% \begin{macrocode}
\let\@tempb\@empty
- \l@@info{Selection de la langue `#1' dans le paquetage french ou mlp d'efrench}%
+% \end{macrocode}
+% Ici on sélectionne la langue avec une macro enveloppante de la commande correspondante de \texttt{mlp}.
+% \begin{macrocode}
+ \l@@info{Selection de la langue `#1' dans le paquetage french ou
+ mlp d'efrench}%
\csname lettre@efr@#1\endcsname
+% \end{macrocode}
+% Le \cs{@tempc} permet de casser la boucle en gobant le \cs{lettre@iterate} qui suit, ainsi que ses arguments restants.
+% \begin{macrocode}
\def\@tempc####1\@nil,{}%
\expandafter\@tempc
\fi
@@ -1179,10 +1973,18 @@ ni mlp, ni polyglossia, ni french}}
\@tempb
\fi
}%
+% \end{macrocode}
+% \end{macro}
+% Définition des macros enveloppantes des langues prises en charge par \texttt{mlp}.
+%
+% \DescribeMacro{\lettre@efr@german} Pour \texttt{german}, on fait en sorte que l'allemand moderne (le seul
+% utilisé par \texttt{babel}) l'emporte sur le vieil allemand.
+% \begin{macrocode}
\newcommand*\lettre@efr@german{%
\ifx\undefined\ngermanTeXmods
\ifx\undefined\germanTeXmods
- \l@@warning@strictable{Ni \protect\german\space ni \protect\ngerman\space ne sont d'efinis !}
+ \l@@warning@strictable{Ni \protect\german\space ni \protect\ngerman\space
+ ne sont d'efinis !}
\else
\german
\fi
@@ -1190,11 +1992,32 @@ ni mlp, ni polyglossia, ni french}}
\ngerman
\fi
}
+% \end{macrocode}
+% \begin{macro}{\lettre@efr@french}Pour \cs{french} il faut prendre deux précautions avant d'appeler la
+% macro.
+% \begin{itemize}
+% \item La première est qu'appeler \cs{french} alors qu'on est déjà en français cause une erreur. Pour
+% éviter cela, on fait le test \cs{ifFrench}.
+% \item La seconde est que si on appelle \cs{lettre@efr@french} dans le \cs{AtBeginDocument}, alors
+% \cs{french} ne sera pas encore défini. Donc on teste que \cs{french} est défini avant de rappeler
+% \cs{lettre@efr@french} avec une nouvelle définition <<\verb+\ifFrench\else\french\fi+>>.
+% \end{itemize}
+%
+% \begin{macrocode}
\newcommand*\lettre@efr@french{\ifcsdef{french}{%
\def\lettre@efr@french{\ifFrench\else\french\fi}\lettre@efr@french
}{\l@@warning@strictable{La commande \protect\french\space n'est pas
d'efinie.}}}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\lettre@efr@english}Pour \cs{english}, le wrapper ne fait qu'appeler la macro \cs{english}
+% correspondante du paquetage \texttt{mlp} ou \texttt{french}.
+% \begin{macrocode}
\newcommand*\lettre@efr@english{\english}
+% \end{macrocode}
+% \end{macro}
+% Définitions des macros telles que \cs{francais}, \cs{anglais}, etc\ldots
+% \begin{macrocode}
\def\@tempa#1{%
\expandafter\newcommand\expandafter*\csname #1\endcsname{%
{%
@@ -1209,6 +2032,9 @@ ni mlp, ni polyglossia, ni french}}
\@tempa{allemand}%
\@tempa{anglais}%
\@tempa{americain}%
+% \end{macrocode}
+% Crochet \cs{begin\{document\}}~:
+% \begin{macrocode}
\AtBeginDocument{%
\makeatletter
\@input{\jobname.tns}%
@@ -1219,27 +2045,95 @@ ni mlp, ni polyglossia, ni french}}
\immediate\openout\@dateaux=\jobname.odt%
\fi
\endgroup
+% \end{macrocode}
+% Pour écrire \og\cs{startlabels}\fg\ sur le fichier \verb+.etq+ et exécuter \cs{@startlabels}.
+% \begin{macrocode}
\if@etiq
\immediate\openout\@etiqaux=\jobname.etq%
\immediate\write\@etiqaux{\string\startlabels}%
\@startlabels
\fi
- {%
- \toks0{}%
- \toks1{\def\lettre@lmp@selectlanguage#1{\selectlanguage{#1}}}%
- \toks2{\let\lettre@lmp@selectlanguage\lettre@efrench@selectlanguage}%
- \toks3{\let\lettre@lmp@selectlanguage\lettre@babel@selectlanguage}%
+% \end{macrocode}
+% On ouvre un groupe pour pouvoir bidouiller des définitions locales comme \cs{toks0}, etc.
+% \begin{macrocode}
+ {%
+% \end{macrocode}
+% On met dans \cs{@tempa} un traitement systématique à faire pour tout paquetage de gestion de langue chargé. En
+% l'occurrence on désactive la rédéfinition des environnements \texttt{itemize} et consorts par
+% \texttt{lettre} si un tel paquetage est chargé et qu'on n'a pas explicitement \texttt{keep envs=false}.
+% \begin{macrocode}
+ \def\@tempa{%
+ \ifnum\lettre@keep@envs=0 %
+ \lettre@keep@envs=1 %
+ \fi
+ }%
+% \end{macrocode}
+% Maintenant, redéfinition de la macro \cs{lettre@lmp@selectlanguage} selon le paquetage de gestion de
+% langue\footnote{\emph{lmp} dans le nom de la macro veut dire \og Language Managagement Package\fg, c-à-d.\
+% \og Paquetage de Gestion de Lange\fg.} utilisé. On va faire une boucle qui va scruter une liste
+% d'association dont chaque élément sera de la forme \meta{paquetage}\texttt{:}\meta{cas}, où \meta{cas} est
+% un nombre.\newline Tout d'abord on définit le traitement à appliquer à chacun des cas et on le place dans le
+% registre \cs{toks}\meta{cas}. Premier cas possible, c.-à-d.\ $\meta{cas}=0$, c'est le cas par défaut où on
+% ne trouve aucun \meta{paquetage} de gestion de langue, alors on ne fait rien, c'est à dire qu'on reste sur
+% la définition par défaut de \cs{lettre@lmp@selectlanguage}.\\
+% Mais encore, toujours dans ce $\meta{cas}=0$, c'est à dire dans le cas où l'on n'a détecté le chargement
+% d'aucun paquetage de gestion de langue, si \cs{lettre@keep@envs} est à 0, c'est que de surcroît l'option
+% \texttt{keep envs=true} n'a pas été donnée, alors on fait comme si on avait eu l'option \texttt{keep
+% envs=false}, c'est à dire que \texttt{lettre} redéfinit les environnemnts \texttt{itemize} et consorts selon
+% la langue~:
+% \begin{macrocode}
+ \toks0{%
+ \ifnum\lettre@keep@envs=0 %
+ \lettre@keep@envs=2 %
+ \fi
+ }%
+% \end{macrocode}
+% Deuxième cas possible, c.-à-d.\ $\meta{cas}=1$, on trouve un paquetage de gestion de langue qui fournit la
+% macro \cs{selectlanguage}, alors \cs{lettre@lmp@selectlanguage} appelle \cs{selectlanguage} --- à noter que
+% dans chaque cas on développe le traitement par défaut défini dans \cs{@tempa}~:
+% \begin{macrocode}
+ \toks1\expandafter{\@tempa
+ \def\lettre@lmp@selectlanguage#1{\selectlanguage{#1}}}%
+% \end{macrocode}
+% Troisième cas possible, c.-à-d.\ $\meta{cas}=2$, le paquetage de gestion de langue fait partie
+% d'\texttt{e-french}, on utilise \cs{lettre@efrench@selectlanguage} qui fait les traitements ad-hoc pour ce
+% cas :
+% \begin{macrocode}
+ \toks2\expandafter{\@tempa
+ \let\lettre@lmp@selectlanguage\lettre@efrench@selectlanguage}%
+% \end{macrocode}
+% Quatrième cas possible, c.-à-d.\ $\meta{cas}=3$, le paquetage de gestion de langue fait partie
+% de \texttt{babel}, on utilise \cs{lettre@babel@selectlanguage} qui fait les traitements ad-hoc pour ce
+% cas :
+% \begin{macrocode}
+ \toks3\expandafter{\@tempa
+ \let\lettre@lmp@selectlanguage\lettre@babel@selectlanguage}%
+% \end{macrocode}
+% Le \meta{cas} sélectionné va être mis dans \cs{count}\texttt{0}, par défaut on initialise au premier cas :
+% \begin{macrocode}
\count0=0 %
+% \end{macrocode}
+% Et maintenant on se fait un macro \cs{@tempb} qui va analyser chaque élément de la liste d'association,
+% c'est à dire qui va pour chaque \meta{paquetage} \texttt{\#1} testé, si ce paquetage est chargé sélectionner
+% le bon \meta{cas} \texttt{\#2} :
+% \begin{macrocode}
\def\lettre@iterate@body#1{\@tempb#1\@nil}%
\def\@tempb#1:#2\@nil{%
\@ifpackageloaded{#1}{%
\l@@info{Le paquetage `#1' est charg'e}%
\count0=#2 %
+% \end{macrocode}
+% On redéfinit \cs{lettre@iterate} pour casser la boucle de scrutation de la liste d'association, de toute
+% façon on est au sein d'un groupe, donc l'effet de cette re-définition est local :
+% \begin{macrocode}
\def\lettre@iterate##1\@nil,{}%
}{%
\l@@info{Le paquetage `#1' n'est pas charg'e}%
}%
}%
+% \end{macrocode}
+% Et voici la boucle elle-même, avec pour chaque paquetage le cas correspondant :
+% \begin{macrocode}
\l@@info{Scrutation des paquetages de gestion de langue}%
\lettre@iterate%
babel:3,%
@@ -1247,10 +2141,19 @@ ni mlp, ni polyglossia, ni french}}
french:2,%
mlp:2,%
\@nil,%
+% \end{macrocode}
+% Il n'y a plus qu'à appliquer le traitement correspondant au cas sélectionné :
+% \begin{macrocode}
\expandafter
}\the\toks\count0 %
\makeatother
+% \end{macrocode}
+% Fin du \cs{AtBeginDocument}.
+% \begin{macrocode}
}%
+% \end{macrocode}
+% Crochet \cs{end\{document\}} pour sortir la page d'étiquettes, si nécessaire.
+% \begin{macrocode}
\AtEndDocument{%
\l@@info{Nombre de lettres :\the\c@lettre}%
\l@@info{Nombre de telefax :\the\c@telefax}%
@@ -1272,7 +2175,15 @@ ni mlp, ni polyglossia, ni french}}
\fi
\endgroup
}%
+% \end{macrocode}
+%
+%\subsubsection{Styles de page}
+%
+% \begin{macrocode}
\def\@texttop{\ifnum\c@page=1\vskip 0pt plus .00001fil\relax\fi}%
+% \end{macrocode}
+%
+% \begin{macrocode}
\if@twoside
\def\ps@headings{%
\headheight 12pt%
@@ -1293,6 +2204,9 @@ ni mlp, ni polyglossia, ni french}}
\def\@evenhead{}%
\def\@evenfoot{}}%
\fi
+% \end{macrocode}
+% \DescribeMacro{\ps@empty}
+% \begin{macrocode}
\def\ps@empty{%
\headheight 0pt%
\headsep 9pt%
@@ -1316,6 +2230,9 @@ ni mlp, ni polyglossia, ni french}}
\fi}%
\def\@evenhead{}%
\def\@evenfoot{}}%
+% \end{macrocode}
+% \DescribeMacro{\ps@firstpage}
+% \begin{macrocode}
\def\ps@firstpage{%
\headheight 12pt%
\headsep 25pt%
@@ -1323,6 +2240,9 @@ ni mlp, ni polyglossia, ni french}}
\def\@oddfoot{}%
\def\@evenhead{}%
\def\@evenfoot{}}%
+% \end{macrocode}
+% \DescribeMacro{\ps@plain}
+% \begin{macrocode}
\def\ps@plain{%
\headheight 0pt%
\headsep 9pt%
@@ -1330,46 +2250,75 @@ ni mlp, ni polyglossia, ni french}}
\def\@oddfoot{\textrm{\hfill\thepage\hfill}}%
\def\@evenhead{}%
\def\@evenfoot{\textrm{\hfill\thepage\hfill}}}%
+% \end{macrocode}
+%
+%\subsubsection{\texttt{center} et \texttt{flushleft}}
+%
+% \begin{macrocode}
\def\normalcenter{\trivlist \normalcentering\item[]}%
\def\lettercenter{\trivlist \lettercentering\item[]}%
\def\normalcentering{\let\\=\@centercr\rightskip\@flushglue
\leftskip\@flushglue
\parindent\z@\parfillskip\z@}%
\def\lettercentering{\let\\=\@centercr\rightskip\@flushglue
- \leftskip\@flushglue\advance\leftskip\lettermargin
+ \leftskip\@flushglue
\parindent\z@\parfillskip\z@}%
\let\endcenter=\endtrivlist
+% \end{macrocode}
+% \DescribeMacro{\normalflushleft}
+% \begin{macrocode}
\def\normalflushleft{\trivlist \normalraggedright\item[]}%
\def\letterflushleft{\trivlist \letterraggedright\item[]}%
\def\normalraggedright{\let\\=\@centercr\leftskip\z@
\@rightskip\@flushglue\rightskip\@rightskip
\parindent\z@}%
-\def\letterraggedright{\let\\=\@centercr\leftskip\lettermargin
+\def\letterraggedright{\let\\=\@centercr\leftskip\z@
\@rightskip\@flushglue\rightskip\@rightskip
\parindent\z@}%
\let\endflushleft=\endtrivlist
+% \end{macrocode}
+%
+%\subsubsection{Listes}
+%
+% \DescribeMacro{\lettre@store@orig@envs}Tout d'abord on définit \cs{lettre@store@orig@envs} qui prend note de
+% l'environnement \texttt{itemize} d'origine fourni par \LaTeX, et qui sera appelé \cs{AtBeginDocument}, et
+% immédiatement après chaque changement de langue effectué par le paquetage de gestion de langue.
+% \begin{macrocode}
\newcommand*{\lettre@store@orig@envs}{%
\let\lettre@orig@itemize\itemize
\let\lettre@orig@enditemize\enditemize
}%
\AtBeginDocument{\lettre@store@orig@envs}%
+% \end{macrocode}
+% \DescribeMacro{\lettre@restore@orig@envs}La macro \cs{lettre@restore@orig@envs} permet de restaurer les
+% environnments \LaTeX\ que \texttt{lettre} redéfinit selon la langue. Notamment l'environnement
+% \texttt{itemize} redéfini en français.
+% \begin{macrocode}
\newcommand*{\lettre@restore@orig@envs}{%
\let\itemize\lettre@orig@itemize
\let\enditemize\lettre@orig@enditemize}%
-\newcommand*{\reset@frenchitemize}{\l@@warning@strictable{\protect\reset@frenchitemize\space est obsolete, utilisez
- plutot \protect\lettre@set@french@envs}\lettre@set@french@envs}
+% \end{macrocode}
+% \DescribeMacro{\reset@frenchitemize}La macro \cs{reset@frenchitemize} est obsolète, appelez plutôt
+% \cs{lettre@set@french@envs} définie dans \texttt{lettre-french.ldf}.
+% \begin{macrocode}
+\newcommand*{\reset@frenchitemize}{\l@@warning@strictable
+ {\protect\reset@frenchitemize\space est obsolete, utilisez
+ plutot \protect\lettre@set@french@envs}\lettre@set@french@envs}
+% \end{macrocode}
+%
+% \begin{macrocode}
\rightmargin 25mm%
- \advance\rightmargin 5pt%
+\advance\rightmargin 5pt%
+\leftmargini 1.5em%
\leftmarginii 2.2em%
\leftmarginiii 1.87em%
\leftmarginiv 1.7em%
\leftmarginv 1em%
\leftmarginvi 1em%
-\leftmargin\leftmargini
\labelsep 5pt%
\parsep 0pt%
-\def\@listi{\leftmargin\listmargin\labelwidth\leftmargin
- \advance\leftmargin 1.5em\advance\labelwidth-\labelsep}%
+\def\@listi{\leftmargin\leftmargini\labelwidth\leftmargin
+ \advance\labelwidth-\labelsep}%
\def\@listii{\leftmargin\leftmarginii
\labelwidth\leftmarginii\advance\labelwidth-\labelsep}%
\def\@listiii{\leftmargin\leftmarginiii
@@ -1382,10 +2331,16 @@ ni mlp, ni polyglossia, ni french}}
\labelwidth\leftmarginv\advance\labelwidth-\labelsep}%
\def\@listvi{\leftmargin\leftmarginvi
\labelwidth\leftmarginvi\advance\labelwidth-\labelsep}%
+% \end{macrocode}
+%
+% \begin{macrocode}
\def\labelitemi{$\bullet$}%
\def\labelitemii{\bfseries --}%
\def\labelitemiii{$\ast$}%
\def\labelitemiv{$\cdot$}%
+% \end{macrocode}
+%
+% \begin{macrocode}
\def\labelenumi{\arabic{enumi}.}%
\def\theenumi{\arabic{enumi}}%
\def\labelenumii{(\alph{enumii})}%
@@ -1397,39 +2352,89 @@ ni mlp, ni polyglossia, ni french}}
\def\labelenumiv{\Alph{enumiv}.}%
\def\theenumiv{\Alph{enumiv}}%
\def\p@enumiv{\p@enumiii\theenumiii}%
+% \end{macrocode}
+% \DescribeEnv{verse}
+% \begin{macrocode}
\def\verse{\let\\=\@centercr
\list{}{\itemsep\z@ \itemindent -15pt\listparindent \itemindent
\rightmargin\leftmargin\advance\leftmargin 15pt}\item[]}%
\let\endverse\endlist
+% \end{macrocode}
+% \DescribeEnv{quotation}
+% \begin{macrocode}
\def\quotation{\list{}{\listparindent 1.5em%
\itemindent\listparindent
\rightmargin\leftmargin}\item[]}%
\let\endquotation=\endlist
+% \end{macrocode}
+% \DescribeEnv{quote}
+% \begin{macrocode}
\def\quote{\list{}{\rightmargin\leftmargin}\item[]}%
\let\endquote=\endlist
-\def\descriptionlabel#1{\itshape #1}%
-\def\description{\list{}{\leftmargin=2\listmargin
- \labelwidth\listmargin \advance\labelwidth -\labelsep
+% \end{macrocode}
+% \DescribeMacro{\descriptionlabel}Format des étiquettes de listes de type \texttt{description}.
+% \changes{3.001}{2020-02-25}{Étiquettes de liste \texttt{description} en gras.}
+% \begin{macrocode}
+\def\descriptionlabel#1{\bfseries #1}%
+% \end{macrocode}
+% \DescribeEnv{description}
+% \begin{macrocode}
+\def\description{\list{}{\advance\leftmargin by 5.75em
+ \labelwidth\leftmargin \advance\labelwidth -\labelsep
\let\makelabel\descriptionlabel}}%
\let\enddescription\endlist
+% \end{macrocode}
+%
+%\subsubsection{Divers}
+%
+% \begin{macrocode}
\def\@begintheorem#1#2{\itshape \trivlist \item[\hskip \labelsep{\bfseries #1\ #2}]}%
\def\@endtheorem{\endtrivlist}%
+% \end{macrocode}
+% \DescribeMacro{\theequation}
+% \begin{macrocode}
\def\theequation{\arabic{equation}}%
+% \end{macrocode}
+%
+% \begin{macrocode}
\arraycolsep 5pt%
\tabcolsep 5pt%
\arrayrulewidth .4pt%
\doublerulesep 2pt%
\tabbingsep\labelsep
\skip\@mpfootins=\skip\footins
+% \end{macrocode}
+% Espace laissé entre la boîte et le texte par \cs{fbox} et \cs{framebox}.
+% \begin{macrocode}
\fboxsep = 3pt
+% \end{macrocode}
+% Épaisseur des filets faits par \cs{fbox} et \cs{framebox}.
+% \begin{macrocode}
\fboxrule = .4pt
+% \end{macrocode}
+%\changes{3.000}{2015-12-20}{Ajout \cs{today} nécessaire à \texttt{e-french}.}%
+% \begin{macrocode}
\newcommand*\today{\cejour}
+% \end{macrocode}
+%
+%\subsubsection{Notes en bas de page}
+%
+% \begin{macrocode}
\def\footnoterule{\kern-1\p@
\hrule width .4\columnwidth
\kern .6\p@}%
+% \end{macrocode}
+% \DescribeMacro{\@makefntext}
+% \begin{macrocode}
\long\def\@makefntext#1{\parindent 1em\noindent
\hb@xt@1.8em{%
\hss\@textsuperscript{\normalfont\@thefnmark}}#1}%
+% \end{macrocode}
+%
+%\subsection{Initialisations}
+%\subsubsection{Initialisation des valeurs par défauts}
+%
+% \begin{macrocode}
\def\pict@let@width{185}%
\def\pict@let@height{65}%
\def\pict@let@hoffset{0}%
@@ -1446,6 +2451,9 @@ ni mlp, ni polyglossia, ni french}}
\def\toaddress@let@hpos{90}%
\def\toaddress@let@vpos{40}%
\toaddress@let@width=80mm
+% \end{macrocode}
+%
+% \begin{macrocode}
\def\pict@fax@width{185}%
\def\pict@fax@height{30}%
\def\pict@fax@hoffset{0}%
@@ -1459,29 +2467,57 @@ ni mlp, ni polyglossia, ni french}}
\faxbox@width=170mm%
\toaddress@fax@width=69mm%
\fromname@fax@width=69mm%
+% \end{macrocode}
+%\changes{2.354}{2014-10-21}{Ajout \cs{lettre@vref@width} et \cs{lettre@nref@width}}%
+% \begin{macrocode}
\lettre@vref@width=21mm%
\lettre@nref@width=21mm%
+% \end{macrocode}
+% \DescribeMacro{\lettre@input@institut}Définition par défaut de \cs{lettre@input@institut}, cette définition
+% peut être changée par l'appel à \cs{institut}.
+% \changes{3.000}{2015-10-30}{Nom fichier institut par défaut en
+% \texttt{lettre-default.cfg}}
+% \begin{macrocode}
\def\lettre@input@institut{\makeatletter
\input{lettre-default.cfg}%
\makeatother}%
+% \end{macrocode}
+%
+% \begin{macrocode}
\smallskipamount=.5\parskip
\medskipamount=\parskip
\bigskipamount=2\parskip
+% \end{macrocode}
+%
+% \begin{macrocode}
\ps@plain
\pagenumbering{arabic}%
\raggedbottom
\onecolumn
+% \end{macrocode}
+% \subsubsection{Initialisations des variables de la lettre}
+% \begin{macrocode}
\def\pdate{\cejour}%
+% \end{macrocode}
+% \begin{macrocode}
\def\emailnum{}%
+% \end{macrocode}
+% \begin{macrocode}
\def\fromlocation{}%
\signum=0\relax
\def\fromsig{}%
\def\fromssig{}%
\def\fromtsig{}%
+% \end{macrocode}
+% Langue française par défaut, si rien d'autre n'a été demandé.
+% \begin{macrocode}
\ifx\lettre@mainlang\@empty
\def\lettre@mainlang{francais}%
\lettreloadlang{french}%
\fi
+% \end{macrocode}
+% Sélection de la langue principale au début du document.
+% \begin{macrocode}
{%
\edef\@tempa{%
\noexpand\AtBeginDocument{%
@@ -1489,6 +2525,8 @@ ni mlp, ni polyglossia, ni french}}
\noexpand\l@@info{Langage par defaut: \lettre@mainlang}}%
}%
\expandafter}\@tempa
+% \end{macrocode}
+% \begin{macrocode}
\def\concdecl{}%
\marge{15mm}%
\msigwidth=\letterwidth
@@ -1499,15 +2537,24 @@ ni mlp, ni polyglossia, ni french}}
\sigspace=1.5cm
\openingspace=1cm
\openingindent=0pt
+% \end{macrocode}
+% \begin{macrocode}
\@lettertrue
\faxpage=0\relax
\def\totalpages{}%
+% \end{macrocode}
+% \begin{macrocode}
\def\auxflag{}%
\auxcount=0\relax
+% \end{macrocode}
+% \changes{2.354}{2014-10-21}{Un argument vide à \cs{Vref} ou \cs{Nref} supprime la référence}%
+% \begin{macrocode}
\let\toref\space
\let\fromref\space
\def\telexnum{}%
\def\ccpnum{}%
+% \end{macrocode}
+% \begin{macrocode}
\def\emailflag{}%
\emailcount=0\relax
\def\@username{}%
@@ -1516,6 +2563,13 @@ ni mlp, ni polyglossia, ni french}}
\def\bitnetnum{}%
\def\telepacnum{}%
\def\decnetnum{}%
+% \end{macrocode}
+% \begin{macrocode}
\def\bdp{}%
\endinput
-% End of file `lettre.cls'.
+% \end{macrocode}
+%^^A End of file `lettre.cls'.
+\iffalse Local Variables: \fi
+\iffalse mode: DocTeX\fi
+\iffalse ispell-dictionary: "francais"\fi
+\iffalse End: \fi
diff --git a/Master/texmf-dist/tex/latex/lettre/lettre.tpl b/Master/texmf-dist/tex/latex/lettre/lettre.tpl
new file mode 100644
index 00000000000..3c9e282f8db
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/lettre/lettre.tpl
@@ -0,0 +1,124 @@
+% This file is part of the "lettre" package.
+% This package is distributed under the terms of the LaTeX Project
+% Public License (LPPL) described in the file lppl.txt.
+%
+% Denis Mégevand - Observatoire de Genève.
+%
+% Ce fichier fait partie de la distribution du paquetage "lettre".
+% Ce paquetage est distribué sous les termes de la licence publique
+% du projet LaTeX (LPPL) décrite dans le fichier lppl.txt.
+
+\documentclass[10pt|11pt|12pt,twoside,leqno,fleqn,%
+ francais|romand|allemand|anglais|americain%
+ origdate]{lettre}
+%\usepackage{french}
+%\usepackage{babel}
+%
+% Production d'etiquettes[commencant a la nieme etiquette de la page]
+% ===================================================================
+%
+%\makelabels[n]
+%
+\begin{document}
+%
+% Declaration du fichier de defauts
+% =================================
+%
+% Permet d'ecrire des lettres personalisees
+% sans repreciser a chaque fois les parametres de l'expediteur
+%
+%\institut{fichier}
+%
+% Declaration du destinataire et environnement
+% ============================================
+%
+% Permet d'ecrire plusieurs lettres a des destinataires differents
+% sans repreciser les parametres de l'expediteur
+%
+\begin{letter}{Destinataire \\
+ Adresse \\
+ no, rue \\
+ NPA Lieu }
+%
+%
+% Parametre obligatoire
+% =====================
+%
+\name{Nom de l'expediteur}
+%
+% Parametres facultatifs de l'entete % (defauts)
+% ===============================================
+%
+%\address{Adresse d'expedition} % ( OBSERVATOIRE DE )
+% % ( GENEVE )
+% % ( )
+% % ( CH-1290 Sauverny )
+%\psobs % ( Logo de l'Observatoire )
+%\location{Precision d'adresse} % ( )
+%\telephone{No de tel expediteur} % ( +41(22) 755 26 11 )
+%\notelephone
+%\fax{No de fax expediteur} % ( +41(22) 755 39 83 )
+%\nofax
+%\email{adresse} % ( )
+%
+%\lieu{Se met devant la date} % (Sauverny, )
+%\nolieu
+%\date{date fixe} % (date courante)
+%\nodate
+%
+% Parametre de mise en page % (defauts)
+% ==============================================
+%
+%\marge{largeur} % (15mm)
+%\tension{valeur} % (2)
+%
+% Parametres facultatifs % (defauts)
+% ===============================================
+%
+%\pagestyle{empty|headings} % ( plain par defaut )
+%\francais|\romand|\anglais| %\(\francais)
+%\americain|\allemand %/
+%
+%\signature{signature} % (\name)
+%\secondsignature{signature} % ()
+%\thirdsignature{signature} % ()
+%
+%\nref{reference}|\Nref{reference} % ()
+%\vref{reference}|\Vref{reference} % ()
+%\telex{numero} % ()
+%\ccp{numero} % ()
+%\faxobs % (+41(22) 755 39 83)
+%\ccpobs % (12-2130-4)
+%
+%\basdepage{texte} % ()
+%\username{nom d'utilisateur} % ()
+%\internet{adresse RFC 822} % ()
+%\ccitt{adresse X400} % ()
+%\bitnet{adresse bitnet} % ()
+%\telepac{numero telepac} % ()
+%\decnet{numero decnet} % ()
+%\internetobs % ([username@]scsun.unige.ch)
+%\ccittobs % ([S=username;]OU=scsun;O=unige;%
+% % PRMD=switch;ADMD=arcom;C=ch)
+%
+%\conc{Sujet de la lettre} % ()
+%
+% Corps de la lettre
+% ==================
+%
+\opening{Cher Ami,}
+%
+ Texte de la lettre
+%
+\closing{Salutations}
+%
+% Paragraphes supplementaires
+% ===========================
+%
+%\ps{label}{texte du post-scriptum}
+%\encl{annexes separees par des \\}
+%\cc{destinataires de copies conformes separes par des \\}
+%
+\end{letter}
+%
+\end{document}