summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source/latex/modroman/modroman.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/source/latex/modroman/modroman.dtx')
-rw-r--r--Master/texmf-dist/source/latex/modroman/modroman.dtx164
1 files changed, 98 insertions, 66 deletions
diff --git a/Master/texmf-dist/source/latex/modroman/modroman.dtx b/Master/texmf-dist/source/latex/modroman/modroman.dtx
index ea8bc3a3295..70952fdeb01 100644
--- a/Master/texmf-dist/source/latex/modroman/modroman.dtx
+++ b/Master/texmf-dist/source/latex/modroman/modroman.dtx
@@ -1,7 +1,9 @@
% \iffalse meta-comment
%
-% Copyright (C) 2003 by Yvon Henel <Yvon.Henel@wanadoo.fr>
-% --------------------------------------------------------
+% Copyright (C) 2003, 2004, 2008 by Yvon Henel,
+% dit « le TeXnicien de surface »
+% <le.texnicien.de.surface@wanadoo.fr>
+% --------------------------------------------------------------
%
% This file may be distributed and/or modified under the
% conditions of the LaTeX Project Public License, either version 1.2
@@ -17,8 +19,8 @@
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
-%<package>\def\fileversion{v0.3}
-%<package>\def\filedate{2004/05/19}
+%<package>\def\fileversion{v0.4}
+%<package>\def\filedate{2008/05/03}
%<package>\def\fileinfo{fichier modroman.dtx par Le TeXnicien de surface}
%<package>\ProvidesPackage{modroman}
%<package> [\filedate\space\fileversion\space\fileinfo]
@@ -26,19 +28,20 @@
%<*driver>
\documentclass{ltxdoc}
\usepackage{xspace,url,multicol}
-\usepackage{modroman}
+\usepackage{modroman}[2008/05/03]
\usepackage[latin1]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[english,frenchb]{babel}
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}%
-% commentez la ligne suivante pour avoir un document avec le code
+% commenter la ligne suivante pour avoir un document avec le code
\OnlyDescription
% comment out the preceding line to obtain the full code
% with explanations in French only, sorry.
\EnableCrossrefs
\CodelineIndex
\RecordChanges
-\GlossaryPrologue{\section*{{Changements}}\markboth{{Changements}}{{Changements}}}
+\GlossaryPrologue{%
+ \section*{{Changements}}\markboth{{Changements}}{{Changements}}}
\IndexPrologue{\section*{Index}\markboth{Index}{Index}%
Les nombres en italique renvoient à la page où l'entrée est décrite ; les
nombres soulignés renvoient à la ligne de code de la définition ; les
@@ -47,14 +50,15 @@
\def\generalname{Général}
\setlength{\columnseprule}{0.5pt}
\setlength{\multicolsep}{6pt plus 2.0pt minus 1.5pt}
-\newenvironment{EnAnglais}{\columnbreak\mbox{}\par\begin{otherlanguage}{english}}{\end{otherlanguage}}
+\newenvironment{EnAnglais}{\columnbreak\mbox{}
+ \par\begin{otherlanguage}{english}}{\end{otherlanguage}}
\begin{document}
\DocInput{modroman.dtx}
\end{document}
%</driver>
% \fi
%
-% \CheckSum{113}
+% \CheckSum{101}
%
% \CharacterTable
% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
@@ -77,6 +81,9 @@
% \changes{v0.2}{2004/02/11}{Ajout des options upourv et vpourv}
% \changes{v0.3}{2004/05/18}{Quelques actions cosmétiques sur la documentation}
% \changes{v0.3}{2004/05/18}{Attirail pour *nix et CTAN.}
+% \changes{v0.4}{2008/05/03}{Je me débarrasse des \cs{if}s.}
+% \changes{v0.4}{2008/05/03}{Protection par \cs{@ifdefinable} des \cs{def}.}
+% \changes{v0.4}{2008/05/03}{J'introduis \cs{modrom@actuelV}.}
%\iffalse
%<*eng>
\changes{v0.1}{2003/04/20}{Initial version}
@@ -84,15 +91,19 @@
\changes{v0.3}{2004/05/18}{Some cosmetic actions on the doc.}
\changes{v0.3}{2004/05/18}{Provides CTAN-ware and *nix tool.}
\changes{v0.3}{2004/05/18}{Bug corrected: 101 is at last written cj.}
+\changes{v0.4}{2008/05/03}{Get rid of the \cs{if}s.}
+\changes{v0.4}{2008/05/03}{Creation of \cs{modrom@actuelV}.}
%</eng>
%\fi
% \GetFileInfo{modroman.sty}
%
% \DoNotIndex{\newcommand,\newenvironment,\fi,\ ,{}}
%
-% \title{Le module \textsf{modroman}\thanks{Ce document
-% correspond au fichier \textsf{modroman}~\fileversion, du \filedate.}}
-% \author{Le \TeX nicien de surface\\ \url{Yvon.Henel@wanadoo.fr}}
+% \title{Le module \textsf{modroman}\thanks{
+% Ce document correspond au fichier
+% \textsf{modroman}~\fileversion, du \filedate\
+% et en est l'édition du cinquantenaire.}}
+% \author{Le \TeX nicien de surface\\ \url{Yvon.Henel@orange.fr}}
%
% \maketitle
%
@@ -227,6 +238,7 @@
% Masson, Paris, Milan, Barcelone, \oldstylenums{1995}.
% \textsc{isbn} : \texttt{2-225-84832-7}.
% \end{thebibliography}
+%
% \StopEventually{}
%
% \section{Le code}
@@ -237,90 +249,110 @@
% Les erreurs que l'on pourrait trouver dans ce fichier sont entièrement
% de moi.
%
-% On déclare un nouveau \cs{if} et les deux options, on sélectionne l'option
-% |vpourv| par défaut, on charge les options.
+% On définit les deux options, on sélectionne l'option |vpourv| par défaut, on
+% charge les options.
+%
% \begin{macrocode}
-\newif\if@upourv
-\DeclareOption{upourv}{\@upourvtrue}
-\DeclareOption{vpourv}{\@upourvfalse}
-\DeclareOption{defaut}{\@upourvfalse}
-\ExecuteOptions{defaut}
+\DeclareOption{vpourv}{%
+% \end{macrocode}
+% \begin{macro}{\modrom@actuelV} Cette macro contient la forme effective du
+% chiffre romain V: ce sera |u| avec l'option |upourv| et |v| avec |vpourv|,
+% l'option par défaut. Dans le 2\ieme \cs{DeclareOption}, qui définit l'option
+% |upourv|, la macro \cs{modrom@actuelV} étant déjà définie lors du traitement
+% de l'option par défaut, \emph{via} |\ExecuteOptions{vpourv}|, on ne contrôle
+% pas la \cs{def} avec \cs{@ifdefinable}, sinon on a une erreur systématique!
+% \begin{macrocode}
+ \@ifdefinable\modrom@actuelV{\def\modrom@actuelV{v}}
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+\DeclareOption{upourv}{\def\modrom@actuelV{u}}
+\ExecuteOptions{vpourv}
\ProcessOptions\relax
% \end{macrocode}
-% \begin{macro}{\modromannumeral}
-% La première macro, dans le style \TeX, que je décris ci-dessous.
-%
-% On commence par créer un nouveau compteur \cs{romt@mp}.
+% \begin{macro}{\romt@mp}
+% On commence par créer un nouveau compteur \cs{romt@mp} à la mode \TeX, en
+% s'assurant que c'est possible.
% \begin{macrocode}
-\newcount\romt@mp
+\@ifdefinable\romt@mp{\newcount\romt@mp}
% \end{macrocode}
-% On poursuit en écrivant la macro principale qui fait appel à
-% \cs{modrom@naux}. Le \cs{afterassignment} permet de commencer par lire le
-% nombre \(N\) qui suit et l'affecter au compteur \cs{romt@mp} puis ensuite de
-% lancer \cs{modrom@naux} avec \cs{romt@mp} comme argument.
+% \end{macro}
+% \begin{macro}{\modromannumeral}
+% On poursuit en écrivant la macro principale, définie à la \TeX\ mais en
+% ayant pris soin de s'assurer que c'est possible avec \cs{@ifdefinable}. Elle
+% fait appel à \cs{modrom@naux}. Le \cs{afterassignment} permet de commencer
+% par lire le nombre \(N\) qui suit et l'affecter au compteur \cs{romt@mp}
+% puis ensuite de lancer \cs{modrom@naux} avec \cs{romt@mp} comme argument.
% \begin{macrocode}
-\def\modromannumeral{\afterassignment\modrom@naux \romt@mp=}
+\@ifdefinable\modromannumeral{%
+ \def\modromannumeral{\afterassignment\modrom@naux \romt@mp=}}
% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\modrom@naux}
% On continue avec \cs{modrom@naux} qui regarde si \(N\) est strictement
% inférieure à 10. Si c'est le cas on exécute \cs{modrom@ni} avec \cs{romt@mp}
% pour argument. Sinon on exécute \cs{modrom@nii} avec ce même argument.
% \begin{macrocode}
-\def\modrom@naux{\ifnum\romt@mp<10
- \modrom@ni{\romt@mp}\else\modrom@nii{\romt@mp}\fi\relax}
+\@ifdefinable\modrom@naux{%
+ \def\modrom@naux{\ifnum\romt@mp<10
+ \modrom@ni{\romt@mp}\else\modrom@nii{\romt@mp}\fi\relax}}
% \end{macrocode}
-% La macro \cs{modrom@ni} admet un argument. Elle se contente de réécrire la
-% forme souhaitée du nombre à un chiffre \(N\) passé en argument à
-% \cs{modromannumeral}. On utilise un test \cs{ifcase} \cs{or} \texttt{\dots}
-% \cs{fi}. On remarquera que le premier \cs{or} suit directement la condition
-% puisque ce nombre ne peut être nul. Suivant le choix de l'option on aura
-% une définition ou l'autre.
+% \end{macro}
+% \begin{macro}{\modrom@ni} Cette macro sert à écrire la version modifiée du
+% nombre en chiffre romain quand ce nombre est inférieur à \(10\). Elle fait
+% appel à \cs{modrom@actuelV} pour savoir quelle forme du $5$ romain écrire. On
+% utilise un test \cs{ifcase} \cs{or} \texttt{\dots} \cs{fi}. On remarquera que
+% le premier \cs{or} suit directement la condition puisque ce nombre ne peut
+% être nul.
+% \changes{v0.4}{2008/05/03}{Réécriture de la définition à l'aide de
+% \cs{modrom@actuelV}.}
% \begin{macrocode}
-\if@upourv
-\def\modrom@ni#1{\ifcase#1 \or i\or ij\or iij\or iu\or
- u\or uj\or uij\or uiij\or ix\fi\relax}\else
-\def\modrom@ni#1{\ifcase#1 \or i\or ij\or iij\or iv\or
- v\or vj\or vij\or viij\or ix\fi\relax}\fi
+\@ifdefinable\modrom@ni{%
+ \def\modrom@ni#1{\ifcase#1 \or i\or ij\or iij\or i\modrom@actuelV\or
+ \modrom@actuelV\or \modrom@actuelV j\or \modrom@actuelV ij\or
+ \modrom@actuelV iij\or ix\fi\relax}}%
% \end{macrocode}
-%
+% \end{macro}
+% \begin{macro}{\modrom@nii}
% La macro \cs{modrom@nii} admet un argument. Elle utilise la macro
% auxiliaire \cs{modrom@nij}. Elle crée dans un groupe ---~notez les doubles
% parenthèses ouvrantes et fermantes~--- deux compteurs temporaires. On
-% affecte \(N\) aux deux compteurs.
+% affecte \(N\) aux deux compteurs.
%
% Après la 1\iere instruction de la deuxième ligne le compteur 0 |\count0|
-% contient le quotient \(q\) de l'argument principal \(N\) dans la division
+% contient le quotient, \(q\), de l'argument principal, \(N\), dans la division
% euclidienne par \(10\). À la fin de cette ligne il contient \(10q\).
%
-% Après la troisième ligne, le compteur 1 comptient contient \(r\) le reste de
+% Après la troisième ligne, le compteur 1 comptient contient \(r\), le reste de
% la division de \(N\) par \(10\). Pour finir, on écrit \(10q\) en chiffres
-% romains grâce à la primitive \TeX{} \cs{romannumeral} et on écrit le reste \(r\)
+% romains grâce à la primitive \TeX{} \cs{romannumeral} et on écrit le reste~\(r\)
% grâce à \cs{modrom@nij}.
% \begin{macrocode}
-\def\modrom@nii#1{{\count0 =#1\count1 =\count0 %
- \divide\count0 by 10 \multiply\count0 by 10 %
- \advance \count1 by -\count0 %
- \romannumeral\count0\modrom@nij{\count1}%
- }}
+\@ifdefinable\modrom@nii{%
+ \def\modrom@nii#1{{\count0 =#1\count1 =\count0 %
+ \divide\count0 by 10 \multiply\count0 by 10 %
+ \advance \count1 by -\count0 %
+ \romannumeral\count0\modrom@nij{\count1}}}}
% \end{macrocode}
% \end{macro}
-% La macro \cs{modrom@nij} admet un argument. Elle pratique comme
-% \cs{modrom@ni} en tenant compte toutefois que \(N\) est un nombre à au moins
-% deux chiffres ce qui entraine que, p. ex., \(101\) s'écrit
-% \modromannumeral 101. Et on a une \og double \fg définition comme ci-dessus
-% pour les mêmes raisons.
-% \begin{macro}{\modrom@nij}
-% C'est la macro qui écrit le reste lorsque \(N > 9\).
-% \changes{v0.3}{2004/05/18}{Correction d'un bogue : 101 donne enfin \emph{cj}.}
+% \begin{macro}{modrom@nij} La commande \cs{modrom@nij} écrit le dernier
+% chiffre romain d'un nombre supérieur à \(10\). Elle admet un argument et
+% pratique comme \cs{modrom@ni} en tenant compte toutefois que \(N\) est un
+% nombre à au moins deux chiffres ce qui entraine que, p. ex., \(101\) s'écrit
+% \modromannumeral 101. Elle fait également appel à \cs{modrom@actuelV} pour
+% tenir compte de l'option choisie.
+% \changes{v0.4}{2008/05/03}{Réécriture de la définition à l'aide de
+% \cs{modrom@actuelV}.}
% \begin{macrocode}
-\if@upourv
-\def\modrom@nij#1{\ifcase#1 \or j\or ij\or iij\or iu\or
- u\or uj\or uij\or uiij\or ix\fi\relax}\else
-\def\modrom@nij#1{\ifcase#1 \or j\or ij\or iij\or iv\or
- v\or vj\or vij\or viij\or ix\fi\relax}\fi
+\@ifdefinable\modrom@nij{%
+ \def\modrom@nij#1{\ifcase#1 \or j\or ij\or iij\or i\modrom@actuelV\or
+ \modrom@actuelV\or \modrom@actuelV j\or \modrom@actuelV ij\or
+ \modrom@actuelV iij\or ix\fi\relax}}
% \end{macrocode}
% \end{macro}
-% \begin{macro}{\modroman}
%
+% \begin{macro}{\modroman}
% La deuxième macro, dans le style \LaTeX, est bien plus courte. Elle
% fait appel à \cs{expandafter} pour que \cs{value} passe bien un nombre
% --~la valeur du compteur passé en argument~-- à \cs{modromannumeral}