% \iffalse meta-comment % -*- mode: LaTeX; coding: iso-8859-15 -*- % %%%% Copyright (C) 2004 by Josselin Noirel %%%% and Yvon Henel <Yvon.Henel@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} %<package>\def\fileversion{v0} %<package>\def\filedate{2004/05/22} %<packfra>\def\fileinfo{d\'efinir et utiliser des paires cle/valeurs} %<packeng>\def\fileinfo{define and use pair of key/values} %<package>\ProvidesPackage{clefval} %<package> [\filedate\space\fileversion\space\fileinfo] %<*driver> \documentclass[a4paper]{ltxdoc} \usepackage[latin9]{inputenc} \usepackage[T1]{fontenc} \usepackage{clefval} \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} %%% 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/Z} \def\TraiteTitreAux#1/#2/Z{\def\FraTitre{\TitreMorciau{#1}}% \ifthenelse{\equal{#2}{}}{\def\LarGuMent{#1}}{\def\LarGuMent{#2}} \def\EngTitre{\TitreMorciau{\LarGuMent}}} \newcommand{\TitreMorciau}[1]{% \noindent\textbf{#1}\par\noindent\ignorespaces} \newenvironment{Morciau}[1][ZXZXZ]{\raggedcolumns\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} \newcommand{\LB}{\linebreak[2]} %%% fin de la personalisation \begin{document} \DocInput{clefval.dtx} \end{document} %</driver> % \fi % % \CheckSum{76} % % \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{clefval.sty} % % \changes{v0}{2004/05/20}{1\iere version publique.} % % \DoNotIndex{\newcommand, \renewcommand, \providecommand,^^A % \def, \let,\csname, \endcsname, \afterassignment,^^A % \long, \global, \gdef, \edef, \xdef, \null, \write,^^A % \newenvironment,\renewenvironment, \expandafter, \relax,^^A % \protect, \begingroup, \endgroup, \bgroup, \egroup^^A % \DeclareOption, \ExecuteOptions, \RequirePackage,^^A % \ProcessOptions, \newif, \fi, \if, \or, \ifnum, \ifcase,\ifx,^^A % \ifvmode, \@ifundefined, \@bsphack, \@esphack,^^A % \nobreak, \if@nobreak, \@onlypreamble, \@unexpandable@protect,^^A % \space, \string, \AtBeginDocument, \AtEndDocument,^^A % \bfseries, \reset@font, \nfss@text, \',^^A % \@latex@warning, \@latex@warning@no@line,^^A % \@testdef, \@namedef, \reserved@a,^^A % \else, \@ctrerr, \text,\textup, \value, \thepage, \@auxout} % % \title{Le module\thanks{Ce document correspond au fichier % \textsf{clefval}~\fileversion, du \filedate.}\hspace{2cm} % The package\thanks{This document corresponds to the file % \textsf{clefval}~\fileversion, dated \filedate.}\\ % \textsf{clefval}} % % \author{Le \TeX nicien de % surface\thanks{\texttt{Yvon.Henel@wanadoo.fr}}\and Josselin Noirel} % % \maketitle % % \section{Introduction} % \label{secIntro} % \noindent\textbf{Description}\DescribeMacro{\TheKey}\DescribeMacro{\TheValue} % \begin{Morciau}[Macros~publiques/Public~Macros] % Deux macros \cs{TheKey} et \cs{TheValue} pour d�finir puis utiliser % des paires clef/valeur. % \EnAnglais % Two macros \cs{TheKey} and \cs{TheValue} to define then use pairs % of key/value. % \end{Morciau} % \begin{Morciau}[Syntaxe/Syntax] % \cs{TheKey}\marg{cl�}\marg{valeur} pour d�finir la \emph{valeur} % associ�e � la \emph{cl�}, ne produit pas de texte ; % \cs{TheValue}\marg{cl�} pour ins�rer la \emph{valeur} associ�e � la % \emph{cl�}. % \EnAnglais % \cs{TheKey}\marg{key}\marg{value} to define the \emph{value} % associated to the \emph{key}, does not produce text ; % \cs{TheValue}\marg{key} to insert the \emph{value} linked to the % \emph{key}. % \end{Morciau} % \section{Utilisation -- Usage} % % \begin{Morciau}[Proc�d�/Process] % Le proc�d� mis en �uvre par ce module est le m�me que celui des % r�f�rences classiques de \LaTeX{} avec \cs{label} et \cs{ref}. Il % faut donc deux compilations pour en voir l'effet. % \EnAnglais % \texttt{clefval} uses the process which \LaTeX's \cs{label} and \cs{ref} % use. You must therefore compile twice to obtain the full effect. % \end{Morciau} % \begin{Morciau} % Lors de la 1\iere compilation, \cs{TheKey}\LB|{cl�}|\LB|{valeur}| �crit, % dans le fichier \texttt{aux}, \cs{newkey}\LB|{cl�}|\LB|{{valeur}}|. |cl�| et % |valeur| sont d�velopp�s � moins qu'ils ne soient prot�g�s soit pour avoir % �t� d�clar�s robustes (voir \cs{DeclareRobustCommand}) soit pour avoir �t� % prot�g�s (voir \cs{protect}) par vous. % \EnAnglais % During the 1st run of \LaTeX, \cs{TheKey}\LB|{key}|\LB|{value}| writes % \cs{newkey}\LB|{key}|\LB|{{value}}| in the \texttt{aux} file. |key| % and |value| are expanded unless they are protected since they have been % declared robust (see \cs{DeclareRobustCommand}) or since they have been % protected (see \cs{protect}) by you. % \end{Morciau} % \begin{Morciau} % Lors de la 2\ieme compilation, apr�s lecture du fichier \texttt{aux}, % \cs{TheValue}|{cl�}| �crit |valeur|. % \EnAnglais % During the 2nd run, the \texttt{aux} file having been read, % \cs{TheValue}|{key}| writes |value|. % \end{Morciau} % \begin{Morciau}[Attention/Caution] % Les deux arguments de \cs{TheKey} sont \og mobiles \fg au sens de \LaTeX{} % et il faudra donc parfois les prot�ger. On �crira donc % \cs{TheKey}\LB\texttt{\{}\LB\cs{protect}|\(|\LB|2+3|\cs{protect}|\)|\LB\texttt{\}} si on % ne veut pas d'ennuis ou, plus simplement, % \cs{TheKey}\LB\texttt{\{}\LB|$|\LB|2+3|\LB|$|\LB\texttt{\}} \Sourire % \EnAnglais % Both arguments of \cs{TheKey} are `moving' as \LaTeX{} defines it and we have % sometimes to protect them. % % So one will write % \cs{TheKey}\LB\texttt{\{}\LB\cs{protect}|\(|\LB|2+3|\cs{protect}|\)|\LB\texttt{\}} % to avoid troubles or, more easily, % \cs{TheKey}\LB\texttt{\{}\LB|$|\LB|2+3|\LB|$|\LB\texttt{\}} \Sourire % \end{Morciau} % \begin{Morciau} % Par ailleurs, les arguments ne doivent pas contenir de saut de % paragraphe (\cs{par}) ---~ou tout autre truc interdit dans les % arguments d'une commande qui n'est pas \cs{long}. % \EnAnglais % In addition the arguments must not contain end of paragraph % (\cs{par}) ---~or any other thingummy which is forbidden in the % arguments of a macro which is not \cs{long}. % \end{Morciau} % \begin{Morciau}[Avertissements/Warnings] % Le module signale les d�finitions multiples d'une m�me clef et % marque {\selectlanguage{english}\textbf{????}} l� o� l'on utilise % \cs{TheValue}\LB|{clou}| alors que |clou| n'est pas d�finie comme % clef. En cas d'erreur, le fichier \texttt{log} contient la ligne : % \EnAnglais % The package warns about multiple definitions of the same key and % writes \textbf{????} where one used \cs{TheValue}\LB|{kew}| whereas % |kew| was not defined as a key. In case of error, the \texttt{log} % file contains the line: % \end{Morciau} % \noindent\hspace*{\stretch{1}}\texttt{LaTeX Warning: There were undefined % references.}\hspace*{\stretch{1}} % \begin{Morciau}[Remarque/Remark] % Josselin \textsc{Noirel} est intervenu efficacement, tant sur \fctt % que par courriel, pour corriger les modifications que j'avais fait % subir au code tir� de \texttt{ltxref} et \texttt{ltfiles}. C'est % pour sa contribution d�cisive qu'il est cit� comme co-auteur de ce % module. Qu'il trouve l� l'expression de ma profonde gratitude. % % Cependant, j'assume l'enti�re responsabilit� de la r�daction de % cette documentation et de sa traduction ainsi que la paternit� de % l'id�e d'utiliser le m�canisme des \cs{label} pour acc�der � un % \texttt{hashage} rudimentaire. % \EnAnglais % Josselin \textsc{Noirel} has efficiently helped me, on \fctt and by % email, to correct the hack I have made in the code taken from % \texttt{ltxref} and \texttt{ltfiles}. For he made that decisive % contribution, he is mentionned here as a co-author of this % package. May he find there the expression of my deep gratefulness. % % Howerver I take the entire responsability for the writing of the % present documentation and its English translation and I do recognise % having fathered the idea of using the \cs{label} mecanism to obtain % a rudimentary \texttt{hash}. % \end{Morciau} % \hspace*{\stretch{1}}Le \TeX nicien de surface. \hspace*{0.125\linewidth} % \StopEventually{} % \section{Le code} % \label{secCode} % % Le code comporte des balises utilisable par \texttt{DocStrip} avec % lesquelles on peut produire une version francis�e ou une version % anglaise de \NomDeModule{clefval}. Voir la documentation de % \texttt{DocStrip} pour de plus amples renseignements. % % On dit boujour, en fran�ais ou en anglais suivant la mani�re dont on % a cr�� \NomDeModule{clefval}. Puis on entre dans le vif du % sujet. % % Le code a d'abord �t� repris de \texttt{ltxref} mais j'avais % quelques ennuis avec les avertissements concernant les clefs non % d�finies ou d�finies plusieurs fois. Josselin Noirel a bien voulu % r�pondre � mon appel au secours sur \fctt. Le code qui suit est donc % la correction par Josselin de mes modifications du code de % \texttt{ltxref}, moyennant quoi, je signe \Sourire % % \iffalse %<*package> % \fi % \begin{macro}{\@setTheValue} % Le code est copi� sur celui de |\@setref| dans % \texttt{ltxref}. Cette macro est appel�e par \cs{TheValue}. Elle % v�rifie que la clef appel�e existe. Si elle n'existe pas elle % imprime {\selectlanguage{english}\textbf{????}} et place un % avertissement dans le \texttt{log}. Sinon elle rend son premier % argument. % % On utilise |\G@refundefinedtrue| pour provoquer le message d'erreur % \og There were undefined references \fg. Un peu sybillin pour ce qui % nous concerne, il a l'avantage d'�tre reconnu par au moins % \texttt{emacs} plus \texttt{Auctex} et d'indiquer qu'il faut % relancer la compilation. % \begin{macrocode} \newcommand*{\@setTheValue}[2]{% \ifx#1\relax \protect\G@refundefinedtrue \nfss@text{\reset@font\bfseries�????}% % \end{macrocode} % \end{macro} % \iffalse %</package> %<*packfra> % \fi % \textsf{Messages d'avertissement en fran�ais} % \begin{macrocode} \@latex@warning{Valeur de #2 en page \thepage\space non d\'efinie}% % \end{macrocode} % \iffalse %</packfra> %<*packeng> % \fi % \textsf{Warning messages in English } % \begin{macrocode} \@latex@warning{Value of `#2' on page \thepage\space undefined}% % \end{macrocode} % \iffalse %</packeng> %<*package> % \fi % \begin{macrocode} \else #1\null \fi} % \end{macrocode} % \begin{macro}{\TheValue} % Le code est copi� sur celui de |\ref| dans \texttt{ltxref}. Si % l'argument de \cs{TheValue} est une clef valide, on obtient la % valeur r�f�renc�e par cette clef. % \begin{macrocode} \newcommand*{\TheValue}[1]{\expandafter\@setTheValue\csname V@#1\endcsname{#1}} % \end{macrocode} % \end{macro} % \begin{macro}{\@newk@ey} % Le code est copi� sur celui de |\@newl@bel| dans \texttt{ltxref}. % \begin{macrocode} \newcommand*{\@newk@ey}[3]{{% \@ifundefined{#1@#2}% {\relax}% {\gdef \@multiplekeys {% % \end{macrocode} % \end{macro} % \iffalse %</package> %<*packfra> % \fi % \textsf{Messages d'avertissement en fran�ais} % \begin{macrocode} \@latex@warning@no@line{Des clefs sont d\'efinies plusieurs fois.}}% \@latex@warning@no@line{La clef #2 est d\'efinie plusieurs fois}}% % \end{macrocode} % \iffalse %</packfra> %<*packeng> % \fi % \textsf{Warning messages in English } % \begin{macrocode} \@latex@warning@no@line{There were multiply-defined keys.}}% \@latex@warning@no@line{Key `#2' multiply defined}}% % \end{macrocode} % \iffalse %</packeng> %<*package> % \fi % \begin{macrocode} \global\@namedef{#1@#2}{#3}}} % \end{macrocode} % \begin{macro}{\newkey} % On op�re ici une puissante magie qui fait que tout marche comme % attendu \Sourire % \begin{macrocode} \def\newkey{\@newk@ey V} \@onlypreamble\@newk@ey \AtEndDocument{\let\@newk@ey=\@testdef} % \end{macrocode} % \end{macro} % \iffalse %</package> % ^^A fin du code de Josselin Noirel %<*package> % \fi % � partir d'ici votre serviteur s'est d�brouill� tout seul pour % modifier le code des bases de \LaTeX. % % \begin{macro}{\@protected@write} % Le code est copi� sur celui de |\protected@write| d�fini dans % \texttt{ltfiles}. On n'a besoin que d'un seul argument qui est �crit % dans le fichier |\@auxout| c-�-d. le fichier \texttt{aux}. % La macro prend soin de ce qui est prot�g� soit de mani�re d�finitive % pour avoir �t� d�fini par \cs{DeclareRobustCommand} et ses petits % amis, soit pour �tre pr�c�d� de \cs{protect} comme on doit le faire % parfois pour les arguments \og mobiles \fg (\emph{moving % argument}). % \begin{macrocode} \long\def \@protected@write#1{% \begingroup \let\protect\@unexpandable@protect \edef\reserved@a{% \write\@auxout{#1}}% \reserved@a \endgroup \if@nobreak\ifvmode\nobreak\fi\fi } % \end{macrocode} % \end{macro} % \begin{macro}{\@multiplekeys} % En mettant |\@multiplekeys| � \cs{relax}, on s'assure qu'il n'y aura % pas de hurlements alors que rien n'est encore d�fini et donc encore % moins d�fini plusieurs fois \Sourire % \begin{macrocode} \let \@multiplekeys \relax % \end{macrocode} % \end{macro} % \begin{macro}{\TheKey} % Le code remprend celui de \cs{label} mais il nous faut deux % arguments, le 1\ier pour la clef, le 2\textsuperscript{nd} pour la % valeur associ�e. % \begin{macrocode} \def\TheKey#1#2{{\@bsphack \@protected@write{\string\newkey{#1}{#2}}% \@esphack}} % \end{macrocode} % \end{macro} % \iffalse %</package> % \fi % \Finale \PrintChanges\PrintIndex \endinput