texlive[64578] Master/texmf-dist: simplekv (2oct22)

commits+karl at tug.org commits+karl at tug.org
Sun Oct 2 22:17:14 CEST 2022


Revision: 64578
          http://tug.org/svn/texlive?view=revision&revision=64578
Author:   karl
Date:     2022-10-02 22:17:14 +0200 (Sun, 02 Oct 2022)
Log Message:
-----------
simplekv (2oct22)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/generic/simplekv/README
    trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.pdf
    trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex
    trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex

Modified: trunk/Master/texmf-dist/doc/generic/simplekv/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/simplekv/README	2022-10-01 23:50:19 UTC (rev 64577)
+++ trunk/Master/texmf-dist/doc/generic/simplekv/README	2022-10-02 20:17:14 UTC (rev 64578)
@@ -3,9 +3,9 @@
              L'extension
                simplekv
                
-                v0.2
+                v0.2a
 
-            27 avril 2020
+           1er octobre 2022
 ___________________________________
 
 Authors   : Christian Tellechea

Modified: trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex	2022-10-01 23:50:19 UTC (rev 64577)
+++ trunk/Master/texmf-dist/doc/generic/simplekv/simplekv-fr.tex	2022-10-02 20:17:14 UTC (rev 64578)
@@ -1,15 +1,14 @@
-% !TeX encoding = ISO-8859-1
-% Ceci est la documentation du package "hlist"
+% !TeX TS-program = lualatex
+% !TeX encoding = UTF-8
+% Ceci est la documentation du package "simplekv"
 %
-% Fichier compil\xE9 avec pdflatex
 \documentclass[french,a4paper,10pt]{article}
-\usepackage[latin1]{inputenc}
-\usepackage[T1]{fontenc}
+\usepackage[utf8]{inputenc}
 \usepackage[margin=2cm]{geometry}
 \usepackage[bottom]{footmisc}
-\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,simplekv}
-\usepackage[scaled=0.8]{luximono}
-\frenchbsetup{og=\xAB,fg=\xBB}
+\usepackage{libertine,boites,tikz,enumitem,babel,xspace,listings,simplekv,hyperref}
+\usepackage[scaled=0.8]{GoMono}
+\frenchbsetup{og=«,fg=»}
 \def\eTeX{\hbox{$\varepsilon$-\TeX}}
 \def\SKV{\texttt{\skvname}\xspace}
 \makeatletter
@@ -103,7 +102,7 @@
 			\catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{\/$\rangle$\endgroup}%
 			\@ifstar\@sverb\@verb}
 \endgroup
-\def\longfrhlstdate at i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or f\xE9vrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or d\xE9cembre\fi\space#1}
+\def\longfrhlstdate at i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
 \edef\longfrhlstdate{\expandafter\longfrhlstdate at i\skvdate\@nil}
 \def\<#1>{$\langle$\textit{#1}$\rangle$}
 \makeatother
@@ -126,58 +125,62 @@
 	\endgroup
 	\vskip2cm
 	\leftskip=.2\linewidth \rightskip=.2\linewidth \small
-	Cette petite extension est une impl\xE9mentation d'un syst\xE8me dit  \xE0 \xAB\<cl\xE9s>/\<valeurs>\xBB pour \TeX{} ou \LaTeX. Elle comporte juste l'essentiel, aucune fioriture inutile n'a \xE9t\xE9 cod\xE9e et aucune extension tierce n'est n\xE9cessaire \xE0 son fonctionnement.
+	Cette petite extension est une implémentation d'un système dit  à «\<clés>/\<valeurs>» pour \TeX{} ou \LaTeX. Elle comporte juste l'essentiel, aucune fioriture inutile n'a été codée et aucune extension tierce n'est nécessaire à son fonctionnement.
 \end{titlepage}
 
