% \iffalse meta-comment % -*- coding: iso-8859-15 -*- % -------------------------------------------------------------------- % % Copyright (C) 2004, 2008 by Josselin Noirel et Yvon Henel % % Y. 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: % % <URL: 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\fileversion{v1} %<package>\def\filedate{2008/08/14} %<package>\def\fileinfo{fichier drac.sty par J. Noirel et Y. Henel} %<package>\ProvidesPackage{drac} %<package> [\filedate\space\fileversion\space\fileinfo] % %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage{drac} \usepackage{url,array,xspace} \usepackage[latin9]{inputenc} \usepackage[T1]{fontenc} \IfFileExists{lmodern.sty}{\usepackage{lmodern}}{} \usepackage{ifpdf} \usepackage{textcomp} \usepackage{calc} \let\cs=\relax \DeclareRobustCommand*{\cs}[1]{{\normalfont\ttfamily\char`\\#1}} \renewcommand*{\meta}[1]{{\normalfont\textlangle{\itshape #1\/}\textrangle}} \newcommand*{\fctt}{{\normalfont\ttfamily fr.comp.text.tex}} \makeatletter \DoNotIndex{\@tempa,\@tempb,\@tempc,\csname,\endcsname,\noexpand,\def,^^A \edef,\ifx,\else,\endinput,\expandafter,\fi,\let,\newcommand,\relax,^^A \string,\@ifstar} \makeatother \usepackage[english,frenchb]{babel} % Commentez la ligne suivante pour avoir un document avec le code comment� \OnlyDescription \EnableCrossrefs \CodelineIndex \RecordChanges \GlossaryPrologue{% \section*{{Changements}}} \IndexPrologue{\section*{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 nombres en caract�res romains renvoient � la ligne de code o� l'entr�e est utilis�e.} \newcommand\BOP{\discretionary{}{}{}} \begin{document} \DocInput{drac-fr.dtx} \end{document} %</driver> % \fi % \CheckSum{72} % % \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 \~} % % \changes{v0}{2004/04/22}{A failli �tre la premi�re version publique} % \changes{v0.1}{2004/05/17}{A manqu� de peu d'�tre la premi�re % version publique} % \changes{v0.1}{2004/05/17}{Ajout de \cs{ReDeclareRobActChar}} % \changes{v1}{2008/08/14}{1\iere version publique} % \GetFileInfo{drac.sty} % % \title{Le module \textsf{drac}\thanks{Ce document correspond au % fichier \textsf{drac}~\fileversion, du \filedate.}} % \author{Josselin Noirel et Yvon Henel} % % \maketitle % \begin{abstract} % Ce module d�finit \cs{DeclareRobustActChar} et % \cs{ReDeclareRobActChar}. % % On utilise \cs{DeclareRobustActChar} comme % \cs{DeclareRobustCommand} mais elle prot�ge le caract�re actif, % voir~\path{ltdefns.dtx} dans \path{/latex/base/}. Cela permet, par % exemple, d'�crire ce caract�re dans un fichier auxiliaire sans % qu'il soit d�velopp�. Il est donc devenu \og robuste\fg au sens % des arguments \og mobiles\fg de \LaTeX. % % \cs{ReDeclareRobActChar} permet de red�finir le caract�re actif % d�fini pr�alablement par % \cs{Declare}\BOP|Robust|\BOP|Act|\BOP|Char| � la mani�re de % \cs{renewcommand}. % \end{abstract} % \begin{otherlanguage}{english} % \begin{abstract} % This package provides \cs{DeclareRobustActChar} and % \cs{Re}\BOP|Declare|\BOP|Rob|\BOP|Act|\BOP|Char| macros. % % You should have downloaded with this file a file % \path{drac-en.dtx} and a file \path{drac.pdf} which % give the English documentation of this package. % \end{abstract} % \end{otherlanguage} % \tableofcontents % % \section{Introduction} % \begingroup\footnotesize{} % Lorsqu'elle apparut pour la premi�re fois, le \oldstylenums{8}~avril % \oldstylenums{2004}, sur \fctt{} dans le fil de discussion \og la % question � \oldstylenums{100}~euros\fg, le nom de la macro �tait % \cs{DeclareRobustActiveCharacter} qui avait l'avantage d'�tre % totalement descriptif mais l'inconv�nient d'�tre long. Pour all�ger % quelque peu le travail du codeur mais \emph{surtout} pour �viter un % joyeux bazar dans l'index de cette documentation, j'ai pris sur moi % de la renommer \cs{DeclareRobustActChar}. % % � la lecture du fil mentionn� ci-dessus, on s'appercevra sans peine % que ce que je --- je c.-�-d. Y. Henel, \TeX nicien de surface --- % fis ce fut de passer commande d'un code que Josselin Noirel me % fournit tr�s aimablement et tout aussi efficacement. % % Je fis mumuse un moment avec le code fourni par Josselin puis % quelques mois plus tard la vie m'ass�na un de ces coups dont la % fr�quentation assidue des classiques auraient du me pr�venir mais, % pour citer un de ses fameux (pseudo?) proverbe chinois, \og % l'exp�rience n'�claire que le chemin parcouru\fg. Ce qui fait que % m�me si Josselin, de son c�t� assez occup� avec la fin de ses % �tudes, me fit parvenir, dans un courriel de f�vrier % \oldstylenums{2005}, une \oldstylenums{2}\ieme version dans laquelle % apparut \cs{ReDeclareRobActChar} dans un courriel de f�vrier % \oldstylenums{2005} je n'�tais gu�re en �tat d'en tirer profit. % % Puis le temps a pass�\dots j'ai sorti la t�te de l'eau et Josselin % est parti vers d'autres cieux. % % Le code existe et fonctionne. Alors, plut�t que de le laisser moisir % dans un coin obscur de mon disque dur, et puisque j'ai pass� % quelques heures � mettre � jour mes extensions, je me suis d�cid� � % lancer \texttt{drac} dans le vaste monde. Je me contente de fournir % l'emballage et porter le b�b� dans mes bras velus jusqu'au serveur % CTAN le plus proche. % % On aura compris que je ne m'engage pas du tout � assurer la % maintenance de ce code si jamais le besoin s'en faisait % sentir. J'arrive � peu pr�s � comprendre ce que fait Josselin en % suivant pas � pas ses explications mais je suis bien incapable de me % hausser � de telles hauteurs. Il est donc temps maintenant de c�der % le clavier � Josselin. % % \hspace*{\stretch{4}}Le \TeX nicien de surface\hspace*{\stretch{1}} % \endgroup % % \section{Utilisation} % % % La macro \cs{DeclareRobustActChar} a la syntaxe habituelle des % \cs{newcommand} et cons�urs: elle admet une forme �toil�e selon % que le caract�re actif acceptera ou non des arguments \cs{long}s % (c.-�-d. un argument pourra comporter une fin de paragraphe); % ensuite vient le caract�re actif; un nombre optionnel d'arguments, % un argument optionnel qui est la valeur optionnelle du premier % argument, enfin la d�finition proprement dite. Voil� les syntaxes % valides: ^^A % \begin{list}{}{\ttfamily\leftmargin=\leftmargini}\item % \cs{DeclareRobustActChar}\marg{caract�re actif}[\(n\)]\%\\ % \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par % \cs{DeclareRobustActChar}\marg{caract�re actif}[\(n\)]\marg{d�finition}\par % \cs{DeclareRobustActChar}\marg{caract�re actif}\marg{d�finition}\par % \cs{DeclareRobustActChar}*\marg{caract�re actif}[\(n\)]\%\\ % \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par % \cs{DeclareRobustActChar}*\marg{caract�re actif}[\(n\)]\marg{d�finition}\par % \cs{DeclareRobustActChar}*\marg{caract�re actif}\marg{d�finition} % \end{list} % ^^A % Suite � quoi le caract�re actif pourra �tre utilis� dans les % arguments mobiles (dans les arguments de \cs{caption} par exemple) % et dans les autres cas qui requi�rent des commandes robustes % (\cs{protected@edef}, \cs{protected@write}, etc.) % % De m�me \cs{ReDeclareRobActChar} a la syntaxe de \cs{renewcommand} % d'o� les syntaxes possibles: % ^^A % \begin{list}{}{\ttfamily\leftmargin=\leftmargini}\item % \cs{ReDeclareRobActChar}\marg{caract�re actif}[\(n\)]\%\\ % \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par % \cs{ReDeclareRobActChar}\marg{caract�re actif}[\(n\)]\marg{d�finition}\par % \cs{ReDeclareRobActChar}\marg{caract�re actif}\marg{d�finition}\par % \cs{ReDeclareRobActChar}*\marg{caract�re actif}[\(n\)]\%\\ % \ \ \oarg{valeur par d�faut du premier argument}\marg{d�finition}\par % \cs{ReDeclareRobActChar}*\marg{caract�re actif}[\(n\)]\marg{d�finition}\par % \cs{ReDeclareRobActChar}*\marg{caract�re actif}\marg{d�finition} % \end{list} % ^^A % \StopEventually{\PrintChanges\PrintIndex} % \section{Le code} % \begin{macro}{\DeclareRobustActChar} % Nous commen�ons par d�finir \cs{DeclareRobustActChar} (qui ne fait % pas grand-chose en r�alit�). % ^^A % \begin{macrocode} % \iffalse %<*package> % \fi \newcommand*{\DeclareRobustActChar}{ \@ifstar{% \def\@tempc{\newcommand*}\@declarerobustactchar}{% \def\@tempc{\newcommand}\@declarerobustactchar}% } % \end{macrocode} % \end{macro} % ^^A % \begin{macro}{\ReDeclareRobActChar} % Et dans la foul�e nous d�finissons \cs{ReDeclareRobActChar} (qui, % comme la pr�c�dente, ne fait pas grand-chose mais l�g�rement % diff�remment). % ^^A % \begin{macrocode} \newcommand*{\ReDeclareRobActChar}{\@ifstar{% \def\@tempc{\renewcommand*}\@declarerobustactchar}{% \def\@tempc{\renewcommand}\@declarerobustactchar}% } % \end{macrocode} % ^^A % \cs{@ifstar} teste la pr�sence d'une �toile. Selon le cas on % d�finit \cs{@tempc} en cons�quence. \cs{@tempc} sera utilis� � % terme pour prendre en charge la d�finition. On appelle ensuite % \cs{@declarerobustactchar}. % \end{macro} % \begin{macro}{\@declarerobustactchar} % Vient la macro qui abat vraiment du travail: % \cs{@declarerobustactchar}. Elle prend un argument qui est le % caract�re actif (qui est suppos� �tre \emph{d�j�} actif au moment de % l'appel � \cs{DeclareRobustActChar}). % ^^A % \begin{macrocode} \newcommand*{\@declarerobustactchar}[1]{% % \end{macrocode} % ^^A % On conserve les valeurs actuelles de \cs{protect} et % \cs{@typeset@protect} pour les restituer plus tard. % ^^A % \begin{macrocode} \let\@tempa=\protect \let\@tempb=\@typeset@protect % \end{macrocode} % ^^A % \cs{protect} et \cs{@typeset@protect} sont d�finis �quivalents � % \cs{relax} pour qu'ils ne \og bougent\fg pas pendant le processus de % d�veloppement dans \cs{edef}. % ^^A % \begin{macrocode} \let\protect=\relax \let\@typeset@protect\relax % Devrait �tre le cas % \end{macrocode} % ^^A % On d�finit le caract�re actif. Attention s'il n'est pas actif au % moment de l'utilisation de \cs{DeclareRobustActChar} on risque % fortement de voir \TeX{} r�ler � cause d'une commande % \og inaccessible\fg. Le \meta{caract�re actif} prend comme % d�finition: % ^^A % \begin{flushleft}\begin{tabular}{@{}l@{}l@{}} % \meta{caract�re actif} $\stackrel{\mathrm{def}}{\equiv}$ \hskip0pt & % \cs{ifx}\cs{protect}\cs{@typeset@protect} \\ % & \ttfamily\ \ \cs{expandafter}\cs{DRAC@real@\meta{caract�re actif}} \\ % & \cs{else} \\ % & \ttfamily\ \ \cs{protect}\meta{caract�re actif} \\ % & \cs{fi} \\ % \end{tabular}\end{flushleft} % ^^A % Le test \cs{ifx} permet de conna�tre si l'on est dans un contexte % d'argument mobile ou non. Le r�sultat du test est \og vrai\fg si ce % n'est pas le cas; alors \cs{DRAC@real@\meta{caract�re actif}} est % ex�cut�e: c'est la commande effectrice qui contiendra dans quelque % temps la \meta{d�finition} dont nous parlions plus haut. % Dans le cas o� le test est \og faux\fg, �tant dans un contexte % d'argument mobile on replace simplement le \meta{caract�re actif} en % le \cs{prot�geant}. % Le \cs{expandafter} est l� pour faire dispara�tre la portion de code % \og \cs{else}\linebreak[0]\dots\linebreak[0]\cs{fi}\fg. % ^^A % \begin{macrocode} \edef#1{% \noexpand\ifx\protect\@typeset@protect \noexpand\expandafter \expandafter\noexpand \csname DRAC@real@\string#1\endcsname \noexpand\else % \noexpand\expandafter [JN : pas bon] \protect % \noexpand\expandafter [JN : idem] \noexpand#1% \noexpand\fi }% % \end{macrocode} % ^^A % Les valeurs initiales de \cs{protect} et \cs{@typeset@protect} sont % restitu�es. % ^^A % \begin{macrocode} \let\protect=\@tempa \let\@typeset@protect=\@tempb % \end{macrocode} % ^^A % Maintenant on d�finit avec \cs{newcommand} --- par l'interm�diaire % de \cs{@tempc}, vous souvenez-vous? --- la commande effectrice % \cs{DRAC@read@\meta{caract�re actif}}. C'est l'utilisation de % \cs{newcommand} qui permet d'en propager la syntaxe. Mais on notera % que cela interdit notamment la red�finition de la commande % (autrement dit il se pourrait que le package s'am�liore encore). % ^^A % \begin{macrocode} \expandafter\@tempc\csname DRAC@real@\string#1\endcsname } % \end{macrocode} % ^^A % \og FIN\fg % ^^A % \begin{macrocode} \endinput % \end{macrocode} % \end{macro} % ^^A % \section{Papillons et limitations} % Pas de bogue connu � ce jour. Les limitations elles sont % nombreuses: ce package n'a pas de grande pr�tention. % % Bien que les macros ici d�finies puissent \emph{a priori} % fonctionner avec les commandes aussi, nous recommandons d'utiliser % \cs{DeclareRobustCommand} dans ce but. % \Finale % \iffalse %</package> % \fi \endinput %%% Local Variables: %%% mode: doctex %%% TeX-master: t %%% fill-column: 70 %%% End: