% \iffalse meta-comment
% -*- mode: LaTeX; coding: iso-8859-15 -*-
% Time-stamp: <2008-05-07T21:09:22 (cest) [yvon sur hypatie]>
% Copyright (C) 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
% 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.2 or later is part of all distributions of LaTeX 
% version 1999/12/01 or later.
% \fi
%
% \iffalse
%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
%<package>\def\PackageName{engrec}  
%<package>\def\fileversion{v1.1}  
%<package>\def\filedate{2008/05/07} 
%<package>\def\fileinfo{fichier engrec.sty par Le TeXnicien de surface}
%<package>\ProvidesPackage{engrec}
%<package>   [\filedate\space\fileversion\space\fileinfo] 
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}  
\usepackage{engrec}[2008/05/07]
\usepackage{xspace,url,multicol,ifthen}
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}
\usepackage[english,frenchb]{babel}
% commentez 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
\makeatletter
%%% quelques redéfinition de commande de la classe ltxdoc.cls ou de
%%% l'extension doc.sty pour une documentation en français.
\GlossaryPrologue{%
  \section*{{Changements -- Changes}}%
  \markboth{{Changements -- Changes}}{{Changements -- Changes}}}
\IndexPrologue{\section*{Index}\markboth{Index}{Index}%
  \begin{Morciau}\selectlanguage{french}
    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 nombres en caractères romains renvoient à la
    ligne de code où l'entrée est utilisée.\EnAnglais Numbers
    written in italic refer to the page where the corresponding
    entry is described; numbers underlined refer to the code line of
    the definition; numbers in roman refer to the code line where
    the entry is used.\end{Morciau}}
