Permalink
Browse files

Fini la doc en fr, fait des tests et corrigé un bug. Version 1.1 du C…

…TAN.
  • Loading branch information...
1 parent 59ef697 commit 9abce565bc438f89f37c4d17b1c208dd836ceca8 @mpg committed Mar 23, 2008
Showing with 365 additions and 321 deletions.
  1. +14 −13 README
  2. +31 −52 test.tex
  3. +9 −42 todo
  4. +311 −214 xargs.dtx
View
27 README
@@ -10,18 +10,17 @@ Presentation
------------
Defining commands with an optional argument is easy in LaTeXe. There is,
-however, two limitations: there can be at most one optional argument and it must
-be the first one. The xargs package provide extended variants of \newcommand &
-friends, for which these limitations no longer hold.
-
-You may know some tricks in order to define commands with many optional
-arguments, or with last argument optional, etc. Theses tricks are subject to a
-few problems (using arguments in arbitrary order can be difficult, sometimes
-space is gobbled where it should not), which can be difficult to solve. Anyway,
-you don't want to worry about such tricky things while writing a document.
-
-The xargs package provides you with an easy and (hopefully) robust way to define
-such commands, using a nice key=value syntax.
+however, two limitations: only one argument can be optional and it must
+be the first one. The xargs package provide extended variants of
+\newcommand & friends, for which these limitations no longer hold. It
+allows to control what happens with many consecutive optional arguments.
+It also provide a way of making the definition global.
+
+Some features of xargs are similar to those provided by the experimental
+`xparse' package, which also allows more flexible argument syntaxes,
+though the approach and syntax are different. However, xargs is not
+experimental, so I hope it can be useful while waiting for a stable
+LaTeX3 release.
Contents
--------
@@ -35,9 +34,11 @@ xargs.dtx: source for both documentations and package
Version info
------------
-2007-10-20 v1.0 first release
+2007-10-20 v1.0 First release
2008-03-08 v1.09 Added the usedefault and addprefix keys, not
documented yet...
+2008-03-22 v1.1 Updated the documentation and fixed a bug in
+ \DeclareRobustCommandx, introduced in v1.09.
License
-------
View
@@ -6,46 +6,10 @@
\usepackage[ascii]{inputenc}
\usepackage[T1]{fontenc}
-\usepackage{xargs, trace}
-
-%% définitions d'outils de test : \showcmd et \showenv {{{2
-\makeatletter
-
-\newcommand\showcmd[1]{%
- \show#1%
- \def\xargst@temp{\x@protect}%
- \xargst@ifmcm{#1}{\xargst@temp}{\xargst@showisp#1}{}%
- \def\xargst@temp{\protect}%
- \xargst@ifmcm{#1}{\xargst@temp}{\xargst@showisp#1}{}%
- \edef\xargst@temp{\string\@protected@testopt}%
- \xargst@ifmcm{#1}{\xargst@temp}{%
- \expandafter\show\csname\string#1\endcsname}{}}
-
-\newcommand\xargst@showisp[1]{%
- \begingroup\escapechar\m@ne\expandafter\endgroup
- \expandafter\showcmd\csname\string#1 \endcsname}
-
-\newcommand\xargst@ifmcm[2]{%
- \edef\xargst@temp{\noexpand\xargst@ifmcm@{\meaning#1}{\meaning#2}}%
- \xargst@temp}
-
-\newcommand*\xargst@ifmcm@[2]{%
- \def\xargst@temp##1#2##2\@nil{%
- \ifx\empty##2\empty
- \expandafter\@secondoftwo
- \else
- \expandafter\@firstoftwo
- \fi}%
- \xargst@temp#1#2\@nil}
-
-\newcommand\showenv[1]{%
- \expandafter\showcmd\csname#1\endcsname
- \expandafter\show\csname end#1\endcsname}
-
-\makeatother
-
-%% test des outils de test sur les macros LaTeX {{{1
-%% (et valeurs de référence pour le préfixe)
+\usepackage{xargs, show2e, trace}
+
+%% Valeurs de référence pour le préfixe {{{1
+%%
%% test de \showcmd sur des cs-mots
% \newcommand\sct{bla}
@@ -72,24 +36,31 @@
% \stop
%% le point sur \newcommand, les # et les \if {{{1
+%%
+
% % \newcommand*\hasht[1][ab#cd]{def} % Explose.
% \newcommand*\hasht[1][a]{\showtokens{(#1)}}
% \hasht[a#b]
% \newcommand*\tif[1][\ifcat]{\showtokens{\ifx#1\ifnum}}
% \showcmd\tif
% \tif[\if]
% \stop
+
%% morale de l'histoire : les \if marchent partout,
%% les # marchent dans un arg optionel mais pas dans une valeur par défaut
%% comportement avec des \ifs {{{1
+%%
+
% \newcommandx\txif[1][1=\ifcat]{\showtokens{(#1)}}
% \stop
+
%% Morale : on laisse tomber (xkeyval)
-%% macros de définitions (pas \DRCx), cas simples {{{1
+%% macros de définitions (pas \CCx), cas simples {{{1
+%%
-%% newcommandx, trois cas de base (cf choose@def) + @ifdefinable
+% %% newcommandx, trois cas de base (cf choose@def) + @ifdefinable
% \newcommandx\ncst{blat}
% \showcmd\ncst
% \newcommandx\ncstt[2][1=tt1]{blatt}
@@ -100,41 +71,46 @@
% \showcmd\ncsttt % pareil qu'avant
%% désormais je ne teste plus que le cas non-trivial de choose@def
-% \renewcommandx : un cas + @ifdefinable
+
+%% \renewcommandx : un cas + @ifdefinable
% \renewcommandx\ncst[2][2=rt2]{blart}
% \showcmd\ncst
% \renewcommandx\rct[2][2=non]{horreur} % -> 1 erreur
-% \showcmd\rct % undefined
+% \showcmd\rct % défini quand même
-%% \provide command : un cas + @ifdefinable
+%% \providecommand : un cas + @ifdefinable
% \providecommandx\pcst[2][2=ipt2]{blapt}
% \showcmd\pcst
-% \procvidecommandx\ncst[2][2=non]{horreur} % doit ne rien faire
-% \showcmd\ncst % toujours [2][2=rt1]{blart}
+% \let\ncst\empty
+% \providecommandx\ncst[2][2=non]{horreur} % doit ne rien faire
+% \showcmd\ncst % toujours vide
%% \DRCx : deux cas (cs-mot ou pas) + @ifdefinable
% \DeclareRobustCommandx\drcst[2][2=drct2]{bladrct}
% \showcmd\drcst
-% \DeclareRobustCommandx\ncst[2][2=drct2]{redef} % -> warning mais redef
+% \DeclareRobustCommandx\+[2][2=drcplus]{bladrcplus}
+% \showcmd\+
+% \let\ncst\empty
+% \DeclareRobustCommandx\ncst[2][2=drct2]{redef} % -> info (log) mais redef
% \showcmd\ncst % ci-dessus
%% \newenvironmentx : 1 cas + @ifdef
% \newenvironmentx{net}[2][2=net2]{B-net}{E-net}
% \showenv{net}
% \newenvironmentx{net}[2][2=non]{B-pas}{E-bien} % -> 1 erreur
-% \showenv{net} % pareil qu'avant
+% \showenv{net} % début comme avant, fin comme après (!)
%% \renewenvironmentx : 1 cas + @ifdef
% \renewenvironmentx{net}[2][2=rnet2]{B-rnet}{E-rnet}
% \showenv{net}
% \renewenvironmentx{net*}[2][2=non]{B-pas}{E-bien} % -> 1 erreur
-% \showenv{net*} % undefined
+% \showenv{net*} % quand même défini
% \stop
%% tests pour addprefix {{{1
-% %% \newcommandx
+%% \newcommandx
% \begingroup
% \newcommandx\ncai[2][addprefix=\global\protected]{def nca1}
% \newcommandx\ncaii[2][1=foo, addprefix=\global\protected]{def nca2}
@@ -186,7 +162,9 @@
\section{truc}
Foubarre.\par\bigskip
-%% test pour usedefault {{{1
+%% usedefault {{{1
+%%
+
% \newcommandx*\foo[3][1=a, 2=b, 3=c]{(#1,#2,#3)}
% \foo[][B] 123 should be (,B,c)123 \par
% \foo[][][C] 123 should be (,,C)123 \par
@@ -201,4 +179,5 @@ \section{truc}
% \foooo[default][B] 123 should be (a,B,c)123 \par
% \foooo[default][][C] 123 should be (a,,C)123 \par
+%% fixe : end-doc {{{1
\end{document}
View
51 todo
@@ -4,52 +4,19 @@
% Pour la prochaine version
% -------------------------
-[ ] Penser à décommenter le test dans la doc. De façon générale, bien relire la
- doc et surtout celle du code en ajoutant les \begin{macro} kivonbien. (Tenir
- compte des trucs gribouillés sur papier v1.0 pour commencer.) (Créer, sous
- une forme ou une autre, des sous-section et les munir de liens cliquables
- (cf minitoc).)
-
-[ ] Suite de test :
- [ ] test de chaque commande, cas de base ; (reste \CCx à faire)
- [ ] gestion des arguments : indep de la forme (courte) et de l'ordre ;
- [ ] préfixe pour chaque commande + \Check-compatibilité avec LaTeX ;
- [ ] présence de \ifs (def, val par défaut, val d'arguments (opt ou pas)) ;
+[ ] Préparer une suite de test, puis la passer (croix en début de ligne) :
+ x [x] macros de définition, cas de base ;
+ x [x] usage des macros définies, cas de base ; (fait dans la doc)
+ [ ] test de \CCx en interne ;
+ x [x] préfixe pour chaque commande ;
+ [ ] \Check-compatibilité avec LaTeX, notamment pour le préfixe ;
+ x [x] usage des commandes, avec usedefault ;
[ ] espaces parasites pour chaque commande dans un max de situations ;
- [ ] présence de \par partout (avec ou sans ted) ;
- [ ] robustesse des commandes définies ;
+ [ ] présence de \par partout sauf dans <liste> ;
+ [ ] robustesse au sens \protect des commandes définies ;
[ ] messages d'erreur ;
[ ] c'est tout pour cette fois...
-[ ] Relire les usages de \@onlypreamble (fautes de frappe).
-
-[x] Revoir les conditions d'explosion de \newcommand avec des # ou des \if.
- -> Résultat : tout marche bien avec les \if, les # dans un argument optionel
- sont OK, mais pas dans une valeur par défaut.
-
-[x] Mettre tout le code de parsing dans un groupe, par propreté.
-
-[ ] [fait, mais] Ajouter une option pour le préfixe (\long, etc)
- [x] Regarder individuellement chaque variante : choix du comportement
- adéquat, test de ce comportement. (En part, env et \DRCx.) (Tenir compte de
- la compatibilité LaTeX.)
- [ ] Regarder pour \CheckCommandx.
-
-[x] (Abandon) Rendre tout robuste à la présence de \if et de # !
- État actuel : ok (sous réserves) pour les \if dans le texte de def ou dans
- les valeurs d'arguments, mais PB si \if dans une <liste>.
- -> Résultat : le problème avec les \if vient de xkeyval. À moins d'un
- pré-traitement intensif par ted, il n'y a rien à faire. On abandonne sur ce
- front.
- Pour les #, même combat : ils marchent partout mais pas dans une <liste>.
- Même motif, même punition.
-
-[x] Documenter les limitations connues dans une sous-section à part (#, \if,
- \par).
-
-[x] Voir le truc à la \newlyxcommand... (Envoyé, en attente de retour des
- tests.)
-
% Plus tard, ou à repenser
% ------------------------
Oops, something went wrong.

0 comments on commit 9abce56

Please sign in to comment.