-\section{Cl\xE9s, valeurs}
-Lorsqu'une macro doit recevoir des param\xE8tres dont le nombre n'est pas fixe ou connu, il est commode de proc\xE9der par \<cl\xE9s> et \<valeurs>.
+Cette petite extension se veut minimaliste. Trop sans doute puisqu'on ne la juge pas au niveau d'autres, jugées plus « \href{https://tex.stackexchange.com/questions/560014/}{sérieuses}\footnote{C'est ainsi que Joseph Wright, qu'il ne faut prier pour me savonner la planche, la qualifie. C'est que sur TeX.stackexchange, on est entre-soi, c'est-à-dire entre experts raisonnables qui savent de quoi ils parlent. On fait mine de s'étonner et on réprimande, tel un enfant qui ne sait pas ce qu'il fait, un utilisateur qui vient s'enquérir du fonctionnement de simplekv ! Ce genre de sous-package est mal vu et indésirable là bas, il faut vite faire rentrer dans le rang la brebis égarée.}.»
+
+Quoiqu'il en soit, simplekv a le mérite d'exister et se veut à l'opposé des usines à gaz que l'on peut trouver dans cet exercices de style. Elle est écrite en \TeX{}, fonctionne donc sous tous les moteurs et ne requiert aucun package.
+
+\section{Clés, valeurs}
+Lorsqu'une macro doit recevoir des paramètres dont le nombre n'est pas fixe ou connu, il est commode de procéder par \<clés> et \<valeurs>.
 \medskip
-Voici bri\xE8vement les d\xE9finitions et les limitations des structures mises \xE0 disposition :
+Voici brièvement les définitions et les limitations des structures mises à disposition :
 
 \begin{itemize}
-	\item une \<cl\xE9> est un mot d\xE9signant un param\xE8tre; il est form\xE9 de pr\xE9f\xE9rence avec des caract\xE8res de code de cat\xE9gorie 11 (lettres), 12 (autres caract\xE8res sauf la virgule et le signe \verb|=|) et 10 (l'espace). On peut cependant y mettre des caract\xE8res ayant d'autres codes de cat\xE9gorie, dans la limitation de ce qui est admis dans la primitive \verb|\detokenize|; une \<cl\xE9>, m\xEAme si cela rev\xEAt peu de signification, peut \xEAtre vide;
-	\item la syntaxe pour assigner une \<valeur> \xE0 une \<cl\xE9> est : \hbox{\<cl\xE9>=\<valeur>};
-	\item les espaces qui pr\xE9c\xE8dent et qui suivent la \<cl\xE9> et la \<valeur> sont ignor\xE9s, mais \emph{pas ceux} qui se trouvent \xE0 l'int\xE9rieur de la \<cl\xE9> ou de la \<valeur>;
+	\item une \<clé> est un mot désignant un paramètre; il est formé de préférence avec des caractères de code de catégorie 11 (lettres), 12 (autres caractères sauf la virgule et le signe \verb|=|) et 10 (l'espace). On peut cependant y mettre des caractères ayant d'autres codes de catégorie, dans la limitation de ce qui est admis dans la primitive \verb|\detokenize|; une \<clé>, même si cela revêt peu de signification, peut être vide;
+	\item la syntaxe pour assigner une \<valeur> à une \<clé> est : \hbox{\<clé>=\<valeur>};
+	\item les espaces qui précèdent et qui suivent la \<clé> et la \<valeur> sont ignorés, mais \emph{pas ceux} qui se trouvent à l'intérieur de la \<clé> ou de la \<valeur>;
 	\item une \<valeur> est un \<code> arbitraire;
-	\item si une \<valeur> est entour\xE9e d'accolades, ces derni\xE8res seront retir\xE9es : \verb|<cl\xE9>=<valeur>| est donc \xE9quivalent \xE0 \verb|<cl\xE9>={<valeur>}|;
-	\item lorsqu'une valeur est entour\xE9e de \emph{plusieurs} imbrications d'accolades, seul le niveau externe est retir\xE9 et donc \verb|<cl\xE9>={{<valeur>}}| est compris comme \verb|<cl\xE9>={<valeur>}|;
-	\item lorsque plusieurs couples de \<cl\xE9s>/\<valeurs> doivent \xEAtre sp\xE9cifi\xE9s, ils sont s\xE9par\xE9s les uns des autres par des virgules;
-	\item une virgule ne peut figurer dans une \<valeur> que si la virgule est dans un niveau d'accolades; par exemple, \verb|foo=1,5| n'est pas valide car la \<valeur> s'\xE9tend jusqu'au 1. Il faudrait \xE9crire \verb|foo={1,5}| pour sp\xE9cifier une valeur de \verb|1,5|;
-	\item les \<valeurs> sont stock\xE9es \emph{telles qu'elles sont lues} ; en particulier, aucun d\xE9veloppement n'est effectu\xE9;
-	\item les d\xE9finitions sont \emph{locales} : par cons\xE9quent, toute \<cl\xE9> d\xE9finie ou modifi\xE9e dans un groupe est restaur\xE9e \xE0 son \xE9tat ant\xE9rieur \xE0 la sortie du groupe;
-	\item des \<cl\xE9>/\<valeurs> destin\xE9es \xE0 une m\xEAme macro ou \xE0 un m\xEAme usage doivent \xEAtre regroup\xE9es dans un ensemble dont on choisit le nom. Un tel ensemble est appel\xE9 \<trousseau>.
+	\item si une \<valeur> est entourée d'accolades, ces dernières seront retirées : \verb|<clé>=<valeur>| est donc équivalent à \verb|<clé>={<valeur>}|;
+	\item lorsqu'une valeur est entourée de \emph{plusieurs} imbrications d'accolades, seul le niveau externe est retiré et donc \verb|<clé>={{<valeur>}}| est compris comme \verb|<clé>={<valeur>}|; (un bug antérieur à la version 0.2a faisait que ce dernier point n'était pas vrai)
+	\item lorsque plusieurs couples de \<clés>/\<valeurs> doivent être spécifiés, ils sont séparés les uns des autres par des virgules;
+	\item une virgule ne peut figurer dans une \<valeur> que si la virgule est entre accolades; par exemple, \verb|foo=1,5| n'est pas valide car la \<valeur> s'étend jusqu'au 1. Il faudrait écrire \verb|foo={1,5}| pour spécifier une valeur de \verb|1,5|;
+	\item les \<valeurs> sont stockées \emph{telles qu'elles sont lues} ; en particulier, aucun développement n'est effectué;
+	\item les définitions sont \emph{locales} : par conséquent, toute \<clé> définie ou modifiée dans un groupe est restaurée à son état antérieur à la sortie du groupe;
+	\item des \<clé>/\<valeurs> destinées à une même macro ou à un même usage doivent être regroupées dans un ensemble dont on choisit le nom. Un tel ensemble est appelé \<trousseau>.
 \end{itemize}
 
-\section{Commandes mises \xE0 disposition}
+\section{Commandes mises à disposition}
 
-\paragraph{Les macro  \texttt{\char`\\setKV} et \texttt{\char`\\setKVdefault}}
-Ces commandes d\xE9finissent des \<cl\xE9s> et leur assignent des \<valeurs> dans un \<trousseau>. La seule diff\xE9rence entre les deux macros est que \verb|\setKVdefault|, en plus d'assigner les \<valeurs> aux \<cl\xE9s>, les sauvegarde en vue d'une restauration ult\xE9rieure avec \verb|\restoreKV|.
+\paragraph{Les macros \texttt{\char`\\setKV} et \texttt{\char`\\setKVdefault}}
+Ces commandes définissent des \<clés> et leur assignent des \<valeurs> dans un \<trousseau>. La seule différence entre les deux macros est que \verb|\setKVdefault|, en plus d'assigner les \<valeurs> aux \<clés>, les sauvegarde en vue d'une restauration ultérieure avec \verb|\restoreKV|.
 
-On \xE9crit
-\code|\setKV[<trousseau>]{<cl\xE9 1>=<valeur 1>,<cl\xE9 2>=<valeur 2>,...,<cl\xE9 n>=<valeur n>}|
+On écrit
+\code|\setKV[<trousseau>]{<clé 1>=<valeur 1>,<clé 2>=<valeur 2>,...,<clé n>=<valeur n>}|
 
 Il faut noter que
 \begin{itemize}
-	\item l'argument entre accolades contenant les \<cl\xE9s> et les \<valeurs> ne devrait pas \xEAtre vide, sauf \xE0 vouloir d\xE9finir une \<cl\xE9> bool\xE9enne vide \xE9gale \xE0 \texttt{true};
-	\item lors de la lecture des \<cl\xE9s>/\<valeurs>, la virgule et le signe \xE9gal ont leurs catcodes rendus \xE9gaux \xE0 12;
-	\item le nom du \<trousseau>, bien qu'entre crochet, est \emph{obligatoire}, mais il peut \xEAtre vide bien que cela ne soit pas conseill\xE9;
-	\item si une m\xEAme \<cl\xE9> figure plusieurs fois, la \<valeur> retenue sera celle de la derni\xE8re assignation;
-	\item les \<valeurs> peuvent \xEAtre bool\xE9ennes auquel cas, elles \emph{doivent} \xEAtre \xAB\texttt{true}\xBB ou \xAB\texttt{false}\xBB en caract\xE8res de catcode 11;
-	\item si une \<valeur> est omise, elle est comprise comme \xE9tant \xAB\texttt{true}\xBB. Ainsi, \xE9crire
+	\item l'argument entre accolades contenant les \<clés> et les \<valeurs> ne devrait pas être vide, sauf à vouloir définir une \<clé> booléenne vide égale à \texttt{true};
+	\item lors de la lecture des \<clés>/\<valeurs>, la virgule et le signe égal doivent avoir un catcode de 12 sans quoi ils ne seront pas compris comme frontières entre \<clés> et \<valeurs> et ne joueront pas leur rôle;
+	\item le nom du \<trousseau>, bien qu'entre crochet, est \emph{obligatoire}, mais il peut être vide bien que cela ne soit pas conseillé;
+	\item si une même \<clé> figure plusieurs fois, la \<valeur> retenue sera celle de la dernière assignation;
+	\item les \<valeurs> peuvent être booléennes auquel cas, elles \emph{doivent} être «\texttt{true}» ou «\texttt{false}» en caractères de catcode 11;
+	\item si une \<valeur> est omise, elle est comprise comme étant «\texttt{true}». Ainsi, écrire
 		\code|\setKV[foo]{mon bool}|
-	est \xE9quivalent \xE0
+	est équivalent à
 		\code|\setKV[foo]{mon bool = true}|
 \end{itemize}
 
 \paragraph{La macro \texttt{\char`\\useKV}}
-Cette macro purement d\xE9veloppable renvoie la \<valeur> pr\xE9alablement associ\xE9e \xE0 une \<cl\xE9> dans un \<trousseau>:
-	\code|\useKV[<trousseau>]{<cl\xE9>}|
+Cette macro purement développable renvoie la \<valeur> préalablement associée à une \<clé> dans un \<trousseau>:
+	\code|\useKV[<trousseau>]{<clé>}|
 
 Il faut noter que
 \begin{itemize}
-	\item si la \<cl\xE9> n'a pas \xE9t\xE9 d\xE9finie, une erreur sera \xE9mise;
-	\item si la \<cl\xE9> est bool\xE9enne, le texte \xAB\texttt{true}\xBB ou \xAB\texttt{false}\xBB sera renvoy\xE9;
-	\item il faut 2 d\xE9veloppements \xE0 \verb|\useKV[<trousseau>]{<cl\xE9>}| pour donner la \<valeur> associ\xE9e \xE0 la \<cl\xE9>.
+	\item si la \<clé> n'a pas été définie, une erreur sera émise (un bug faisait que ce n'était pas le cas avant la version 0.2a);
+	\item si la \<clé> est booléenne, le texte «\texttt{true}» ou «\texttt{false}» sera renvoyé;
+	\item il faut 2 développements à \verb|\useKV[<trousseau>]{<clé>}| pour donner la \<valeur> associée à la \<clé>.
 \end{itemize}
 
 \exemple|\setKV[foo]{nombre = 5 , lettres= AB \textit{CD} , mon bool}
@@ -187,66 +190,66 @@
 a) \useKV[foo]{nombre}.\qquad   b) \useKV[foo]{lettres}.\qquad   c) \useKV[foo]{mon bool}.|
 
 \paragraph{La macro \texttt{\char`\\restoreKV}}
-La macro \verb|\restoreKV[<trousseau>]| r\xE9initialise toutes les \<cl\xE9s> du \<trousseau> aux \<valeurs> qui ont \xE9t\xE9 d\xE9finies lors de l'ex\xE9cution \verb|\setKVdefault|. La macro \verb|\useKVdefault[<trousseau>]| lui est \xE9quivalente.
+La macro \verb|\restoreKV[<trousseau>]| réinitialise toutes les \<clés> du \<trousseau> aux \<valeurs> qui ont été définies lors de l'exécution \verb|\setKVdefault|. La macro \verb|\useKVdefault[<trousseau>]| lui est équivalente.
 
 \paragraph{La macro \texttt{\char`\\ifboolKV}}
-Cette macro permet, selon la valeur d'une \<cl\xE9 bool\xE9enne>, d'ex\xE9cuter un des deux \<codes> donn\xE9s. La syntaxe est
-	\code|\ifboolKV[<trousseau>]{<cl\xE9>}{<code si "true">}{<code si "false>}|
+Cette macro permet, selon la valeur d'une \<clé booléenne>, d'exécuter un des deux \<codes> donnés. La syntaxe est
+	\code|\ifboolKV[<trousseau>]{<clé>}{<code si "true">}{<code si "false>}|
 
-La macro est purement d\xE9veloppable, elle n\xE9cessite 2 d\xE9veloppements pour donner l'un des deux codes, et exige que la \<cl\xE9> soit bool\xE9enne sans quoi un message d'erreur est \xE9mis.
+La macro est purement développable, elle nécessite 2 développements pour donner l'un des deux codes, et exige que la \<clé> soit booléenne sans quoi un message d'erreur est émis.
 
 \paragraph{La macro \texttt{\char`\\showKV}}
-Cette commande \xE9crit dans le fichier \texttt{log} la \<valeur> assign\xE9e \xE0 une \<cl\xE9> d'un \<trousseau>:
-	\code|\showKV[<trousseau>]{<cl\xE9>}|
+Cette commande écrit dans le fichier \texttt{log} la \<valeur> assignée à une \<clé> d'un \<trousseau>:
+	\code|\showKV[<trousseau>]{<clé>}|
 
-Si la \<cl\xE9> n'est pas d\xE9finie, \xAB\texttt{not defined}\xBB est affich\xE9 dans le fichier log.
+Si la \<clé> n'est pas définie, «\texttt{not defined}» est affiché dans le fichier log.
 
 \section{Code}
-En plus d'une \<valeur>, un \<code> arbitraire peut \xEAtre assign\xE9 \xE0 n'importe quelle \<cl\xE9>. Pour ce faire, on \xE9crit
-\begin{center} \verb|\defKV[<trousseau>]{<cl\xE9 1>=<code 1>,<cl\xE9 2>=<code 2>,...,<cl\xE9 n>=<code n>}|
+En plus d'une \<valeur>, un \<code> arbitraire peut être assigné à n'importe quelle \<clé>. Pour ce faire, on écrit
+\begin{center} \verb|\defKV[<trousseau>]{<clé 1>=<code 1>,<clé 2>=<code 2>,...,<clé n>=<code n>}|
 \end{center}
-Chaque \<code> peut contenir \verb|#1| qui repr\xE9sente la \<valeur> de la \<cl\xE9>. Ce \<code> est ex\xE9cut\xE9 lorsque une \<valeur> est assign\xE9e \xE0 la \<cl\xE9> avec \verb|\setKV|, \verb|\setKVdefault| ou \verb|\restoreKV|.
+Chaque \<code> peut contenir \verb|#1| qui représente la \<valeur> de la \<clé>. Ce \<code> est exécuté lorsque une \<valeur> est assignée à la \<clé> avec \verb|\setKV|, \verb|\setKVdefault| ou \verb|\restoreKV|.
 \bigbreak
 
-Ainsi d\xE9clarer
+Ainsi déclarer
 	\code|\defKV[x]{ mykey = \def\foo{\textbf{#1}}|
-va d\xE9finir une macro \verb|\foo| d\xE8s que la \<cl\xE9> \xAB\texttt{mykey}\xBB va \xEAtre d\xE9finie (ou red\xE9finie) et donc, si l'on \xE9crit
+va définir une macro \verb|\foo| dès que la \<clé> «\texttt{mykey}» va être définie (ou redéfinie) et donc, si l'on écrit
 	\code|\setKV[x]{ mykey = bonjour }|
-le code qui est ex\xE9cut\xE9 en coulisses est
-	\code|\long\def\foo{\textbf{bonjour}}|
+le code qui est exécuté en coulisses est
+	\code|\def\foo{\textbf{bonjour}}|
 
 \exemple|\defKV[x]{ mykey = \def\foo{\textbf{#1}} }
-\setKV[x]{ mykey = bonjour }% d\xE9finition
+\setKV[x]{ mykey = bonjour }% définition
 1) \meaning\foo\par
 2) \useKV[x]{ mykey }
 
-\setKV[x]{ mykey = hello }% red\xE9finition
+\setKV[x]{ mykey = hello }% redéfinition
 3) \meaning\foo\par
 4) \useKV[x]{ mykey }|
 
-La macro \verb|\testboolKV| permet de tester, par exemple dans un \<code>, si son argument est \xABtrue\xBB ou \xABfalse\xBB
+La macro \verb|\testboolKV| permet de tester, par exemple dans un \<code>, si son argument est «true» ou «false»
 	\code|\testboolKV{<argument>}{<code si true>}{<code si false>}|
 
-La macro est purement d\xE9veloppable, elle n\xE9cessite 2 d\xE9veloppements pour donner l'un des deux codes, et exige que l'\<argument> soit bool\xE9en sans quoi un message d'erreur est \xE9mis.
+La macro est purement développable, elle nécessite 2 développements pour donner l'un des deux codes, et exige que l'\<argument> soit booléen sans quoi un message d'erreur est émis.
 
-\exemple|\defKV[x]{ x = \def\test{\testboolKV{#1}{test positif}{test n\xE9gatif}}}
+\exemple|\defKV[x]{ x = \def\test{\testboolKV{#1}{test positif}{test négatif}}}
 \setKV[x]{ x = true}
 1) \test
 
 \setKV[x]{ x= false}
 2) \test|
-Toute autre valeur que \xAB\verb|true|\xBB ou \xAB\verb|false|\xBB g\xE9n\xE8rera un message d'erreur.
+Toute autre valeur que «\verb|true|» ou «\verb|false|» génèrera un message d'erreur.
 
 \section{Un exemple d'utilisation}
-Voici comment on pourrait programmer une macro qui affiche un cadre sur une ligne, gr\xE2ce \xE0 la macro \verb|\fbox| et l'environnement \verb|center| de \LaTeX. Pour cela les \<cl\xE9s> suivantes seront utilis\xE9es:
+Voici comment on pourrait programmer une macro qui affiche un cadre sur une ligne, grâce à la macro \verb|\fbox| et l'environnement \verb|center| de \LaTeX. Pour cela les \<clés> suivantes seront utilisées:
 \begin{itemize}
-	\item le bool\xE9en \texttt{inline} qui affichera le cadre dans le texte s'il est vrai et sur une ligne d\xE9di\xE9 s'il est faux;
-	\item \texttt{sep} qui est une dimension mesurant la distance entre le texte et le cadre (par d\xE9faut \texttt{3pt});
-	\item \texttt{width} qui est la largeur des traits du cadre (par d\xE9faut \texttt{0.5pt});
-	\item \texttt{style} qui contient le code ex\xE9cut\xE9 avant le texte.
+	\item le booléen \texttt{inline} qui affichera le cadre dans le texte s'il est vrai et sur une ligne dédié s'il est faux;
+	\item \texttt{sep} qui est une dimension mesurant la distance entre le texte et le cadre (par défaut \texttt{3pt});
+	\item \texttt{width} qui est la largeur des traits du cadre (par défaut \texttt{0.5pt});
+	\item \texttt{style} qui contient le code exécuté avant le texte.
 \end{itemize}
 
-Une premi\xE8re fa\xE7on de faire, sans recours \xE0 \verb|\defKV|;
+Une première façon de faire, sans recours à \verb|\defKV|;
 \exemple|\setKVdefault[frame]{
 	sep        = 3pt,
 	line width = 0.5pt,
@@ -254,7 +257,7 @@
 	inline
 	}
 \newcommand\frametxt[2][]{%
-	\restoreKV[frame]% revenir au valeurs par d\xE9faut
+	\restoreKV[frame]% revenir au valeurs par défaut
 	\setKV[frame]{#1}% lit les arguments optionnels
 	\fboxsep = \useKV[frame]{sep}
 	\fboxrule= \useKV[frame]{line width}
@@ -266,12 +269,12 @@
 		{}
 		{\end{center}}%
 }
-Un essai en ligne par d\xE9faut \frametxt{essai} puis un autre \frametxt[sep=5pt,line width=2pt]{essai}
+Un essai en ligne par défaut \frametxt{essai} puis un autre \frametxt[sep=5pt,line width=2pt]{essai}
 et un dernier \frametxt[sep=1pt,style=\itshape]{essai}.
 
-Un essai hors ligne : \frametxt[inline = false, style=\bfseries\color{red}]{essai centr\xE9}|
+Un essai hors ligne : \frametxt[inline = false, style=\bfseries\color{red}]{essai centré}|
 
-Dans l'exemple repris ci-dessous et gr\xE2ce \xE0 \verb|\defKV|, on stocke tous les param\xE8tres lors de leur assignation. Il y a bien moins de verbosit\xE9 dans le code de \verb|frametxt| ce qui le rend plus l\xE9ger et plus lisible.
+Dans l'exemple repris ci-dessous et grâce à \verb|\defKV|, on stocke tous les paramètres lors de leur assignation. Il y a bien moins de verbosité dans le code de \verb|frametxt| ce qui le rend plus léger et plus lisible.
 
 \exemple|\defKV[frame]{%
 	sep        = {\fboxsep = #1 },
@@ -288,18 +291,17 @@
 	inline
 	}
 \newcommand\frametxt[2][]{%
-	\restoreKV[frame]% revenir au valeurs par d\xE9faut
+	\restoreKV[frame]% revenir au valeurs par défaut
 	\setKV[frame]{#1}% lit les arguments optionnels
 	\hookpre
 	\fbox{\fstyle #2}%
 	\hookpost
 }
-Un essai en ligne par d\xE9faut \frametxt{essai} puis un autre \frametxt[sep=5pt,line width=2pt]{essai}
+Un essai en ligne par défaut \frametxt{essai} puis un autre \frametxt[sep=5pt,line width=2pt]{essai}
 et un dernier \frametxt[sep=1pt,style=\itshape]{essai}.
 
-Un essai hors ligne : \frametxt[inline = false, style=\bfseries\color{red}]{essai centr\xE9}|
+Un essai hors ligne : \frametxt[inline = false, style=\bfseries\color{red}]{essai centré}|
 
-
 \section{Le code}
 Le code ci-dessous est l'exact verbatim du fichier \verb|simplekv.tex| :
 
@@ -320,7 +322,7 @@
 		numbers=left,
 		numberstyle=\tiny\ttfamily\color{black},
 		breaklines=true,
-		prebreak={\hbox{$\rhookswarrow$}},
+		prebreak={\hbox{$\hookleftarrow$}},
 		breakindent=3em,
 		breakautoindent=true,
 		xleftmargin=1em,

Modified: trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex	2022-10-01 23:50:19 UTC (rev 64577)
+++ trunk/Master/texmf-dist/tex/generic/simplekv/simplekv.tex	2022-10-02 20:17:14 UTC (rev 64578)
@@ -1,15 +1,12 @@
-% !TeX encoding = ISO-8859-1
-% Ce fichier contient le code comment\xE9 de l'extension "simplekv"
+% !TeX encoding = UTF-8
+% Ce fichier contient le code commenté de l'extension "simplekv"
 %
-% IMPORTANT : pour que les commentaires s'affichent correctement,
-%             ouvrir ce fichier avec l'encodage ISO-8859-1
-%
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %                                                                    %
 \def\skvname                  {simplekv}                             %
-\def\skvver                     {0.2}                                %
+\def\skvver                     {0.2a}                               %
 %                                                                    %
-\def\skvdate                 {2020/04/27}                            %
+\def\skvdate                 {2022/10/01}                            %
 %                                                                    %
 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 %
@@ -30,16 +27,16 @@
 % email: unbonpetit at netc.fr
 %        Commentaires, suggestions et signalement de bugs bienvenus !
 %        Comments, bug reports and suggestions are welcome.
-% Copyright: Christian Tellechea 2017-2020
+% Copyright: Christian Tellechea 2017-2022
 % --------------------------------------------------------------------
-% L'extension simplekv est compos\xE9e des 5 fichiers suivants :
+% L'extension simplekv est composée des 5 fichiers suivants :
 %   - code               : simplekv            (.tex et .sty)
-%   - manuel en fran\xE7ais : simplekv-fr         (.tex et .pdf)
+%   - manuel en français : simplekv-fr         (.tex et .pdf)
 %   - fichier lisezmoi   : README
 % --------------------------------------------------------------------
 
 %##########################################
-%################ Pr\xE9alable ###############
+%################ Préalable ###############
 %##########################################
 \csname skvloadonce\endcsname
 \let\skvloadonce\endinput
@@ -55,9 +52,7 @@
 	\def\X#1{\catcode\number`#1=\number\catcode`#1\relax}
 	\expandafter\xdef\csname skv_restorecatcode\endcsname{\X\,\X\=\X\_}
 \endgroup
-\catcode`\_11
-\chardef\skv_other12
-\catcode`\,\skv_other\catcode`\=\skv_other
+\catcode`\_ = 11 \catcode`\, = 12 \catcode`\= = 12
 %##########################################
 %############ Macros auxilaires ###########
 %##########################################
@@ -64,59 +59,51 @@
 \chardef\skv_stop 0
 \long\def\skv_first#1#2{#1}
 \long\def\skv_second#1#2{#2}
+\long\def\skv_antefi#1\fi{\fi#1}
 \long\def\skv_gob#1{}
 \long\def\skv_exe#1{#1}
-\expandafter\def\expandafter\skv_gobspace\space{}% pour garder la compatibilit\xE9
-\long\def\skv_earg#1#2{\expandafter\skv_earg_i\expandafter{#2}{#1}}\let\skv_exparg\skv_earg
+\expandafter\def\expandafter\skv_gobspace\space{}% pour garder la compatibilité
 \long\def\skv_eearg#1#2{\expandafter\expandafter\expandafter\skv_earg_i\expandafter\expandafter\expandafter{#2}{#1}}
 \long\def\skv_earg_i#1#2{#2{#1}}
-\long\def\skv_expafter#1#2{\expandafter\skv_expafter_i\expandafter{#2}{#1}}% {<a>}{<b>} devient <a><*b>
-\long\def\skv_expafter_i#1#2{#2#1}
 \def\skv_ifcsname#1{\ifcsname#1\endcsname\expandafter\skv_first\else\expandafter\skv_second\fi}
-\long\def\skv_ifx#1{\ifx#1\expandafter\skv_first\else\expandafter\skv_second\fi}
 \long\def\skv_ifempty#1{\skv_ifempty_i#1\_nil\_nil\skv_second\skv_first\__nil}%
 \long\def\skv_ifempty_i#1#2\_nil#3#4#5\__nil{#4}
 \def\skv_stripsp#1{%
-\long\def\skv_stripsp##1##2{\expanded{\skv_stripsp_i\_marksp##2\__nil\_marksp#1\_marksp\_nil{##1}}}%
-\long\def\skv_stripsp_i##1\_marksp#1##2\_marksp##3\_nil{\skv_stripsp_ii##3##1##2\__nil#1\__nil\_nil}%
-\long\def\skv_stripsp_ii##1#1\__nil##2\_nil{\skv_stripsp_iii##1##2\_nil}%
-\long\def\skv_stripsp_iii##1##2\__nil##3\_nil##4{\unexpanded{##4{##2}}}%
+	\long\def\skv_stripsp##1##2{\expanded{\skv_stripsp_i\_marksp##2\__nil\_marksp#1\_marksp\_nil{##1}}}%
+	\long\def\skv_stripsp_i##1\_marksp#1##2\_marksp##3\_nil{\skv_stripsp_ii##3##1##2\__nil#1\__nil\_nil}%
+	\long\def\skv_stripsp_ii##1#1\__nil##2\_nil{\skv_stripsp_iii##1##2\_nil}%
+	\long\def\skv_stripsp_iii##1##2\__nil##3\_nil##4{\unexpanded{##4{##2}}}%
 }\skv_stripsp{ }
 %##########################################
-%########## Macros de d\xE9finition ##########
+%########## Macros de définition ##########
 %##########################################
-\def\setKVdefault{\let\skv_find_kv_i\skv_find_kv_nocode\skv_readKV\skv_exe}
-\def\setKV       {\let\skv_find_kv_i\skv_find_kv_nocode\skv_readKV\skv_gob}
-\def\defKV       {\let\skv_find_kv_i\skv_find_kv_code  \skv_readKV\skv_gob}
-\def\skv_readKV{%
-	\edef\skv_restorecatcode{\catcode44=\the\catcode44 \relax\catcode61=\the\catcode61 \relax}%
-	\catcode44\skv_other\catcode61\skv_other
-	\skv_readKV_i
-}
-\long\def\skv_readKV_i#1[#2]#3{%
-	#1{\expandafter\def\csname skv_[#2]\endcsname{#3}}% ex\xE9cute (si \defKV) ou pas
+\def\setKVdefault{\let\skv_find_kv_ii\skv_find_kv_nocode\skv_readKV\skv_exe}
+\def\setKV       {\let\skv_find_kv_ii\skv_find_kv_nocode\skv_readKV\skv_gob}
+\def\defKV       {\let\skv_find_kv_ii\skv_find_kv_code  \skv_readKV\skv_gob}
+\long\def\skv_readKV#1[#2]#3{%
+	#1{\expandafter\def\csname skv_[#2]\endcsname{#3}}% exécute (si \defKVdefault) ou pas
 	\def\skv_setname{#2}%
-	\skv_readKV_ii#3,\__,%
-	\skv_restorecatcode
+	\skv_readKV_i#3,\__,%
 }
-\long\def\skv_readKV_ii#1,{\skv_readKV_iii\skv_find_kv#1=true=\_nil\skv_find_kv\__\__nil}% si #1=\__ ne rien faire sinon \skv_find_kv#1=true=\_nil
-\long\def\skv_readKV_iii#1\skv_find_kv\__#2\__nil{#1}
-
-\long\def\skv_find_kv#1=#2=#3\_nil{%
+\long\def\skv_readKV_i#1,{\skv_readKV_ii\skv_find_kv#1=true=\_nil\skv_find_kv\__\__nil}% si #1=\__ ne rien faire sinon \skv_find_kv#1=true=\_nil
+\long\def\skv_readKV_ii#1\skv_find_kv\__#2\__nil{#1}
+\long\def\skv_find_kv#1={%
 	\edef\__key{_[\skv_setname]_\skv_stripsp\detokenize{#1}}%
-	\skv_stripsp\skv_find_kv_i{#2}%
-	\skv_readKV_ii
+	\skv_find_kv_i{}%
 }
+\long\def\skv_find_kv_i#1=#2\_nil{%
+	\expandafter\skv_stripsp\expandafter\skv_find_kv_ii\expandafter{\skv_gob#1}%
+	\skv_readKV_i
+}
 \long\def\skv_find_kv_nocode#1{%
-	\expandafter\def\csname skv\__key\endcsname{#1}%\__val% stocker la cl\xE9
-	\ifcsname skvcode\__key\endcsname% si le code correspondant existe
-		\csname skvcode\__key\endcsname{#1}% ex\xE9cute le code
+	\expandafter\def\csname skv\__key\endcsname{#1}% stocker la valeur
+	\ifcsname skvcode\__key\endcsname
+		\skv_antefi\csname skvcode\__key\endcsname{#1}%
 	\fi
 }
-\long\def\skv_find_kv_code#1{%
-	\expandafter\def\csname skvcode\__key\endcsname##1{#1}%
+\long\def\skv_find_kv_code{%
+	\expandafter\def\csname skvcode\__key\endcsname##1%
 }
-
 \def\restoreKV[#1]{%
 	\skv_ifcsname{skv_[#1]}
 		{\skv_eearg{\setKV[#1]}{\csname skv_[#1]\endcsname}}
@@ -126,17 +113,18 @@
 %##########################################
 %############## Macro \useKV ##############
 %##########################################
-\def\useKV[#1]#2{\expanded{\skv_stripsp{\useKV_i[#1]}{#2}}}
-\def\useKV_i[#1]#2{\expandafter\useKV_ii\csname skv_[#1]_#2\endcsname{#2}}
-\def\useKV_ii#1#2{%
-	\ifdefined#1\unexpanded\expandafter{#1}%
-	\else     \errmessage{Key "#2" not defined}%
+\def\useKV[#1]{\romannumeral\skv_stripsp{\useKV_i[#1]}}
+\def\useKV_i[#1]#2{%
+	\ifcsname skv_[#1]_#2\endcsname
+		\expandafter\expandafter\expandafter\skv_stop\csname skv_[#1]_#2\expandafter\endcsname
+	\else
+		\skv_stop\errmessage{Key "#2" not defined in group of keys "#1"}%
 	\fi
 }
 %##########################################
 %############# Macros de test #############
 %##########################################
-\def\ifboolKV[#1]#2{\romannumeral\skv_stripsp{\ifboolKV_i[#1]}{#2}}
+\def\ifboolKV[#1]{\romannumeral\skv_stripsp{\ifboolKV_i[#1]}}
 \def\ifboolKV_i[#1]#2{%
 	\skv_ifempty{#2}
 		{\skv_stop\errmessage{Empty argument is not a valid boolean}\skv_second
@@ -155,7 +143,6 @@
 			{\skv_stop\errmessage{Value "#1" is not a valid boolean}\skv_second}%
 		}%
 }
-
 \def\testboolKV#1{\romannumeral\skv_stripsp{\testboolKV_i}{#1}}% macro publique qui teste si #1 est <true> ou <false>, erreur sinon
 \def\testboolKV_i#1{%
 	\skv_ifempty{#1}
@@ -162,7 +149,6 @@
 		{\skv_stop\errmessage{Empty argument is not a valid boolean}\skv_second}
 		{\skv_stripsp{\ifboolKV_ii}{#1}}%
 }
-
 \def\skv_ifargtrue#1{\skv_ifargtrue_i#1true\_nil}
 \def\skv_ifargtrue_i#1true#2\_nil{\skv_ifempty{#1}{\skv_ifargtrue_ii#2\_nil}\skv_second}
 \def\skv_ifargtrue_ii#1true#2\_nil{\skv_ifempty{#1#2}}
@@ -172,7 +158,7 @@
 %##########################################
 %############# Macro \showKV ##############
 %##########################################
-\def\showKV[#1]#2{\expanded{\skv_stripsp{\showKV_i[#1]}{#2}}}
+\def\showKV[#1]#2{\skv_stripsp{\showKV_i[#1]}{#2}}
 \def\showKV_i[#1]#2{%
 	\immediate\write-1 {%
 		^^JKey\space\space[#1]#2=%
@@ -197,9 +183,15 @@
  _____________________________________________________________________________
 | Version |    Date    | Changements                                          |
 |-----------------------------------------------------------------------------|
-|   0.1   | 08/08/2017 | Premi\xE8re version                                     |
+|   0.1   | 08/08/2017 | Première version                                     |
 |-----------------------------------------------------------------------------|
-|   0.2   | 27/04/2020 | - Un <code> peut \xEAtre assign\xE9 \xE0 une <cl\xE9>            |
+|   0.2   | 27/04/2020 | - Un <code> peut être assigné à une <clé>            |
 |         |            | - Correction de bugs                                 |
 |         |            | - Optimisations                                      |
+|-----------------------------------------------------------------------------|
+|   0.2a  | 01/10/2022 | - vieux bug corrigé : \useKV envoie désormais une    |
+|         |            |   erreur si une clé n'est pas définie                |
+|         |            | - la valeur n'est dépouillée que d'une accolade (et  |
+|         |            |   non pas de 2 comme auparavant)                     |
+|         |            | - quelques petits nettoyages, code en UTF8           |
 |-----------------------------------------------------------------------------|
\ No newline at end of file



More information about the tex-live-commits mailing list.