\renewcommand{\SpecialMainEnvIndex}[1]{%
  \@bsphack\special@index{%
    #1\actualchar
    {\string\ttfamily\space#1}
    (environnement)%
    \encapchar main}%
  \special@index{environnements:\levelchar{%
      \string\ttfamily\space#1}\encapchar
    main}\@esphack}
\makeatother
\def\generalname{Général -- General}
%%% fin de la francisation
\setlength{\columnseprule}{0.5pt}
\setlength{\multicolsep}{6pt plus 2.0pt minus 1.5pt}
\def\FraTitre{\relax}
\def\EngTitre{\relax}
\newcommand{\TraiteTitre}[1]{\TraiteTitreAux#1/ZZZ}
\def\TraiteTitreAux#1/#2/ZZZ{\def\FraTitre{\TitreMorciau{#1}}%
  \ifthenelse{\equal{#2}{}}{\def\LarGuMent{#1}}{\def\LarGuMent{#2}}
  \def\EngTitre{\TitreMorciau{\LarGuMent}}}
\newcommand{\TitreMorciau}[1]{\paragraph{#1}}
\newenvironment{Morciau}[1][ZXZXZ]{\begin{multicols}{2}%
    \selectlanguage{french}%
    \ifthenelse{\equal{#1}{ZXZXZ}}{\relax}{\TraiteTitre{#1}\FraTitre}}%
  {\end{multicols}}   
\newcommand{\EnAnglais}{\columnbreak\mbox{}
  \par\selectlanguage{english}\EngTitre} 
\newcommand{\NomDeModule}[1]{\texttt{#1.sty}\xspace}
\newcommand{\fctt}{\texttt{fr.comp.text.tex}\xspace}
\newcommand{\Sourire}{\texttt{;-)}\xspace}
%%% fin de la personalisation
\begin{document}
  \DocInput{engrec.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{444}
%
% \CharacterTable
%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%   Digits        \0\1\2\3\4\5\6\7\8\9
%   Exclamation   \!     Double quote  \"     Hash (number) \#
%   Dollar        \$     Percent       \%     Ampersand     \&
%   Acute accent  \'     Left paren    \(     Right paren   \)
%   Asterisk      \*     Plus          \+     Comma         \,
%   Minus         \-     Point         \.     Solidus       \/
%   Colon         \:     Semicolon     \;     Less than     \<
%   Equals        \=     Greater than  \>     Question mark \?
%   Commercial at \@     Left bracket  \[     Backslash     \\
%   Right bracket \]     Circumflex    \^     Underscore    \_
%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%   Right brace   \}     Tilde         \~}
%
% \GetFileInfo{engrec.sty}
%
% \changes{v1}{2004/05/20}{1\iere version publique. 1st public version.} 
% \changes{v1.1}{2008/05/04}{Recquiert \texttt{amstext} au lieu de
% \texttt{amsmath}. Demands \texttt{amstext} instead of \texttt{amsmath}.}
% \changes{v1.1}{2008/05/04}{Utilise \cs{ensuremath}. Uses \cs{ensuremath}.}
%
% \DoNotIndex{\newcommand,\newenvironment,\i,\ae,\oe,\DeclareOption,^^A
%   \alpha, \beta, \gamma, \delta, \epsilon,^^A
%   \varepsilon, \zeta, \eta, \theta, \vartheta, \iota, \kappa,^^A
%   \lambda, \mu, \nu, \xi, \pi, \varpi, \rho, \varrho, \sigma,^^A
%   \varsigma, \tau, \upsilon, \phi, \varphi, \chi, \psi, \omega,^^A
%   \upalpha, \upbeta, \upgamma, \updelta, \upepsilon,^^A
%   \upvarepsilon, \upzeta, \upeta, \uptheta, \upvartheta, \upiota, \upkappa,^^A
%   \uplambda, \upmu, \upnu, \upxi, \uppi, \upvarpi, \uprho, \upvarrho, \upsigma,^^A
%   \upvarsigma, \uptau, \upupsilon, \upphi, \upvarphi, \upchi, \uppsi, \upomega,^^A
%   \Delta, \Gamma, \Theta, \Lambda, \Xi, \Pi, \Phi, \Psi \Sigma,^^A
%   \Upsilon, \ExecuteOptions, \providecommand, \newif,^^A  
%   \fi, \if, \or, \ifnum,\ifcase, \def, \expandafter,^^A
%   \RequirePackage, \@ctrerr, \ProcessOptions,\relax,^^A
%   \text, \textup \csname, \endcsname, \value, \else, \Omega, \ensuremath}
% 
% \title{Le module \textsf{engrec}\thanks{Ce document correspond au
%                   fichier \textsf{engrec}~\fileversion, du \filedate. Édition
%                   du cinquantenaire.}\\ 
% The package \textsf{engrec}\thanks{Corresponds to the
%                   file \textsf{engrec}~\fileversion, dated \filedate. 50th
%                   anniversary edition.}}
% 
% \author{Le \TeX nicien de surface\thanks{%
%                 \texttt{le.texnicien.de.surface@wanadoo.fr}}}  
%
% \maketitle
%
%\section{Introduction}
%\label{secIntro}
% \begin{Morciau}[Macros~publiques/Public~Macros]
% Deux macros \cs{engrec} et \cs{EnGrec} pour numéroter, par exemple
% des listes, avec des minuscules ou des majuscules grecques. Leur
% syntaxe est celle de \cs{alph}.
% \EnAnglais
% Two macros  \cs{engrec} and \cs{EnGrec} to enumerate, for example
% some lists, with lower case or upper case greek letters. They have
% the syntax of \cs{alph}.
% \end{Morciau}
% \begin{Morciau}[Syntaxe/Syntax]
%   \cs{engrec}\marg{compteur} \cs{EnGrec}\marg{compteur}
%   \EnAnglais
%   \cs{engrec}\marg{counter}\\  \cs{EnGrec}\marg{counter}
% \end{Morciau}
% \begin{Morciau}[Options/]
% Le module admet des options qui permettent de selectionner la
% forme des caractères à variante. \texttt{toto} étant égal à
% \texttt{epsilon} ou \texttt{theta} ou \texttt{pi} ou \texttt{rho}
% ou \texttt{sigma} ou \texttt{phi}, l'option \texttt{vartoto}
% sélectionne la lettre grecque minuscule \cs{vartoto} et s'oppose à
% l'option \texttt{toto} qui sélectionne \cs{toto}.
% \EnAnglais
% The package has options which enable us to select the shape of the
% greek lower case character with variant. Let \texttt{toto} be equal
% to \texttt{epsilon} or \texttt{theta} or \texttt{pi} or \texttt{rho}
% or \texttt{sigma} or \texttt{phi}, the option \texttt{vartoto}
% selects the greek lower case character \cs{vartoto} and is the
% opposite of the option \texttt{toto} which selects \cs{toto}. 
% \end{Morciau}
% \begin{Morciau}[Minuscules~droites/Upright~Lowercases]
% Le module admet aussi l'option \texttt{upgreek} qui charge
% \NomDeModule{upgreek} pour fournir des minuscules grecques droites. Cette
% option s'oppose à \texttt{slgreek}, option par défaut.
% \EnAnglais
% The package has also option \texttt{upgreek} which loads \NomDeModule{upgreek}
% to provide upright lower case greek characters. That option is the opposite of
% the default \texttt{slgreek}.
% \end{Morciau}
% \begin{Morciau}[Avec~fourier.sty/With~fourier.sty]
% Il admet enfin l'option \texttt{upright} qui règle le cas du \emph{omicron} et
% doit être utilisée lorsque l'on charge \NomDeModule{fourier} avec l'option
% \texttt{upright}. Cette option s'oppose à \texttt{sloped}, prise par défaut.
% \EnAnglais
% It has also option \texttt{upright} which takes care of the
% \emph{omicron} and must be used when one loads \NomDeModule{fourier}
% with option \texttt{upright}. This option is the opposite of the
% default \texttt{sloped}.
% \end{Morciau}
% \begin{Morciau}   
% La façon la plus simple de passer cette option est alors d'utiliser\\
% \cs{DocumentClass}[\texttt{upright}$\cdots$]\marg{classe}\\ plutôt que de
% charger et \NomDeModule{fourier} et \NomDeModule{engrec} avec, tous deux,
% l'option \texttt{upright}.
% \EnAnglais
% The easiest way of selecting that option is to use\\
% \cs{DocumentClass}[\texttt{upright}$\cdots$]\marg{class}\\ instead of
% loading and \NomDeModule{fourier} and \NomDeModule{engrec} both with option
% \texttt{upright}.  
% \end{Morciau}
% \begin{Morciau}[\text{Options~par~défaut}/\text{Default~Options}]
% \texttt{varepsilon}, \texttt{theta}, \texttt{pi}, \texttt{rho},
% \texttt{sigma}, \texttt{varphi}, \texttt{sloped}, \texttt{slgreek}. 
% \EnAnglais
% \texttt{varepsilon}, \texttt{theta}, \texttt{pi}, \texttt{rho},
% \texttt{sigma}, \texttt{varphi}, \texttt{sloped}, \texttt{slgreek}. 
% \end{Morciau}
% \begin{Morciau}[Module~chargé/Loaded~Package]
% Ce module nécessite \NomDeModule{amstext} dont il utilise la
% commande \cs{text} pour définir les macros comme \cs{Alpha} qui sont
% les  \og noms \fg des majuscules grecques qui n'en ont pas 
% d'habitude car leur forme est semblable à celle d'une lettre
% latine : {\ttfamily Alpha, Beta, Epsilon, Zeta, Eta, Iota,
% Mu, Nu, Omicron, Rho, Tau, Chi}. Par exemple \cs{Alpha} est égale à 
% \EnAnglais
% This package requires \NomDeModule{amstext} for it uses \cs{text}
% defined there to create macros such as \cs{Alpha} which are the
% `names' of the upper case greek letters which have usually no names
% since their shape is similar to the shape of a latin character,
% viz.: {\ttfamily Alpha, Beta, Epsilon, Zeta, Eta, Iota, Mu, Nu,
% Omicron, Rho, Tau, Chi}. \cs{Alpha}, e. g., is equal to
% \end{Morciau}
% \hspace*{\stretch{1}}\cs{text}|{|\cs{rmfamily}\cs{upshape}| A}|\hspace*{\stretch{1}}
% \begin{Morciau}[omicron/] 
% Il définit également la minuscule \texttt{omicron}. 
% \cs{omicron} est définie comme ci-dessous  et
% apparaît comme $\omicron$. Il en donne une version toujours droite avec
% \cs{upomicron} : \upomicron. 
% \EnAnglais
% The lower case \texttt{omicron} is also provided by \cs{omicron} and
% defined as shown below which is printed
% $\omicron$. There is also an always upright version with
% \cs{upomicron}:~\upomicron.  
% \end{Morciau}
% \hspace*{\stretch{1}}\cs{text}|{|\cs{rmfamily}\cs{itshape}| o}|\hspace*{\stretch{1}}
% \begin{Morciau}[Le code/The Code] 
% Le code des macros \cs{engrec}, \cs{EnGrec} et des macros
% auxiliaires associées |\@grec| et |\@Grec| est repris quasi verbatim
% de \texttt{latex.ltx}. 
% \EnAnglais
% The code of macros \cs{engrec}, \cs{EnGrec} and of associated
% auxiliary macros |\@grec| and |\@Grec| is taken, almost verbatim,
% from \texttt{latex.ltx}.  
% \end{Morciau}
%
% \section{Utilisation -- Usage}
% \begin{Morciau}[Exemple/Example]
% On crée un compteur, on l'initialise à 1, on en fait écrire la valeur par
% \cs{engrec} puis on l'augmente de 1 et on fait écrire sa valeur par
% \cs{engrec} 24 fois grace à \cs{whiledo} de \texttt{ifthen}. Puis la même
% chose avec \cs{EnGrec}.   
% \EnAnglais
% We create a counter, initialise it to 1, make \cs{engrec} write its value then
% we add 1 and write its value with \cs{engrec} 24 times with the help of
% \cs{whiledo} from \texttt{ifthen}. Then the same with \cs{EnGrec}. 
% \end{Morciau}
% \bgroup \setlength{\parindent}{0pt}
% |\newcounter{montruc} \setcounter{montruc}{1}|\\
% |\whiledo{\value{montruc}<25}{\engrec{montruc} \stepcounter{montruc}}|
% 
% \newcounter{montruc} \setcounter{montruc}{1} 
% \whiledo{\value{montruc}<25}{\engrec{montruc} \stepcounter{montruc}}
%
% |\newcounter{montruc} \setcounter{montruc}{1}|\\
% |\whiledo{\value{montruc}<25}{\EnGrec{montruc} \stepcounter{montruc}}|
% 
% \setcounter{montruc}{1} 
% \whiledo{\value{montruc}<25}{\EnGrec{montruc} \stepcounter{montruc}}
% \egroup
%^^A  
% \StopEventually{}
% \section{Le code}
% \label{secCode}
% On dit boujour, puis on définit les huit tests qui correspondent aux
% six paires d'options possibles.  
% \iffalse
%<*package>
% \fi
%    \begin{macrocode}
\newif\if@varepsilon
\newif\if@vartheta
\newif\if@varpi
\newif\if@varrho
\newif\if@varsigma
\newif\if@varphi
\newif\if@upomicron  
\newif\if@upgreek    
%    \end{macrocode}
% On définit les options. Chacune fixe à \texttt{true} ou
% \texttt{false} le booléen correspondant.
%    \begin{macrocode}
\DeclareOption{upright}{\@upomicrontrue}
\DeclareOption{sloped}{\@upomicronfalse}
\DeclareOption{upgreek}{\@upgreektrue}
\DeclareOption{slgreek}{\@upgreekfalse}
\DeclareOption{varepsilon}{\@varepsilontrue}
\DeclareOption{epsilon}{\@varepsilonfalse}
\DeclareOption{vartheta}{\@varthetatrue}
\DeclareOption{theta}{\@varthetafalse}
\DeclareOption{varpi}{\@varpitrue}
\DeclareOption{pi}{\@varpifalse}
\DeclareOption{varrho}{\@varrhotrue}
\DeclareOption{rho}{\@varrhofalse}
\DeclareOption{varsigma}{\@varsigmatrue}
\DeclareOption{sigma}{\@varsigmafalse}
\DeclareOption{varphi}{\@varphitrue}
\DeclareOption{phi}{\@varphifalse}
%    \end{macrocode}
% On exécute les options par défaut. 
%    \begin{macrocode}
\ExecuteOptions{varepsilon,theta,pi,rho,sigma,varphi,sloped,slgreek}
\ProcessOptions\relax
%    \end{macrocode}
% On charge le module \NomDeModule{amstext} qui fournit la macro \cs{text}.
%    \begin{macrocode}
\RequirePackage{amstext}
%    \end{macrocode}
% On charge le module \NomDeModule{upgreek} si l'option \texttt{upgreek} a été
% choisie. 
%    \begin{macrocode}
\if@upgreek \RequirePackage{upgreek}\fi
%    \end{macrocode}
% 
% \begin{macro}{\Alpha}
% On définit les macros  \og manquantes \fg de telle sorte que chaque
% lettre grecque ait sa macro. On utilise \cs{providecommand} au cas
% où un module se chargerait de les définir. On fixe la famille romaine et la
% forme droite avec \cs{rmfamily} et \cs{upshape}. 
% \changes{v1.1}{2008/05/07}{Fixe la forme romain droit. Fix roman upshape.}
% 
%    \begin{macrocode} 
\providecommand{\Alpha}{\text{\rmfamily\upshape A}}
\providecommand{\Beta}{\text{\rmfamily\upshape B}}
\providecommand{\Epsilon}{\text{\rmfamily\upshape E}}
\providecommand{\Zeta}{\text{\rmfamily\upshape Z}}
\providecommand{\Eta}{\text{\rmfamily\upshape H}}
\providecommand{\Iota}{\text{\rmfamily\upshape I}}
\providecommand{\Kappa}{\text{\rmfamily\upshape K}}
\providecommand{\Mu}{\text{\rmfamily\upshape M}}
\providecommand{\Nu}{\text{\rmfamily\upshape N}}
\providecommand{\Omicron}{\text{\rmfamily\upshape O}}
\providecommand{\Rho}{\text{\rmfamily\upshape P}}
\providecommand{\Tau}{\text{\rmfamily\upshape T}}
\providecommand{\Chi}{\text{\rmfamily\upshape X}}
\providecommand{\omicron}{\text{\rmfamily\itshape o}}
\providecommand{\upomicron}{\text{\rmfamily\upshape o}}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\engrec}
% Le code est copié sur celui de \cs{alph} dans \texttt{latex.ltx}. 
%    \begin{macrocode}
\def\engrec#1{\expandafter\@grec\csname c@#1\endcsname}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@grec}
% Le code est copié sur celui de |\@alph| dans \texttt{latex.ltx} avec les
% interventions des options. On utilise \cs{ensuremath} au lieu de |$ $| pour
% permettre l'utilisation au milieu des mathématiques.
%    \begin{macrocode}
\if@upgreek 
\def\@grec#1{%
  \ifcase#1\or 
  \ensuremath{\upalpha}\or 
  \ensuremath{\upbeta}\or
  \ensuremath{\upgamma}\or 
  \ensuremath{\updelta}\or 
  \if@varepsilon \ensuremath{\upvarepsilon}\else \ensuremath{\upepsilon}\fi \or
  \ensuremath{\upzeta}\or 
  \ensuremath{\upeta}\or 
  \if@vartheta \ensuremath{\upvartheta}\else \ensuremath{\uptheta}\fi \or
  \ensuremath{\upiota}\or 
  \ensuremath{\upkappa}\or 
  \ensuremath{\uplambda}\or
  \ensuremath{\upmu}\or 
  \ensuremath{\upnu}\or 
  \ensuremath{\upxi}\or
  \ensuremath{\upomicron}\or 
  \if@varpi \ensuremath{\upvarpi}\else \ensuremath{\uppi}\fi \or 
  \if@varrho \ensuremath{\upvarrho}\else \ensuremath{\uprho}\fi \or 
  \if@varsigma \ensuremath{\upvarsigma}\else \ensuremath{\upsigma}\fi \or 
  \ensuremath{\uptau}\or 
  \ensuremath{\upupsilon}\or
  \if@varphi \ensuremath{\upvarphi}\else \ensuremath{\upphi}\fi \or
  \ensuremath{\upchi}\or 
  \ensuremath{\uppsi}\or
  \ensuremath{\upomega}\else
  \@ctrerr\fi}%
\else
\def\@grec#1{%
  \ifcase#1\or 
  \ensuremath{\alpha}\or 
  \ensuremath{\beta}\or
  \ensuremath{\gamma}\or 
  \ensuremath{\delta}\or 
  \if@varepsilon \ensuremath{\varepsilon}\else \ensuremath{\epsilon}\fi \or
  \ensuremath{\zeta}\or 
  \ensuremath{\eta}\or 
  \if@vartheta \ensuremath{\vartheta}\else \ensuremath{\theta}\fi \or 
  \ensuremath{\iota}\or
  \ensuremath{\kappa}\or 
  \ensuremath{\lambda}\or 
  \ensuremath{\mu}\or
  \ensuremath{\nu}\or 
  \ensuremath{\xi}\or 
  \if@upomicron \ensuremath{\upomicron}\else \ensuremath{\omicron}\fi\or 
  \if@varpi \ensuremath{\varpi}\else \ensuremath{\pi}\fi \or 
  \if@varrho \ensuremath{\varrho}\else \ensuremath{\rho}\fi \or 
  \if@varsigma \ensuremath{\varsigma}\else \ensuremath{\sigma}\fi \or 
  \ensuremath{\tau}\or
  \ensuremath{\upsilon}\or 
  \if@varphi \ensuremath{\varphi}\else \ensuremath{\phi}\fi \or 
  \ensuremath{\chi}\or 
  \ensuremath{\psi}\or
  \ensuremath{\omega}\else
  \@ctrerr\fi}
\fi
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\EnGrec}
% Le code est encore copié sur celui de \cs{alph} dans \texttt{latex.ltx}. 
%    \begin{macrocode}
\def\EnGrec#1{\expandafter\@Grec\csname c@#1\endcsname}
%    \end{macrocode}
% \end{macro}
% \begin{macro}{\@Grec} 
% C'est encore pareil. Ici, pas de variante pour les majuscules.
%    \begin{macrocode}
\def\@Grec#1{%
  \ifcase#1\or
  \ensuremath{\Alpha}\or
  \ensuremath{\Beta}\or
  \ensuremath{\Gamma}\or
  \ensuremath{\Delta}\or
  \ensuremath{\Epsilon}\or
  \ensuremath{\Zeta}\or
  \ensuremath{\Eta}\or
  \ensuremath{\Theta}\or
  \ensuremath{\Iota}\or
  \ensuremath{\Kappa}\or
  \ensuremath{\Lambda}\or
  \ensuremath{\Mu}\or
  \ensuremath{\Nu}\or
  \ensuremath{\Xi}\or
  \ensuremath{\Omicron}\or
  \ensuremath{\Pi}\or
  \ensuremath{\Rho}\or
  \ensuremath{\Sigma}\or
  \ensuremath{\Tau}\or
  \ensuremath{\Upsilon}\or
  \ensuremath{\Phi}\or
  \ensuremath{\Chi}\or
  \ensuremath{\Psi}\or
  \ensuremath{\Omega}\else
  \@ctrerr\fi}
%    \end{macrocode}
% \end{macro}
% \iffalse
%</package>
% \fi
% \Finale \PrintChanges\PrintIndex
\endinput
%%% Local Variables: 
%%% mode: latex
%%% TeX-master: t
%%% End: 
