% \iffalse meta-comment
% Time-stamp: <2009-02-27T07:51:49 (cet) [yvon sur hypatie]>
% Copyright (C) 2009 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\fileversion{v1.2}  
%<package>\def\filedate{2009/02/26} 
%<package>\def\docdate{2009/02/26} 
%<package>\def\fileinfo{Yet Another Grand Unified Symbols Loader
%<package>              par Le TeXnicien de surface} 
%<package>\ProvidesPackage{yagusylo}
%<package>   [\filedate\space\fileversion\space\fileinfo] 
%<*driver>
\documentclass[a4paper]{ltxdoc}
\usepackage[latin9]{inputenc}
\usepackage[T1]{fontenc}  
\usepackage[onerror=nice]{yagusylo}
\usepackage{xspace,fixltx2e,array} 
\IfFileExists{lmodern.sty}{\usepackage{lmodern}}{}
\usepackage[np, autolanguage]{numprint}
\usepackage[frenchb,english]{babel}
\usepackage[colorlinks=true,
            linkcolor=blue,
            urlcolor=blue,
            citecolor=blue]{hyperref} 
% décommentez la macro \OnlyDescription pour obtenir un document avec
% le code
% comment out the following line to obtain a document with code
% \OnlyDescription
\EnableCrossrefs         
\CodelineIndex
\RecordChanges
%%% customization
\makeatletter
\def\Describe@Macro#1{\endgroup
  \par\noindent\hspace*{-5em}
  {\PrintDescribeMacro{#1}}%
  \SpecialUsageIndex{#1}\par}
\makeatother
\newcommand{\TO}{\textemdash~\ignorespaces}
\newcommand{\TF}{\unskip~\textemdash\xspace}
\newcommand{\BOP}{\discretionary{}{}{}}
\newcommand\Pkg[1]{\textsf{#1}}
\newcommand{\fctt}{\texttt{fr.comp.text.tex}\xspace}
\newcommand{\Sourire}{\texttt{;-)}\xspace}
\newcommand\Option[1]{\textsc{#1}}
\def\Module{yagusylo}
%%% end of customization
\begin{document}
  \DocInput{yagusylo.dtx}
\end{document}
%</driver>
% \fi
%
% \CheckSum{971}
%
% \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{yagusylo.sty}
%
% \changes{v1.1}{2008/06/25}{first version on personnal site}
% \changes{v1.2}{2008/08/17}{first version on CTAN}
%
% \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, \ifinner, \ifcase, \def, \expandafter,^^A
%   \RequirePackage, \@ctrerr, \ProcessOptions,\relax,^^A
%   \AtEndOfPackage, \AtBeginDocument,\,, \{, \}, \`,^^A 
%   \DeclareMathOperator, \InputIfFileExists,^^A 
%   \@ifstar, \@gobble, \@ifdefinable, \@nil,^^A 
%   \ifthenelse, \equal, \value,^^A 
%   \frac, \geqslant, \leqslant, \dfrac,\ast, \imath, \jmath, \binom,^^A 
%   \displaystyle, \ifx, \infty, \int, \langle, \left, \let, \llbracket,^^A 
%   \longmapsto, \longrightarrow, \lVert, \lvert, \MakeUppercase, \mathbb,^^A 
%   \mathscr, \MessageBreak, \mspace, \newtoks, \overrightarrow,^^A 
%   \PackageError, \PackageInfo, \PackageWarningNoLine, \partial, \rangle,^^A 
%   \renewcommand, \right, \rrbracket, \rVert, \rvert, \string, \the,^^A 
%   \varnothing, \xrightarrow, \xspace,^^A 
%   \text, \textup \csname, \endcsname, \value, \else, \Omega, \ensuremath}
% 
% \title{The package \textsf{yagusylo}\thanks{This document corresponds to
%                   the file \textsf{yagusylo}~\fileversion, \filedate, 
%                   50th anniversary edition.}} 
% \author{Le \TeX nicien de surface\thanks{%
%                 \href{mailto:le.texnicien.de.surface@wanadoo.fr}%
%                      {le.texnicien.de.surface@wanadoo.fr}}}  
%
% \maketitle
%
% \begin{abstract}
%   This package enables you to obtain a symbol whithout loading the
%   package which usually provides it in order to avoid name clashes.
% 
%   It could be considered as an extension of \Pkg{pifont} gone
%   technicolor. It's behaviour is controlled by keys using
%   \Pkg{xkeyval}.  
% 
%   The English documentation for the user is available in
%   \texttt{\Module-en.pdf}. 
% \end{abstract}
% \begin{otherlanguage}{frenchb}
%   \begin{abstract}
%     Cette extension permet d'obtenir un symbole sans avoir à charger
%     l'extension qui le fournit habituellement. Cela permet d'éviter
%     des conflits de noms.
% 
%     On peut la considérer comme une extension de \Pkg{pifont} en
%     technicolor. Son comportement est controlé à l'aide de clés
%     grâce à \Pkg{xkeyval}. 
% 
%     La documentation en français pour l'utilisateur est 
%     \texttt{\Module-fr.pdf}.  
%   \end{abstract}
% \end{otherlanguage}
% \tableofcontents{}
% \newpage
% 
% \StopEventually{}
% \section{The code}
% \label{secCode}
%
% \iffalse
%<*package>
% \fi
% We begin with the usual salutations 
% and then load some packages
%    \begin{macrocode}
\RequirePackage{xifthen}
\RequirePackage{suffix}
\RequirePackage{xargs}
%    \end{macrocode}
% \Pkg{xargs} requires \Pkg{xkeyval} and
% \Pkg{xifthen} requires \Pkg{etex}, \Pkg{calc}, \Pkg{ifthen}, and
% \Pkg{ifmtarg} so no need to ask for them again but they are all
% available from now on.
% 
% Two macros the behaviour of which will be controlled by options on
% the document body level. For the moment, no info, no warning. 
%    \begin{macrocode}
\newcommand*{\Y@GINFO}[2][]{}
\newcommand*{\Y@GWARNING}[3]{}
%    \end{macrocode}
% 
% The first global key controls the symfam
%    \begin{macrocode}
\define@choicekey*+[Y@G]{yagusylo.sty}{symfam}[\Y@G@SymFamChoice\nr]% 
 {marvosym,fourier,wasysym,bbding,dingbat,ark,ifsym,ifsymgeo,%
  ifsymgeonarrow,ifsymgeowide,ifsymclock,ifsymweather,pifont}%
 [pifont]%
 {\Y@GINFO{You choose \Y@G@SymFamChoice}}%
 {\PackageError{yagusylo}%
   {The symbols family ``\Y@G@SymFamChoice'' is not yet known.}
   {I don't know the family you required.\MessageBreak
    If it's not a typo you may consider to contact me
    (TdS)\MessageBreak to obtain support for it.}}
%    \end{macrocode}
% the boolean key |color| will control the loading of \Pkg{xcolor}
% thereafter 
%    \begin{macrocode}
\define@boolkey[Y@G]{yagusylo.sty}[Y@G@]{color}[false]{}
%    \end{macrocode}
% the boolean key |configfile| will control the inputing of the
% configuration file, if it exists, 
%    \begin{macrocode}
\define@boolkey[Y@G]{yagusylo.sty}[Y@G@]{configfile}[false]{}
%    \end{macrocode}
% 
% The keys |info| and |onerror| control the behaviour of
% \Pkg{yagusylo} 
%    \begin{macrocode}
\define@choicekey*+[Y@G]{yagusylo.sty}{info}[\Y@G@Info\nr]% 
  {mute,normal,verbose}[normal]{}{}
\define@choicekey*+[Y@G]{yagusylo.sty}{onerror}[\Y@G@OnError\nr]% 
  {nice,tough}[tough]{}{}
%    \end{macrocode}
% 
% It is possible to pass options to \Pkg{xcolor} with the following
% key  
%    \begin{macrocode}
\define@key[Y@G]{yagusylo.sty}{XcolorOptions}[!Y@G!]%
  {\def\Y@GXcolorOptions{#1}}
%    \end{macrocode}
% 
% It's now time to set the default values of the global keys, read the
% options given by the user and relax the macro \cs{nr} which wont be
% mentioned again. 
%    \begin{macrocode}
\ExecuteOptionsX[Y@G]{symfam,color,XcolorOptions,info,onerror,configfile}
\ProcessOptionsX[Y@G]\relax
\let\nr\relax
%    \end{macrocode}
% 
% Depending of the value given to the key |color| we load \Pkg{xcolor}
% or not. If the value of |XcolorOptions| is the default |!Y@G!|
% \Pkg{xcolor} is loaded without any option, if not \Pkg{xcolor} is
% loaded with the options provided by the user. The control of the
% validity of those options will be done by \Pkg{xcolor} itself. 
%    \begin{macrocode}
\ifY@G@color
\ifthenelse{\equal{\Y@GXcolorOptions}{!Y@G!}}
  {\RequirePackage{xcolor}}
  {\RequirePackage[\Y@GXcolorOptions]{xcolor}
    \PackageInfo{yagusylo}{Package xcolor loaded with options:
      \Y@GXcolorOptions}}
\define@key[Y@G]{yagusylo.sty}{symcolor}[red]{\def\Y@GSymColor{#1}}
\setkeys[Y@G]{yagusylo.sty}{symcolor}
\newcommand\Y@G@Couleur[1]{\color{#1}}
\else
\define@key[Y@G]{yagusylo.sty}{symcolor}[]{}
\newcommand\Y@G@Couleur[1]{\relax}
\def\Y@GSymColor{\relax}
\fi
%    \end{macrocode}
% 
% We don't want the global options |color|, |info| and |onerror| to be
% changed afterwards so we disable them. 
%    \begin{macrocode}
\disable@keys[Y@G]{yagusylo.sty}{color,onerror,info}
%    \end{macrocode}
% 
% \begin{macro}{\setyagusylokeys}
% The macro requires an argument, if it is a \texttt{*} the default
% settings of the global keys are redone, in the other case, the user
% is meant to provide legal pairs of key-value. 
%    \begin{macrocode}
\newcommand\setyagusylokeys[1]{%
  \ifthenelse{\equal{#1}{*}}%
  {\setkeys[Y@G]{yagusylo.sty}{%
      symfam,symcolor,%
      leadtype,symplace,sympos,boxwidth,before,after,%
      head,tail}}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}}
%    \end{macrocode}
% \end{macro}
% 
% Whatever the value of |onerror| key, \Pkg{yagusylo} will give, at
% the end of its loading, a summary of the global setup which is
% enforced at the beginning of the document:
%    \begin{macrocode}
\AtEndOfPackage{%
\PackageInfo{yagusylo}{^^J%
============================================================^^J%
^^J%
****************** YAGUSYLO GLOBAL SETUPS ******************^^J%
^^J%
===================== GENERAL OPTIONS ======================^^J%
^^J%
option ``info'' ......... is ``\Y@G@Info''^^J%
option ``onerror'' ...... is ``\Y@G@OnError''^^J%
option ``color'' ........ is \ifY@G@color``true''\else``false''\fi^^J%
option ``configfile'' ... is \ifY@G@configfile``true''\else``false''\fi^^J%
^^J%
-------------------- CHANGEABLE OPTIONS --------------------^^J%
^^J%
\ifY@G@color
option ``symcolor'' ....... is ``\Y@GSymColor''^^J\fi
option ``symfam'' ......... is ``\Y@G@SymFamChoice''^^J%
option ``leadtype'' ....... is ``\Y@Gyagfillleadtype''^^J%
option ``symplace'' ....... is ``\Y@Gyagfillsymplace''^^J%
option ``sympos'' ......... is ``\Y@Gyagfillsympos''^^J%
option ``boxwidth'' ....... is ``\Y@Gyagfillboxwidth''^^J%
option ``before'' ......... is ``\Y@Gyagfillbefore''^^J%
option ``after'' .......... is ``\Y@Gyagfillafter''^^J%
option ``head'' ........... is ``\the\Y@Glinehead''^^J%
option ``tail'' ........... is ``\the\Y@Glinetail''^^J%
::::::::::::::::: OPTIONS FOR YAGENUMERATE :::::::::::::::::^^J%
option ``firstitemnum'' ... is ``\number\Y@GEnumFirstItemNum''^^J%
option ``enumlength'' ..... is ``\number\Y@GEnumLength''^^J%
\ifY@G@color
option ``symcolor'' ....... is ``\Y@GEnumSymColor''^^J\fi
option ``symfam'' ......... is ``\Y@G@EnumSymFamChoice''^^J%
------------------------------------------------------------^^J%
^^J%
The known patterns for environment ``yagenumerate'' are:^^J%
``piwcr'' (default), ``piwcs'', ``pibcr'', and ``pibcs''.^^J%
^^J%
============================================================%
\@gobbletwo}%
%    \end{macrocode}
% 
% Always at the end of the loading, we redefine the info and
% warning\slash error commands: 
%    \begin{macrocode}
\ifthenelse{\equal{\Y@G@Info}{verbose}}
  {\renewcommand*{\Y@GINFO}[2][0]{\PackageInfo{yagusylo}{#2}}}{}%
\ifthenelse{\equal{\Y@G@Info}{normal}}
  {\renewcommand*{\Y@GINFO}[2][0]{%
      \ifthenelse{#1>0}{\PackageInfo{yagusylo}{#2}}}{}}{}%
  \ifthenelse{\equal{\Y@G@OnError}{tough}}
  {\renewcommand*{\Y@GWARNING}[3]{\PackageError{yagusylo}{#1}{#3}}}{}
  \ifthenelse{\equal{\Y@G@OnError}{normal}}
  {\renewcommand*{\Y@GWARNING}[3]{\PackageError{yagusylo}{#1}{#3}}}{}
  \ifthenelse{\equal{\Y@G@OnError}{nice}}
  {\renewcommand*{\Y@GWARNING}[3]{\PackageWarning{yagusylo}{#1#2}}}{}}
%    \end{macrocode}
% 
% This is the first utility macro which is not really more than an
% abbreviation. |Y@G| is the prefix of all internal names. 
%    \begin{macrocode}
\newcommand\Y@G@U@FamilyDef[1]{\fontencoding{U}\fontfamily{#1}}
%    \end{macrocode}
% And then two other shortcuts. 
%    \begin{macrocode}
\newcommand\Y@Gif[3]{%
  \ifthenelse{\equal{#1}{#2}}{\Y@G@U@FamilyDef{#3}}{}}
\newcommand\Y@GifE[4]{%
  \ifthenelse{\equal{#1}{#2}}{\Y@G@U@FamilyDef{#3}#4}{}}
%    \end{macrocode}
% 
% The internal macro. 
%    \begin{macrocode}
\newcommand\Y@Gyagding[3]{{%
    \Y@G@GetSymb{#1}\selectfont\Y@G@Couleur{#3}\char#2}}
%    \end{macrocode}
% 
% \begin{macro}{\yagding}
% This user-level macro is defined taking advantage of the features of
% \cs{newcommandx} of \Pkg{xargs} which enable us to have an optional
% argument before and another after the mandatory one. The default
% values of 1st and 3rd arguments ensure that the produced ding will
% be chosen in current default symfam with current default colour, if
% there is any. 
%    \begin{macrocode}
\newcommandx\yagding[3][1=\Y@G@SymFamChoice,3=\Y@GSymColor]{{%
    \Y@G@GetSymb{#1}\selectfont\Y@G@Couleur{#3}\char#2}}
%    \end{macrocode}
% \end{macro}
% 
% The \cs{Y@G@GetSymb} macro selects the correct font setting from the
% symbolic name of the symfam. There is no check mechanism for the
% argument is passed through the key-value mechanism and so checked
% at giving time.
%    \begin{macrocode}
\newcommand\Y@G@GetSymb[1]{%
  \Y@GifE{#1}{marvosym}{mvs}{\fontseries{m}\fontshape{n}}%
  \Y@Gif{#1}{fourier}{futs}%
  \Y@Gif{#1}{wasysym}{wasy}%
  \Y@Gif{#1}{bbding}{ding}%
  \Y@Gif{#1}{dingbat}{dingbat}%
  \Y@Gif{#1}{ark}{ark}%
  \Y@Gif{#1}{ifsym}{ifsym}%
  \Y@Gif{#1}{ifsymgeo}{ifgeo}%
  \Y@GifE{#1}{ifsymgeonarrow}{ifgeo}{\fontshape{na}}%
  \Y@GifE{#1}{ifsymgeowide}{ifgeo}{\fontshape{w}}%
  \Y@Gif{#1}{ifsymclock}{ifclk}%
  \Y@Gif{#1}{ifsymweather}{ifwea}%
  \Y@Gif{#1}{pifont}{pzd}}
%    \end{macrocode}
% 
% \begin{macro}{\defdingname}
%   Next user-level macro relies on the \cs{newcommandx} to enable 3
%   optional arguments, the last one placed after the mandatory
%   ones. The 4th argument is used to build the name of the internal
%   macro with \cs{edef} or \cs{xdef} depending of the value of the
%   2nd (optional) argument which defaults to |local|. 
% 
%   This macro issues an info message if |info| key has value
%   |verbose|.  
% 
%   To facilitate the use of the 2nd argument we provide a shortcut
%   for the 1st one. It's because you have to give the 1st explicity
%   to be able to give the 2nd explicity as well.
% 
%    \begin{macrocode}
\newcommandx\defdingname[5][1=*,2=local,5=\Y@GSymColor]{%
  \Y@GINFO{You define ``#4'' with symbols family ``#1'' and color
    ``#5''}%
%    \end{macrocode}
% First we treat the default, and commonest (?), case for 1st argument 
%    \begin{macrocode}
  \ifthenelse{\equal{#1}{*}}
%    \end{macrocode}
% in which case we do the same for the 2nd argument
%    \begin{macrocode}
  {\ifthenelse{\equal{#2}{local}} 
%    \end{macrocode}
% and then we look at the last, about color. 
%    \begin{macrocode}
    {\ifthenelse{\equal{#5}{*}}
      {\expandafter\edef\csname Y@G@@ #4\endcsname
        {\yagding[\Y@G@SymFamChoice]{#3}[\noexpand\Y@GSymColor]}}
      {\expandafter\edef\csname Y@G@@ #4\endcsname
        {\yagding[\Y@G@SymFamChoice]{#3}[#5]}}}%
%    \end{macrocode}
% Here the ding name will be globally defined. 
%    \begin{macrocode}
    {\ifthenelse{\equal{#2}{global}} 
      {\ifthenelse{\equal{#5}{*}}
        {\expandafter\xdef\csname Y@G@@ #4\endcsname
          {\yagding[\Y@G@SymFamChoice]{#3}[\noexpand\Y@GSymColor]}}
        {\expandafter\xdef\csname Y@G@@ #4\endcsname
          {\yagding[\Y@G@SymFamChoice]{#3}[#5]}}}%
%    \end{macrocode}
% And we come here in case the 2nd argument is neither |local| nor
% |global|.  
%    \begin{macrocode}
      {\Y@GWARNING{Value #2 not recognised} {.\MessageBreak The possible
          values are ``local'' (default) and ``global''.\MessageBreak I
          will assume you wanted ``local''} {The possible values are
          ``local'' (default) and ``global''}}}}%
%    \end{macrocode}
% We use the same pattern of nested \cs{ifthenelse} when the 1st
% argument is explicitly provided. 
%    \begin{macrocode}
  {\ifthenelse{\equal{#2}{local}} 
    {\ifthenelse{\equal{#5}{*}}
      {\expandafter\edef\csname Y@G@@ #4\endcsname
        {\yagding[#1]{#3}[\noexpand\Y@GSymColor]}}
      {\expandafter\edef\csname Y@G@@ #4\endcsname
        {\yagding[#1]{#3}[#5]}}}%
    {\ifthenelse{\equal{#2}{global}} 
      {\ifthenelse{\equal{#5}{*}}
        {\expandafter\xdef\csname Y@G@@ #4\endcsname
          {\yagding[#1]{#3}[\noexpand\Y@GSymColor]}}
        {\expandafter\xdef\csname Y@G@@ #4\endcsname
          {\yagding[#1]{#3}[#5]}}}%
      {\Y@GWARNING{Value #2 not recognised} {.\MessageBreak The possible
          values are ``local'' (default) and ``global''.\MessageBreak I
          will assume you wanted ``local''} {The possible values are
          ``local'' (default) and ``global''}}}}}
%    \end{macrocode}
% \end{macro}
% 
% \begin{macro}{\yagding+}
% First appearance of \cs{WithSuffix} from \Pkg{suffix}. The default
% font encoding is still |U| but it can be given explicitly, enabling
% the user to pick something in a font with different encoding. Here
% once again, \texttt{*} has a special meaning for 3rd and 4th
% arguments. 
%    \begin{macrocode}
\WithSuffix\newcommandx\yagding+[6][1=U,6=\Y@GSymColor]{{%
    \fontencoding{#1}\fontfamily{#2}%
    \ifthenelse{\equal{#3}{*}}{}{\fontseries{#3}}%
    \ifthenelse{\equal{#4}{*}}{}{\fontshape{#4}}%
    \selectfont\Y@G@Couleur{#6}\char#5}}
%    \end{macrocode}
% \end{macro}
%    \begin{macrocode}
\WithSuffix\newcommand\yagding*[1]{%
  \ifthenelse{\isnamedefined{Y@G@@ #1}}
  {\csname Y@G@@ #1\endcsname}
  {[\string? #1 \string?]%
    \Y@GWARNING{The name #1 is not defined}
    {.\MessageBreak
      Or you forgot to define it\MessageBreak
      or you defined it inside an alien group.\MessageBreak
      In any case you used it}{}}}
%    \end{macrocode}
% 
% \begin{macro}{\defdingname+}
% And now the ``grown-up'' version of \cs{defdingname} which mixes the
% syntax of both \cs{defdingname} and \cs{yagding+}. 
%    \begin{macrocode}
\WithSuffix\newcommandx\defdingname+[8] [1=U,2=local,8=\Y@GSymColor]{%
  \ifthenelse{\equal{#2}{local}}%
  {\ifthenelse{\equal{#8}{*}}%
    {\expandafter\edef\csname Y@G@@ #7\endcsname
      {\yagding+[#1]{#3}{#4}{#5}{#6}[\noexpand\Y@GSymColor]}}%
    {\expandafter\edef\csname Y@G@@ #7\endcsname
      {\yagding+[#1]{#3}{#4}{#5}{#6}[#8]}}}%
  {\ifthenelse{\equal{#2}{global}}%
    {\ifthenelse{\equal{#8}{*}}%
      {\expandafter\xdef\csname Y@G@@ #7\endcsname
        {\yagding+[#1]{#3}{#4}{#5}{#6}[\noexpand\Y@GSymColor]}}%
      {\expandafter\xdef\csname Y@G@@ #7\endcsname
        {\yagding+[#1]{#3}{#4}{#5}{#6}[#8]}}}%
    {\Y@GWARNING{Value #2 not recognised} {.\MessageBreak The possible
        values are ``local'' (default) and ``global''.\MessageBreak I
        will assume you wanted ``local''} {The possible values are
        ``local'' (default) and ``global''}}}}
%    \end{macrocode}
% \end{macro}
% 
% The \cs{Y@Gfill} macro does the internal work when one of the
% \cs{yagfill(*/+)} is called. There is generally no error control for 
% the arguments are passed by keys.
% 
% It is heavily indebted to the code of the \cs{Pifill} of
% \Pkg{pifont}.  
%    \begin{macrocode}
\newcommand{\Y@Gfill}[7]%
{{\leavevmode
  \dimendef\Y@Glongi=255\relax
  \dimendef\Y@GBoxActualWidth=254\relax
  \ifthenelse{\equal{#2}{l}}{\let\Leaders=\leaders}{}%
  \ifthenelse{\equal{#2}{x}}{\let\Leaders=\xleaders}{}%
  \ifthenelse{\equal{#2}{c}}{\let\Leaders=\cleaders}{}%
  \ifthenelse{\equal{#3}{a}}
  {\def\LaBoite{\hbox{\makebox{\hspace{#6}#1\hspace{#7}}}}}
  {%
%    \end{macrocode}
% Now we can check the required length against the actual length of
% the material to be typeset. 
%    \begin{macrocode}
    \settowidth{\Y@Glongi}{#1}%
    \ifdim#5>\Y@Glongi%
    \setlength{\Y@GBoxActualWidth}{#5}%
    \else
    \setlength{\Y@GBoxActualWidth}{\Y@Glongi}%
    \Y@GINFO{The choosen value for ``boxwidth'' is too short,\MessageBreak  
      I will use the natural width of the symbol: \the\Y@GBoxActualWidth}\fi
    \ifthenelse{\equal{#3}{n}}
    {\ifthenelse{\(#4<0\)\or\(#4>1000\)}
      {\Y@GWARNING{I don't understand what you want}
        {.\MessageBreak I assume the default}
        {You should read the documentation [[SECyagfillboxwidth]].}%
        \def\LaBoite{\hbox{\makebox[\Y@GBoxActualWidth][c]{#1}}}}%
      {\setlength{\Y@Glongi}{\Y@GBoxActualWidth-\Y@Glongi}%
        \setlength{\Y@Glongi}{\Y@Glongi/1000*#4}%
        \def\LaBoite{\hbox{\makebox%
            [\Y@GBoxActualWidth][l]{\hspace*{\Y@Glongi}#1\hfill}}}}}%
    {\def\LaBoite{\hbox{\makebox[\Y@GBoxActualWidth][#3]{#1}}}}}%
  \Leaders\LaBoite\hfill\kern\z@}}
%    \end{macrocode}
% 
% We then define the keys governing the behaviour of
% \cs{yagfill(*/+)}.
%    \begin{macrocode}
\define@choicekey*+[Y@G]{yagusylo.sty}{leadtype}[\Y@Gyagfillleadtype\nr]% 
 {l,c,x}[l]%
 {\Y@GINFO{Key ``leadtype'' is ``\Y@Gyagfillleadtype''}}%
 {\PackageError{yagusylo}%
   {Possible choices for key ``leadtype'': l (default), c or x}
   {I don't know the type you required.\MessageBreak
    Read the doc, please}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@choicekey*+[Y@G]{yagusylo.sty}{symplace}[\Y@Gyagfillsymplace\nr]% 
 {c,r,l,a,n}[c]%
 {\Y@GINFO{Key ``symplace'' is ``\Y@Gyagfillsymplace''}}%
 {\PackageError{yagusylo}%
   {Possible choices for key ``symplace'': c (default), l, r, a or n}
   {I don't know the place you required.\MessageBreak
    Read the doc, please}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{yagusylo.sty}{sympos}[0]{%
  \ifthenelse{\(#1<0\)\or\(#1>1000\)}
  {\PackageError{yagusylo}
    {Your choice ``#1'' for key ``sympos'' is out of bound}
    {You should chose a interger between 0 and 1000.\MessageBreak
      You should read the documentation}}
  {\Y@GINFO{Keys ``sympos'' is ``#1''}%
    \def\Y@Gyagfillsympos{#1}}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{yagusylo.sty}{boxwidth}[0.2in]{%
  \ifthenelse{\dimtest{#1}<{0pt} \or \dimtest{#1}={0pt}}
  {\PackageError{yagusylo}
    {Your choice ``#1'' for key ``boxwidth'' is out of bound}
    {You should chose a positive length.\MessageBreak
      You should read the documentation}}
  {\Y@GINFO
    {You've asked for ``#1'' as box width.\MessageBreak
      In any case the box will be at least\MessageBreak 
      as large as the symbol itself}}%
  \def\Y@Gyagfillboxwidth{#1}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{yagusylo.sty}{before}[0pt]{%
  \ifthenelse{\dimtest{#1}<{0pt}}
  {\PackageError{yagusylo}
    {Your choice ``#1'' for key ``before'' is out of bound}
    {You should chose a non-negative length.\MessageBreak
      You should read the documentation}}
  {\Y@GINFO{Key ``before'' is ``#1''}}%
  \def\Y@Gyagfillbefore{#1}}
%    \end{macrocode}
% 
% The key \texttt{after} has a special behaviour. If it has the
% default value, the length \cs{Y@Gyagfillafter} is made equal to the
% length \cs{Y@Gyagfillbefore}, else it is checked and an error is
% issued if it is negative.
%    \begin{macrocode}
\define@key[Y@G]{yagusylo.sty}{after}[!Y@G!]{%
  \ifthenelse{\equal{#1}{!Y@G!}}%
  {\def\Y@Gyagfillafter{\Y@Gyagfillbefore}}%
  {\ifthenelse{\dimtest{#1}<{0pt}}
      {\PackageError{yagusylo}
        {Your choice ``#1'' for key ``after'' is out of bound}
        {You should chose a non-negative length.\MessageBreak
          You should read the documentation}}
      {\Y@GINFO{Key ``after'' is ``#1''}}%
      \def\Y@Gyagfillafter{#1}}}
%    \end{macrocode}
% 
% And now we set the keys just defined.
%    \begin{macrocode}
\setkeys[Y@G]{yagusylo.sty}{leadtype,symplace,sympos,boxwidth,before,after}
%    \end{macrocode}
%
% \begin{macro}{\yagfill}
% Here comes the first user macro to fill with dings. If the optional
% argument is given it must be a list of key-value pairs. 
%    \begin{macrocode}
\newcommand\yagfill[2][!Y@G!]{%
\begingroup
\ifthenelse{\equal{#1}{!Y@G!}}{}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}%
  \Y@Gfill{\yagding{#2}}%
  {\Y@Gyagfillleadtype}{\Y@Gyagfillsymplace}%
  {\Y@Gyagfillsympos}{\Y@Gyagfillboxwidth}%
  {\Y@Gyagfillbefore}{\Y@Gyagfillafter}%
\endgroup}
%    \end{macrocode}
% \end{macro}
% 
% And then its friends, 
% \begin{macro}{\yagfill*}
% first the starred version, 
%    \begin{macrocode}
\WithSuffix\newcommand\yagfill*[2][!Y@G!]{%
\begingroup
\ifthenelse{\equal{#1}{!Y@G!}}%
  {}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}%
\Y@Gfill{\yagding*{#2}}%
        {\Y@Gyagfillleadtype}{\Y@Gyagfillsymplace}%
        {\Y@Gyagfillsympos}{\Y@Gyagfillboxwidth}%
        {\Y@Gyagfillbefore}{\Y@Gyagfillafter}%
\endgroup}
%    \end{macrocode}
% \begin{macro}{\yagfill+}
% then the plussed version. 
% \end{macro}
%    \begin{macrocode}
\WithSuffix\newcommand\yagfill+[2][!Y@G!]{%
\begingroup
\ifthenelse{\equal{#1}{!Y@G!}}{}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}%
\Y@Gfill{#2}%
        {\Y@Gyagfillleadtype}{\Y@Gyagfillsymplace}%
        {\Y@Gyagfillsympos}{\Y@Gyagfillboxwidth}%
        {\Y@Gyagfillbefore}{\Y@Gyagfillafter}%
\endgroup}
%    \end{macrocode}
% \end{macro}
% 
% Some lengths and some keys
%    \begin{macrocode}
\newlength{\Y@Glinehead}
\newlength{\Y@Glinetail}
\define@key[Y@G]{yagusylo.sty}{head}[0.5in]{%
  \setlength{\Y@Glinehead}{#1}}
\define@key[Y@G]{yagusylo.sty}{tail}[0.5in]{%
  \setlength{\Y@Glinetail}{#1}}
\setkeys[Y@G]{yagusylo.sty}{head,tail}
%    \end{macrocode}
% which can be set up with the next macro
%    \begin{macrocode}
\newcommandx\setyagline[2][2=!Y@G!]{%
  \ifthenelse{\equal{#2}{!Y@G!}}%
  {\setkeys[Y@G]{yagusylo.sty}{head=#1,tail=#1}}%
  {\setkeys[Y@G]{yagusylo.sty}{head=#1,tail=#2}}}
%    \end{macrocode}
% \begin{macro}{\yagline}
% and are used by
%    \begin{macrocode}
\newcommand{\yagline}[2][!Y@G!]%
{\begingroup
  \ifthenelse{\equal{#1}{!Y@G!}}{}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}%
  \par\noindent\hspace{\Y@Glinehead}%
  \Y@Gfill{\yagding[\Y@G@SymFamChoice]{#2}}%
     {\Y@Gyagfillleadtype}{\Y@Gyagfillsymplace}%
     {\Y@Gyagfillsympos}{\Y@Gyagfillboxwidth}%
     {\Y@Gyagfillbefore}{\Y@Gyagfillafter}%
  \hspace{\Y@Glinetail}\kern\z@\par
\endgroup}
%    \end{macrocode}
% and his friends
%    \begin{macrocode}
\WithSuffix\newcommand\yagline*[2][!Y@G!]%
{\begingroup
  \ifthenelse{\equal{#1}{!Y@G!}}{}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}%
  \par\noindent\hspace{\Y@Glinehead}%
  \Y@Gfill{\yagding*{#2}}%
     {\Y@Gyagfillleadtype}{\Y@Gyagfillsymplace}%
     {\Y@Gyagfillsympos}{\Y@Gyagfillboxwidth}%
     {\Y@Gyagfillbefore}{\Y@Gyagfillafter}%
  \hspace{\Y@Glinetail}\kern\z@\par
\endgroup}
%    \end{macrocode}
% 
%    \begin{macrocode}
\WithSuffix\newcommand\yagline+[2][!Y@G!]%
{\begingroup
  \ifthenelse{\equal{#1}{!Y@G!}}{}%
  {\setkeys[Y@G]{yagusylo.sty}{#1}}%
  \par\noindent\hspace{\Y@Glinehead}%
  \Y@Gfill{#2}%
     {\Y@Gyagfillleadtype}{\Y@Gyagfillsymplace}%
     {\Y@Gyagfillsympos}{\Y@Gyagfillboxwidth}%
     {\Y@Gyagfillbefore}{\Y@Gyagfillafter}%
  \hspace{\Y@Glinetail}\kern\z@\par
\endgroup}
%    \end{macrocode}
% \end{macro}
% 
% We need a macro to check the number of nested levels we are at in
% the list-type environments. The six arguments are: ItemLevel,
% YagitemizeMaxDepth, ItemMark, setyagitemize, yagitemize, the number
% of the section in the documentation of this package.
% 
% The warning or error \TO depending of the key \texttt{onerror}\TF is
% issued once when the level reached has number YagitemizeMaxDepth.
%    \begin{macrocode}
\newcommand{\Y@GLevelTest}[6]{%
  \ifthenelse%
  {\cnttest{\value{Y@G#1}}<{\value{Y@G#2}}}%
  {\setcounter{Y@G#3}{\value{Y@G#1}}}%
  {\setcounter{Y@G#3}{\value{Y@G#2}}%
    \ifthenelse{\cnttest{\value{Y@G#1}}={\value{Y@G#2}}}
    {\Y@GWARNING{Too deeply nested for your setup}
      {.\MessageBreak
        I keep on using the last symbol.\MessageBreak
        You could have a look at your last\MessageBreak
        ``#4''\MessageBreak First ``#5'' too many}%
      {You could have a look at your last\MessageBreak
        ``#4''\MessageBreak First ``#5'' too many.\MessageBreak
        You should read the documentation [[#6]].}}{}}}
%    \end{macrocode}
% We need some global counters. 
%    \begin{macrocode}
\newcounter{Y@GItemLevel}
\newcounter{Y@GItemMark}
\newcounter{Y@GYagitemizeMaxDepth}
%    \end{macrocode}
% 
% \begin{environment}{yagitemize}
% The first list-like environment is a yagusylo version of itemize,
% hence its name.
%    \begin{macrocode}
\newenvironmentx{yagitemize}[3][1=\Y@G@SymFamChoice,3=\Y@GSymColor]
{\stepcounter{Y@GItemLevel}%
  \ifthenelse{\equal{#2}{*}}
%    \end{macrocode}
% The second argument is \texttt{*}. 
%    \begin{macrocode}
  {\Y@GLevelTest{ItemLevel}{YagitemizeMaxDepth}{ItemMark}
    {setyagitemize}{yagitemize}{5.1.2}%
    \edef\numero{\roman{Y@GItemMark}}%
    \begin{list}{%
        \yagding%
        [\csname Y@G@symfam@niveau\numero\endcsname]%
        {\csname Y@G@symfam@numero\numero\endcsname}%
        [\csname Y@G@symfam@couleur\numero\endcsname]}{}}
%    \end{macrocode}
% The second argument is explicitly given.
%    \begin{macrocode}
    {\begin{list}{\yagding[#1]{#2}[#3]}{}}}% 
    {\end{list}\addtocounter{Y@GItemLevel}{-1}}
%    \end{macrocode}
% \end{environment}
% 
% \begin{macro}{\setyagitemize}
%  A macro to set up the \texttt{yagitemize} environment.  The
%  argument of \cs{setyagitemize} must be a list of triples separated
%  by periods. Each triple defines a pattern with values separated by
%  comas: firstly the symfam, secondly the number and thirdly the
%  color.It uses \cs{Y@Gsetyagitemize}
%    \begin{macrocode}
\newcommand{\setyagitemize}[1]{%
  \setcounter{Y@GYagitemizeMaxDepth}{0}%
  \Y@Gsetyagitemize #1.Y@G@.\@nil}
%    \end{macrocode}
% which is defined here with the help of \cs{Y@Gsetyagitemizeaux}.
%    \begin{macrocode}
\def\Y@Gsetyagitemizeaux #1\fi{%
  \fi \Y@Gsetyagitemize #1}%
\def\Y@Gsetyagitemize #1.#2{%
  \def\Y@Gfairemotif ##1,##2,##3\@Y@Gnil{%
    \edef\Y@Gpremier{##1}\edef\Y@Gdeuxieme{##2}\edef\Y@Gtroisieme{##3}%
  }
  \ifx#2\@nil\relax
  \else
  \Y@Gfairemotif#1\@Y@Gnil
  \stepcounter{Y@GYagitemizeMaxDepth}%
  \edef\numero{\roman{Y@GYagitemizeMaxDepth}}%
  \expandafter\edef\csname Y@G@symfam@niveau\numero\endcsname{\Y@Gpremier}
  \expandafter\edef\csname Y@G@symfam@numero\numero\endcsname{\Y@Gdeuxieme}
  \expandafter\edef\csname Y@G@symfam@couleur\numero\endcsname{\Y@Gtroisieme}
  \Y@Gsetyagitemizeaux #2\fi}
%    \end{macrocode}
% At the end, the counter \texttt{Y@GYagitemizeMaxDepth} has value the
% number of levels defined which is also the deepest level of nesting
% available before a warning \TO if \texttt{onerror} is
% \texttt{nice}\TF or an error.
% \end{macro}
% 
%    \begin{macrocode}
\newcounter{Y@GYagitemizeStarMaxDepth}
\WithSuffix\newcommand\setyagitemize*[1]{%
  \setcounter{Y@GYagitemizeStarMaxDepth}{0}%
  \Y@Gsetyagitemizestar #1.Y@G@.\@nil}
\def\Y@Gsetyagitemizestaraux #1\fi{%
  \fi \Y@Gsetyagitemizestar #1}%
\def\Y@Gsetyagitemizestar #1.#2{%
  \ifx#2\@nil%
    \relax
  \else
    \def\motif{#1}%
    \stepcounter{Y@GYagitemizeStarMaxDepth}%
    \edef\numero{\roman{Y@GYagitemizeStarMaxDepth}}%
    \expandafter\edef%
       \csname Y@Gsymbol@listdepth\numero\endcsname{%
         \yagding*{\motif}}%
       \Y@Gsetyagitemizestaraux #2\fi}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcounter{Y@GItemStarLevel}
\newenvironment{yagitemize*}[1][!Y@G!]%
{\stepcounter{Y@GItemStarLevel}
  \ifthenelse{\equal{#1}{!Y@G!}}
  {\Y@GLevelTest{ItemStarLevel}{YagitemizeStarMaxDepth}{ItemMark}
    {setyagitemize*}{yagitemize*}{5.2.2}%
    \edef\Y@GActualSymbol{\csname
      Y@Gsymbol@listdepth\roman{Y@GItemMark}\endcsname}}
  {\edef\Y@GActualSymbol{\yagding*{#1}}}%
  \begin{list}{\Y@GActualSymbol}{}}
{\end{list}\addtocounter{Y@GItemStarLevel}{-1}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommand\yagnumber[3]{\protect\Y@Gyagding{#1}{\arabic{#2}}{#3}}
%    \end{macrocode}
% The boolean is used to control the redefinition of \cs{item}.
%    \begin{macrocode}
\newboolean{Y@GitemRedefined}
%    \end{macrocode}
% 
% Here are the keys of the enum bunch.
%    \begin{macrocode}
\define@choicekey*+[Y@G]{y@genum}{symfam}[\Y@G@EnumSymFamChoice\nr]% 
 {marvosym,fourier,wasysym,bbding,dingbat,ark,ifsym,ifsymgeo,%
  ifsymgeonarrow,ifsymgeowide,ifsymclock,ifsymweather,pifont}%
 [pifont]%
 {\Y@GINFO{You choose \Y@G@EnumSymFamChoice}}%
 {\PackageError{yagusylo}%
   {The symbols family ``\Y@G@EnumSymFamChoice'' is not yet known.}
   {I don't know the family you required.\MessageBreak
    If it's not a typo you may consider to contact me
    (TdS)\MessageBreak to obtain support for it.}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{y@genum}{symcolor}[blue]{\def\Y@GEnumSymColor{#1}} 
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{y@genum}{firstitemnum}['254]{%
  \ifthenelse{\(#1<0\)\or \(#1>255\)}
  {\PackageError{yagusylo}
    {``#1'' is out of bound or not a number}
    {``firstitemnum'' requires a natural number\MessageBreak
    between 0 and 255}}%
  {\def\Y@GEnumFirstItemNum{#1}%
    \Y@GINFO{Key ``firstitemnum'' is
      ``\number\Y@GEnumFirstItemNum''}}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{y@genum}{enumlength}[10]{%
  \ifthenelse{\(#1<1\)\or \(#1>255\)}
  {\PackageError{yagusylo}
    {``#1'' is out of bound or not a number}
    {``enumlength'' requires a natural number\MessageBreak
      between 1 and 255}}%
  {\def\Y@GEnumLength{#1}%
    \Y@GINFO{Key ``enumlength'' is ``\number\Y@GEnumLength''}}}
%    \end{macrocode}
% 
% \begin{macro}{\newenumpattern}
% The macro to create patterns for the \texttt{yagenumerate}
% environment. The macro where the pattern \texttt{foo} is kept is
% \cs{Y@GEnumPattern@foo}.
%    \begin{macrocode}
\newcommand*\newenumpattern[2]{%
  \ifthenelse{\isnamedefined{Y@GEnumPattern@#1}}
  {\PackageError{yagusylo}{Pattern ``#1'' already defined}{%
      You should choose another name\MessageBreak
      this version does NOT provide a ``renewenumpattern'' macro}}
  {{\renewcommand*{\Y@GINFO}[1]{}
      \expandafter\gdef\csname Y@GEnumPattern@#1\endcsname{%
        \setkeys[Y@G]{y@genum}{#2}}}
    \Y@GINFO[1]{Pattern ``#1'' defined with\MessageBreak
      symfam=\Y@G@EnumSymFamChoice\MessageBreak
      symcolor=\Y@GEnumSymColor\MessageBreak
      firstitetemnum=\number\Y@GEnumFirstItemNum\MessageBreak
      enumlength=\Y@GEnumLength\MessageBreak}}}
%    \end{macrocode}
% \end{macro}
% 
% Here we define the 4~default patterns.
%    \begin{macrocode}
\newenumpattern{piwcr}{symfam=pifont,firstitemnum='254,enumlength=10}
\newenumpattern{piwcs}{symfam=pifont,firstitemnum='300,enumlength=10}
\newenumpattern{pibcr}{symfam=pifont,firstitemnum='266,enumlength=10}
\newenumpattern{pibcs}{symfam=pifont,firstitemnum='312,enumlength=10}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommand{\Y@GSetYagEnumerate}[1]{%
  \ifthenelse{\isnamedefined{Y@GEnumPattern@#1}}%
  {\csname Y@GEnumPattern@#1\endcsname}%
  {\Y@GWARNING{The pattern ``#1'' is not know}
    {.\MessageBreak I select ``piwcr'' instead}
    {You should read the documentation [[SECyagpattern]].}% 
    \csname Y@GEnumPattern@piwcr\endcsname}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\define@key[Y@G]{y@genum}{enumpattern}[piwcr]{%
  \edef\Y@GEnumPatternChoice{#1}%
  \Y@GSetYagEnumerate{#1}}
%    \end{macrocode}
% 
%    \begin{macrocode}
\setkeys[Y@G]{y@genum}{symfam,symcolor,firstitemnum,enumlength}
%    \end{macrocode}
% 
%    \begin{macrocode}
\newcommand\setyagenumeratekeys[1]{%
  \ifthenelse{\equal{#1}{*}}%
  {\setkeys[Y@G]{y@genum}
    {symfam,symcolor,firstitemnum,enumlength,enumpattern}}%
  {\setkeys[Y@G]{y@genum}{#1}}}
%    \end{macrocode}
% 
% \begin{environment}{yagenumerate}
%   To create the following macros, I have resorted to allready
%   written code from the \LaTeXe\ kernel and the \texttt{pifont}
%   package. I am also indebted to Arnaud \textsc{Schmittbuhl} on
%   \fctt for invaluable pieces of advice.
%    \begin{macrocode}
\newcounter{Y@Gmaxitem}
\newcounter{Y@Gcitem}
\newenvironment{yagenumerate}[1][!Y@G!]
{%
  \ifthenelse{\equal{#1}{!Y@G!}}
  {\setkeys[Y@G]{y@genum}{symfam,symcolor,firstitemnum,enumlength}}
  {\ifthenelse{\equal{#1}{*}}
    {\setkeys[Y@G]{y@genum}{enumpattern=\Y@GEnumPatternChoice}}
    {\setkeys[Y@G]{y@genum}{#1}}}%
  \ifnum\@enumdepth>\thr@@\@toodeep\else 
  \advance\@enumdepth \@ne
  \def\STOP{\PackageError{yagusylo}
    {at least one item too many}
    {you can't use more than ``\number\Y@GEnumLength'' items}}%
  \setcounter{Y@Gmaxitem}{\Y@GEnumFirstItemNum}
  \addtocounter{Y@Gmaxitem}{\Y@GEnumLength}
  \setcounter{Y@Gcitem}{\Y@GEnumFirstItemNum}
  \ifthenelse{\boolean{Y@GitemRedefined}}{}
  {\let\Y@Golditem\item
   \def\item{\stepcounter{Y@Gcitem}
     \ifnum\theY@Gcitem>\theY@Gmaxitem\expandafter\STOP
     \else\expandafter\Y@Golditem\fi}
   \setboolean{Y@GitemRedefined}{true}}
  \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
  \expandafter\def\csname p@enum\romannumeral\the\@enumdepth\endcsname{}%
  \expandafter\def\csname labelenum\romannumeral\the\@enumdepth\endcsname{%
    \csname theenum\romannumeral\the\@enumdepth\endcsname}%
  \expandafter\def\csname theenum\romannumeral\the\@enumdepth\endcsname{%
    \yagnumber{\Y@G@EnumSymFamChoice}%
    {enum\romannumeral\the\@enumdepth}{\Y@GEnumSymColor}}%
  \list{\csname label\@enumctr\endcsname}{%
    \@nmbrlisttrue
    \def\@listctr{\@enumctr}%
    \setcounter{\@enumctr}{\Y@GEnumFirstItemNum}%
    \addtocounter{\@enumctr}{-1}%
    \def\makelabel##1{\hss\llap{##1}}}
  \fi}{\endlist}
%    \end{macrocode}
% \end{environment}
% 
% The following environment is a wrapper which enables to go back to a
% ``classical'' enumerate. It redefines \cs{item}
%    \begin{macrocode}
\newenvironment{notyagenum}
  {\let\item\Y@Golditem 
%    \end{macrocode}
% and takes care of the boolean \texttt{Y@GitemRedefined} just in case
% a \texttt{yagenumerate} would be nested in the \texttt{enumerate}.
%    \begin{macrocode}
    \setboolean{Y@GitemRedefined}{false}}{}
%    \end{macrocode}
% 
% If the config-file is asked for, we check that it exists before
% loading it.
%    \begin{macrocode}
\AtBeginDocument{%
  \ifY@G@configfile
  \InputIfFileExists{yagusylo.cfg}%
  {\PackageInfo{yagusylo}{Configuration file found and read\@gobble}}%
  {\PackageErrorNoLine{yagusylo}
    {No configuration file found}
    {Or yagusylo.cfg does not exist\MessageBreak
      or it is in some place unknown of TeX.}}%
  \fi}
%    \end{macrocode}
% \iffalse
%</package>
% \fi
% \Finale \PrintChanges\PrintIndex
% \iffalse
%<*doc-sty>
\ProvidesPackage{yagusylo-tools}
\RequirePackage[a4paper,%
                inner=5cm,%
                outer=2cm,%
                tmargin=2.5cm,%
                bmargin=3cm,%
                marginparwidth=5cm]{geometry}
\RequirePackage{fancyvrb}
\RequirePackage{xargs}
\AtBeginDocument{\DefineShortVerb{\|}}
\def\Module{yagusylo}
\newcommand\BOP{\discretionary{}{}{}}
\newcommand\Option[1]{\textsc{#1}}
\newcommand\Pkg[1]{\textsf{#1}}
\newcommand{\TO}{\textemdash\ \ignorespaces}
\newcommand{\TF}{\unskip\ \textemdash\xspace}
\newcommand{\VSP}[1][1]{\vspace{#1\baselineskip}}
\newcommand{\CAD}{%
  \iflanguage{frenchb}{c.-à-d.\xspace}{}%
  \iflanguage{english}{i.~e.\ }{}}
\newcommand{\PX}{%
  \iflanguage{frenchb}{p.~ex.\xspace}{}%
  \iflanguage{english}{e.~g.\ }{}}
\newcommand{\CHARNUM}{char-num}
\newcommand{\COLOUR}{colour}
\newcommand{\FAMILY}{family}
\newcommand{\SERIES}{series}
\newcommand{\SHAPE}{shape}
\newcommand{\ENC}{encoding}
\newcommand{\LISTKV}{list of key-value pairs}
\newcommand{\MATERIAL}{material}
\newcommand{\DINGNAME}{ding-name}
\newcommand{\DINGNAMES}{ding-names}
\newcommand{\NUMBER}{number}
\newcommand{\LENGTH}{length}
\newcommand{\PLENGTH}{P-length}
\newcommand{\GLIST}{G-list}
\newcommand{\ELIST}{E-list}
\newcommand\STAR[1][***]{%
  {\upshape\texttt{*}}%
  \ifthenelse{\equal{#1}{***}}{}{\index{*@\texttt{*}}}%
  \xspace}
\newcommand\fctt{\url{fr.comp.text.tex}\xspace}
\newcommand\Sourire{\texttt{\string;-)}}
%%% piqué dans doc.sty
\DeclareRobustCommand\meta[1]{%
     \ensuremath\langle
     \ifmmode \expandafter \nfss@text \fi
     {%
      \meta@font@select
      \edef\meta@hyphen@restore
        {\hyphenchar\the\font\the\hyphenchar\font}%
      \hyphenchar\font\m@ne
      \language\l@nohyphenation
      #1\/%
      \meta@hyphen@restore
     }\ensuremath\rangle
}
\def\meta@font@select{\itshape}
%%% piqué dans ltxdoc.cls
\DeclareRobustCommand\cs[1]{\texttt{\char`\\#1}}
\providecommand\marg[1]{%
  {\ttfamily\char`\{}\meta{#1}{\ttfamily\char`\}}}
\providecommand\oarg[1]{%
  {\ttfamily[}\meta{#1}{\ttfamily]}}
\providecommand\parg[1]{%
  {\ttfamily(}\meta{#1}{\ttfamily)}}
\newcommand\Yaglabel[2][c]{%
  \ifthenelse{\equal{#1}{c}}{\phantomsection\label{clef#2}}{}%
  \ifthenelse{\equal{#1}{m}}{\phantomsection\label{macro#2}}{}%
  \ifthenelse{\equal{#1}{e}}{\phantomsection\label{envir#2}}{}}
\newcommand\Yagref[2][c]{%
  \ifthenelse{\equal{#1}{c}}{\ref{clef#2}}{}%
  \ifthenelse{\equal{#1}{m}}{\ref{macro#2}}{}%
  \ifthenelse{\equal{#1}{e}}{\ref{envir#2}}{}}
\newcommand\Yagpageref[2][c]{%
  \ifthenelse{\equal{#1}{c}}{\pageref{clef#2}}{}%
  \ifthenelse{\equal{#1}{m}}{\pageref{macro#2}}{}%
  \ifthenelse{\equal{#1}{e}}{\pageref{envir#2}}{}}
%%% redéfinitions et définitions
\newcommand\DescribeMacro[2][*]{%
  \leavevmode\@bsphack
  \ifthenelse{\equal{#1}{*}}{\Yaglabel[m]{#2}}{}%
  \index{#2@\cs{#2}}%  
  \marginpar{\raggedleft\cs{#2}}\@esphack}
\newcommand{\ENVIRNAME}{environnement}
\newcommand\DescribeEnv[1]{\leavevmode\@bsphack 
  \Yaglabel[e]{#1}%
  \marginpar{\raggedleft\texttt{#1}}%
  \index{#1@\texttt{#1} (\protect\ENVIRNAME)}%
  \index{environment@\protect\ENVIRNAME!#1@\texttt{#1}}%
  \@esphack}
\newcommand{\KEYNAME}{clef}
\newcommand\DescribeOptionCle[1]{\leavevmode\@bsphack
  \Yaglabel[c]{#1}%
  \marginpar{\raggedleft 
    \OptionclePresent{#1}}%
  \index{#1 (\textsc{\protect\KEYNAME})}%
  \iflanguage{frenchb}{\index{cle@\textsc{clé}!#1@\texttt{#1}}}{}%
  \iflanguage{english}{\index{cle@\textsc{key}!#1@\texttt{#1}}}{}%
  \@esphack}
\newcommand\DescribeOptionVal[2]{\leavevmode\@bsphack
  \marginpar{\raggedleft 
     \OptionvalP{#1}}\index{#1 [#2]}\@esphack}
\newcommand\IndexVal[2]{\index{#1 [#2]}}
\newcommand\Page[2][*]{%
  page~\ifthenelse{\equal{#1}{*}}{\pageref{#2}}{\Yagpageref[#1]{#2}}}
\newcommand\Voir[2][*]{%
  \iflanguage{frenchb}{cf. }{}%
  \iflanguage{english}{see }{}%
  \Page[#1]{#2}}
\newcommand\OptionclePresent[1]{\texttt{\textbf{#1}}}
\newcommand\Optioncle[1]{\OptionclePresent{#1}}
\newcommand\OptionvalP[1]{\texttt{\textit{#1}}}
\newcommand\Optionval[2]{\OptionvalP{#1}\IndexVal{#1}{#2}}
\newenvironment{CodeEx}{\par\noindent\hspace{3em}\ignorespaces}{\par}
\newenvironment{CodeEx*}{\par\noindent\hspace*{3em}\ignorespaces}{\par\noindent}
\newcommand\SAUT[1][3em]{\\\hspace*{#1}\ignorespaces}
\newenvironment{FrameBox}{\let\makebox=\framebox}{}
\newcounter{NumExemple}
\newcommandx{\Exemple}[5][1=avec,3=*,4=*,5=xmpl]{%
  \refstepcounter{NumExemple}\par
  \ifthenelse{\equal{#1}{avec}}{%
    \VerbatimInput[label={\arabic{NumExemple} \rule[.4ex]{1em}{.75pt}
      \ifthenelse{\equal{#2}{*}}{exemple}{#2}},
    firstnumber=last]{#5.ltx}}{}%
  \ifthenelse{\equal{#4}{*}}{\begin{quote}}{\par\begingroup}
    \ifthenelse{\equal{#3}{*}}{}{\label{XMPL#3}}%
    \input{#5.ltx}
    \ifthenelse{\equal{#4}{*}}{\end{quote}}{\endgroup\par}\VSP}
%%%%%%%%%%%%%%%%%%%%%%%%%% POUR LA VITRINE  %%%%%%%%%%%%%%%%%%%%%%%%%%
\newcounter{DEB}\newcounter{FIN}\newcounter{FINAL}
\newcommand*{\map}[2]{%
  %% une macro par Josselin Noirel, adaptation Le TdS
  %% #1 = one-argument control sequence
  %% #2 = liste (éléments séparés par une virgule)
  \let\my@tempa=#1%
  \@for\my@tempc:=#2\do{%
    \expandafter\my@tempa\expandafter{\my@tempc}}}
\def\Tr@iter@ux#1.#2\@nil{%
  \setcounter{DEB}{#1}%
  \ifthenelse{\equal{#2}{}}{%
    \setcounter{FIN}{#1}}{%
    \setcounter{FIN}{#2}}}
\newcommand\EEF[1]{%
  \expandafter\Tr@iter@ux#1\@nil%
%% ce que renvoit \map c'est une macro il faut donc développer pour
%% permettre à \Tr@iter@ux de voir le point séparant les deux
%% valeurs 
  \EFF{DEB}{FIN}}
\newcommand\PresenterSymboleNum[1]{%
  \makebox[\malong][l]{%
    \makebox[2em][c]{%
      \arabic{#1}}:~\yagding{\value{#1}}}}
\newcommand\EFF[2]{\par
  \setcounter{combien}{\value{#1}}%
  \setcounter{FINAL}{\value{#2}}\stepcounter{FINAL}%
  \whiledo{\value{combien}<\value{FINAL}}%
  {\PresenterSymboleNum{combien}\hspace{1.5em} 
    \stepcounter{combien}}\par\VSP}
\newcounter{combien}\setcounter{combien}{0}
\newcommand\MontrerFonte[2]{%
  \subsection{%
    \iflanguage{frenchb}{Les symboles de la symfam }{}%
    \iflanguage{english}{The Symbols of Symfam }{}%
    \texttt{#1}}\index{symfam@\textsc{symfam}!#1@\texttt{#1}}
  \setyagusylokeys{symfam=#1}%
  \map{\EEF}{#2}\newpage}
\newcommand\LaSection[1]{%
  \section{%
        \iflanguage{frenchb}{De l'extension }{}%
        \iflanguage{english}{From  the package }{}%
        \Pkg{#1}}\index{package@\textsc{package}!#1@\Pkg{#1}}}
\newcommand\SHOWCASE{%
\begingroup
\setyagusylokeys{symcolor=black}
\setlength{\parindent}{0pt}
\LaSection{pifont}
\MontrerFonte{pifont}{33.126,161.254}

\LaSection{ifsym}
\MontrerFonte{ifsym}{0.12,14.,16.42,45.46,48.63,68.,72.,76.77,100.,108.109,124.}
\MontrerFonte{ifsymgeo}{0.9,13.15,26.38,47.54,63.70,79.86,95.102,111.118}
\MontrerFonte{ifsymgeonarrow}{0.9,13.15,26.38,47.54,63.70,79.86,95.102,111.118}
\MontrerFonte{ifsymgeowide}{0.9,13.15,26.38,47.54,63.70,79.86,95.102,111.118}
\MontrerFonte{ifsymweather}{0.11,16.36,48.58}
\MontrerFonte{ifsymclock}{0.143,148.155}

\LaSection{marvosym}
\MontrerFonte{marvosym}{0.255}

\LaSection{fourier}\label{fourier}
\MontrerFonte{fourier}{65.66,69.,76.78,84.85,88.93,102.104,106.,109.111,116.117}

\LaSection{wasysym}
\MontrerFonte{wasysym}{0.76,80.82,85.127}

\LaSection{bbding}
\MontrerFonte{bbding}{0.123}

\LaSection{dingbat}
\MontrerFonte{dingbat}{66.68,73.,78.79,83.,90.,97.104}

\subsection{%
  \iflanguage{frenchb}{Symboles larges de }{}%
  \iflanguage{english}{Large Symbols of}{}%
  \texttt{dingbat}}

69: \yagding{69}\hspace*{\stretch{1}}
70: \yagding{70}\hspace*{\stretch{1}}

71: \yagding{71}\hspace*{\stretch{1}}
72: \yagding{72}\hspace*{\stretch{1}}

74: \yagding{74}\hspace*{\stretch{1}}
75: \yagding{75}\hspace*{\stretch{1}}

76: \yagding{76}\hspace*{\stretch{1}}
77: \yagding{77}\hspace*{\stretch{1}}

\newpage
\MontrerFonte{ark}{67.69,76.,80.,82.,85.,87.,100.,117.}
\endgroup}
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\fvset{frame=single,numbers=left,numbersep=5pt}
\def\Module{yagusylo}
\def\FileVersion{v1}  
\def\FileDate{2009/02/26} 
\def\DocDate{2009/02/26} 
\reversemarginpar
%</doc-sty>
%<*doc>
\documentclass[a4paper]{article}
\usepackage{fixltx2e}
\usepackage{xspace,array}
\usepackage[latin9]{inputenc}
\usepackage[T2C,T1]{fontenc}
%<fr>\usepackage[english,frenchb]{babel}
%<en>\usepackage[frenchb,english]{babel}
\usepackage[np, autolanguage]{numprint}
\usepackage{yagusylo-tools}
\usepackage[color=true,onerror=nice]{yagusylo}
\usepackage{makeidx}
\usepackage[colorlinks=true,
            linkcolor=blue,
            urlcolor=blue,
            citecolor=blue]{hyperref}
\makeindex
%<*fr>
\renewcommand{\CHARNUM}{num-car}
\renewcommand{\COLOUR}{couleur}
\renewcommand{\FAMILY}{famille}
\renewcommand{\SERIES}{série}
\renewcommand{\SHAPE}{forme}
\renewcommand{\ENC}{codage}
\renewcommand{\LISTKV}{liste de paires clé-valeur}
\renewcommand{\MATERIAL}{matériel}
\renewcommand{\DINGNAME}{nom-ding}
\renewcommand{\DINGNAMES}{noms-dings}
\renewcommand{\NUMBER}{nombre}
\renewcommand{\LENGTH}{longueur}
\renewcommand{\PLENGTH}{longueur pos.}
\renewcommand{\GLIST}{G-liste}
\renewcommand{\ELIST}{E-liste}
%</fr>
%<*en>
\renewcommand{\KEYNAME}{key}
\renewcommand{\ENVIRNAME}{environment}
%</en>
\begin{document}
\defdingname[fourier][global]{116}{mainb}[blue]
\defdingname[fourier][global]{116}{mainr}[red]
\defdingname[fourier][global]{116}{mainv}[green]
\defdingname[fourier][global]{116}{maing}[gray]
\defdingname[fourier][global]{116}{mainn}[black]
%<*fr>
\title{Documentation française de l'extension
  \Pkg{\Module}\thanks{% 
  Ce document correspond au fichier
  \Pkg{\Module}~\FileVersion, 
  du \FileDate, édition du cinquantenaire.}}
%</fr>
%<*en>
\title{The English documentation of the package
  \Pkg{\Module}\thanks{This document corresponds to the file
    \Pkg{\Module}~\FileVersion, dated \FileDate.}}
%</en>
\author{Le \TeX nicien de surface\\ 
        \href{mailto:le.texnicien.de.surface@wanadoo.fr}% 
        {le.texnicien.de.surface@wanadoo.fr}}
\date{\DocDate}

\maketitle

%<*fr>
\begin{abstract} 
  Cette extension permet d'obtenir un symbole sans avoir à charger
  l'extension qui le fournit habituellement. Cela permet d'éviter des
  conflits de noms.

  On peut la considérer comme une version étendue de \Pkg{pifont} en
  technicolor.
\end{abstract}

\begin{otherlanguage}{english}
  \begin{abstract} The documentation of \Pkg{yagusylo} is available
    in English with the name \texttt{yagusylo-en} and
    \texttt{yagusylo-en.pdf} should be available with this package.
  \end{abstract}
\end{otherlanguage}
%</fr> 
%<*en> 
\begin{abstract} 
  This package enables you to obtain a symbol whithout loading the
  package which usually provides it in order to avoid name clashes.

  It could be considered as a extended version of \Pkg{pifont} gone
  technicolor. 
\end{abstract}
\begin{otherlanguage}{frenchb}
  \begin{abstract} La documentation de \Pkg{yagusylo} est disponible
    en français sous le nom de \texttt{yagusylo-fr} et
    \texttt{yagusylo-fr.pdf} devrait être disponible avec extension.
  \end{abstract}
\end{otherlanguage}
%</en>

\tableofcontents
\newpage{}
%<*en|fr>
\section{Introduction}
\label{secIntro}
%</en|fr>

%<*en> 
I began to write this package when, for I wanted this symbol
\yagding[marvosym]{84}[black] in front of my phone number in a
document using the class \texttt{lettre}, I realised that both
\Pkg{marvosym} and \texttt{lettre.cls} define a macro
\cs{fax}. Because of this name clash I was pretty disappointed.
%</en>
%<*fr>
J'ai commencé à écrire cette extension lorsque, voulant placer le
symbole \yagding[marvosym]{84}[black] devant mon numéro de téléphone
dans un document utilisant la classe \texttt{lettre}, je me suis rendu
compte que \Pkg{marvosym} et \texttt{lettre.cls} définissaient tous
deux une macro \cs{fax}. Du fait de ce conflit de noms, je fus très
déçu.
%</fr> 

%<*en> 
In fact, very often, we use just some symbols of all those provided
by a package such as \texttt{marovsym}. So a lot of macros are
defined and loaded for pretty nothing. \Pkg{yagusylo} limits the
number of macros but cannot prevent \TeX\ to load all the necessary
fonts, which is rather good. 
%</en>
%<*fr>
De fait, très souvent, nous n'utilisons que quelques symboles parmi
tous ceux fournis par une extension comme \texttt{marvosym}. Aussi un
grand nombre de macros sont définies et chargées pour pas grand'
chose. \Pkg{yagusylo} limite le nombre de macros mais ne peut empêcher
\TeX\ de charger toutes les fontes nécessaires, ce qui est plutôt bien. 
%</fr> 

%<*en> 
Actually, after some thinking, the shortest and quickest way out of
the quagmire in which I was stuck was certainly not to write this
package but for it was written I would have loathed to let it gather
dust in some remote part of my hard disk and I uploaded to my site as
a sort of pre-CTAN version. 
%</en>
%<*fr>
En fait, après réflexion, je n'ai certainement pas choisi la route la
plus courte pour me sortir du bourbier où je m'étais enfoncé en me
décidant à écrire cette extension. Cependant, comme elle était écrite,
je n'aurais pas apprécié de la laisser prendre la poussière dans un
coin reculé de mon disque dur et je l'ai chargé sur mon site comme une
sorte de version pré-CTAN. 
%</fr>

%<*en>
There I rest for a while before uploading the then version \TO after a
bit of beautification perhaps\TF on CTAN and I happen to reread a part
of the LaTeX Companion 2nd edition and to stumble upon the
\Pkg{pifont} package. And I was appaled for it seemed that my package
did not qualify any more for a quick CTANification. 
%</en>
%<*fr>
Puis, je me reposai quelques temps avant de charger la version d'alors
\TO après quelques toilettages\TF sur le CTAN et je me retrouvai à
relire un passage du \emph{LaTeX Companion 2nd edition} et tombai sur
le passage concernant l'extension \Pkg{pifont}. Et je fus attéré car
il me semblait que mon extension n'était plus qualifiée pour une
rapide CTANinification.
%</fr>

%<*en>
I decided to add some new capabilities to \Pkg{yagusylo} and first of
all some equivalent of the environments provided by \Pkg{pifont}. And
now, after some work and not a few hints from the usual suspects of
\fctt \TO Jean-Côme \textsc{Charpentier}, Arnaud \textsc{Schmittbuhl},
Manuel \textsc{Pégourié-Gonnard}\TF I can without too much blushing
upload the true first version of my tiny work.
%</en>
%<*fr>
Je me décidai alors à ajouter quelques nouvelles capacités à
\Pkg{yagusylo} et tout d'abord, quelques équivalents aux
environnements fournis par \Pkg{pifont}. Aujourd'hui, après quelques
travaux et un bon peu d'aide gracieusement fournie par les habitués de
\fctt, à savoir Jean-Côme \textsc{Charpentier}, Arnaud
\textsc{Schmittbuhl} et Manuel \textsc{Pégourié-Gonnard}, je peux sans
trop rougir déposer la vraie première version de mon petit travail.
%</fr>

%<*en>
Before going on hard facts about the usage, just a word about its
name. \Pkg{yagusylo} is the acronym of \emph{Yet another grand
  unified symbols loader}. This is kind of ironic for I think there
are not so many packages entitled \emph{unified symbols loader} if
any. I leave the reader decide if ``grand'' is the appropriate
adjective \Sourire
%</en>
%<*fr>
Avant de passer aux explications quant à son utilisation, je finirai
par un petit mot au sujet de son nom. \Pkg{yagusylo} est l'acronyme de
\emph{Yet another grand unified symbols loader} \TO Encore un
grandiose chargeur unifié de symboles. On y trouvera certainement
quelque ironie puisque je ne pense pas qu'il y ait beaucoup
d'extension nommée \emph{unified symbols loader} \TO chargeur unifié
de symboles. Je laisse au lecteur le soin de décider si l'adjectif \og
grandiose\fg est vraiment approprié \Sourire
%</fr>

%<en>\section{Special names and general conventions}
%<fr>\section{Noms spéciaux et conventions générales}

%<*en>
Hereafter a ``symbols family'' is a set of glyphs which is, in terms
of NFSS, defined by the encoding U, a family, and possibly a series,
and a shape.  \Pkg{yagusylo} provides names for these symbols families
which you could read in table~\ref{TABsymfams}, page~\pageref{TABsymfams}.
%</en>
%<*fr>
Désormais, une \og famille de symboles\fg est un ensemble de glyphes
qui est, dans les termes de NFSS, défini par un codage U, une famille
et peut-être une série et une forme. \Pkg{yagusylo} fournit des noms
pour ces familles de symboles que l'on peut lire dans la
table~\ref{TABsymfams}, page~\pageref{TABsymfams}. 
%</fr>

%<*en>
It is often the name of the package which provides the symbols,
e. g. \emph{fourier} or \emph{marvosym} but, for some packages, there
are many families: with \Pkg{dingbat} there are \emph{dingbat} and
\emph{ark}.
%</en>
%<*fr>
Il s'agit souvent du nom de l'extension qui fournit les symboles,
p.~ex. \emph{fourier} ou \emph{marvosym} mais, pour quelques
extensions, il y a plus d'une famille: avec \Pkg{dingbat} on a
\emph{dingbat} et \emph{ark}.
%</fr>

%<*en>
So when you require the symbols family \texttt{marvosym}, it boils
down to something as |\fontencoding{U}|\BOP|\fontfamily{mvs}|\BOP%
|\fontseries{m}|\BOP|\fontshape{n}|\BOP|\select|\BOP|font| plus a tiny
bit of code to put some color, if the option \Optioncle{color} is
enabled, and the fact that it is done in a group to limit the font
change.
%</en>
%<*fr>
Ainsi lorsque l'on demande la famille de symboles \texttt{marvosym},
cela revient à quelque chose comme
|\fontencoding{U}|\BOP|\fontfamily{mvs}|\BOP%
|\fontseries{m}|\BOP|\fontshape{n}|\BOP|\select|\BOP|font| plus un peu
de code pour ajouter de la couleur, si l'option \Optioncle{color} est
choisie, et le fait que tout est fait dans un groupe pour limiter
l'effet du changement de fonte.
%</fr>

%<*en>
For sake of laziness, ``symfam'' will be an abbreviation of ``symbols
family''. I will sometimes refer to a symbol as a \emph{ding}. 
%</en>
%<*fr>
Par pure fainéantise, j'utiliserai \og symfam\fg comme abréviation de
\og famille de symboles\fg. Je ferai parfois référence à un symbole
sous le nom de \emph{ding}.
%</fr>

%<*en>
This package uses \Pkg{xkeyval} to handle its options. So an option is
in fact a key and its value. There are global options wich can be set
in the preamble within the optional argument of \cs{usepackage} for
instance
%</en>
%<*fr>
Cette extension utilise \Pkg{xkeyval} pour manipuler ses
options. Aussi une option est-elle en fait une clé et sa valeur. Il y
a des options globales que l'on peut fixer dans le préambule dans
l'argument optionnel de \cs{usepackage} p.~ex.
%</fr>
\begin{CodeEx*}
|\usepackage[onerror=nice, info=mute]{yagusylo}|
\end{CodeEx*}%
%<*en>
which sets two global options viz. |onerror| and |mute|.
The global option keys are disabled at the end of the preamble so you
can't change these options in the middle of the document. 
%</en>
%<*fr>
qui fixe deux options globales, à savoir |onerror| et |mute|. Les clés
des options globales sont rendues invalides à la fin du préambule
aussi ne peut-on pas changer ces options dans le cours du document. 
%</fr>

%<*en>
The other keys are still active at the beginning of the document and
are used intensively to change the behaviour of the macros of
\Pkg{yagusylo}. They will be refered at as ``local options''. 
%</en>
%<*fr>
Les autres clés sont encore actives au début du document et sont
utilisées intensivement pour modifier le comportement des macros de
\Pkg{yagusylo}. J'y ferai référence comme \og options locales\fg.
%</fr>

%<*en>
They are local in that first, internally, I do not use \cs{gsetkeys}
to set them and, secondly, in that they ``respect the group
limits''. So, if you set some local option inside an environment, the
setup will be confined to that environment and the option will find
its previous value after the environment.
%</en>
%<*fr>
Elles sont locales, premièrement, en ce que, en interne, je n'utilise
pas \cs{gsetkeys} pour les fixer et, deuxièmement, en ce qu'elles \og
respectent les limites de groupes\fg. Aussi, si on règle quelque
option locale dans un environnement, le réglage est confiné à cet
environnement et l'option reprendra sa valeur précédente à la fin de
l'environnement courant.
%</fr>

%<*en>
All the local keys affect the behaviour of almost all the commands but
\emph{not} the behaviour of the environment
\texttt{yagenumerate}. There are special keys for it. 
%</en>
%<*fr>
Toutes les clés locales affectent le comportement de presque toutes
les commandes mais \emph{pas} celui de l'environnement
\texttt{yagenumerate} qui dispose de ses propres clés.
%</fr>

%<*en>
Some macros have a starred and some even a plussed version. That is
that you will find along with \cs{somemacro} a \cs{somemacro*} and
perhaps also a \cs{somemacro+}. Where the bare version \cs{somemacro}
expects a \meta{\CHARNUM} \TO an integer between \np{0} and \np{255}\TF
the starred version \cs{somemacro*} awaits a \meta{\DINGNAME} as defined by
macros \cs{defdingname} or \cs{defdingname+}, \Voir{macrodefdingname}. 
%</en>
%<*fr>
Quelques macros on une version étoilées et quelques unes même une
version plussée. On trouvera donc à côté de \cs{unemacro},
\cs{unemacro*} et peut-être aussi \cs{unemacro+}. Là où la version nue
\cs{unemacro} attend un \meta{\CHARNUM} \TO un entier compris entre
\np{0} et \np{255}\TF la version étoilée \cs{unemacro*} attend un
\meta{\DINGNAME} défini par les macros \cs{defdingname} or
\cs{defdingname+}, \Voir{macrodefdingname}.
%</fr>

%<*en>
The plus versions are not for the fainthearted and require a lot. Be
aware and shun them accordingly \Sourire
%</en>
%<*fr>
Les versions plussées ne sont pas pour les c½urs de lièvres, ugh!
Elles attendent beaucoup d'arguments. Soyez-en conscient et évitez-les
comme il se doit \Sourire
%</fr>

%<*en>
For sake of convenience I will write \cs{somemacro(*)} to refer to
both the macros \cs{somema}\BOP|cro| and \cs{somemacro*}; I will write
\cs{somemacro(*/+)} to refer to the macros \cs{somemacro},
\cs{some}\BOP|macro*|, and \cs{some}\BOP|macro+| together.
%</en>
%<*fr>
J'écrirai \cs{unemacro(+)} pour faire référence aux deux macros
\cs{unemacro} et \cs{unemacro+}, \cs{unemacro(*/+)} pour parler des
trois commandes \cs{unemacro}, \cs{unemacro*} et \cs{unemacro+}
ensemble.
%</fr>

%<*en>
Some macros accept a argument which can have a ``normal'' value or the
\emph{special} value \STAR[1]. I will then write that argument as
\meta{normal/\STAR}. 
%</en>
%<*fr>
Certaines macros acceptent un argument qui peut être une valeur \og
normale\fg ou la valeur \emph{spéciale} \STAR[1]. J'écrirai cet
argument sous la forme \meta{normal/\STAR}.
%</fr>


\newpage{}
%<en>\part{Usage}
%<fr>\part{Utilisation}

%<*en>
\paragraph{Remark} In this document \Pkg{yagusylo} is loaded with
%</en>
%<*fr>
\paragraph{Remarque} Dans ce document, \Pkg{yagusylo} est chargé avec
%</fr>
|\usepackage[color=true,|\BOP| on|\BOP|er|\BOP|ror|\BOP|=|\BOP|nice]|\BOP|{yagusylo}|.

%<en>\section{One Glyph Macros}
%<fr>\section{Macros pour glyphe unique}

%<*en>
The first three macros provide a means of obtaining \emph{one}
glyph. Their behaviour depends, in some way, on two
keys\DescribeOptionCle{symfam}\DescribeOptionCle{symcolor}
\Optioncle{symfam} and \Optioncle{symcolor} that is why I first
explain how to set keys with \Pkg{yagusylo}.
%</en>
%<*fr>
Les trois premières macros fournissent le moyen d'obtenir \emph{un}
glyphe. Leur comportement dépend, d'une certaine manière, de deux
clés\DescribeOptionCle{symfam}\DescribeOptionCle{symcolor}
\Optioncle{symfam} et \Optioncle{symcolor} et c'est pourquoi je vais
commencer par expliquer comment régler les clés dans \Pkg{yagusylo}.
%</fr>

%<en>\subsection{Of Keys and How to Set Them}
%<fr>\subsection{Des clés et de leur réglage}

%<*en>
You can use \cs{setyagusylokeys} with as its one and only
one\DescribeMacro{setyagusylokeys} 
mandatory argument a list of pairs of the form \texttt{key=value}:
%</en>
%<*fr>
On peut se servir de \cs{setyagusylokeys} avec pour seul
argument\DescribeMacro{setyagusylokeys} 
obligatoire une liste de paires de la forme \texttt{clé=valeur}:
%</fr>
\begin{CodeEx*} 
  \cs{setyagusylokeys}\marg{\LISTKV/\STAR[1]}.
\end{CodeEx*}%

%<*en>
To set \PX the key \Optioncle{symfam} to the value
\OptionvalP{marvosym} and the key \Optioncle{symcolor} to
\OptionvalP{gray} you will type
%</en>
%<*fr>
Pour régler, \PX, la clé \Optioncle{symfam} sur la valeur
\OptionvalP{marvosym} et la clé \Optioncle{symcolor} sur 
\OptionvalP{gray} on tapera
%</fr>
\begin{CodeEx*}
  \cs{setyagusylokeys}|{symfam=marvosym, symcolor=gray}|
\end{CodeEx*}%
%<*en>
and the values will be set up until the end of the group in which the
command is given or until the next use of \cs{setyagusylokeys}.
%</en>
%<*fr>
et les valeurs seront fixées jusqu'à la fin du groupe dans lequel on a
écrit les commandes ou jusqu'à l'utilisation suivante de
\cs{setyagusylokeys}.
%</fr>

%<*en>
You can use the \cs{setyagusylokeys} macro with the special argument
\STAR[1] to return to the default values of the local keys of the
package.
%</en>
%<*fr>
On peut utiliser \cs{setyagusylokeys} avec l'argument spécial \STAR[1]
pour revenir aux valeurs par défaut des clés locales de l'extension.
%</fr>

%<*en>
After \cs{setyagusylokeys}|{*}|, \Optioncle{symfam} has value
\OptionvalP{pifont} and \Optioncle{symcolor} \OptionvalP{red}, see
table~\ref{TAByagusylokeys} on~\Page{TAByagusylokeys}, for a complete
list of local keys and their default values.
%</en>
%<*fr>
Après \cs{setyagusylokeys}|{*}|, \Optioncle{symfam} a la valeur
\OptionvalP{pifont} et \Optioncle{symcolor} la valeur
\OptionvalP{red}, voir la table~\ref{TAByagusylokeys},
\Page{TAByagusylokeys}, pour une liste complète des clés locales et de
leurs valeurs par défaut.
%</fr>

%<*en>
The macro \cs{setyagusylokeys} does not affect the behaviour of
\texttt{yagenumerate} environment. 
%</en>
%<*fr>
La macro \cs{setyagusylokeys} n'affecte pas le comportement de
l'environnement \texttt{yag}\BOP|enu|\BOP|me|\BOP|rate|.
%</fr>

%<en>\subsection{The Macros Proper}
%<fr>\subsection{Les macros elles-mêmes}

%<*en>
\Pkg{yagusylo} provides the macro \cs{yagding} the
syntax\DescribeMacro{yagding} of which is:
%</en>
%<*fr>
\Pkg{yagusylo} fournit la macro \cs{yagding} dont la
syntaxe\DescribeMacro{yagding}  
est: 
%</fr>
\begin{CodeEx*}
  \cs{yagding}\oarg{\FAMILY}\marg{\CHARNUM}\oarg{\COLOUR}
\end{CodeEx*}%
%<*en>
where \meta{\FAMILY} is one of the symfams. By default,
\meta{\FAMILY} equals \texttt{pifont} unless you have given an other
value to the key \Optioncle{symfam} before using \cs{yagding}
either in the preamble or the document body.
%</en>
%<*fr>
où \meta{\FAMILY} est l'une des symfams. Par défaut,
\meta{\FAMILY} vaut \texttt{pifont} à moins que l'on ait donné une
autre valeur à la clé \Optioncle{symfam}, dans le préambule ou dans le
corps du document, avant d'utiliser \cs{yagding}. 
%</fr>

%<*en>
The \meta{\CHARNUM} is the number of the symbol in the font file which
``describes'' it. You can look at the section~\ref{SECshowcase} on
\Page{SECshowcase}, to find the list of all available symbols with
their families and numbers. In any case \meta{\CHARNUM} is an integer
between \np{0} and \np{255} inclusive.
%</en>
%<*fr>
Le \meta{\CHARNUM} est le numéro du symbole dans le fichier de fonte
qui le \og décrit\fg. On trouvera en section~\ref{SECshowcase},
\Page{SECshowcase}, la liste de tous les symboles disponibles avec
leurs famille et numéro. Dans tous les cas, \meta{\CHARNUM} est un
entier compris entre \np{0} et \np{255} inclusivement. 
%</fr>

%<*en>
The \meta{\COLOUR} is the name of a colour known by \Pkg{xcolor} which
deals with all the gory details. By default the colour is the value of
\Optioncle{symcolor} which is itself \texttt{red} by default. 
%</en>
%<*fr>
La \meta{\COLOUR} est le nom d'une couleur connue par \Pkg{xcolor} qui
se charge de tous les détails sordides de l'affaire. Par défaut, la
couleur est la valeur de \Optioncle{symcolor} qui est elle-même
\texttt{red} \TO rouge\TF par défaut.
%</fr>

%<*en>
For example, I get ``\yagding[fourier]{88}[blue]'' with
|\yagding[fourier]{88}[blue]|. With |\yagding{88}| I obtain
``\yagding{88}'', symbol defined in the \texttt{pifont} package with
the default colour \texttt{red}. With |\yagding{88}|\BOP|[green]| I
obtain ``\yagding{88}[green]''.
%</en>
%<*fr>
Par exemple, j'obtiens \og \yagding[fourier]{88}[blue]\fg avec
|\yagding[fourier]{88}[blue]|. Avec |\yagding{88}|, j'obtiens \og
\yagding{88}\fg, symbole défini dans l'extension \texttt{pifont} avec
la couleur \texttt{rouge} par défaut. Avec
|\yagding{88}|\BOP|[green]|, j'obtiens \og \yagding{88}[green]\fg.
%</fr>

%<*en>
Thanks to \Pkg{xargs}, \Pkg{yagusylo} provides macros which
accept more than one optional argument.
%</en>
%<*fr>
Grâce à \Pkg{xargs}, \Pkg{yagusylo} fournit des macros qui acceptent
plus d'un argument optionnel.
%</fr>

%<*en>
With \cs{defdingname} you can give a \emph{local} or
\emph{global}\DescribeMacro{defdingname} name to a symbol:
%</en>
%<*fr>
Avec \cs{defdingname}, on peut donner un nom \emph{local}
ou\DescribeMacro{defdingname} \emph{global} à un symbole: 
%</fr>
\begin{CodeEx*} 
\cs{defdingname}\oarg{\FAMILY/\STAR[1]}\oarg{defext}\marg{\CHARNUM}%
\marg{\DINGNAME}\oarg{\COLOUR/\STAR[1]} 
\end{CodeEx*}% 
%<*en>
where \meta{\FAMILY}, \meta{\CHARNUM}, and \meta{\COLOUR}
have the same meanings than above. Moreover \meta{\FAMILY} and
\meta{\COLOUR} have also the same default values than above.
%</en>
%<*fr>
où \meta{\FAMILY}, \meta{\CHARNUM} et \meta{\COLOUR} ont les mêmes
significations que ci-dessus. De plus, \meta{\FAMILY} et
\meta{\COLOUR} ont aussi les mêmes valeurs par défaut que ci-dessus. 
%</fr>

%<*en>
If \meta{defext} has value \texttt{local} \TO which is the default
value\TF the name is \emph{local} in the sense that its existence is
limited to the englobing group. To obtain a \emph{global} definition
you have to give \meta{defext} the value \texttt{global}. Other value
will result in an error, if \Optioncle{onerror} has value
\OptionvalP{tough} or in a warning and then in a \emph{local}
definition.
%</en>
%<*fr>
Si \meta{defext} a la valeur \texttt{local} \TO qui est la valeur par
défaut\TF le nom est \emph{local} dans le sens que son existence est
limitée au groupe courant. Pour obtenir une définition \emph{globale},
on donnera la valeur \texttt{global} à \meta{defext}. Toute autre
valeur provoquera une erreur, si l'option \Optioncle{onerror} a la
valeur \OptionvalP{tough}, ou un avertissement et la définition sera
\emph{locale}.
%</fr>

%<*en>
To be able to use the 2nd optional argument \meta{defext} you must
provide the first one. So you can define a name like this: 
%</en>
%<*fr>
Pour pouvoir utiliser le 2\ieme argument optionnel \meta{defext}, on
doit fournir le premier. On peut donc définir un nom comme suit: 
%</fr>
\begin{CodeEx*}
  \cs{defdingname}|[fourier][global]{116}{rhand}[red]|
\end{CodeEx*}% 
%<*en>
and then, even if that definition is made in a group, everywhere in
the following part of the document you will obtain
``\yagding[fourier]{116}[red]'' with \cs{yagding*}|{rhand}|.  To help
the user to obtain the usual behaviour of \cs{defdingname} with 2nd
argument \texttt{global}, \Pkg{yagusylo} enables the use of \texttt{*}
as value of the first (optional) argument. So
\cs{defdingname}\BOP|[*]|\BOP|[global]|\BOP|{75}| will create,
globally, the same macro as \cs{defdingname}|{75}| does locally.
%</en>
%<*fr>
et alors, même si la définition est faite dans un groupe, partout dans
la suite du document on obtiendra \og \yagding[fourier]{116}[red]\fg
avec \cs{yagding*}\BOP|{rhand}|. Pour permettre à l'utilisateur
d'obtenir le comportement habituel de \cs{defdingname} même avec un
2\ieme argument \texttt{global}, \Pkg{yagusylo} autorise l'utilisation
de \STAR[1] comme valeur du premier argument (optionnel). Aussi
\cs{defdingname}\BOP|[*]|\BOP|[global]|\BOP|{75}| créera,
globallement, la macro que \cs{defdingname}\BOP|{75}| crée en local. 
%</fr>

%<*en>
The last (optional) argument \meta{\COLOUR/\STAR[1]} leads to a special
behaviour when its value is \texttt{*}. In that case, the colour of
the ding will be the colour which is current at the time of use of
\cs{yagding*} and not, as usual, if \meta{\COLOUR/\STAR} is not explicitly
given, at the time of definition.\label{casspecialdef} 
%</en>
%<*fr>
Le dernier argument (optionnel) \meta{\COLOUR/\STAR[1]} entraine un
comportement particulier quand sa valeur est \STAR. Dans ce cas, la
couleur du ding sera la couleur qui est la couleur courante au moment
de l'utilisation de \cs{yagding*} et non pas, comme c'est le cas quand
\meta{\COLOUR/\STAR} n'est pas donné explicitement, celle courante au
moment de la définition.\label{casspecialdef}
%</fr>

%<*en>
To be clearer, let's assume that at a certain time, the current
\Optioncle{symcolor} has value \OptionvalP{red} and then you write 
%</en>
%<*fr>
Pour être plus clair, supposons qu'à un certain point l'option
\Optioncle{symcolor} ait pour valeur courante \OptionvalP{red} et que
l'on écrive
%</fr>
\begin{CodeEx*}
  \cs{defdingname}|[fourier]{116}{hand}|%
  \cs{defdingname}|[fourier]{116}{handvar}[*]|
\end{CodeEx*}%
%<*en>
then, as long as \Optioncle{symcolor} is not redefined,
\cs{yagding*}|{hand}| and \cs{yagding*}|{handvar}| give the same glyph
\yagding[fourier]{116}[red] \emph{but} after a
%</en>
%<*fr>
alors tant que l'on ne change pas l'option \Optioncle{symcolor},
\cs{yagding*}|{hand}| et \cs{yagding*}\BOP|{hand|\BOP|var}| donneront
le même glyphe \yagding[fourier]{116}[red] \emph{mais} après
%</fr>
\begin{CodeEx*}
  \cs{setyagusylokeys}|{symcolor=blue}|
\end{CodeEx*}%
%<*en>
if \cs{yagding*}|{hand}| gives the same \yagding[fourier]{116}[red], 
\cs{yagding*}|{handvar}| gives \yagding[fourier]{116}[blue]. 
%</en>
%<*fr>
si \cs{yagding*}|{hand}| donne toujours \yagding[fourier]{116}[red],
\cs{yagding*}\BOP|{hand|\BOP|var}| donne \yagding[fourier]{116}[blue].
%</fr>

%<*en>
\paragraph{Remark} The \Pkg{yagusylo} macros the name of which begins
with \texttt{def}, as \cs{defdingname}, do not check previous
existence and enable redifinition.
%</en>
%<*fr>
\paragraph{Remarque} Les macros de \Pkg{yagusylo} dont le nom commence
par \texttt{def}, comme \cs{defdingname}, ne vérifient pas l'existence
préalable et permettent la redéfinition.
%</fr>

\VSP

%<*en>
You will then be able to use \cs{yagding*} to obtain the
named\DescribeMacro{yagding*} symbol with
%</en>
%<*fr>
On pourra alors utiliser \cs{yagding*} pour obtenir le symbole nommé
avec\DescribeMacro{yagding*}
%</fr>
\begin{CodeEx*}
\cs{yagding*}\marg{\DINGNAME}  
\end{CodeEx*}%
%<*en>
and the obtained glyph cannot be affected by the settings of the local
keys except \Optioncle{symcolor} in the special case of a definition
using \STAR[1] as 4th argument as explained above, \Voir{casspecialdef}. 
%</en>
%<*fr>
et le glyphe obtenu n'est pas affecté par les réglages des clés
locales sauf \Optioncle{symcolor} dans le cas spécial d'une définition
utilisant \STAR[1] pour 4\ieme argument comme expliqué ci-dessus,
\Voir{casspecialdef}.
%</fr>

%<*en>
For example, with |\defdingname[fourier]{116}{finger}[gray]| I
define the name of the symbol ``\yagding[fourier]{116}[gray]''
and I can then get it with |\yagding*{finger}|.
%</en>
%<*fr>
Par exemple, avec |\defdingname[fourier]{116}{doigt}[gray]| on définit
le nom du symbole \og \yagding[fourier]{116}[gray]\fg et on peut
l'obtenir ensuite avec |\yagding*{doigt}|.
%</fr>

%<*en>
In fact, the \textbf{true} name of the macro which is used internally
by \Pkg{yagusylo} is \verb*+\Y@G@@ +\BOP|fin|\BOP|ger|. If with such a
name there is still a clash it's because somebody did it on purpose!
%</en>
%<*fr>
En fait, le \textbf{vrai} nom de la macro utilisée en interne par
\Pkg{yagusylo} est \verb*+\Y@G@@ +\BOP|doigt|. Si, avec un tel nom, il
y avait encore un conflit de nom, c'est que quelqu'un l'aura fait
exprès.
%</fr>

%<en>\subsection{For Those in the Know}
%<fr>\subsection{Pour les initiés}

%<en>\cs{yagding+} has syntax:
%<fr>La syntaxe de \cs{yagding+} est: 
\DescribeMacro{yagding+}
\begin{CodeEx*}
  \cs{yagding+}\oarg{\ENC}\marg{\FAMILY}\marg{\SERIES}\marg{\SHAPE}%
  \marg{\CHARNUM}\oarg{\COLOUR}
\end{CodeEx*}%
%<*en>
where \meta{\CHARNUM} and \meta{\COLOUR} have the meaning defined
above. The default value of the optionnal argument \meta{\COLOUR} is
the current colour, as above once again.
%</en>
%<*fr>
où \meta{\CHARNUM} et \meta{\COLOUR} ont les significations définies
ci-dessus. La valeur par défaut de l'argument optionnel \meta{\COLOUR}
est la couleur courante, comme ci-dessus encore.
%</fr>

%<*en>
All the other arguments refer to the NFSS specification: \meta{\ENC} is
the font encoding, which defaults to \texttt{U}, \meta{\FAMILY} is the
font family, \meta{\SERIES} is the font series,  and \meta{\SHAPE} is the
font shape. If you want to use a glyph for which series or shape is
undefined, just give \texttt{*} as argument.
%</en>
%<*fr>
Tous les autres arguments font référence aux spécification de la NFSS:
\meta{\ENC} est le codage de la fonte, dont la valeur par défaut est
\texttt{U}, \meta{\FAMILY} est la famille de la fonte \TO
\emph{family}\TF, \meta{\SERIES} est la série de la fonte \TO
\emph{series}\TF et \meta{\SHAPE} est sa forme \TO \emph{shape}. Si
l'on veut utiliser un glyphe dont la série ou la forme sont
indéfinies, on donnera la valeur \STAR à l'argument.
%</fr>

%<en>So
%<fr>Ainsi
|\yagding+{futs}{*}{*}{84}[blue]|
%<en>gives 
%<fr>donne 
``\yagding+{futs}{*}{*}{84}[blue]'', 
|\yagding+|\BOP|{|\BOP|futs|\BOP|}|\BOP|{*}|\BOP|{*}|\BOP|{85}|
%<en>gives 
%<fr>donne
``\yagding+{futs}{*}{*}{85}''. 

%<en>\cs{defdingname+} has syntax: 
%<fr>La syntaxe de \cs{defdingname+} est: 
\DescribeMacro{defdingname+}
\begin{CodeEx*}
  \cs{defdingname+}\oarg{\ENC}\oarg{defext}\marg{\FAMILY}\marg{\SERIES}\\
  \hspace*{6em}\marg{\SHAPE}\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR/\STAR[1]} 
\end{CodeEx*}%
%<*en>
where the arguments \meta{\DINGNAME}, \meta{defext}, and
\meta{\COLOUR/\STAR} have the same role as in
\cs{def}\BOP|ding|\BOP|na|\BOP|me|.
%</en>
%<*fr>
où les arguments \meta{\DINGNAME}, \meta{defext} et
\meta{\COLOUR/\STAR} ont le même rôle que dans
\cs{def}\BOP|ding|\BOP|na|\BOP|me|.
%</fr>

%<*en>
By default \meta{\ENC} which awaits a font encoding has value
\texttt{U}. By default \meta{\SERIES} \TO a font series\TF and
\meta{\SHAPE} \TO a font shape\TF have a value which leads to their
getting lost. \meta{\FAMILY} would like to be set to a legal font
family name.
%</en>
%<*fr>
Par défaut \meta{\ENC}, qui attend un codage de fonte, a pour valeur
\texttt{U}; \meta{\SERIES} et \meta{\SHAPE} ont des valeurs qui les
font ignorer. \meta{\FAMILY} apprécierait de recevoir le nom légal
d'une famille de fonte.
%</fr>

%<*en>
Once the symbol name defined, you will use it with the usual
\cs{yagding*}.
%</en>
%<*fr>
Une fois défini le nom du symbole, on peut l'utiliser avec le
\cs{yagding*} habituel.
%</fr>

%<*en>
\textbf{Be aware} that in order to use a font encoding different from
|U|, you have to declare it in the preamble as an argument of
\Pkg{fontenc}. So to be able to show you what follows I have this
%</en>
%<*fr>
\textbf{Attention!} Pour utiliser un codage de fonte autre que |U|, on
doit le déclarer dans le préambule comme argument de
\Pkg{fontenc}. Afin de pouvoir montrer ce qui suit, j'ai ceci
%</fr>
|\usepackage[T2C,T1]|\BOP|{fontenc}| 
%<en>in the preamble of this document and then 
%<fr>en préambule de ce document, ce qui fait que 
|\yagding+|\BOP|[T2C]|\BOP|{cmr}|\BOP|{m}|\BOP|{n}|\BOP|{128}|\BOP|[blue]| 
%<en>gives
%<fr>donne
\yagding+[T2C]{cmr}{m}{n}{128}[blue].

%<en>\section{Filling and Line}
%<fr>\section{Remplissage et ligne}

%<*en>
The macros \cs{yagline(*/+)} use \cs{yagfill(*/+)} to place the dings
so I begin with filling.
%</en>
%<*fr>
Les macros \cs{yagline(*/+)} utilisent \cs{yagfill(*/+)} pour placer
les dings aussi je commence par le remplissage \TO \emph{filling}. 
%</fr>

%<en>\subsection{Filling}
%<fr>\subsection{Remplissage}

%<*en>
The filling mechanism is based on the \TeX\ commands \cs{leaders},
\cs{xleaders} and \cs{cleaders}. Some keys are reserved for setting
the behaviour of \cs{yagfill(*/+)} and then govern also the behaviour
of \cs{yagline(*/+)}.
%</en>
%<*fr>
Le mécanisme de remplissage est basé sur les commandes \TeX\
\cs{leaders}, \cs{xleaders} et \cs{cleaders}. Quelques clés sont
réservées aux réglages du comportement de \cs{yagfill(*/+)} et
gouvernent aussi celui de \cs{yagline(*/+)}.
%</fr>

%<en>\subsubsection{The Keys}
%<fr>\subsubsection{Les clés}

%<*en>
Six option keys govern the behaviour of the macros
\cs{yagfill(*/+)}. They are \Optioncle{leadtype}, \Optioncle{symplace},
\Optioncle{sympos}, \Optioncle{boxwidth}, \Optioncle{before}, and
\Optioncle{after}.
%</en>
%<*fr>
Six clés d'option gouvernent le comportement des macros
\cs{yagfill(*/+)}: \Optioncle{leadtype}, \Optioncle{symplace},
\Optioncle{sympos}, \Optioncle{boxwidth}, \Optioncle{before} et
\Optioncle{after}.
%</fr>

%<*en>
The key \Optioncle{leadtype} has default value
\OptionvalP{l}\DescribeOptionCle{leadtype} and can also have value
\OptionvalP{x} or \OptionvalP{c}.  With \OptionvalP{l} the \TeX\ macro
\cs{leaders} is used, with \OptionvalP{c} it is \cs{cleaders} and with
\OptionvalP{x} it is \cs{xleaders}. Some examples below will show the
different looks, \Voir{SSECXMPLyagfill}.
%</en>
%<*fr>
La clé \Optioncle{leadtype} a la valeur \OptionvalP{l} par
défaut\DescribeOptionCle{leadtype} et peut prendre les valeurs
\OptionvalP{x} or \OptionvalP{c}.  Avec \OptionvalP{l} la macro
\cs{leaders} de \TeX\ est utilisée, avec \OptionvalP{c} c'est
\cs{cleaders} et avec \OptionvalP{x} c'est \cs{xleaders}. Quelques
exemples montrent les différences d'aspect, \Voir{SSECXMPLyagfill}.
%</fr>

%<*en>
The key \Optioncle{symplace} takes its value
among\DescribeOptionCle{symplace} \OptionvalP{c} \TO default\TF,
\OptionvalP{r}, \OptionvalP{l}, \OptionvalP{a}, and \OptionvalP{n}.
%</en>
%<*fr>
La clé \Optioncle{symplace} prend une valeur
parmi\DescribeOptionCle{symplace} \OptionvalP{c} \TO valeur par
défaut\TF, \OptionvalP{r}, \OptionvalP{l}, \OptionvalP{a} et
\OptionvalP{n}.
%</fr>

%<*en>
If \OptionvalP{n} is chosen, then the\DescribeOptionCle{sympos}
key \Optioncle{sympos} must be set, \Optioncle{sympos} requires an
integer between \np{0} and \np{1000} inclusive. 
%</en>
%<*fr>
Si on choisit \OptionvalP{n} alors on doit régler la
clé\DescribeOptionCle{sympos} \Optioncle{sympos}. Elle demande un
entier compris entre \np{0} et \np{1000}, bornes comprises.
%</fr>

%<*en>
If \OptionvalP{a} is chosen, then the keys
\Optioncle{before}\DescribeOptionCle{before} and \Optioncle{after}
must be set.  Both those options require a non-negative \LaTeX\ length
but if you do not set \Optioncle{after}\DescribeOptionCle{after}
explicitly it will take the same value as \Optioncle{before}.
%</en>
%<*fr>
Si on choisit \OptionvalP{a}, les clés
\Optioncle{before}\DescribeOptionCle{before} et \Optioncle{after}
doivent être définies. Ces deux options attendent une longueur \LaTeX
ienne positive ou nulle. Si l'on ne fixe pas explicitement la valeur
de \Optioncle{after}\DescribeOptionCle{after}, elle prendra celle de
\Optioncle{before}.
%</fr>

%<*en>
Except when \OptionvalP{a} is chosen, \Optioncle{boxwidth}
must\DescribeOptionCle{boxwidth} be a non-negative \LaTeX\ length. If
\Optioncle{boxwidth} has value \OptionvalP{0 pt} \TO or any other null
length\TF then the actual box width will be the natural width of the
symbol\footnote{That natural width is obtained with \cs{settowidth}.}
used by the macros \cs{yagfill(*)}. In fact, that will be the case
whenever the value given to \Optioncle{boxwidth} is less than the
natural width of the symbol.
%</en>
%<*fr>
Sauf quand on choisit \OptionvalP{a}, \Optioncle{boxwidth} doit
prendre une\DescribeOptionCle{boxwidth} longueur \LaTeX ienne positive
ou nulle. Si \Optioncle{boxwidth} a pour valeur \OptionvalP{0 pt} \TO
ou toute autre longueur nulle\TF alors la largeur effective de la
boite sera la largeur naturelle du symbole\footnote{Cette largeur
  naturelle est obtenue avec \cs{settowidth}.} utilisé par la macro
\cs{yagfill(*)}. En fait, cela sera ainsi chaque fois que la valeur
donnée à \Optioncle{boxwidth} sera inférieure à la largeur naturelle
du symbole.
%</fr>

%<en>\subsubsection{The Macros for Filling}
%<fr>\subsubsection{Macros de remplissage}

%<en>The macro \cs{yagfill} has the following syntax: 
%<fr>La syntaxe de \cs{yagfill} est la suivante: 
\DescribeMacro{yagfill}
\begin{CodeEx*}
  \cs{yagfill}\oarg{\LISTKV}\marg{\CHARNUM}
\end{CodeEx*}% 
%<*en>
where the \meta{\LISTKV}, if provided, sets up the value of the keys
listed. In case a key is not explicitly set, it keeps its current
value. So if the optional argument is not given, all the following
keys have their current value: 
%</en>
%<*fr>
où la \meta{\LISTKV}, si elle est fournie, règle les valeurs des clés
de la liste. Au cas où la valeur d'une clé n'est pas donnée
explicitement, elle conserve sa valeur courante. Ainsi, si on ne donne
pas cet argument optionnel, les clés suivantes ont leur valeur
courante:
%</fr>
\Optioncle{symfam},\Optioncle{symcolor}, \Optioncle{leadtype},
\Optioncle{symplace}, \Optioncle{sympos}, \Optioncle{boxwidth},
\Optioncle{before}
%<en>, and 
%<fr>et
\Optioncle{after}.

\meta{\CHARNUM} 
%<en>has the same meaning as it has for 
%<fr>a la même signification que pour 
\cs{yagding}
%<en>above. 
%<fr> ci-dessus. 

%<en>The macro \cs{yagfill*} has the following syntax: 
%<fr>La syntaxe de \cs{yagfill*} est la suivante: 
\DescribeMacro{yagfill*}
\begin{CodeEx*}
  \cs{yagfill*}\oarg{\LISTKV}\marg{\DINGNAME}
\end{CodeEx*}%
%<*en>
where the \meta{\LISTKV} has the same usage as with \cs{yagfill} but
where \meta{\DINGNAME} must be the name of a symbol previously defined
via \cs{defdingname(+)}.
%</en>
%<*fr>
où la \meta{\LISTKV} a la même utilisation que dans \cs{yagfill} mais
où \meta{\DINGNAME} doit être le nom d'un symbole défini préalablement
à l'aide de \cs{defdingname(+)}.
%</fr>

%<en>The macro \cs{yagfill+} has the following syntax: 
%<fr>La syntaxe de \cs{yagfill+} est la suivante: 
\DescribeMacro{yagfill+}
\begin{CodeEx*}
  \cs{yagfill+}\oarg{\LISTKV}\marg{\MATERIAL}
\end{CodeEx*}%
%<*en>
where \meta{\MATERIAL} is something wich can be typeset and has a
positive width.
%</en>
%<*fr>
où \meta{\MATERIAL} est quelque chose qui peut être composé et a une
largeur positive.
%</fr>

%<*en>
You can look at some examples in the section~\ref{SSECXMPLyagfill}, on
\Page{SSECXMPLyagfill}.
%</en>
%<*fr>
On trouvera quelques exemples en section~\ref{SSECXMPLyagfill},
\Page{SSECXMPLyagfill}.
%</fr>

%<en>\subsubsection{The Making-Of}
%<fr>\subsubsection{Dans les coulisses}

%<*en>
The three macros use the same internal code to build the boxes used by
the \TeX\ macro \cs{leaders}, \cs{cleaders}, or \cs{xleaders}. The
more general is clearly the \texttt{+}-ed version.
%</en>
%<*fr>
Les trois macros utilisent le même code interne pour fabriquer les
boites utilisées par la macro \TeX ienne \cs{leaders}, \cs{cleaders}
ou \cs{xleaders}. La macro généraliste est évidemment la version
plussée.
%</fr>

%<*en>
First in case \Optioncle{symplace} is not \OptionvalP{a}, the box has
width the value of \Optioncle{boxwidth} unless that value is less than
the natural width of the box containing the material to be typeset in
which case the natural width is assumed.
%</en>
%<*fr>
D'abord, lorsque \Optioncle{symplace} ne vaut pas \OptionvalP{a}, la
boite a pour largeur \Optioncle{boxwidth} a moins que cette dernière
valeur soit inférieure à la largeur naturelle de la boite contenant le
matériel à composer, auquel cas on prend cette largeur naturelle.
%</fr>

%<*en>
With \Optioncle{symplace} equals \OptionvalP{a}, the width of the
box equals the sum of the values of \Optioncle{before},
\Optioncle{after}, and the natural width of the material. In this case
the material begins at distance the value of \Optioncle{before} from
the beginning of the box.
%</en>
%<*fr>
Avec \Optioncle{symplace} valant \OptionvalP{a}, la largeur de la
boite vaut la somme des valeurs de \Optioncle{before},
\Optioncle{after} et de la largeur naturelle du matériel. Dans ce cas
le matériel commence à la distance \Optioncle{before} du bord gauche
de la boite.
%</fr>

%<*en>
When \Optioncle{symplace} doesn't equal \OptionvalP{a}, you have to
provide a means of positionning the material.
%</en>
%<*fr>
Lorsque \Optioncle{symplace} ne vaut pas \OptionvalP{a}, on doit
fournir une indication de positionnement du matériel.
%</fr>

%<*en>
The more general case is then to use of \OptionvalP{n} as value of
\Optioncle{symplace} together with a integer between \np{0} and
\np{1000} as value of \Optioncle{sympos}. In that case, the distance
between the left end of the box and the left end of the material is
given by \(bw \times n / \np{1000}-\np{0.5}mw\) where \(bw\) is the
actual boxwidth, \(n\) the value of \Optioncle{sympos}, and \(mw\)
the width of the material. If \(n\) is not an integer or is out of
bound you will have an error.
%</en>
%<*fr>
La façon la plus générale est alors d'utiliser \OptionvalP{n} comme
valeur de \Optioncle{symplace} et de donner un entier compris entre
\np{0} et \np{1000} pour valeur de \Optioncle{sympos}. Dans ce cas, la
distance entre le bord gauche de la boite et le bord gauche du
matériel est donné par \(bw \times n / \np{1000}-\np{0.5}mw\) où
\(bw\) est la largeur effective de la boite, \(n\) la valeur de
\Optioncle{sympos} et \(mw\) la largeur du matériel.
%</fr>

%<*en>
You can consider ``\texttt{symplace=c}'', ``\texttt{symplace=l}'', and
``\texttt{symplace=r}'' as abbreviations for ``\texttt{symplace=n,
  sympos=500}'', ``\texttt{symplace=n, sympos=0}'', and
``\texttt{symplace=n, sympos=1000}'' respectively, to achieve a
placement centered, on the left, and on the right respectively. I have
kept the mnemomics of \PX \cs{makebox}.
%</en>
%<*fr>
On peut considérer \og \texttt{symplace=c}\fg, \og
\texttt{symplace=l}\fg et \og \texttt{symplace=r}\fg comme des
abréviations de \og \texttt{symplace=n, sympos=500}\fg, \og
\texttt{symplace=n, sympos=0}\fg et \og \texttt{symplace=n,
  sympos=1000}\fg respectivement, ce qui assure un placement centré, à
gauche et à droite respectivement. J'ai conservé la signification des
arguments que l'on trouve dans \cs{makebox} \PX
%</fr>

%<*en>
It could seem obvious but it costs nothing to repeat it: you can set
the options governing \cs{yagfill} and friends with
\cs{setyagusylokeys}, \Voir{XMPLreglages}, example~\ref{XMPLreglages}.
%</en>
%<*fr>
Même si cela semble évident, il ne coute rien de redire que l'on peut
fixer les options gouvernant \cs{yagfill} et ses amis avec
\cs{setyagusylokeys}, \Voir{XMPLreglages}, exemple~\ref{XMPLreglages}.
%</fr>

%<en>\subsection{To Draw a Line}
%<fr>\subsection{Tracer une ligne}

%<en>\subsubsection{Special Keys for Lines}
%<fr>\subsubsection{Clés spéciales pour les lignes}

%<*en>
The macros \cs{yagline(*/+)} use internally\DescribeOptionCle{head}
the equivalent of \cs{yagfill+} and so are subjects to the same keys
but there are two extra keys to set the behaviour of \cs{yagline} and
friends. The key \Optioncle{head} must be a \LaTeX\ length, which can
be negative. It fixes the distance between the left margin and the
left end of the first box of the line with the proviso that the
\Optioncle{leadtype} may make some differences in this respect.
%</en>
%<*fr>
Les macros \cs{yagline(*/+)} utilisent en
interne\DescribeOptionCle{head} les équivalents de \cs{yagfill+} et
sont donc soumises aux mêmes clés mais deux clés supplémentaires
règlent le comportement de \cs{yagline} et ses amis. La clé
\Optioncle{head} doit être une longueur \LaTeX ienne, qui peut être
négative. Elle détermine la distance entre la marge de gauche et le
bord gauche de la 1\iere boite de la ligne. On notera cependant que
l'option \Optioncle{leadtype} peut avoir quelques effets à cet égard.
%</fr>

%<*en>
The option key \Optioncle{tail} fixes the distance between the
right\DescribeOptionCle{tail} margin and the right end of the last box
of the line with the same remark about the behaviour of
\cs{leaders}. If \Optioncle{tail} is not explicitly given a value,
which must be a legal \LaTeX\ length, the mecanism assumes that it has
the same value as \Optioncle{head}.
%</en>
%<*fr>
La clé \Optioncle{tail}\DescribeOptionCle{tail} détermine la distance
entre la marge de droite et le bord droit de la dernière boite de la
ligne. On fera ici la même remarque quant au comportement de
\cs{leaders}. Si on ne donne pas explicitement \Optioncle{tail}, qui
doit recevoir une longueur \LaTeX ienne légale, le mécanisme lui
attribue la même valeur qu'à \Optioncle{head}.
%</fr>

%<*en>
To set both those keys, \Pkg{yagusylo} provides the macro
\cs{setyagline} the syntax of which is the rather unusual: 
%</en>
%<*fr>
Pour régler ces deux clés, \Pkg{yagusylo} fournit la macro
\cs{setyagline} dont la syntaxe est plutot inhabituelle: 
%</fr>
\begin{CodeEx*}
  \cs{setyagline}\marg{head-value}\oarg{tail-value}
\end{CodeEx*}%
%<*en>
where both values must be lengths. I have decided for this syntax
because then head and tail are in the \emph{natural}\footnote{Natural
  at least for left-to-right writing!} order. 
%</en>
%<*fr>
où les deux valeurs doivent être des longueurs. Je me suis décidé pour
cette syntaxe car elle conserve la tête \TO \emph{head}\TF et la queue
\TO \emph{tail}\TF dans l'ordre \emph{naturel}\footnote{Naturel, au
  moins, pour des écritures de gauche à droite!}. 
%</fr>

%<*en>
By default, \Optioncle{head} and \Optioncle{tail} have value
\OptionvalP{0.5in} and \cs{setyagusylokeys}|{*}| set them back to that
value. 
%</en>
%<*fr>
Par défaut, \Optioncle{head} et \Optioncle{tail} ont pour valeur
\OptionvalP{0.5in} et \cs{setyagusylokeys}|{*}| la leur redonne.  
%</fr>

%<en>\subsubsection{The Macros for Drawing a Line}
%<fr>\subsubsection{Macros pour tracer une ligne}

%<en>The syntax of \cs{yagline} is
%<fr>La macro \cs{yagline} a pour syntaxe
\DescribeMacro{yagline}
\begin{CodeEx*}
  \cs{yagline}\oarg{\LISTKV}\marg{\CHARNUM}
\end{CodeEx*}%
%<*en>
where \meta{\LISTKV} and \meta{\CHARNUM} have their usual meanings.
%</en>
%<*fr>
où \meta{\LISTKV} et \meta{\CHARNUM} ont le sens habituel. 
%</fr>

%<en>The syntax of \cs{yagline*} is
%<fr>La macro \cs{yagline*} a pour syntaxe
\DescribeMacro{yagline*}
\begin{CodeEx*}
  \cs{yagline*}\oarg{\LISTKV}\marg{\DINGNAME}
\end{CodeEx*}%
%<*en>
where \meta{\LISTKV} and \meta{\DINGNAME} have their usual meanings
once again.
%</en>
%<*fr>
où \meta{\LISTKV} et \meta{\DINGNAME} ont toujours le sens habituel.
%</fr>

%<en>The syntax of \cs{yagline+} is
%<fr>La macro \cs{yagline+} a pour syntaxe
\DescribeMacro{yagline+}
\begin{CodeEx*}
  \cs{yagline+}\oarg{\LISTKV}\marg{\MATERIAL}
\end{CodeEx*}%
%<*en>
where all the arguments have the same meanings as in \cs{yagfill+}.
%</en>
%<*fr>
où tous les arguments ont le même sens que dans \cs{yagfill+}.
%</fr>

%<*en>
All three macros begin and end with a \cs{par} so |some|
|text|\BOP|\yagline{40}|\BOP|and| |text| results in ``some
text\yagline{40}and text''. Perhaps in such a case it would be better
to code |some| |text|\BOP|\yagline{41}|\BOP|\noindent| |and| |text|
which gives ``some text\yagline{41}\noindent and text'' and I was
\emph{not} refering to the chosen glyph.
%</en>
%<*fr>
Ces trois macros commencent et finissent avec un \cs{par} aussi |du|
|texte|\BOP|\yagline{40}|\BOP|et| |du| |texte| donnera \og du
texte\yagline{40}et du texte\fg. Peut-être, en ce cas, serait-il
préférable de coder |du| |texte|\BOP|\yagline{41}|\BOP|\noindent| |et|
|du| |texte| qui donnera \og du texte\yagline{41}\noindent et du
texte\fg et je ne faisais \emph{pas} allusion au glyphe choisi!
%</fr>

%<en>\section{Itemize}
%<fr>\section{Listes}
\label{SECyagitemize}

%<*en>
\Pkg{yagusylo} provide two environments \texttt{yagitemize} and
\texttt{yagitemize*} and two macros
\cs{setyag}\BOP|item|\BOP|ize|\BOP|(*)| to set the default behaviour
of each environment respectively.
%</en>
%<*fr>
\Pkg{yagusylo} fournit deux environnements \texttt{yagitemize} et
\texttt{yagitemize*} et deux macros
\cs{setyag}\BOP|item|\BOP|ize|\BOP|(*)| pour en fixer le comportement
par défaut.
%</fr>

%<*en>
\subsection{Environment yagitemize}
\subsubsection{The Environment yagitemize\dots}
%</en>
%<*fr>
\subsection{L'environnement yagitemize}
\subsubsection{L'environnement yagitemize\dots}
%</fr>

%<*en>
Here comes the first environment of \Pkg{yagusylo}. As it names could
suggest it is a kind of \texttt{itemize} environment. It has the
following syntax:
%</en>
%<*fr>
Voici le 1\ier environnement de \Pkg{yagusylo}. Comme son nom peut
l'indiquer, c'est une sorte d'environnement \texttt{itemize}. Sa
syntaxe est la suivante
%</fr>
\DescribeEnv{yagitemize}
\begin{CodeEx*}
  \cs{begin}|{yagitemize}|\oarg{symfam}\marg{\CHARNUM/\STAR[1]}\oarg{\COLOUR}
\end{CodeEx*}%
%<en>then a certain number of \cs{item}s and
%<fr>puis viennent quelques \cs{item}s et enfin
\begin{CodeEx*}
  \cs{end}|{yagitemize}|
\end{CodeEx*}%
%<en>as usual. 
%<fr>comme d'habitude. 

%<*en>
The mandatory argument \meta{\CHARNUM} must be a number in the above
defined meaning or a star \STAR[1] in which case the behaviour of the
environment changes a little: in such a case, \texttt{yagitemize}
relies on the default values you will have already provided via
\cs{setyagitemize} at which we will look below.
%</en>
%<*fr>
L'argument obligatoire \meta{\CHARNUM} doit être un numéro de
caractère comme défini précédemment ou une étoile \STAR[1] auquel cas
le comportement de l'environnement change quelque peu:
\texttt{yagitemize} compte sur des valeurs par défaut que l'on devra
avoir fournie préalablement à l'aide de \cs{setyagitemize} que je
présenterai plus loin.
%</fr>

%<*en>
You can nest as many \texttt{yagitemize} as you want but do not
complaint if too much results in too ugly. Moreover, because
\texttt{yagitemize} rests on the well known and ubiquitous
\texttt{list} environment, \LaTeX\ could complain about too many
nested lists at a certain time and don't forget that a \texttt{quote}
environment is also a \texttt{list}. 
%</en>
%<*fr>
On peut enboiter autant de \texttt{yagitemize} que l'on veut mais je
décline toute responsabilité quant à l'esthétique. De plus, comme
\texttt{yagitemize} repose sur l'environnement \texttt{list} bien
connu et présent partout, \LaTeX\ pourrait se plaindre d'un trop grand
nombre de listes emboitées. N'oublions pas que, \PX, un environnement
\texttt{quote} est aussi une \texttt{list}.
%</fr>

%<en>\subsubsection{And How to Set It Up}
%<fr>\subsubsection{Et comment le régler}

%<*en>
The macro \cs{setyagitemize} enables you to define
different\DescribeMacro{setyagitemize} symbols for the different level
of nesting of the \texttt{yagitemize} environment. It takes an only
mandatory argument which must have the following form:
\begin{CodeEx}
  |symfam1,| |number1,| |colour1.| 
  |symfam2,| |number2,| |colour2.|
  \dots{} 
  |symfam|\(n\)|,| |number|\(n\)|,| |colour|\(n\)
\end{CodeEx}
%</en>
%<*fr>
La macro \cs{setyagitemize} permet de définir différents symboles pour
différents niveaux d'emboitement\DescribeMacro{setyagitemize} de
l'environnement \texttt{yagitemize}. Il ne prend qu'un argument
obligatoire qui doit avoir la forme suivante
\begin{CodeEx}
  |symfam1,| |nombre1,| |couleur1.| 
  |symfam2,| |nombre2,| |couleur2.|
  \dots{} 
  |symfam|\(n\)|,| |nombre|\(n\)|,| |couleur|\(n\)
\end{CodeEx}
%</fr>

%<*en>
With a period ``\texttt{.}'' you change depth level. For each level
you have to provide three values separated by commas. The first one is
a \emph{symfam} as defined above, the second is the number of the
required symbol and the third is the colour of that symbol. I have not
provided means of considering default values. All three must be
explicitly set up. 
%</en>
%<*fr>
On change de niveau avec un point \og \texttt{.}\fg. Pour chaque
niveau, on doit fournir trois valeurs séparées par des virgules. La
première est une \emph{symfam} comme définie ci-avant, la deuxième est
le numéro du symbole demandé, la troisième est la couleur de ce
symbole. Je n'ai pas fourni de mécanismes utilisant des valeurs par
défaut: chacun de ces trois arguments doit être donnés explicitement.
%</fr>

%<*en>
When \texttt{yagitemize} encounters the \(n+1\)th level, where \(n\) is
the number of the last given triplet, it emits a warning or an error,
depending of the value of the global key \Optioncle{onerror}, and if
\Optioncle{onerror} has not the value \OptionvalP{tough}, it assumes
the \(n\)-th level setup for the subsequent level. 
%</en>
%<*fr>
Lorsque \texttt{yagitemize} atteint le niveau \(n+1\), où \(n\) est le
numéro du dernier triplet fourni, il émet un avertissement ou une
erreur, suivant la valeur de la clé globale \Optioncle{onerror}, et,
si \Optioncle{onerror} n'a pas la valeur \OptionvalP{tough}, il
continue avec le réglage du \(n\)-ieme niveau.
%</fr>

%<*en>
I have taken measures to ensure that the first \texttt{yagitemize}
will use the first definition given in \cs{setyagitemize}, at the
price of some new \LaTeX\ counters, whichever level of nested list you
begin it.
%</en>
%<*fr>
Je me suis arrangé pour que le premier \texttt{yagitemize} utilise le
premier réglage donné dans \cs{setyagitemize}, \TO au prix de la
définitions de quelques compteurs \LaTeX iens \TF quel que soit le
niveau d'emboitement de listes auquel on se place.
%</fr>

%<*en>
\subsection{Environment yagitemize\texttt{*}}
\subsubsection{The Environment yagitemize\texttt{*}\dots}
%</en>
%<*fr>
\subsection{L'environment yagitemize\texttt{*}}
\subsubsection{L'environment yagitemize\texttt{*}\dots}
%</fr>

%<en>The \texttt{yagitemize*} environment has the following syntax:
%<fr>L'environnement \texttt{yagitemize*} a la syntaxe suivante: 
\DescribeEnv{yagitemize*}
\begin{CodeEx*}
  \cs{begin}|{yagitemize*}|\oarg{\DINGNAME}
\end{CodeEx*}%
%<*en>
its optional argument, if provided, must be a symbol name, as usual
for a starred macro. When no argument \meta{\DINGNAME} is provided, it
uses the default setup defined via \cs{set}\BOP|yag|\BOP|itemize*|.
%</en>
%<*fr>
son argument optionnel, s'il est fourni, doit être le nom d'un
symbole, comme il est habituel pour une macro étoilée. Lorsque l'on ne
fournit aucun argument \meta{\DINGNAME}, l'environnement utilise le
réglage par défaut obtenu à l'aide de \cs{set}\BOP|yag|\BOP|itemize*|.
%</fr>

%<en>\subsubsection{And How to Set It Up}
%<fr>\subsubsection{Et comment le régler}

%<*en>
The macro \cs{setyagitemize*} enables you to define
different\DescribeMacro{setyagitemize*} symbols for the different
level of nesting of the \texttt{yagitemize*} environment. It takes an
only mandatory argument which must have the following form:
%</en>
%<*fr>
La macro \cs{setyagitemize*} permet de définir différents
symboles\DescribeMacro{setyagitemize*} pour les différents niveaux
d'emboitement des environnements \texttt{yagitemize*}. Elle ne prend
qu'un seul argument obligatoire qui doit avoir la forme suivante.
%</fr>
\begin{CodeEx*}
  |dingname1. dingname2. | \dots{} |. dingname|\(n\) 
\end{CodeEx*}%
%<*en>
where each |dingname|\(k\) must be a valid name defined with
\cs{defdingname(+)}, \Voir{XMPLyagitemizestar},
example~\ref{XMPLyagitemizestar}.
%</en>
%<*fr>
où chaque |dingname|\(k\) doit être un nom valide défini par
\cs{defdingname(+)}, \Voir{XMPLyagitemizestar},
exemple~\ref{XMPLyagitemizestar}.
%</fr>

%<*en>
The mechanism is analog to that of \cs{setyagitemize} and
\cs{setyagitemize*} has on the environment \texttt{yagitemize*} the
same effect as the non-starred macro has on the non-starred
environment.
%</en>
%<*fr>
Le mécanisme en est analogue à celui de \cs{setyagitemize} et
\cs{setyagitemize*} a sur l'environnement \texttt{yagitemize*} le même
effet que la macro non-étoilée sur l'environnement non-étoilé.
%</fr>

%<*en>
\paragraph{Remark} I do not provide a plussed version of the
\texttt{yagitemize} environment for it is possible to define symbol
names with \cs{defdingname+} and use them in
\cs{set}\BOP|yag|\BOP|itemize*|.
%</en>
%<*fr>
\paragraph{Remarque} Je ne fournis pas de version plussée de cet
environnement car il est toujours possible de définir un nom de
symbole avec \cs{defdingname+} et de l'utiliser dans
\cs{set}\BOP|yag|\BOP|itemize*|.
%</fr>

%<en>\section{Enumerate}
%<fr>\section{Énumération}
\label{SECyagenumerate}

%<*en>
As \texttt{yagitemize} mimics the usual \LaTeX\ \texttt{itemize},
\texttt{yagenumerate} apes \LaTeX\ \texttt{enumerate} but with a
yagusylo dressing \Sourire
%</en>
%<*fr>
De même que \texttt{yagitemize} singe le \texttt{itemize} de \LaTeX,
\texttt{yagenumerate} copie \texttt{enumerate} mais avec un costume
yagusylo-esque.
%</fr>

%<en>\subsection{Special Keys for yagenumerate}
%<fr>\subsection{Clés spéciales pour yagenumerate}
\label{SSECspecialkeys}

%<*en>
The behaviour of the \texttt{yagenumerate} environment is controlled
by the following keys: 
%</en>
%<*fr>
Le comportement de l'environnement \texttt{yagenumerate} est controlé
par les clés suivantes: 
%</fr>
\Optioncle{symfam}, \Optioncle{symcolor},
\Optioncle{firstitemnum}, \Optioncle{enumlength}
%<en>, and
%<fr> et
\Optioncle{enumpattern}.
%<*en>
Both \Optioncle{symfam} and \Optioncle{symcolor}, in this context, are
different from the \emph{non special local keys} \Optioncle{symfam}
and \Optioncle{symcolor}. We could say that there are two bunches of
keys, one for \texttt{yagenumerate} \TO refered at as the \emph{enum
  bunch}\TF and the other \TO which I will refer to as the
\emph{general bunch}\label{generalbunch}\TF for all the rest and that,
even if they looks alike, two keys attached to different bunches do
not open the same doors.
%</en>
%<*fr>
Les deux clés \Optioncle{symfam} et \Optioncle{symcolor}, dans ce
contexte, sont différentes des \emph{clés locales ordinaires}
\Optioncle{symfam} et \Optioncle{symcolor}. On pourrait dire qu'il y a
deux trousseaux de clés, un pour \texttt{yagenumerate} \TO connu comme
le \emph{trousseau enum}\TF et l'autre \TO appelé \emph{trousseau
  général}\label{generalbunch}\TF pour tout le reste et que, même si
elles se ressemblent, deux clés attachées à des trousseaux différents
n'ouvrent pas les mêmes portes.
%</fr>

%<*en>
Nonetheless, both \Optioncle{symfam} and\DescribeOptionCle{symfam
  [enum]}\DescribeOptionCle{symcolor [enum]} \Optioncle{symcolor} of
the enum bunch do control the symfam and the colour of the dings used
in the enumeration. At the beginning of the document \TO after
\cs{begin}|{document}|\TF they have values \texttt{pifont} and
\texttt{blue} respectively.
%</en>
%<*fr>
Toutefois, les clés\Optioncle{symfam} et\DescribeOptionCle{symfam
  [enum]}\DescribeOptionCle{symcolor [enum]} \Optioncle{symcolor} du
trousseau enum controllent effectivement la symfam et la couleur des
dings utilisés dans l'énumération. Au début du document \TO après le
\cs{begin}\BOP|{document}|\TF elles ont, respectivement, pour valeur
\texttt{pifont} et \texttt{blue}.
%</fr>

%<*en>
In a \texttt{yagenumerate} environment, each \cs{item} increment
a\DescribeOptionCle{firstitemnum} counter which will point to the
glyph used for that item. The number, in the symfam as usual, of the
first such glyph is set by \Optioncle{firstitemnum} which defaults to
\np{172}.
%</en>
%<*fr>
Dans un environnement \texttt{yagenumerate}, chaque \cs{item}
incrémente un\DescribeOptionCle{firstitemnum} compteur qui pointe sur
le glyphe utilisé pour cet article. Le numéro, comme d'habitude dans
la symfam, du premier glyphe est fixé par \Optioncle{firstitemnum} qui
vaut par défaut \np{172}.
%</fr>

%<*en>
With \Optioncle{enumlength} we control the number of items which
may\DescribeOptionCle{enumlength} appear on the same level of
\texttt{yagenumerate}. Its default value is \np{10}. After that you
will have an error whatever the value of the key \Optioncle{onerror}.
%</en>
%<*fr>
La clé \Optioncle{enumlength} fixe le nombre d'articles pouvant
apparaitre\DescribeOptionCle{enumlength} au même niveau de
\texttt{yagenumerate}. Sa valeur par défaut est \np{10}. Au delà, on
aura une erreur quelle que soit la valeur de la clé
\Optioncle{onerror}.
%</fr>

%<*en>
The special key \Optioncle{enumpattern} is even more
special.\DescribeOptionCle{enumpattern} You will read more detailled
explanations about it in the following section.
%</en>
%<*fr>
La clé spéciale \Optioncle{enumpattern} est encore plus
spéciale.\DescribeOptionCle{enumpattern} J'en donne une explication
détaillée dans la section suivante.
%</fr>

%<en>\subsection{Patterns and how to create them}
%<fr>\subsection{Les motifs et leur création}
\label{SSECyagenumeratepatterns}

%<*en>
A \texttt{pattern} for \texttt{yagenumerate} is a means of keeping and
calling a whole set of special keys. 
%</en>
%<*fr>
Un \texttt{pattern} \TO motif\TF pour \texttt{yagenumerate} est un
moyen de conserver et appeler un ensemble complet de clés spéciales.
%</fr>


%<en>There are four pre-defined pattern, viz.\ 
%<fr>Il y a quatre motifs prédéfinis, à savoir
\texttt{piwcr}, \texttt{piwcs}, \texttt{pibcr}
%<en>, and 
%<fr>et
\texttt{pibcs}. 
%<en>The defaut pattern is 
%<fr>Le motif par défaut est
\texttt{piwcr}. 
%<en>In those names 
%<fr>Dans ces noms
\texttt{pi} 
%<en>means 
%<fr>signifie
\texttt{pifont}; 
\texttt{c} 
%<en>is for 
%<fr>est là pour 
\texttt{circle};  \texttt{w} 
%<en>for 
%<fr>pour
\texttt{white} 
%<en>and
%<fr>et
\texttt{b} 
%<en>for 
%<fr>pour
\texttt{black} 
%<en>which could be a bit misleading as you will soon see; 
%<fr>ce qui est peut-être maladroit comme on le verra bientot; 
\texttt{s} 
%<en>is for 
%<fr>est là pour 
\texttt{sans-serif} 
%<en>and 
%<fr>et
\texttt{r}
%<en>for 
%<fr>pour 
\texttt{roman}. 
%<en>They all limit the enumerate length to
%<fr>Ils limitent tous la longueur de l'énumération à
\np{10}. 

%<en>Here are the first number for those patterns: 
%<fr>Voici le premier nombre de chacun de ces motifs: 

\begin{yagitemize*}[maing]
  \item \texttt{piwcr}: \yagding[pifont]{172}[blue]
  \item \texttt{piwcs}: \yagding[pifont]{'300}[blue]
  \item \texttt{pibcr}: \yagding[pifont]{'266}[blue]
  \item \texttt{pibcs}: \yagding[pifont]{'312}[blue]
\end{yagitemize*}

%<*en>
You can defined your own pattern with
\cs{newenumpattern}\DescribeMacro{newenumpattern} the syntax of which
is:
%</en>
%<*fr>
On peut définir son propre motif avec
\cs{newenumpattern}\DescribeMacro{newenumpattern} dont la syntaxe est:  
%</fr>
\begin{CodeEx*}
  \cs{newenumpattern}\marg{patname}\marg{\LISTKV}
\end{CodeEx*}%
%<*en>
in which \meta{patname} is the name of the pattern and \meta{\LISTKV}
contains at least \Optioncle{symfam}, \Optioncle{firstitemnum}, and
\Optioncle{enumlength}. If \Optioncle{symcolor} is not used, the
colour of the pattern will be the default one at the time of the
definition. I have not provided a mechanism similar to that of
\cs{defdingname}, feel free to ask if you find it would be useful.
%</en>
%<*fr>
où \meta{patname} est le nom du motif et où \meta{\LISTKV} contient au
moins \Optioncle{symfam}, \Optioncle{firstitemnum} et
\Optioncle{enumlength}. Si l'on n'utilise pas \Optioncle{symcolor}, la
couleur du motif sera la couleur courante au moment de la
définition. Je n'ai pas prévu de mécanisme semblable à celui de
\cs{defdingname} mais on peut me le demander si l'on n'en éprouve le
besoin.
%</fr>

%<en>\subsection{The environment yagenumerate}
%<fr>\subsection{L'environnement yagenumerate}
\label{SSECyagenumerateenvir}

%<*en>
The environment \texttt{yagenumerate} begins
with\DescribeEnv{yagenumerate}
%</en>
%<*fr>
L'environnement \texttt{yagenumerate} commence
avec\DescribeEnv{yagenumerate}
%</fr>
\begin{CodeEx*}
  \cs{begin}|{yagenumerate}|\oarg{\LISTKV/\STAR[1]}
\end{CodeEx*}%
%<*en>
and inside you will use \cs{item} as in a usual \LaTeX\
\texttt{enumerate}.  
%</en>
%<*fr>
et à l'intérieur on utilise \cs{item} comme il est habituel en \LaTeX.
%</fr>

%<*en>
If there is no argument, \CAD you type something like
%</en>
%<*fr>
S'il n'y a pas d'argument, \CAD si l'on a saisi quelque chose comme
%</fr>
\begin{CodeEx*}
  \cs{begin}|{yagenumerate}|\\
  \hspace*{6em}\cs{item} |...|
\end{CodeEx*}%
%<*en>
then the aspect of the enumeration is provided by the current values
of \Optioncle{symfam}, \Optioncle{symcolor}, \Optioncle{firstitemnum},
and \Optioncle{enumlength}.
%</en>
%<*fr>
alors l'aspect de l'énumération est déterminée par les valeurs
courantes de \Optioncle{symfam}, \Optioncle{symcolor},
\Optioncle{firstitemnum} et \Optioncle{enumlength}.
%</fr>

%<*en>
If the argument is a \STAR[1] then the aspect is controlled by the
current default pattern.
%</en>
%<*fr>
Si l'argument est \STAR[1], l'aspect est déterminé par le motif par
défaut courant.
%</fr>

%<*en>
Lastly the aspect is determined by the list of key-value pairs
provided by the user. The keys not explicity provided will have their
default values.
%</en>
%<*fr>
Enfin on peut fixer l'aspect à l'aide d'une liste de paires
clé-valeur. Les clés qui ne sont pas fournies ont alors leur valeur
par défaut.
%</fr>

%<*en>
Because \texttt{yagenumerate} redefines \cs{item} you can't use a
normal \texttt{enumerate} nested in a \texttt{yagenumerate} without
using the environment \texttt{notyagenum} as a kind of wrapper of the
\LaTeX\ \texttt{enumerate}, \Voir{XMPLnotyagenum},
example~\ref{XMPLnotyagenum}.
%</en>
%<*fr>
Comme \texttt{yagenumerate} redéfinit \cs{item}, on ne peut utiliser
un \texttt{enumerate} normal imbriqué dans un environnement
\texttt{yagenumerate} sans utiliser l'environnement
\texttt{notyagenum} comme une sorte d'enveloppe du
\texttt{enumerate}de \LaTeX, \Voir{XMPLnotyagenum},
exemple~\ref{XMPLnotyagenum}.
%</fr>

%<*en>
The limits of nesting are those of \LaTeX. 
%</en>
%<*fr>
Les limites d'imbrication sont celles de \LaTeX.
%</fr>

%<en>\subsection{To Set the Environment}
%<fr>\subsection{Définir l'environnement}
\label{SSECyagenumeratesettings}

%<*en>
To set the keys which govern the aspect of \texttt{yagenumerate}
you\DescribeMacro{setyagenumeratekeys} can use the macro
\cs{set}\BOP|yag|\BOP|enu|\BOP|meratekeys| which has a syntax analog
to that of \cs{setyagusylokeys}, \Voir[m]{setyagusylokeys}.
%</en>
%<*fr>
Pour régler les clés qui gouvernent l'aspect de \texttt{yagenumerate},
on peut utiliser la macro\DescribeMacro{setyagenumeratekeys}
\cs{set}\BOP|yag|\BOP|enu|\BOP|me|\BOP|ra|\BOP|te|\BOP|keys| dont la
syntaxe est analogue à celle de
\cs{set}\BOP|ya|\BOP|gu|\BOP|sy|\BOP|lo|\BOP|keys|,
\Voir[m]{setyagusylokeys}.
%</fr>

%<*en>
With \cs{setyagenumeratekeys}|{*}| keys \Optioncle{symfam},
\Optioncle{symcolor}, \Optioncle{firstitemnum},
\Optioncle{enumlength}, and \Optioncle{enumpattern} revert to
their default values.
%</en>
%<*fr>
Avec \cs{setyagenumeratekeys}|{*}|, les clés \Optioncle{symfam},
\Optioncle{symcolor}, \Optioncle{firstitemnum}, \Optioncle{enumlength}
et \Optioncle{enumpattern} retrouvent leurs valeurs par défaut.
%</fr>

%<en>\section{Miscellaneous}
%<fr>\section{Mélanges}

%<*en>
I put here some items I have not yet been able to insert cleverly in
the course of the documentation.
%</en>
%<*fr>
Je place ici quelques sujets que je n'ai pas été capable d'introduire
de manière pertinente jusque maintenant.
%</fr>

%<en>\subsection{Configuration file}
%<fr>\subsection{Fichier de configuration}

%<*en>
It is possible to use a configuration file. \Pkg{yagusylo} may read
the file \texttt{yagusylo.cfg} if you have set the boolean
key\DescribeOptionCle{configfile} \Optioncle{configfile} to
\OptionvalP{true}. Its default value is \OptionvalP{false}. The file
\texttt{yagusylo.cfg} must be findable by \TeX. In case it is not an
error will be produced.
%</en>
%<*fr>
On peut utiliser un fichier de configuration. \Pkg{yagusylo} lira le
fichier \texttt{yagusylo.cfg} si l'on a donné la valeur
\OptionvalP{true} à la clé\DescribeOptionCle{configfile}
\Optioncle{configfile}. Sa valeur par défaut est
\OptionvalP{false}. \TeX\ doit pouvoir trouver le fichier
\texttt{yagusylo.cfg} sinon on aura une erreur.
%</fr>

%<en>\subsection{Colours and How to Get Rid of It}
%<fr>\subsection{Les couleurs et comment s'en débarrasser}

%<*en>
As stated before the colour management is devoluted to \Pkg{xcolor}
if\DescribeOptionCle{color} the key \Optioncle{color} is set,
globally, to \OptionvalP{true}. That provides two means of reverting
to black on white only.
%</en>
%<*fr>
Comme je l'écris plus haut, la gestion des couleurs est laissée à
\Pkg{xcolor} si\DescribeOptionCle{color} la clé \Optioncle{color} est
réglée, globalement, sur \OptionvalP{true}. Cela fournit deux moyens
de repasser en noir et blanc.
%</fr>

%<*en>
The first method is simply to change the value of \Optioncle{color} to
\OptionvalP{false}. All the colours of yagusylo will be then turned
off.
%</en>
%<*fr>
La première méthode consiste simplement à changer la valeur de
\Optioncle{color} en \OptionvalP{false}. Toutes les couleurs de
yagusylo seront alors supprimées.
%</fr>

%<*en>
The second method is to pass the option \texttt{monochrome} to
\Pkg{xcolor}. To do so you will load \Pkg{yagusylo} thus: 
%</en>
%<*fr>
La seconde méthode est de passer l'option \texttt{monochrome} à
\Pkg{xcolor}. Pour ce faire, on chargera \Pkg{yagusylo} comme suit:
%</fr>
\begin{CodeEx}
  \cs{usepackage}|[color=true, XcolorOptions=monochrome]{yagusylo}|
\end{CodeEx}

%<*en>
I will seize the opportunity of mentioning
\Optioncle{XcolorOptions}\DescribeOptionCle{XcolorOptions} to add
this: if you want to pass more than one options to \Pkg{xcolor} you
have to list them inside curly braces thus:
%</en>
%<*fr>
Je profite de ce que je mentionne
\Optioncle{XcolorOptions}\DescribeOptionCle{XcolorOptions} pour
ajouter ceci: si l'on veut passer plus d'une option à \Pkg{xcolor}, on
doit en placer la liste entre accolades comme ceci:
%</fr>
\begin{CodeEx}
  \cs{usepackage}|[color=true, XcolorOptions={monochrome, table}]{yagusylo}|
\end{CodeEx}

\newpage{}
%<en>\part{Summary of usage}
%<fr>\part{Résumé de l'utilisation}
\label{SECsummary}

%<en>\section{The Package Keys}
%<fr>\section{Les clés de l'extension}

%<*en>
The table~\ref{TABsymfams} lists the symfams known to the day by
\Pkg{yagusylo}, the symfams are also the possible values of the key
\Optioncle{symfam}.
%</en>
%<*fr>
La table~\ref{TABsymfams} donne la liste de toutes les symfams connues
à ce jour par \Pkg{yagusylo}, ces symfams sont les valeurs possibles
de la clé \Optioncle{symfam}.
%</fr>

\begin{table}[H,h,t]\centering
\newlength{\templong}\settowidth{\templong}{ifsymgeonarrow}
\begin{tabular}[t]{|>{\ttfamily}l p{\templong} || >{\ttfamily}l
    p{\templong} |}\hline
%<en>package   
%<fr>extension
& symfam & 
%<en>package   
%<fr>extension
& symfam \\ \hline\hline
pifont    & pifont &  marvosym  & marvosym \\ 
ifsym     & ifsym  &  fourier   & fourier \\ 
          & ifsymgeo & wasysym   & wasysym \\ 
          & ifsymgeonarrow & bbding    & bbding  \\ 
          & ifsymgeowide & dingbat   & dingbat \\
          & ifsymweather &           & ark     \\ 
          & ifsymclock &             & \\ \hline
\end{tabular}
%<en>\caption{The Symfams}
%<fr>\caption{Les symfams}
\label{TABsymfams}
\end{table}

%<*en>
The table~\ref{TAByagusylokeys} shows all the option keys, default
values and other possible values. Self-understandingly, when I write
``any length'' it must be understood that that length has to make
sense in the context. 
%</en>
%<*fr>
La table~\ref{TAByagusylokeys} montre toutes les clés d'option, leurs
valeurs par défaut et toutes les autres valeurs possibles. Bien
entendu, lorsque j'écris \og n'importe quelle longueur\fg, on doit
comprendre que cette longueur doit avoir du sens dans le contexte de
son utilisation.
%</fr>

\begin{table}[H,h,t]\centering
  \begin{tabular}[c]{|>{\ttfamily}l l l|}\hline
%<en>    key       & default value & other possible values\\ \hline\hline
%<fr>    clé       & valeur par défaut & autres valeurs possibles\\ \hline\hline
%<en>    \multicolumn{3}{|c|}{Global option keys}\\
%<fr>    \multicolumn{3}{|c|}{Clés d'options globales}\\
    info      & normal & verbose, mute\\
    onerror   & tough  & nice\\
    color     & false  & true\\
%<en>    XcolorOptions &    & list of options known by \Pkg{xcolor}\\
%<fr>    XcolorOptions &    & liste d'options connues par \Pkg{xcolor}\\
    configfile & false & true\\ \hline
%<en>    \multicolumn{3}{|c|}{Local option keys, general bunch}\\
%<fr>    \multicolumn{3}{|c|}{Clés d'options locales, trousseau général}\\
    symfam    & pifont & 
%<en>see table~\ref{TABsymfams}\\
%<fr>voir la table~\ref{TABsymfams}\\
    symcolor  & red & 
%<en>any colour known by \Pkg{xcolor}\\
%<fr>toute  couleur connue de \Pkg{xcolor}\\
    leadtype  & l & c, x   \\
    symplace  & c & l, r, a, n \\
    sympos    & 0 & 
%<en>integer between \np{0} and \np{1000} inclusive\\
%<fr>entier entre \np{0} et \np{1000} bornes comprises\\
    boxwidth  & \np{0.2} in & 
%<en>any non-negative length\\
%<fr>n'importe quelle longueur positive\\
    before    & \np{0} pt   & 
%<en>any non-negative length \\
%<fr>n'importe quelle longueur positive\\
    after     & \np{0} pt   & 
%<en>any non-negative length \\
%<fr>n'importe quelle longueur positive\\
    head      & \np{36.135} pt & 
%<en>any length \\
%<fr>n'importe quelle longueur\\
    tail      & \np{36.135} pt & 
%<en>any length \\ \hline
%<fr>n'importe quelle longueur\\
%<en>    \multicolumn{3}{|c|}{Local option keys, enum bunch}\\
%<fr>    \multicolumn{3}{|c|}{Clés d'options locales, trousseau enum}\\
    firstitemnum & \np{172} &
%<en>integer between \np{0} and \np{255} inclusive\\
%<fr>entier entre \np{0} et \np{255} bornes comprises\\
    enumlength & \np{10} &  
%<en>integer\\
%<fr>entier\\
    symcolor & blue &
%<en>any colour known by \Pkg{xcolor}\\
%<fr>toute  couleur connue de \Pkg{xcolor}\\
    symfam  & pifont & 
%<en>see
%<fr>voir la 
table~\ref{TABsymfams} \\ \hline
  \end{tabular}
%<en>\caption{The Keys of \Pkg{yagusylo}}
%<fr>\caption{Clés de \Pkg{yagusylo}}
\label{TAByagusylokeys}
\end{table}

%<en>\section{The Commands and Environments}
%<fr>\section{Commandes et environnements}

%<*en>
I give here all the possible usages of the \Pkg{yagusylo} macros and
environments. 
%</en>
%<*fr>
Je donne ici toutes les utilisations possibles des commandes et
environnements de \Pkg{yagusylo}.
%</fr>

%<*en>
I will use the following \meta{denomination}s to refer to some well
defined objects:
%</en>
%<*fr>
J'utiliserai les \meta{denomination}s suivantes pour faire référence à
quelques objets bien définis:
%</fr>

\begin{yagenumerate}[symfam=wasysym,% 
  firstitemnum=88, enumlength=14, symcolor=purple]
  \item \meta{\CHARNUM}: 
%<en>an integer between \np{0} and \np{255} inclusive,
%<fr>un entier entre \np{0} et \np{255} bornes comprises;
  \item \meta{\NUMBER}: 
%<en>an integer for which some additional properties could be provided,
%<fr>un entier pour lequel on peut fournir quelques propriétés supplémentaires; 
  \item \meta{symfam}: 
%<en>the symbolic name of a symfam as listed in 
%<fr>le nom symbolique de la symfam comme donné dans la
table~\ref{TABsymfams}
%<en>, 
%<fr>; 
  \item \meta{\COLOUR}: 
%<en>the symbolic name of a colour known by \Pkg{xcolor},
%<fr>le nom symbolique d'une couleur connue de \Pkg{xcolor}; 
  \item \meta{\DINGNAME}: 
%<en>the name of a ding as defined with 
%<fr>le nom d'un ding défini avec 
\cs{defdingname(+)}
%<en>, 
%<fr>; 
  \item \meta{defext}: 
%<en>the ``extension'' of the definition, can be |local| \TO default\TF or |global|,
%<fr>l'étendue de la définition, peut être |local| \TO valeur par défaut\TF ou |global|;
  \item \meta{\GLIST}: 
%<*en>
a list which consists of any number of key-value pairs in which the
keys are attached to the general bunch, 
%</en>
%<*fr>
une liste composée d'un nombre quelconque de paires clé-valeur dans
lesquelles les clés sont attachées au trousseau général;
%</fr>
\Voir{TAByagusylokeys},
  \item \meta{\ELIST}: 
%<*en>
a list which consists of any number of key-value pairs in which the
keys are attached to the enum bunch, 
%</en>
%<*fr>
une liste composée d'un nombre quelconque de paires clé-valeur dans
lesquelles les clés sont attachées au trousseau enum;
%</fr>
\Voir{TAByagusylokeys},
  \item \meta{\LENGTH}: 
%<en>any \LaTeX\ length,
%<fr>n'importe quelle longueur \LaTeX ienne;
  \item \meta{\PLENGTH}: 
%<en>any non-negative \LaTeX\ length.
%<fr>n'importe quelle longueur \LaTeX ienne positive.
\end{yagenumerate}

%<*en>
By the way, the preceding yagenumaration has been obtain with
%</en>
%<*fr>
Au passage, l'énumération précédente, à la yagusylo, est obtenue avec
%</fr>
\begin{CodeEx}
  \cs{begin}|{yagenumerate}|\BOP|[symfam=wasysym,| |firstitemnum=88,|
  |enumlength=14,| |sym|\BOP|co|\BOP|lor|\BOP|=|\BOP|purple]|
\end{CodeEx}

%<en>\subsection{One Glyph Macros}
%<fr>\subsection{Macros pour un glyphe}

\begin{CodeEx}
  \cs{yagding}\marg{\CHARNUM}\SAUT
  \cs{yagding}\marg{\CHARNUM}\oarg{colour}\SAUT
  \cs{yagding}\oarg{symfam}\marg{\CHARNUM}\SAUT
  \cs{yagding}\oarg{symfam}\marg{\CHARNUM}\oarg{\COLOUR}\SAUT
  \cs{yagding}\marg{\DINGNAME}\SAUT
\end{CodeEx}

\begin{CodeEx*}
  \cs{yagding+}\oarg{\ENC}\marg{\FAMILY}\marg{\SERIES/\STAR}%
  \marg{\SHAPE/\STAR}\marg{\CHARNUM}\oarg{\COLOUR}
\end{CodeEx*}%
%<*en>
where \meta{\ENC} is a font encoding (default |U|), \meta{\FAMILY} a
font family, \meta{\SERIES} a font series \TO use \STAR[1] to provide
no series\TF, \meta{\SHAPE} a font shape \TO use \STAR[1] to provide no
shape.
%</en>
%<*fr>
où \meta{\ENC} est un codage de fonte (défaut |U|), \meta{\FAMILY} une
famille de fonte, \meta{\SERIES} une série de fonte \TO utiliser
\STAR[1] pour ne fournir aucune série\TF, \meta{\SHAPE} une forme,
\emph{shape}, de fonte \TO utiliser \STAR[1] pour ne fournir aucune
forme.
%</fr>

\VSP

\begin{CodeEx}
  \cs{defdingname}\marg{\CHARNUM}\marg{\DINGNAME}\SAUT
  \cs{defdingname}\oarg{symfam}\marg{\CHARNUM}\marg{\DINGNAME}\SAUT
  \cs{defdingname}|[*]|\marg{\CHARNUM}\marg{\DINGNAME}\SAUT
  \cs{defdingname}\oarg{symfam}\oarg{defext}\marg{\CHARNUM}\marg{\DINGNAME}\SAUT
  \cs{defdingname}|[*]|\oarg{defext}\marg{\CHARNUM}\marg{\DINGNAME}\SAUT
  \cs{defdingname}\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR}\SAUT
  \cs{defdingname}\oarg{symfam}\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR}\SAUT
  \cs{defdingname}|[*]|\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR}\SAUT
  \cs{defdingname}\oarg{symfam}\oarg{defext}\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR}\SAUT
  \cs{defdingname}|[*]|\oarg{defext}\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR}\SAUT
  \cs{defdingname}\marg{\CHARNUM}\marg{\DINGNAME}|[*]|\SAUT
  \cs{defdingname}\oarg{symfam}\marg{\CHARNUM}\marg{\DINGNAME}|[*]|\SAUT
  \cs{defdingname}|[*]|\marg{\CHARNUM}\marg{\DINGNAME}|[*]|\SAUT
  \cs{defdingname}\oarg{symfam}\oarg{defext}\marg{\CHARNUM}\marg{\DINGNAME}|[*]|\SAUT
  \cs{defdingname}|[*]|\oarg{defext}\marg{\CHARNUM}\marg{\DINGNAME}|[*]|\SAUT
\end{CodeEx}

\begin{CodeEx}
  \cs{defdingname+}\oarg{enc}\oarg{defext}\marg{\FAMILY}\marg{\SERIES}\SAUT[9em]
  \marg{\SHAPE}\marg{\CHARNUM}\marg{\DINGNAME}\oarg{\COLOUR/\STAR}
\end{CodeEx}

\VSP

\begin{CodeEx}
  \cs{setyagusylokeys}\marg{\GLIST}\SAUT
  \cs{setyagusylokeys}|{*}|
\end{CodeEx}

%<en>\subsection{Filling and Line Drawing}
%<fr>\subsection{Remplissage et ligne}

\begin{CodeEx}
  \cs{yagfill}\marg{\CHARNUM}\SAUT
  \cs{yagfill}\oarg{\GLIST}\marg{\CHARNUM}
\end{CodeEx}

\VSP 

\begin{CodeEx}
  \cs{yagfill*}\marg{\DINGNAME}\SAUT
  \cs{yagfill*}\oarg{\GLIST}\marg{\DINGNAME}
\end{CodeEx}

\VSP

\begin{CodeEx*}
  \cs{yagfill+}\marg{\MATERIAL}\SAUT
  \cs{yagfill+}\oarg{\GLIST}\marg{\MATERIAL}  
\end{CodeEx*}%
%<*en>
where \meta{\MATERIAL} is something which can be typeset and has
positive width. \textbf{Caution}: do not expect it to work with just
anything!  
%</en>
%<*fr>
où \meta{\MATERIAL} est quelque chose qui peut être composé et a une
largeur positive. \textbf{Attention}: on ne s'attendra pas à ce que
cette macro fonctionne avec n'importe quoi!
%</fr>

\VSP

\begin{CodeEx}
  \cs{setyagline}\marg{\LENGTH}\SAUT
  \cs{setyagline}\marg{\LENGTH}\oarg{\LENGTH}
\end{CodeEx}

\VSP

\begin{CodeEx}
  \cs{yagline}\marg{\CHARNUM}\SAUT
  \cs{yagline}\oarg{\GLIST}\marg{\CHARNUM}\SAUT
  \cs{yagline*}\marg{\DINGNAME}\SAUT
  \cs{yagline*}\oarg{\GLIST}\marg{\DINGNAME}\SAUT
  \cs{yagline+}\marg{\MATERIAL}\SAUT
  \cs{yagline+}\oarg{\GLIST}\marg{\MATERIAL}
\end{CodeEx}

%<en>\subsection{Itemize and Enumerate (Yagusylo Way)}
%<fr>\subsection{Itemize et enumerate à la yagusylo}

%<*en>
All the environments are list-like, inside you have to use \cs{item}
to achieve some meaningfull typesetting but it is up to you. 
I only give the syntax of the beginning of environments for I assume
you know how to \texttt{end} them \Sourire
%</en>
%<*fr>
Tous les environnements sont basés sur l'environnement
\texttt{list}. On utilisera \cs{item} à l'intérieur pour obtenir une
présentation intéressante mais cela vous regarde. Je ne donne la
syntaxe que pour le début de l'environnement car je pense que l'on
sait comment les clore \Sourire
%</fr>

\VSP

\begin{CodeEx}
  \cs{begin}|{yagitemize}|\marg{\CHARNUM}\SAUT
  \cs{begin}|{yagitemize}||{*}|\SAUT
  \cs{begin}|{yagitemize}|\oarg{symfam}\marg{\CHARNUM}\SAUT
  \cs{begin}|{yagitemize}|\oarg{symfam}|{*}|\SAUT
  \cs{begin}|{yagitemize}|\marg{\CHARNUM}\oarg{\COLOUR}\SAUT
  \cs{begin}|{yagitemize}||{*}|\oarg{\COLOUR}\SAUT
  \cs{begin}|{yagitemize}|\oarg{symfam}\marg{\CHARNUM}\oarg{\COLOUR}\SAUT
  \cs{begin}|{yagitemize}|\oarg{symfam}|{*}|\oarg{\COLOUR}\SAUT
\end{CodeEx}

\VSP

\begin{CodeEx}
  \cs{begin}|{yagitemize*}|\SAUT
  \cs{begin}|{yagitemize*}|\oarg{\DINGNAME}
\end{CodeEx}

\VSP

\begin{CodeEx*}
  \cs{setyagitemize}%
%<en>\marg{special list}
%<fr>\marg{liste spéciale}
\end{CodeEx*}%
%<*en>
whith 
\begin{CodeEx*}
\meta{special list} \(=\) \meta{triple}|.| \(\cdots\)
\meta{triple}|.|\meta{triple}
\end{CodeEx*}%
%</en>
%<*fr>
avec
\begin{CodeEx*}
\meta{liste spéciale} \(=\) \meta{triplet}|.| \(\cdots\)
\meta{triplet}|.|\meta{triplet}
\end{CodeEx*}%
%</fr>
%<en>where 
%<fr>où
\begin{CodeEx*}
%<en>\meta{triple} 
%<fr>\meta{triplet} 
\(=\) \meta{symfam}|,|\meta{\CHARNUM}|,|\meta{\COLOUR} 
\end{CodeEx*}%
%<*en>
with the usual meaning of \meta{symfam}, \meta{\CHARNUM}, and
\meta{\COLOUR}.
%</en>
%<*fr>
avec le sens habituel de \meta{symfam}, \meta{\CHARNUM} et
\meta{\COLOUR}.
%</fr>

\VSP

\begin{CodeEx*}
  \cs{setyagitemize*}
%<en>\marg{list of \DINGNAMES}
%<fr>\marg{liste de \DINGNAMES}
\end{CodeEx*}%
%<en>whith 
%<fr>avec
\begin{CodeEx*}
%<en>\meta{list of \DINGNAMES} 
%<fr>\meta{liste de \DINGNAMES} 
\(=\) \meta{\DINGNAME}|.| \(\cdots\)
\meta{\DINGNAME}|.|\meta{\DINGNAME}
\end{CodeEx*}%
%<en>with the usual meaning of \meta{\DINGNAME}.
%<fr>avec le sens habituel de \meta{\DINGNAME}.

\VSP

\begin{CodeEx}
  \cs{begin}|{yagenumerate}|\SAUT
  \cs{begin}|{yagenumerate}|\oarg{\ELIST}\SAUT
  \cs{begin}|{yagenumerate}[*]|
\end{CodeEx}

\VSP

\begin{CodeEx}
  \cs{setyagenumeratekeys}\marg{\ELIST}\SAUT
  \cs{setyagenumeratekeys}|{*}|
\end{CodeEx}

\VSP

\begin{CodeEx*}
  \cs{newenumpattern}\marg{patname}\marg{\ELIST}
\end{CodeEx*}%
%<*en>
where \meta{patname} is a name you can later use as value for the key
\Optioncle{enumpattern}. 
%</en>
%<*fr>
où \meta{patname} est un nom que l'on peut utiliser ensuite comme
valeur de la clé \Optioncle{enum}\BOP|pat|\BOP|tern|.
%</fr>

\newpage{}
%<*en>
\part{Examples}
%</en>
%<*fr>
\part{Exemples}
%</fr>

%<*en>
\section{\texorpdfstring{\cs{yagding}, \cs{defdingname}, and
    \cs{yagding*}}{yagding, defdingname, and yagding*}}
%</en>
%<*fr>
\section{\texorpdfstring{\cs{yagding}, \cs{defdingname} et
    \cs{yagding*}}{yagding, defdingname et  yagding*}}
%</fr>
\label{SSECXMPLonesymbol}

\begin{VerbatimOut}{xmpl.ltx}
  \setyagusylokeys{symfam=fourier}
  \begin{quote}
%<en>inside \texttt{quote} environment\par
%<fr>dans un environnement \texttt{quote}\par
  \defdingname{116}{lHand}\yagding*{lHand}
  \quad
  \defdingname{116}{lHandStar}[*]\yagding*{lHandStar} 
  \quad
  \defdingname[*][global]{116}{gHandRed}[red]\yagding*{gHandRed} 
  \quad
  \defdingname[*][global]{116}{gHandStar}[*]\yagding*{gHandStar} 
  \quad \yagding{117}

  \setyagusylokeys{symcolor=blue}
  \yagding*{lHand}\quad\yagding*{lHandStar}\quad 
  \yagding*{gHandRed}\quad\yagding*{gHandStar}\quad \yagding{117}
  \end{quote}
%<en>outside \texttt{quote} environment\par
%<fr>hors environnement \texttt{quote}\par
  \yagding*{lHand}\quad\yagding*{lHandStar}\quad 
  \yagding*{gHandRed}\quad\yagding*{gHandStar}\quad \yagding{117}

  \setyagusylokeys{symcolor=green, symfam=pifont}
  \yagding*{lHand}\quad\yagding*{lHandStar}\quad 
  \yagding*{gHandRed}\quad\yagding*{gHandStar}\quad \yagding{117}
\end{VerbatimOut}

\Exemple{\cs{defdingname}}

\begin{VerbatimOut}{xmpl.ltx}
  \yagding+{logo}{m}{n}{77}[blue]\yagding+{logo}{m}{n}{69}[red]%
  \yagding+{logo}{m}{n}{84}[gray]\yagding+{logo}{m}{n}{65}[black]%
  \yagding+{logo}{m}{n}{80}[orange]\yagding+{logo}{m}{n}{79}[purple]%
  \yagding+{logo}{m}{n}{83}[brown]\yagding+{logo}{m}{n}{84}[green]
\end{VerbatimOut}

\Exemple{\cs{yagding+}}

%<*en>
\section{\texorpdfstring{\cs{yafgill} and \cs{yagfill*}}{yafgill and yagfill*}}
%</en>
%<*fr>
\section{\texorpdfstring{\cs{yafgill} et \cs{yagfill*}}{yafgill et yagfill*}}
%</fr>
\label{SSECXMPLyagfill}

%<en>\subsection{The Key leadtype}
%<fr>\subsection{La clé \og leadtype\fg}

\begin{VerbatimOut}{xmpl.ltx}
thinggummy\yagfill{84}kinda big%
\setyagusylokeys{boxwidth=2cm,symcolor=gray}\par
thinggummy\yagfill{84}kinda big\par
thing\yagfill{84}kinda very very big\par
thinggummy\yagfill[leadtype=x]{84}kinda big\par
thing\yagfill[leadtype=x]{84}kinda very very big\par
thinggummy\yagfill[leadtype=c]{84}kinda big\par
thing\yagfill[leadtype=c]{84}kinda very very big
\end{VerbatimOut}
\Exemple{\Optioncle{leadtype}}

%<*en>
\noindent and the same thing in which I show the boxes used by \TeX\
to type the leaders: 
%</en>
%<*fr>
\noindent et la même chose dans laquelle je montre les boites
utilisées par \TeX\ pour composer les \emph{leader}s:  
%</fr>

\begin{FrameBox}
\Exemple[sans]{*}
\end{FrameBox}

%<en>\subsection{The Key symplace}
%<fr>\subsection{La clé symplace}

%<en>\subsubsection{Values other than a}
%<fr>\subsubsection{Valeurs différentes de a}

\begin{VerbatimOut}{xmpl.ltx}
\setyagusylokeys{boxwidth=2cm, symcolor=blue}%
Caversham Heights \yagfill[symplace=c]{87}Bradshaw\par
Caversham Heights \yagfill[symplace=l]{87}Bradshaw\par
Caversham Heights \yagfill[symplace=r]{87}Bradshaw\par
Caversham Heights \yagfill[symplace=n,sympos=250]{87}Bradshaw\par
\end{VerbatimOut}

\begin{FrameBox}
\Exemple{*}[reglages]
\end{FrameBox}

%<en>\subsubsection{Value a}
%<fr>\subsubsection{Valeur a}

\begin{VerbatimOut}{xmpl.ltx}
The Squire of High Potternews
\yagfill[symplace=a, before=0.1in]{84}Jurisfiction\par
The Squire of High Potternews
\yagfill[symplace=a, before=0.1in, after=0.3in]{84}Jurisfiction\par
The Squire of High Potternews
\yagfill[symplace=a, after=0.3in]{84}Jurisfiction\par
The Squire of High Potternews
\yagfill[leadtype=x, symplace=a,
   before=0.1in, after=0.3in]{84}Jurisfiction \par
\end{VerbatimOut}

%<en>\Exemple{\Optioncle{symplace}, \Optioncle{before}, and \Optioncle{after}}
%<fr>\Exemple{\Optioncle{symplace}, \Optioncle{before} et \Optioncle{after}}

\begin{VerbatimOut}{xmpl.ltx}
\defdingname[fourier]{116}{mainv}[green]
\defdingname[fourier]{116}{mainb}[blue]
\defdingname[fourier]{116}{mainr}[red]
\yagfill+[boxwidth=1.25cm]{\yagding*{mainv}%
  \yagding*{mainb}\yagding*{mainr}}
\end{VerbatimOut}

\begin{FrameBox}
\Exemple{\cs{yagfill+}}
\end{FrameBox}

%<*en>
\section{\texorpdfstring{Environments \texttt{yagitemize} and
    \texttt{yagitemize*}}
  {Environments yagitemize and yagitemize*}}
%</en>
%<*fr>
\section{\texorpdfstring{Environnements \texttt{yagitemize} et
    \texttt{yagitemize*}}
  {Environnements yagitemize et yagitemize*}}
%</fr>

%<*en>
\subsection{\texorpdfstring{Environment \texttt{yagitemize*}}
  {Environment yagitemize*}}
%</en>
%<*fr>
\subsection{\texorpdfstring{Environnement \texttt{yagitemize*}}
  {Environnement yagitemize*}}
%</fr>

\begin{VerbatimOut}{xmpl.ltx}
\defdingname[fourier]{116}{mainv}[green]
\defdingname[fourier]{116}{mainb}[blue]
\defdingname[fourier]{116}{mainr}[red]
\defdingname[fourier]{116}{maing}[gray]
\setyagitemize*{mainv. mainb. mainr. maing}
\begin{yagitemize*}\item A\begin{yagitemize*}\item B
\begin{yagitemize*}\item C\begin{yagitemize*}\item D
\begin{yagitemize*}\item E
\begin{yagitemize*}\item F \item G \end{yagitemize*}  
\item H\end{yagitemize*}  \item I
\end{yagitemize*}  \item J \end{yagitemize*}  \item K
\end{yagitemize*}  \item L\end{yagitemize*}
\end{VerbatimOut}

%<en>\Exemple{\cs{yagitemize*} and \cs{setyagitemize*}}[yagitemizestar][+]
%<fr>\Exemple{\cs{yagitemize*} et \cs{setyagitemize*}}[yagitemizestar][+]

%<*en>
With such a setup, for this document has \texttt{onerror=nice} at the
loading of \Pkg{yagusylo}, you'll find the following text in the
|.log| file: 
%</en>
%<*fr>
Avec un tel réglage, comme ce document a un \texttt{onerror=nice} au
chargement de \Pkg{yagusylo}, on trouve le texte qui suit dans le
fichier |. log|:
%</fr>

\begin{Verbatim}
 Package yagusylo Warning: Too deeply nested for your setup.
(yagusylo)                I keep on using the last symbol.
(yagusylo)                You could have a look at your last
(yagusylo)                ``setyagitemize''
(yagusylo)                First ``yagitemize*'' too many on input line ***.
\end{Verbatim}

%<*en>
\noindent in which \texttt{***} would give the number of the line on
which is the fifth \cs{begin}|{yagitemize*}| for we provided explicit
setup for four levels only.
%</en>
%<*fr>
\noindent dans lequel \texttt{***} donne le numéro de la ligne sur
laquelle se trouve le 5\ieme \cs{begin}|{yagitemize*}| puisque je n'ai
donné le réglage explicite que pour seulement quatre niveaux.
%</fr>

\begin{VerbatimOut}{xmpl.ltx}
  \begin{yagenumerate}
    \item Thursday Next; 
      \begin{notyagenum}
        \begin{enumerate}
        \item Light armoured brigade;
        \item SpecOps 27; 
        \end{enumerate}
      \end{notyagenum}
    \item Landen Park-Lane; 
  \end{yagenumerate}
\end{VerbatimOut}

%<en>\Exemple{yagenumerate and notyagenum}[notyagenum]
%<fr>\Exemple{yagenumerate et notyagenum}[notyagenum]

%<en>\section{The configuration file}
%<fr>\section{Fichier de configuration}

%<*en>
Here is the core of the configuration file \texttt{yagusylo.cfg}
provided, as an example, with this package: 
%</en>
%<*fr>
Voici le c½ur du fichier de configuration \texttt{yagusylo.cfg}
fourni, comme exemple, avec cette extension: 
%</fr>

\VerbatimInput[firstline=22, lastline=23]{yagusylo.cfg}

\newpage{}


%<en>\part{Showcase}
%<fr>\part{Gallerie}
\label{SECshowcase}

\newlength{\malong}\setlength{\malong}{.18\textwidth-2em}

\SHOWCASE

\printindex
\end{document}
%</doc>
%<*config>
\defyagenumpattern{wastrol}{symfam=wasysym, 
  firstitemnum=88, enumlength=14, symcolor=purple}
%</config>
% \fi
\endinput
% \iffalse
%%% Local Variables: 
%%% mode: doctex
%%% coding: iso-8859-15
%%% TeX-master: t
%%% fill-column: 70
%%% End: 
% \fi 
