texlive[44158] Master: hlist (2may17)

commits+karl at tug.org commits+karl at tug.org
Tue May 2 23:44:16 CEST 2017


Revision: 44158
          http://tug.org/svn/texlive?view=revision&revision=44158
Author:   karl
Date:     2017-05-02 23:44:16 +0200 (Tue, 02 May 2017)
Log Message:
-----------
hlist (2may17)

Modified Paths:
--------------
    trunk/Master/tlpkg/bin/tlpkg-ctan-check
    trunk/Master/tlpkg/libexec/ctan2tds
    trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc

Added Paths:
-----------
    trunk/Master/texmf-dist/doc/generic/hlist/
    trunk/Master/texmf-dist/doc/generic/hlist/README
    trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf
    trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex
    trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf
    trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.tex
    trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf
    trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.tex
    trunk/Master/texmf-dist/tex/generic/hlist/
    trunk/Master/texmf-dist/tex/generic/hlist/hlist.sty
    trunk/Master/texmf-dist/tex/generic/hlist/hlist.tex
    trunk/Master/tlpkg/tlpsrc/hlist.tlpsrc

Added: trunk/Master/texmf-dist/doc/generic/hlist/README
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/README	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/hlist/README	2017-05-02 21:44:16 UTC (rev 44158)
@@ -0,0 +1,21 @@
+___________________________________
+
+             L'extension
+                hlist
+               
+                v0.1
+
+             1er mai 2017
+___________________________________
+
+Authors   : Christian Tellechea
+Maintainer: Christian Tellechea
+E-mail    : unbonpetit at openmailbox.org     (CT)
+            Commentaires, signalements de bugs et
+            suggestions bienvenus
+Licence   : Released under the LaTeX Project Public License v1.3c or
+            later, see http://www.latex-project.org/lppl.txt
+
+----------------------------------------------------------------------
+
+Horizontal and columned lists


Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/README
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf	2017-05-02 21:42:35 UTC (rev 44157)
+++ trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf	2017-05-02 21:44:16 UTC (rev 44158)

Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex	2017-05-02 21:44:16 UTC (rev 44158)
@@ -0,0 +1,462 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est la documentation du package "hlist"
+%
+% Fichier compil\xE9 avec pdflatex
+\documentclass[frenchb,a4paper,10pt]{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[margin=2cm]{geometry}
+\usepackage[bottom]{footmisc}
+\usepackage{libertine,boites,tikz,enumitem,MnSymbol,babel,xspace,listings,hlist}
+\usepackage[scaled=0.8]{luximono}
+\frenchbsetup{og=\xAB,fg=\xBB}
+\def\eTeX{\hbox{$\varepsilon$-\TeX}}
+\def\HLIST{\texttt{\hlstname}\xspace}
+\makeatletter
+\def\code{\expandafter\code at i\string}
+\def\code at i#1{%
+	\begingroup
+		\par\nobreak\medskip\parindent0pt
+		\leftskip.1\linewidth
+		\catcode`\^^I 13 \begingroup\lccode`\~`\^^I \lowercase{\endgroup\def~{\leavevmode\space\space\space\space}}%
+		\let\do\@makeother \dospecials
+		\ttfamily\small\@noligs
+		\obeylines\obeyspaces
+		\def\code at ii##1#1{##1\par\medbreak\endgroup}%
+		\code at ii
+}
+\long\def\grab at toks#1\relax{\gdef\right at content{#1}}
+
+\newcommand\disable at lig[1]{%
+	\catcode`#1\active
+	\begingroup
+		\lccode`\~`#1\relax
+		\lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
+}
+
+\newcommand\make at car@active[1]{%
+	\catcode`#1\active
+	\begingroup
+		\lccode`\~`#1\relax
+		\lowercase{\endgroup\def~}%
+}
+
+\newcommand\exemple{%
+	\begingroup
+	\parskip\z@
+	\exemple@}
+
+\newcommand\exemple@{%
+	\medbreak\noindent
+	\begingroup
+		\let\do\@makeother\dospecials
+		\make at car@active\ { {}}%
+		\make at car@active\^^M{\par\leavevmode}%
+		\make at car@active\^^I{\space\space}%
+		\make at car@active\,{\leavevmode\kern\z@\string,}%
+		\make at car@active\-{\leavevmode\kern\z@\string-}%
+		\make at car@active\>{\leavevmode\kern\z@\string>}%
+		\make at car@active\<{\leavevmode\kern\z@\string<}%
+		\@makeother\;\@makeother\!\@makeother\?\@makeother\:% neutralise frenchb
+		\exemple@@
+}
+
+\newcommand\exemple@@[1]{%
+	\def\@tempa##1#1{\exemple@@@{##1}}%
+	\@tempa
+}
+
+\newcommand\exemple@@@[1]{%
+	\xdef\the at code{#1}%
+	\endgroup
+		\begingroup
+			\fboxrule0.4pt \fboxsep=5pt
+			\let\breakboxparindent\z@
+			\def\bkvz at top{\hrule\@height\fboxrule}%
+			\def\bkvz at bottom{\hrule\@height\fboxrule}%
+			\let\bkvz at before@breakbox\relax
+			\def\bkvz at set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
+			\def\bkvz at left{\vrule\@width\fboxrule\kern\fboxsep}%
+			\def\bkvz at right{\kern\fboxsep\vrule\@width\fboxrule}%
+			\breakbox
+				\kern.5ex\relax
+				\begingroup
+					\ttfamily\small\the at code\par
+				\endgroup
+				\kern3pt
+				\hrule height0.1pt width\linewidth depth0.1pt
+				\vskip5pt
+				\newlinechar`\^^M\everyeof{\noexpand}\scantokens{#1}\par
+			\endbreakbox
+		\endgroup
+	\medbreak
+	\endgroup
+}
+\begingroup
+	\catcode`\<13 \catcode`\>13
+	\gdef\verb{\relax\ifmmode\hbox\else\leavevmode\null\fi
+		\bgroup
+			\verb at eol@error \let\do\@makeother \dospecials
+			\verbatim at font\@noligs
+			\catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
+			\@ifstar\@sverb\@verb}
+\endgroup
+\def\longfrhlstdate at i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or f\xE9vrier\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or d\xE9cembre\fi\space#1}
+\edef\longfrhlstdate{\expandafter\longfrhlstdate at i\hlstdate\@nil}
+\makeatother
+\begingroup
+	\catcode`\_11 
+	\gdef\cleval#1#2{%
+		\bigbreak\noindent
+		\hbox to .25\linewidth{%
+			\color{teal}\bfseries\ttfamily
+			\detokenize{#1}=$\langle$\detokenize{#2}$\rangle$\hss}\kern2.5em 
+		(\textit{D\xE9faut} : {\color{teal}\ttfamily
+		\hlst_eearg\hlst_ifempty{\useKV[hlist]{#1}}
+			{\detokenize{{}}}
+			{\detokenize\expandafter\expandafter\expandafter{\useKV[hlist]{#1}}}})%
+		\par\nobreak
+	}
+\endgroup
+\begin{document}
+\parindent=0pt
+\thispagestyle{empty}
+\begin{titlepage}
+	\begingroup
+		\centering
+		\null\vskip.25\vsize
+		{\large\bfseries L'extension pour \TeX/\LaTeX\par \Huge \hlstname\par}
+		\bigbreak
+		v \hlstver
+		\smallbreak
+		\longfrhlstdate
+		\vskip1.5cm
+		Christian \bsc{Tellechea}\footnote{\texttt{unbonpetit at openmailbox.org}}\par
+	\endgroup
+	\vskip2cm
+	\leftskip=.2\linewidth \rightskip=.2\linewidth \small
+	Cette petite extension sans pr\xE9tention permet de cr\xE9er des listes horizontale d'items; s'ils s'\xE9tendent sur plus d'une ligne, ils seront align\xE9s les uns au-dessous des autres, en colonnes de largeurs \xE9gales, un peu \xE0 la mani\xE8re d'un tableau.
+\end{titlepage}
+\parindent1.5em
+
+\section{Comment \xE7a marche}
+Au tout d\xE9but, j'avais \xE9crit ce code pour pr\xE9senter des questions courtes \emph{en ligne}, comme on peut le voir parfois dans les manuels scolaires, pour une \xE9conomie de place verticale dans mes feuilles d'exercices ou de contr\xF4les\footnote{On ne trouve pas ce genre de questions dans mes contr\xF4les !} :
+
+\exemple/Qu'est ce que \TeX ?
+\begin{hlist}3
+	\hitem Une marque \emph{distributeur} de v\xEAtements que l'on trouve dans l'enseigne Carrefour;
+	\hitem Une unit\xE9 de mesure de la finesse de filaments;
+	\hitem Un logiciel de composition cr\xE9\xE9 par Donald \bsc{Knuth};
+	\hitem Le nom \emph{de sc\xE8ne} de l'humoriste Jean-Christophe \bsc{Le Texier};
+	\hitem Une membrane coupe-vent.
+\end{hlist}/
+
+Le code initial dont je me suis servi pendant longtemps \xE9tait bien plus basique que celui de cette extension; depuis, il s'est complexifi\xE9, mais les m\xE9thodes qu'il mettait en \oe uvre sont rest\xE9es les m\xEAmes. Or, j'avais programm\xE9 les listes horizontales en utilisant des \emph{boites} de \TeX{} et non pas des \emph{alignements}. \xC9videmment, il semble plus naturel de faire appel aux alignements de \TeX{} pour r\xE9aliser une telle t\xE2che, mais leur mise en \oe uvre est plus d\xE9licate que celle des boites et j'ai \xE9t\xE9 partisan du moindre effort (et je le suis toujours).
+
+R\xE9cemment\footnote{\texttt{http://forum.mathematex.net/latex-f6/macros-a-parametres-indefini-t16733.html\char`\#p155215}}, alors que la finalisation du code avait d\xE9j\xE0 commenc\xE9e, j'ai d\xE9couvert que l'extension \texttt{Tasks} offrait \emph{presque} les m\xEAmes fonctionnalit\xE9s que \HLIST. Comme \emph{presque} n'est pas synonyme d'\emph{exactement}, je me suis finalement d\xE9cid\xE9 \xE0 publier cette extension. Il n'est bien entendu pas dans mon intention de d\xE9nigrer le travail de C. \bsc{Niederberger} et encore moins de consid\xE9rer \HLIST comme meilleure que \texttt{Tasks}, mais au niveau des principales diff\xE9rences entre \texttt{Tasks} et \HLIST, on peut citer :
+\begin{itemize}
+	\item \HLIST peut \xEAtre utilis\xE9 avec \TeX{} (\eTeX en r\xE9alit\xE9) alors que \texttt{Tasks} requiert \LaTeX;
+	\item les listes de \HLIST peuvent \xEAtre imbriqu\xE9es tandis que celles de \texttt{Tasks} ne le peuvent pas;
+	\item les changements de catcode (et donc le \xAB verbatim \xBB) sont possibles dans les listes de \HLIST et pas dans celles de \texttt{Tasks};
+	\item le code source de \HLIST est plus concis que celui de \texttt{Tasks} (\xE9crit en \LaTeX3) et, contrairement \xE0 ce dernier, \HLIST ne fait appel \xE0 aucune extension tierce\footnote{Vu les facilit\xE9s pr\xE9tendument offertes par \LaTeX3 et les extensions charg\xE9es par \texttt{Tasks}, je suis rest\xE9 m\xE9dus\xE9 face \xE0 la longueur du code de \texttt{Tasks}. Je ne m'explique pas un telle diff\xE9rence entre la taille des deux codes alors que \HLIST embarque son propre syst\xE8me de cl\xE9s/valeurs, ses macros de d\xE9veloppement, etc. Avant de me lancer dans une critique sans m\xE9nagement de \LaTeX3 et comme j'ai un fort soup\xE7on que quelque chose m'\xE9chappe l\xE0-dedans, je serais tr\xE8s reconnaissant si quelqu'un, capable de comprendre ce qui se passe, pouvait me fournir une explication.};
+	\item la documentation de \texttt{Tasks} est en anglais (son auteur est allemand); celle de \HLIST est en fran\xE7ais. Cesser de docilement se plier \xE0 cette pr\xE9tendue n\xE9cessit\xE9 de fournir une documentation en anglais, fusse pour des extensions de \TeX/\LaTeX, compte \emph{beaucoup} \xE0 mes yeux.
+\end{itemize}
+
+En revanche, puisque les deux extensions s'appuient sur des constructions de boites, \HLIST partage avec \texttt{Tasks} le principal d\xE9faut : une coupure de page ne peut pas avoir lieu au sein d'un item qui s'\xE9tendrait sur plusieurs lignes.
+
+\section{Syntaxe}
+L'environnement \HLIST peut \xEAtre appel\xE9 de ces deux mani\xE8res:
+\begin{itemize}
+	\item fa\xE7on \LaTeX: \begin{tabular}[t]{l}\relax\verb|\begin{hlist}[<param\xE8tres>]<nombre>|\\\hskip2em \ttfamily contenu de l'environnement\\\verb|\end{hlist}|\end{tabular}
+	\item fa\xE7on \TeX: \begin{tabular}[t]{l}\relax\verb|\hlist[<param\xE8tres>]<nombre>|\\\hskip2em \ttfamily contenu de l'environnement\\\verb|\endhlist|\end{tabular}
+\end{itemize}
+
+Les options, d\xE9crites plus loin, seront celles qui s'appliquent \xE0 cette liste et le \verb|<nombre>| est le nombre de colonnes demand\xE9es.
+
+L'environnement \HLIST doit commencer par un item, c'est-\xE0-dire par la macro \verb|\hitem|, \xE9ventuellement suivie des arguments optionnels suivants :
+
+\begin{enumerate}
+	\item "\verb|*|" signifiant que cet item doit commencer une nouvelle ligne;
+	\item "\texttt{>}" signifiant que cet item doit s'\xE9tendre sur toutes les colonnes restant disponibles sur la ligne en cours ;
+	\item l'argument entre crochets "\verb|[<label>]|" sp\xE9cifie ce que doit \xEAtre la num\xE9rotation de cet item (voir la description de cette fonctionnalit\xE9 plus loin);
+	\item l'argument entre parenth\xE8ses "\verb|(<n>)|" o\xF9 \verb|<n>| est un entier, indique sur combien de colonnes doit d'\xE9tendre cet item.
+\end{enumerate}
+
+Il faut noter que, s'ils sont pr\xE9sents tous les deux, l'argument optionnel "\verb|*|" \emph{doit} pr\xE9c\xE9der "\texttt{>}". En revanche pour les deux derniers arguments optionnels, l'ordre n'a pas d'importance et donc "\verb|[<label>](<n>)|" et accept\xE9 tout comme "\verb|(<n>)[<label>]|".
+
+\exemple/\def\txtA{Apr\xE8s le pain, l'\xE9ducation est le premier besoin du peuple.}
+\def\txtB{Comment se fait-il que les enfants \xE9tant si intelligents,
+          la plupart des hommes soient b\xEAtes ?\par Cela doit tenir \xE0 l'\xE9ducation.}
+\hlist3
+	\hitem \txtA			\hitem \txtB			\hitem \txtA
+	\hitem \txtA			\hitem> \txtB
+	\hitem*> \txtB
+	\hitem(2) \txtB			\hitem \txtA
+\endhlist/
+
+On peut voir \xE0 la page~\pageref{show frame} cette m\xEAme liste horizontale avec des cadres trac\xE9s autour des boites, ce qui peut rendre les choses plus claires pour cet exemple, volontairement complexe et peu r\xE9aliste.
+
+\section{Choix des param\xE8tres}
+Nous avons d\xE9j\xE0 vu qu'\xE9crire \verb|\hlist[<param\xE8tres>]| permet de r\xE9gler des \verb|<param\xE8tres>| sp\xE9cifiques \xE0 la liste qui suit.
+
+On peut \xE9galement r\xE9gler des \verb|<param\xE8tres>| pour toutes les \HLIST \xE0 venir avec
+\begin{center}
+\verb|\sethlist{<param\xE8tres>}|
+\end{center}
+mais aussi r\xE9gler des \verb|<param\xE8tres>| \emph{par d\xE9faut} pour les \HLIST \xE0 venir avec 
+\begin{center}
+\verb|\setdefaulthlist{<param\xE8tres>}|
+\end{center}
+
+Chaque param\xE8tre est de la forme \verb|<cl\xE9>=<valeur>| o\xF9 la \verb|<cl\xE9>| est le plus souvent constitu\xE9e de deux mots (l'espace entre ces deux mots est \emph{n\xE9cessaire}). Les espaces avant et apr\xE8s la \verb|<cl\xE9>| et la \verb|<valeur>| sont ignor\xE9s.
+
+Lorsqu'une \verb|<cl\xE9>| est seule, elle est comprise comme un \emph{bool\xE9en} qui vaut \verb|true|. Pour indiquer qu'un bool\xE9en est faux, il faut assigner la valeur \verb|false|.
+
+Les param\xE8tres de \emph{placement} sont r\xE9sum\xE9s dans le sch\xE9ma ci-dessous:\par\kern10pt \nobreak
+
+	{\ttfamily\footnotesize
+	\begin{tikzpicture}[line join=round,x=1.33cm,y=1.33cm]
+		% trac\xE9 du paragraphe pr\xE9c\xE9dent la hlist
+		\draw [dash pattern=on 2pt off 2pt] (11.6,7.6)--(11.1,7.6);
+		\draw(11.1,7.6)--(1.6,7.6)--(1.6,7.1)--(0,7.1)--(0,6.6)--(11.1,6.6);
+		\draw[dash pattern=on 2pt off 2pt] (11.6,6.6)--(11.1,6.6);
+		\draw[-stealth](0,8)--(1.6,8)node[midway,anchor=south]{\string\parindent};
+		% trac\xE9 du 1er label
+		\draw(1.2,5.7)--(1.8,5.7)--(1.8,5.3)--(1.2,5.3);
+		\draw[fill=lightgray](1.2,5.7)--(1.6,5.7)--(1.6,5.3)--(1.2,5.3)--cycle;
+		\draw(1.4,5.5)node[anchor=center]{\normalfont\large\bfseries1.};
+		\draw[-stealth](0,5.8)--(1,5.8)node [midway,anchor=south]{left margin};
+		\draw[-stealth](1,6.2)--(2.1,6.2)node [midway,anchor=south]{item offset};
+		\draw[line width=1pt,red](1,5.6)--(1.2,5.6);
+		\draw[-stealth](2.1,5.8)--(1.8,5.8)node [midway,anchor=south]{label sep};
+		
+		\draw[-stealth](1.8,5)--(1.2,5)node [pos=0,anchor=south east]{label width};
+		\draw[-stealth](3.2,6.6)--(3.2,5.7)node[midway,anchor=west]{\string\parskip+pre skip};
+		% trac\xE9 du 1er texte
+		\draw(2.1,5.7)--(5.5,5.7)--(5.5,4.1)--(2.1,4.1)--cycle;
+		% trac\xE9 du 2e label
+		\draw[-stealth](5.5,5.8)--(6.3,5.8)node[midway,anchor=south]{col sep};
+		\draw(6.3,5.7)--(7,5.7)--(7,5.3)--(6.3,5.3)--cycle;
+		% trac\xE9 du 2e texte
+		\draw [dash pattern=on 2pt off 2pt](9.5,5.7)--(8.9,5.7);
+		\draw(8.9,5.7)--(7.3,5.7)--(7.3,4.9)--(8.9,4.9);
+		\draw [dash pattern=on 2pt off 2pt](8.9,4.9)--(9.5,4.9);
+		% trac\xE9 2e ligne
+		\draw(1.2,3.4)--(1.8,3.4)--(1.8,3)--(1.2,3)--cycle;
+		\draw [dash pattern=on 2pt off 2pt](3.7,3.4)--(3,3.4);
+		\draw(3,3.4)--(2.1,3.4)--(2.1,3);
+		\draw [dash pattern=on 2pt off 2pt](2.1,3)--(2.1,2.7);
+		\draw[-stealth](2.4,4.1)--(2.4,3.4)node[midway,anchor=west]{\string\parskip+item sep};
+	\end{tikzpicture}}
+	
+\section{Placement de la liste de plus haut niveau}
+\cleval{pre skip}{ressort}
+Valeur du \verb|<ressort>| vertical ins\xE9r\xE9 avant la liste \emph{de plus haut niveau d'imbrication}.
+
+\cleval{post skip}{ressort}
+Valeur du \verb|<ressort>| vertical ins\xE9r\xE9 apr\xE8s la liste \emph{de plus haut niveau d'imbrication}.
+
+\cleval{left margin}{dimension}
+Valeur du d\xE9calage vers la droite de la liste \emph{de plus haut niveau d'imbrication}.
+
+\exemple/\parindent=2em
+Ceci est un paragraphe s'\xE9tendant sur deux ligne et pr\xE9sentant
+une liste de questions mises en forme \xE0 l'aide de l'extension \texttt{hlist}
+et avec les param\xE8tres par d\xE9faut :
+\hlist3% param\xE8tres par d\xE9faut
+	\hitem Question 1					\hitem Question 2
+	\hitem Une question 3
+	\hitem Question 4					\hitem Question 5
+\endhlist
+Ceci est un paragraphe s'\xE9tendant sur deux ligne et pr\xE9sentant
+une liste de questions mises en forme \xE0 l'aide de l'extension \texttt{hlist}
+et avec des param\xE8tres sp\xE9cifi\xE9s par argument optionnel :
+\hlist[pre skip = 0pt , post skip = 4pt , left margin = \parindent]3
+	\hitem Question 1					\hitem Question 2
+	\hitem Une question 3
+	\hitem Question 4					\hitem Question 5
+\endhlist
+Suite du texte/
+
+\section{Label et texte des items}
+\cleval{item offset}{dimension}
+Cette \verb|<dimension>| est la distance entre la fronti\xE8re gauche de la boite contenant le label et la fronti\xE8re gauche de la boite contenant le texte de l'item.
+
+\cleval{label sep}{dimension}
+Espacement entre la boite contenant le label et celle contenant le texte de l'item.
+
+\cleval{label width}{dimension}
+C'est la dimension de la boite accueillant le label. Le label lui-m\xEAme (en gris sur la figure) peut \xEAtre plus court que cette dimension auquel cas, il faut jouer avec la cl\xE9 \xAB\verb|label align|\xBB (voir plus bas) pour indiquer quel alignement on souhaite.
+
+Si en revanche le label est \emph{plus large} que la largeur \xAB\verb|label width|\xBB, alors un d\xE9passement du type \xAB\texttt{Overful hbox}\xBB aura lieu, sauf si on met la cl\xE9 \verb|autoindent| \xE0 la valeur \verb|true| (voir plus bas).\medbreak
+
+Les trois cl\xE9s \xAB\verb|item offset|\xBB, \xAB\verb|label sep|\xBB et \xAB\verb|label width|\xBB sont en interd\xE9pendance pour le placement du label et plusieurs cas peuvent se pr\xE9senter :
+
+\begin{itemize}
+	\item si l'une des 3 trois (et seulement \emph{une seule} sur les trois) vaut \xAB\verb|*|\xBB, alors, les 2 autres sont calcul\xE9es de telles sorte que l'\xE9galit\xE9 suivante soit v\xE9rifi\xE9e
+	\begin{center}
+	\verb|item offset|${}={}$\verb|label sep|${}+{}$\verb|label width|
+	\end{center}
+	\item si \verb|item offset|${}>{}$\verb|label sep|${}+{}$\verb|label width| comme c'est le cas sur la figure, alors la diff\xE9rence entre le membre de gauche et celui de droite (trait rouge sur la figure) est meubl\xE9 avec un \verb|\hfill|;
+	\item si \verb|item offset|${}<{}$\verb|label sep|${}+{}$\verb|label width|, ce qui ne devrait pas se produire, un avertissement sera \xE9mis.
+\end{itemize}
+
+\cleval{label align}{lettre}
+Cette cl\xE9 repr\xE9sente la consigne d'alignement du label \xE0 l'int\xE9rieur de sa boite. Elle n'a de sens que lorsque le label occupe moins de place horizontale que \xAB\verb|label width|\xBB. On peut demander une consigne \verb|l|, \verb|r| ou \verb|c| selon que l'on souhaite un alignement \xE0 gauche, \xE0 droite ou centr\xE9.
+
+Seule le premi\xE8re lettre \emph{minuscule} de la valeur est prise en compte. La consigne \verb|left| est donc \xE9quivalente \xE0 \verb|l|.
+
+\cleval{label}{code}
+Le \verb|<code>| sera ex\xE9cut\xE9 pour afficher le label. Pour afficher des labels en rapport avec le rang de l'item dans la liste, \HLIST met \xE0 disposition les macros suivantes :
+\begin{itemize}
+	\item \verb|\arabic{<nom>}| pour afficher un entier;
+	\item \verb|\roman{<nom>}| et \verb|\Roman{<nom>}| pour afficher des nombres romains, en minuscule ou majuscule ;
+	\item \verb|\alpha{<nom>}| et \verb|\Alpha{<nom>}| pour afficher des lettres, minuscules ou majuscules.
+\end{itemize}
+
+L'argument de ces macros est le \emph{nom} d'un compteur au format \LaTeX{}, c'est-\xE0-dire que le registre de compteur qui se trouve derri\xE8re est \verb|\c@<nom>|\footnote{Les compteurs de \LaTeX{} pour l'environnement \texttt{enumerate}, \xE0 savoir \texttt{enumi}, \texttt{enumii}, etc sont bien \xE9videmment admis dans les arguments des macros ci-dessus. En r\xE8gle g\xE9n\xE9rale, tout compteur de \LaTeX{} l'est \xE9galement (\texttt{section}, \texttt{equation}, \texttt{page}, \texttt{footnote} ou autre).}.
+
+\HLIST fournit les compteurs nomm\xE9s \xAB\verb|hilsti|\xBB pour les listes de plus haut niveau, \xAB\verb|hilstii|\xBB pour les listes imbriqu\xE9es de niveau~1, \xAB\verb|hilstiii|\xBB pour celle de niveau~2, etc.
+
+\cleval{pre label}{code}
+Contient le \verb|<code>| qui sera ex\xE9cut\xE9e avant d'afficher le label.
+
+\cleval{post label}{code}
+Contient le \verb|<code>| qui sera ex\xE9cut\xE9e apr\xE8s avoir affich\xE9 le label.
+
+\exemple/Exemple 1 :\hlist[label=\alpha{hlisti})]3
+	\hitem question 1 \hitem question 2 \hitem question 3 \hitem question 4
+	\endhlist
+Exemple 2:\hlist[label=---]3
+	\hitem question 1 \hitem question 2 \hitem question 3 \hitem question 4
+	\endhlist
+Exemple 3:\hlist[pre label=\begingroup\color{red}\itshape,label=\roman{hlisti}-,post label=\endgroup]3
+	\hitem question 1 \hitem question 2 \hitem question 3 \hitem question 4
+	\endhlist/
+
+Lorsque l'argument optionnel entre crochet de \verb|\hitem| est vide, aucun label ne sera affich\xE9 et la valeur \xAB\texttt{item offset}\xBB sera nulle pour cet item. Cela peut s'av\xE9rer utile dans le cas de listes imbriqu\xE9es :
+
+\exemple|Exemple avec 2\up e label num\xE9rot\xE9 :
+\hlist3
+	\hitem question 1
+	\hitem% label num\xE9rot\xE9 pour cet item !
+		\hlist[label=\alpha{hlistii}.,col sep=1em]3
+			\hitem XX \hitem YY \hitem ZZ
+		\endhlist
+	\hitem question 3 \hitem question 4 \hitem question 5
+\endhlist
+
+M\xEAme exemple avec 2\up e label forc\xE9 \xE0 vide :
+\hlist3
+	\hitem question 1
+	\hitem[]% pas de label pour cet item !
+		\hlist[label=\arabic{hlisti}\alpha{hlistii}.]3
+			\hitem XX \hitem YY \hitem ZZ
+		\endhlist
+	\hitem question 3 \hitem question 4 \hitem question 5
+\endhlist|
+
+\cleval{pre label}{code}
+Il s'agit du \verb|<code>| qui est ex\xE9cut\xE9 juste avant que le label soit affich\xE9.
+
+\cleval{post label}{code}
+Cette valeur contient le \verb|<code>| qui est ex\xE9cut\xE9 juste apr\xE8s l'affichage du label.
+
+\cleval{resume}{bool\xE9en}
+Lorsque cette cl\xE9 est assign\xE9e \xE0 \verb|true|, la num\xE9rotation de la liste n'est pas r\xE9initialis\xE9e lorsque la macro \verb|\hlist| est ex\xE9cut\xE9e.
+
+\cleval{autoindent}{bool\xE9en}
+Lorsque la largeur du label d\xE9passe la dimension \xAB\verb|label width|, nous avons vu qu'un avertissement du type \texttt{Overful hbox} est produit. Lorsque la cl\xE9 \xAB\texttt{autoindent}\xBB est mise \xE0 \verb|true|, ce d\xE9passement se fait en \emph{indentant la premi\xE8re ligne du texte du label} de telle sorte que subsiste entre le label et le texte l'espace de largeur \xAB\texttt{label sep}\xBB. Il n'y a alors plus d'avertissement \xE9mis par \TeX.
+
+Ceci fonctionne \xE9videmment pour un sch\xE9ma de label \emph{global} pass\xE9 par la cl\xE9 \xAB\verb|label={<code>}|\xBB, mais trouve surtout une utilit\xE9 pour des labels \emph{exceptionnels} sp\xE9cifi\xE9s par \verb|\hitem[<label>]|.
+
+\exemple|\def\txt{et voici le texte de la question}
+\hlist[item sep=5pt]3
+	\hitem Question 1, \txt						\hitem Question 2, \txt						\hitem[Bonus] Question 3, \txt
+	\hitem Question 4, \txt						\hitem Question 5, \txt
+\endhlist
+Texte interm\xE9diaire...
+\hlist[item sep=5pt,autoindent=true]3
+	\hitem Question 1, \txt						\hitem Question 2, \txt						\hitem[Bonus] Question 3, \txt
+	\hitem Question 4, \txt						\hitem Question 5, \txt
+\endhlist|
+
+\cleval{pre item}{code}
+Le code ex\xE9cut\xE9 juste avant le texte de l'item.
+
+\cleval{post item}{code}
+Le code ex\xE9cut\xE9 juste apr\xE8s le texte de l'item.
+
+\cleval{show label}{bool\xE9en}
+Cette cl\xE9, lorsqu'elle est assign\xE9e \xE0 \verb|false|, interdit l'affichage du label et donc, tout se passe comme si les dimensions \texttt{item offset}, \texttt{label width} et \texttt{label sep} valaient \verb|0pt|.
+
+\exemple|Exemple avec \texttt{show label} :
+\hlist3
+	\hitem Question 1					\hitem Question 2
+	\hitem Une question 3
+	\hitem Question 4					\hitem Question 5
+\endhlist
+Exemple sans \texttt{show label} :
+\hlist[show label=false]3
+	\hitem Question 1					\hitem Question 2
+	\hitem Une question 3
+	\hitem Question 4					\hitem Question 5
+\endhlist|
+
+\cleval{list parindent}{dimension}
+Cette cl\xE9 sp\xE9cifie l'indentation des paragraphes de l'item, sauf pour le premier paragraphe de chaque item qui reste non indent\xE9.
+
+\cleval{show frame}{bool\xE9en}
+Cette cl\xE9, lorsqu'elle est assign\xE9e \xE0 \verb|true|, encadre les boites contenant le label et le texte de l'item.
+
+\label{show frame}\exemple/\def\txtA{Apr\xE8s le pain, l'\xE9ducation est le premier besoin du peuple.}
+\def\txtB{Comment se fait-il que les enfants \xE9tant si intelligents,
+          la plupart des hommes soient b\xEAtes ?\par Cela doit tenir \xE0 l'\xE9ducation.}
+\hlist[show frame=true]3
+	\hitem \txtA			\hitem \txtB			\hitem \txtA
+	\hitem \txtA			\hitem> \txtB
+	\hitem*> \txtB
+	\hitem(2) \txtB			\hitem \txtA
+\endhlist/
+
+\section{Le code}
+Contrairement \xE0 mes habitudes, le code est \emph{abondamment} comment\xE9, trop sans doute. J'esp\xE8re que cela constituera une source d'information exploitable pour les utilisateurs de cette extension qui souhaitent y comprendre quelque chose ou modifier par eux-m\xEAme une fonctionnalit\xE9.
+
+Toute suggestion, remont\xE9e de bug, remarque, demande, ajout ou modification de fonctionnalit\xE9 est bienvenue; dans ce cas, j'invite les utilisateurs de \HLIST \xE0 m'envoyer un email.\medbreak
+
+Le code ci-dessous est l'exact verbatim du fichier \verb|hlist.tex| :
+
+\lstinputlisting[
+		language=TeX,
+		moretexcs={unless,ifcsname,ifdefined,detokenize,numexpr,dimexpr,glueexpr,unexpanded},
+		basicstyle=\small\ttfamily\color{black!25},
+		identifierstyle=\bfseries\color{white},%
+		backgroundcolor=\color{black!85},
+		keywordstyle=\bfseries\color{orange},
+		commentstyle=\color{cyan!66},
+		columns=fixed,
+		alsoletter={\_},
+		tabsize=2,
+		extendedchars=true,
+		showspaces=false,
+		showstringspaces=false,
+		numbers=left,
+		numberstyle=\tiny\ttfamily\color{black},
+		breaklines=true,
+		prebreak={\hbox{$\rhookswarrow$}},
+		breakindent=3em,
+		breakautoindent=true,
+		xleftmargin=1em,
+		xrightmargin=0pt,
+		lineskip=0pt,
+		numbersep=1em,
+		classoffset=1,
+		alsoletter={\_},
+		morekeywords={setKVdefault,setKV,useKVdefault,useKV,ifboolKV,%
+             hlist,endhlist,hitem,hlst_arabic,hlst_roman,%
+             hlst_Roman,hlst_alpha,hlst_Alpha,inithlist,%
+             sethlist,setdefaulthlist},
+		keywordstyle=\bfseries\color{red!85!black},
+		classoffset=0,
+		]{hlist.tex}
+\end{document}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf	2017-05-02 21:42:35 UTC (rev 44157)
+++ trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf	2017-05-02 21:44:16 UTC (rev 44158)

Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.tex	2017-05-02 21:44:16 UTC (rev 44158)
@@ -0,0 +1,162 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est le fichier de test (pdf)(Xe)(lua)LaTex de l'entension hlist
+%
+% Fichier compil\xE9 avec pdflatex
+\documentclass[frenchb,a4paper,draft]{article}
+\usepackage[latin1]{inputenc}
+\usepackage[T1]{fontenc}
+\usepackage[margin=2cm]{geometry}
+\usepackage{xcolor,hlist,babel}
+\begingroup\catcode`\_11
+\gdef\repeatntimes{\begingroup\def\temp{\endgroup}\repeatntimes_i}
+\gdef\repeatntimes_i#1#2{% r\xE9p\xE8te #1 fois le code #2
+	\hlst_ifnum{#1>0 }
+		{\expandafter\def\expandafter\temp\expandafter{\temp#2}%
+		\hlst_exparg\repeatntimes_i{\number\numexpr#1-1}{#2}}
+		\temp
+}
+\endgroup
+\begin{document}
+\hlstdebugmodetrue
+\parindent1.5em
+\begingroup
+	\hfill\bfseries\Huge Fichier de test \LaTeX\hfill\null\par
+\endgroup
+
+\section{Test 1}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\begin{hlist}5
+	\hitem \repeatntimes6{bla bla 1 }
+	\hitem \repeatntimes6{bla bla 2 }
+	\hitem \repeatntimes6{bla bla  3 }
+	\hitem \repeatntimes2{bla bla  4 }
+	\hitem \repeatntimes4{bla bla  5 }
+	\hitem \repeatntimes3{L2 L2 }
+	\hitem(3) \repeatntimes9{multicol 3 }
+	\hitem*(2) \repeatntimes5{retour ligne + multicol 2 }
+	\hitem> \repeatntimes5{multicol maximal }
+\end{hlist}
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 2}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\sethlist{%
+	left margin=\parindent,
+	label=\arabic{section}\alpha{hlisti}),
+	item offset=2.5em,
+	label width=*,
+	pre item=\begingroup\color,
+	post item=\endgroup,
+	autoindent}
+\begin{hlist}3
+	\hitem {blue}item bleu !
+	\hitem {red}\repeatntimes3{bla bla en rouge }
+	\hitem {cyan}item cyan
+	\hitem>[LABEL PERSO] {magenta}\repeatntimes4{Long item sur toute la largeur }
+\end{hlist}
+\inithlist% retour aux valeur par d\xE9faut
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 3}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\begin{hlist}[pre skip=0pt,post skip=0pt]4
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+\end{hlist}
+Voici le texte interm\xE9diaire \repeatntimes{15}{bla bla bla }
+\begin{hlist}[resume,pre skip=0pt,post skip=0pt]4
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+\end{hlist}
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 4}
+\noindent
+\begin{minipage}[t]{0.5\linewidth}
+	Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+	\begin{hlist}[label=$\bullet$,label sep=.33em,label width=.75em,
+	              label align=l,item offset=*,show frame]3
+		\hitem Choix A
+		\hitem Choix B
+		\hitem Choix C
+		\hitem Choix D
+		\hitem Choix E
+	\end{hlist}
+\end{minipage}\hfill\vrule\hfill
+\begin{minipage}[t]{0.4\linewidth}
+	Voici le texte pr\xE9c\xE9dent \repeatntimes{8}{bla bla bla }
+	\begin{hlist}[label=$\bullet$,label sep=.33em,label width=.75em,
+	              label align=l,item offset=*]3
+		\hitem Choix A
+		\hitem Choix B
+		\hitem Choix C
+		\hitem Choix D
+		\hitem Choix E
+	\end{hlist}
+\end{minipage}
+
+\section{Test 5}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+
+\begin{enumerate}
+	\item Question 1
+	\item Question 2\par
+		\begin{hlist}[label=\arabic{enumi}\alpha{hlisti},pre skip=0pt,
+		              post skip=0pt]3
+			\hitem Choix A
+			\hitem Choix B
+			\hitem Choix C
+			\hitem Choix D
+		\end{hlist}
+	\item Question 3\par
+		\begin{hlist}[label=\arabic{enumi}\alpha{hlisti},pre skip=0pt,
+		              post skip=0pt]3
+			\hitem R\xE9ponse A
+			\hitem R\xE9ponse B
+			\hitem R\xE9ponse C
+			\hitem R\xE9ponse D
+		\end{hlist}
+	\item Question 4
+\end{enumerate}
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 6}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\begin{hlist}[label sep=0.25em,label width=1.6em,item offset=*,
+              label=\arabic{section}\alpha{hlisti},col sep=1em,show frame]8
+	\repeatntimes{26}{\hitem a\space eou}%
+\end{hlist}
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 7}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\begin{hlist}[item offset=\parindent,label width=1em,label sep=*,list parindent=\parindent]3
+	\hitem Un premier item\par
+	       Une autre ligne pour rien dire !
+	\hitem Le \verb|verbatim| est permis avec l'extension \verb|hlist|, la preuve : <<~\verb|# 1\ $%    ~|~>>.
+	\hitem Un troisi\xE8me item pour le fun et pour remplir une ligne\par
+	       Un autre paragraphe pour prendre deux lignes.
+	\hitem La fin... des haricots !
+\end{hlist}
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 8}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\begin{hlist}[show label=false,show frame,col sep=3em,list parindent=\parindent]3
+	\hitem Un premier item\par
+	       Une autre ligne pour ne rien dire !
+	\hitem Le \verb|verbatim| est permis dans les items avec l'extension \verb|hlist|, la preuve : <<~\verb|# 1\ $%    ~|~>>.
+	\hitem Un troisi\xE8me item pour remplir une ligne\par
+	       Un deuxi\xE8me paragraphe qui prend deux lignes.
+	\hitem La fin... des haricots !
+\end{hlist}
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+\end{document}
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/htest-latex.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf
===================================================================
(Binary files differ)

Index: trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf	2017-05-02 21:42:35 UTC (rev 44157)
+++ trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf	2017-05-02 21:44:16 UTC (rev 44158)

Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
Added: trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.tex
===================================================================
--- trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.tex	2017-05-02 21:44:16 UTC (rev 44158)
@@ -0,0 +1,173 @@
+% !TeX encoding = ISO-8859-1
+% Ceci est le fichier de test (pdf)(Xe)(lua)tex de l'entension hlist
+%
+% Fichier compil\xE9 avec pdftex
+\def\margin{2cm}
+\hoffset\dimexpr \margin - 1in \relax
+\voffset\dimexpr \margin - 1in \relax
+\hsize\dimexpr 21cm - \margin*2 \relax
+\vsize\dimexpr 29.7cm - \margin*2 \relax
+
+\input hlist.tex
+\input color.tex
+
+\begingroup
+	\catcode`\_11
+	\gdef\repeatntimes{\begingroup\def\temp{\endgroup}\repeatntimes_i}
+	\gdef\repeatntimes_i#1#2{% r\xE9p\xE8te #1 fois le code #2
+		\hlst_ifnum{#1>0 }
+			{\hlst_exparg{\def\temp}{\temp#2}%
+			\hlst_exparg\repeatntimes_i{\number\numexpr#1-1}{#2}%
+			}
+			\temp
+	}
+\endgroup
+
+\def\verb{\expandafter\verbA\string}
+\def\verbA#1{%
+	\begingroup
+		\def\verbB##1#1{\tt##1\endgroup}%
+		\def\do##1{\catcode`##112 }%
+		\catcode32 13 \begingroup\lccode`\~ 32 \lowercase{\endgroup\let~\space}%
+		\do\\\do\{\do\}\do\$\do\&\do\#\do\^\do\_\do\%\do\~%
+		\verbB
+}
+
+\expandafter\newcount\csname c at section\endcsname
+\def\section#1{%
+	\expandafter\advance\csname c at section\endcsname1
+	\bigbreak\noindent
+	\begingroup\hlstsectionfont \the\csname c at section\endcsname\quad#1\endgroup
+	\smallbreak
+}
+\font\hlsttitlefont=ecbx2000 % titre
+\font\hlstsectionfont=ecbx1400 % section
+\font\hlsttextfont=ecrm1000 % texte
+
+\catcode`\;=13 \def;{\unskip\penalty10000 \ \string;}% caract\xE8res actifs de ponctuation fran\xE7aise
+\catcode`\:=13 \def:{\unskip\penalty10000 \ \string:}
+\catcode`\!=13 \def!{\unskip\penalty10000 \ \string!}
+
+%%%%% D\xC9BUT DU DOCUMENT
+\hlstdebugmodetrue
+\hlsttextfont
+\parindent1.5em
+\begingroup
+	\hfill\hlsttitlefont  Fichier de test \TeX\hfill\null\par
+\endgroup
+
+\section{Test 1}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\hlist5
+	\hitem \repeatntimes6{bla bla 1 }
+	\hitem \repeatntimes6{bla bla 2 }
+	\hitem \repeatntimes6{bla bla  3 }
+	\hitem \repeatntimes2{bla bla  4 }
+	\hitem \repeatntimes4{bla bla  5 }
+	\hitem \repeatntimes3{L2 L2 }
+	\hitem(3) \repeatntimes9{multicol 3 }
+	\hitem*(2) \repeatntimes5{retour ligne + multicol 2 }
+	\hitem> \repeatntimes5{multicol maximal }
+\endhlist
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 2}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\sethlist{%
+	left margin=\parindent,
+	label=\arabic{section}\alpha{hlisti}),
+	item offset=2.5em,
+	label width=*,
+	pre item=\begingroup\color,
+	post item=\endgroup,
+	autoindent}
+\hlist3
+	\hitem {blue}item bleu !
+	\hitem {red}\repeatntimes3{bla bla en rouge }
+	\hitem {cyan}item cyan
+	\hitem>[LABEL PERSO] {magenta}\repeatntimes4{Long item sur toute la largeur }
+\endhlist
+\inithlist% retour aux valeur par d\xE9faut
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 3}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\hlist[pre skip=0pt,post skip=0pt]4
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+\endhlist
+Voici le texte interm\xE9diaire \repeatntimes{15}{bla bla bla }
+\hlist[resume,pre skip=0pt,post skip=0pt]4
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+	\hitem  Item r\xE9p\xE9t\xE9
+\endhlist
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 4}
+\noindent
+\vtop{\hsize=.5\hsize
+	Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+	\hlist[label=$\bullet$,label sep=.33em,label width=.75em,
+	              label align=l,item offset=*,show frame]3
+		\hitem Choix A
+		\hitem Choix B
+		\hitem Choix C
+		\hitem Choix D
+		\hitem Choix E
+	\endhlist
+}\hfill\vrule\hfill
+\vtop{\hsize=.4\hsize
+	Voici le texte pr\xE9c\xE9dent \repeatntimes{8}{bla bla bla }
+	\hlist[label=$\bullet$,label sep=.33em,label width=.75em,
+	              label align=l,item offset=*]3
+		\hitem Choix A
+		\hitem Choix B
+		\hitem Choix C
+		\hitem Choix D
+		\hitem Choix E
+	\endhlist
+}%
+
+\section{test 5}
+Sans objet, l'extension \verb|enumerate| n'est pas disponible pour \TeX.
+
+\section{Test 6}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\hlist[label sep=0.25em,label width=1.6em,item offset=*,
+              label=\arabic{section}\alpha{hlisti},col sep=1em,show frame]8
+	\repeatntimes{26}{\hitem a\space eou}%
+\endhlist
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 7}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\hlist[item offset=\parindent,label width=1em,label sep=*,list parindent=\parindent]3
+	\hitem Un premier item\par
+	       Une autre ligne pour rien dire !
+	\hitem Le \verb|verbatim| est permis avec l'extension \verb|hlist|, la preuve : <<~\verb|# 1\ $%    ~|~>>.
+	\hitem Un troisi\xE8me item pour le fun et pour remplir une ligne\par
+	       Un autre paragraphe pour prendre deux lignes.
+	\hitem La fin... des haricots !
+\endhlist
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+
+\section{Test 8}
+Voici le texte pr\xE9c\xE9dent \repeatntimes{15}{bla bla bla }
+\hlist[show label=false,show frame,col sep=3em,list parindent=\parindent]3
+	\hitem Un premier item\par
+	       Une autre ligne pour ne rien dire !
+	\hitem Le \verb|verbatim| est permis dans les items avec l'extension \verb|hlist|, la preuve : <<~\verb|# 1\ $%    ~|~>>.
+	\hitem Un troisi\xE8me item pour remplir une ligne\par
+	       Un deuxi\xE8me paragraphe qui prend deux lignes.
+	\hitem La fin... des haricots !
+\endhlist
+Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla }
+\bye
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/doc/generic/hlist/htest-tex.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/hlist/hlist.sty
===================================================================
--- trunk/Master/texmf-dist/tex/generic/hlist/hlist.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/hlist/hlist.sty	2017-05-02 21:44:16 UTC (rev 44158)
@@ -0,0 +1,6 @@
+% !TeX encoding = ISO-8859-1
+\input hlist.tex
+\setKVdefault[hlist]{
+	pre label     = \bfseries,% code ex\xE9cut\xE9 au d\xE9but de la boite contenant le label
+}
+\endinput
\ No newline at end of file


Property changes on: trunk/Master/texmf-dist/tex/generic/hlist/hlist.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/tex/generic/hlist/hlist.tex
===================================================================
--- trunk/Master/texmf-dist/tex/generic/hlist/hlist.tex	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/generic/hlist/hlist.tex	2017-05-02 21:44:16 UTC (rev 44158)
@@ -0,0 +1,838 @@
+% !TeX encoding = ISO-8859-1
+% Ce fichier contient le code comment\xE9 de l'extension "hlist"
+%
+% IMPORTANT : pour que les commentaires s'affichent correctement, lire
+%             ce fichier avec l'encodage ISO-8859-1
+%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%                                                                    %
+\def\hlstname                   {hlist}                              %
+\def\hlstver                     {0.1}                               %
+%                                                                    %
+\def\hlstdate                 {2017/05/01}                           %
+%                                                                    %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% --------------------------------------------------------------------
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% 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.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+% --------------------------------------------------------------------
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Christian Tellechea
+% email: unbonpetit at openmailbox.org
+%        Commentaires, suggestions et signalement de bugs bienvenus !
+%        Comments, bug reports and suggestions are welcome.
+% --------------------------------------------------------------------
+% L'extension hlist est compos\xE9e des 9 fichiers suivants :
+%   - code               : hlist            (.tex et .sty)
+%   - manuel en fran\xE7ais : hlist-fr         (.tex et .pdf)
+%   - fichiers de test   : hlist-latex      (.tex et .pdf)
+%                          hlist-tex        (.tex et .pdf)
+%   - fichier lisezmoi   : README
+% --------------------------------------------------------------------
+
+\expandafter\edef\csname hlst_restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax}
+\catcode`\_11
+
+%################################################
+%########### macros de d\xE9veloppement ############
+%################################################
+% Cette macro est \xE9quivalente \xE0 0 et sert notamment \xE0 stopper le d\xE9veloppement
+% de \romannumeral
+\chardef\hlst_stop 0
+
+% D\xE9finition du quark, notamment ins\xE9r\xE9 \xE0 la fin d'une liste pour en reconnaitre
+% la fin et stopper la r\xE9cursivit\xE9
+\def\hlst_quark{\hlst_quark}
+
+% Voici les macros habituelles de s\xE9lection d'arguments
+\def\hlst_gobarg#1{}
+\long\def\hlst_first#1#2{#1}\long\def\hlst_second#1#2{#2}
+\long\def\hlst_firsttonil#1#2\_nil{#1}
+
+% Voici la macro pour 1-d\xE9velopper ou 2-d\xE9velopper le 2e argument (le 1er \xE9tant
+% d\xE9pouill\xE9 des accolades)
+%     \hlst_exparg{<a>}{<b>} devient <a>{<b>}
+%     \hlst_eearg{<a>}{<b>} devient <a>{**<b>}
+\long\def\hlst_exparg#1#2{\expandafter\hlst_exparg_i\expandafter{#2}{#1}}%
+\long\def\hlst_eearg#1#2{\expandafter\expandafter\expandafter\hlst_exparg_i\expandafter\expandafter\expandafter{#2}{#1}}%
+\long\def\hlst_exparg_i#1#2{#2{#1}}
+
+% Et la macro pour 1-d\xE9velopper le 2e argument (le 1er et le 2e argument sont
+% d\xE9pouill\xE9s des accolades)%
+%     \hlst_expafter{<a>}{<b>} devient <a><*b>
+\long\def\hlst_expafter#1#2{\expandafter\hlst_expafter_i\expandafter{#2}{#1}}
+\long\def\hlst_expafter_i#1#2{#2#1}
+
+% Enfin, la macro pour former le nom du 2e argument (le 1er est d\xE9pouill\xE9 des
+% accolades)
+%     \hlst_argcsname{<a>}{<b>} devient <a>\<b>
+\def\hlst_argcsname#1#{\hlst_argcsname_i{#1}}
+\def\hlst_argcsname_i#1#2{\hlst_expafter{#1}{\csname#2\endcsname}}
+
+%################################################
+%################ macros de test ################
+%################################################
+% Voici quelques macros \xE0 s\xE9lection d'arguments pour les tests
+\def\hlst_ifnum#1{\ifnum#1\expandafter\hlst_first\else\expandafter\hlst_second\fi}
+\def\hlst_ifcsname#1{\ifcsname#1\endcsname\expandafter\hlst_first\else\expandafter\hlst_second\fi}
+\long\def\hlst_ifx#1{\ifx#1\expandafter\hlst_first\else\expandafter\hlst_second\fi}
+\long\def\hlst_ifempty#1{\hlst_exparg\hlst_ifx{\expandafter\relax\detokenize{#1}\relax}}
+\def\hlst_ifstar#1#2{\def\hlst_ifstar_i{\hlst_ifx{*\hlst_nxttok}{\hlst_first{#1}}{#2}}\futurelet\hlst_nxttok\hlst_ifstar_i}
+\def\hlst_eaddtomacro#1#2{\hlst_exparg{\hlst_exparg{\def#1}}{\expandafter#1#2}}
+
+% Ici, une macro pour d\xE9finir le token <espace>
+\def\hlst_deftok#1#2{\let#1= #2\relax}\hlst_deftok\hlst_sptok{ }
+
+% Et une macro pour tester le prochain token
+\def\hlst_ifnxttok#1#2#3{\hlst_deftok\hlst_toktotest{#1}\def\__truecode{#2}\def\__falsecode{#3}\hlst_ifnxttok_a}
+\def\hlst_ifnxttok_a{\futurelet\_futurtok\hlst_ifnxttok_b}
+\def\hlst_ifnxttok_b{%
+	\hlst_ifx{\_futurtok\hlst_sp}
+		{\afterassignment\hlst_ifnxttok_a\let\_futurtok= }
+		{\hlst_ifx{\_futurtok\hlst_toktotest}\__truecode\__falsecode}%
+}
+
+% Ces macros sont utiles pour \hlst_removeextremespaces, qui retire les
+% espaces extr\xEAmes de son argument
+%     Voir codes 320-324 (http://progtex.fr/wp-content/uploads/2014/09/code.txt)
+%     et pages 339-343 de "Apprendre \xE0 programmer en TeX"
+\long\def\hlst_ifspacefirst#1{\expandafter\hlst_ifspacefirst_i\detokenize{#10} \_nil}
+\long\def\hlst_ifspacefirst_i#1 #2\_nil{\hlst_ifempty{#1}}
+\expandafter\def\expandafter\hlst_gobspace\space{}
+\def\hlst_removefirstspaces{\romannumeral\hlst_removefirstspaces_i}
+\long\def\hlst_removefirstspaces_i#1{\hlst_ifspacefirst{#1}{\expandafter\hlst_removefirstspaces_i\expandafter{\hlst_gobspace#1}}{\hlst_stop#1}}
+\begingroup
+	\catcode0 12
+	\long\gdef\hlst_removelastspaces#1{\romannumeral\hlst_removelastspaces_i#1^^00 ^^00\_nil}
+	\long\gdef\hlst_removelastspaces_i#1 ^^00{\hlst_removelastspaces_ii#1^^00}
+	\long\gdef\hlst_removelastspaces_ii#1^^00#2\_nil{\hlst_ifspacefirst{#2}{\hlst_removelastspaces_i#1^^00 ^^00\_nil}{\hlst_stop#1}}
+\endgroup
+\long\def\hlst_removeextremespaces#1{%
+	\romannumeral\expandafter\expandafter\expandafter\hlst_removelastspaces\expandafter\expandafter\expandafter
+	{\expandafter\expandafter\expandafter\hlst_stop\hlst_removefirstspaces{#1}}%
+}
+
+%################################################
+%############## syst\xE8me cl\xE9/valeur ##############
+%################################################
+% Ceci est le bool\xE9en indiquant si la lecture de <cl\xE9s>=<valeurs> d\xE9finit les
+% <cl\xE9s> _par d\xE9faut_ ou qu'il s'agit d'une _red\xE9finition_ des <cl\xE9s> d\xE9j\xE0
+% existantes
+\newif\ifhlst_default
+
+% macros chapeau appelant la m\xEAme macro avec le bool\xE9en pr\xE9alablement d\xE9fini
+\def\setKVdefault{\hlst_defaulttrue\hlst_readKV}
+\def\setKV{\hlst_defaultfalse\hlst_readKV}
+
+% L'argument obligatoire #1 est le nom du <trousseau> et #2 est l'ensemble
+% des <cl\xE9s>=<valeurs>
+\def\hlst_readKV[#1]#2{%
+	\hlst_ifempty{#2}
+% Si aucune <cl\xE9s>=<valeurs> alors qu'on d\xE9finit les <valeurs> par d\xE9faut,
+% message d'erreur et on s'arr\xEAte l\xE0
+		{\ifhlst_default\errmessage{No key/val found, no default key/val defined}\fi}
+% Sinon, initialiser \xE0 <vide> la macro \hlst_[<trousseau>] uniquement si on
+% cr\xE9\xE9 les <valeurs> par d\xE9faut
+		{\ifhlst_default\hlst_argcsname\let{hlst_[#1]}\empty\fi
+% Puis on passe aux choses s\xE9rieuses, on va lire un par un tous les \xE9l\xE9ments
+% <cl\xE9>=<valeur> (contenus dans #2) en mettant le quark comme dernier couple
+% pour montrer la fin de la liste
+		\hlst_readKV_i[#1]#2,\hlst_quark,%
+		}%
+}
+
+\def\hlst_readKV_i[#1]#2,{%
+% #2 est le premier couple "<cl\xE9>=<valeur>" de la liste qui reste \xE0 traiter :
+% tout d'abord, on se d\xE9barrasse des espaces extr\xEAmes
+	\hlst_eearg{\def\__temp}{\hlst_removeextremespaces{#2}}%
+% Si ce qui en r\xE9sulte est \xE9gal au <quark>,
+	\hlst_ifx{\__temp\hlst_quark}
+% alors, on a fini et on ne fait rien (fin du processus)
+		{}
+% Sinon, si ce qui en r\xE9sulte est vide (le couple "<cl\xE9>=<valeur>" \xE9tait donc
+% vide ou compos\xE9 d'un espace)
+		{\hlst_ifx{\__temp\empty}
+% On a fini et on ne fait rien (fin du processus)
+			{}
+% dans le cas contraire, on va isoler la <cl\xE9> et la <valeur> du couple lu en
+% prenant soin de mettre \xE0 la fin "=<quark>" pour se pr\xE9munir du cas o\xF9
+% "<cl\xE9>=<valeur>" ne contient que la "<cl\xE9>" et pas de signe "=", ce qui
+% ferait planter la macro \xE0 arguments d\xE9limit\xE9s
+			{\expandafter\hlst_find_kv\__temp=\hlst_quark\_nil[#1]%
+			}%
+% Lorsque la <cl\xE9> et la <valeur> est trouv\xE9e et stock\xE9e, recommencer et aller
+% lire le prochain couple "<cl\xE9>=<valeur>"
+		\hlst_readKV_i[#1]%
+		}%
+}
+
+% Voici la macro \xE0 arguments d\xE9limit\xE9s \xE0 qui on a transmis
+%     <cl\xE9>=<valeur>=<quark> (si <cl\xE9>=<valeur> est l'\xE9l\xE9ment lu)
+% ou
+%     <cl\xE9>=<quark> (si <cl\xE9> est seule)
+% et qui va isoler la <cl\xE9> de la <valeur>.
+\def\hlst_find_kv#1=#2\_nil[#3]{%
+% #1 est ce qui se trouve avant le _premier_ signe "=" et
+% #2 est ce qui se trouve entre le premier signe "=" et le \_nil
+% Pour la <cl\xE9>, pas de probl\xE8me, c'est _obligatoirement_ ce qui est avant le
+% signe "=", que ce signe soit pr\xE9sent dans le couple lu ou pas puisqu'on y a
+% rajout\xE9 "=<quark>".
+% On \xE9limine les espaces extr\xEAmes pour obtenir la <cl\xE9> d\xE9finitive stock\xE9e dans
+% \__key (il faut 2-d\xE9velopper \hlst_removeextremespaces pour qu'elle donne son
+% argument sans espace extr\xEAme)
+	\edef\__key{\detokenize\expandafter\expandafter\expandafter{\hlst_removeextremespaces{#1}}}%
+% Pour la <valeur>, on lui \xF4te d'abord les espaces extr\xEAmes
+	\hlst_eearg{\def\__val}{\hlst_removeextremespaces{#2}}%
+	\hlst_ifx{\__val\hlst_quark}
+% Si elle est \xE9gale au <quark>, alors la <valeur> vaut "true"
+		{\def\__val{true}}%
+% Sinon, \xF4ter "=<quark>" de la fin de l'argument #2, \xE9liminer les espaces
+% extr\xEAmes de ce qui en r\xE9sulte et stocker le tout dans \__val (tout ceci est
+% effectu\xE9 par la macro \hlst_find_val <valeur>=<quark>)
+		{\hlst_find_val#2}%
+% Si on lit les <cl\xE9s>=<valeurs> par d\xE9faut,
+	\ifhlst_default
+% assigner \xE0 la macro "\hlst_[<trousseau>]_<cl\xE9>" la <valeur> trouv\xE9e
+		\hlst_argcsname\let{hlst_[#3]_\detokenize\expandafter{\__key}}\__val
+% Puis ajouter \xE0 la macro "\hlst_[<trousseau>]", qui a \xE9t\xE9 pr\xE9alablement
+% initialis\xE9e \xE0 <vide> :
+%     \def\hlst_[<trousseau>]_<cl\xE9>{<valeur>}
+		\hlst_argcsname\hlst_eaddtomacro{hlst_[#3]}%
+			{\expandafter\def\csname hlst_[#3]_\detokenize\expandafter{\__key}\expandafter\endcsname\expandafter{\__val}}%
+% C'est selon ce hashage que sont enregistr\xE9s les couples <cl\xE9>/<valeur> : les
+% <cl\xE9s> sont contenues dans les noms des macros tandis que les <valeurs> sont
+% les textes de remplacement de ces macros.
+% C'est rapide et simple :
+%    a)  pour trouver une <valeur> d'apr\xE8s sa <cl\xE9>, il suffit de d\xE9velopper la
+%        macro \hlst_[<trousseau>]_<cl\xE9>
+%    b) pour red\xE9finir une <cl\xE9>, il suffit de red\xE9finir cette macro avec la
+%       nouvelle <valeur>
+%    c) il est facile de v\xE9rifier qu'une <cl\xE9> existe en v\xE9rifiant que la macro
+%       associ\xE9e est d\xE9finie, la primitive \ifcsname le fait tr\xE8s bien
+%    d) en revanche, on ne peut pas faire de recherche _inverse_ de fa\xE7on
+%       pratique : il est en effet plus difficile de trouver la (ou les) <cl\xE9>
+%       contenant une <valeur> donn\xE9e, mais cette limitation n'a pas grande
+%       importance ici (je ne sais pas si les autres syst\xE8mes de <cl\xE9>/<valeur>
+%       sont programm\xE9s de telle sorte que cela soit simple...)
+% Bref, la macro "\hlst_[<trousseau>]" contient donc _toutes_ les d\xE9finitions
+% des macros d\xE9finissant les <cl\xE9s>/<valeurs> _par d\xE9faut_ et ex\xE9cuter 
+% "\hlst_[<trousseau>]" remet donc toutes les <cl\xE9s> \xE0 leur <valeur> par d\xE9faut.
+	\else
+% Dans le cas o\xF9 on _lit_ des nouvelles <valeurs> pour des <cl\xE9s>
+		\hlst_ifcsname{hlst_[#3]_\__key}
+% Si la <cl\xE9> existe (ssi la macro "\hlst_[<trousseau>]_<cl\xE9>" est d\xE9finie),
+% alors assigner la <valeur> \xE0 cette macro
+			{\hlst_argcsname\let{hlst_[#3]_\__key}\__val}%
+% Sinon, \xE9mettre un message d'erreur et ne rien faire de plus
+			{\errmessage{Key "\__key" is not defined: nothing is modified}}%
+	\fi
+}
+
+% Cette macro \xE0 qui on a transmis "<valeur>=<quark>" ne garde que <valeur>, en
+% \xF4te les espaces extr\xEAmes et stocke le r\xE9sultat dans \__val
+\def\hlst_find_val#1=\hlst_quark{\hlst_eearg{\def\__val}{\hlst_removeextremespaces{#1}}}
+
+% Cette macro remet toutes les <cl\xE9s> \xE0 leur <valeurs> par d\xE9faut en ex\xE9cutant
+% la macro "\hlst_[<trousseau>]"
+\def\useKVdefault[#1]{%
+	\hlst_ifcsname{hlst_[#1]}
+		{\csname hlst_[#1]\endcsname}
+% Si la macro "\hlst_[<trousseau>]" n'existe pas, message d'erreur
+		{\errmessage{Undefined set of keys "#1"}}%
+}
+
+% Cette macro donne la <valeur> correspondant \xE0 la <cl\xE9> contenue dans #2
+\def\useKV[#1]#2{%
+% Avec \romannumeral, la <valeur> sera obtenue apr\xE8s _2_ d\xE9veloppements de
+% \useKV[<trousseau>]{<cl\xE9>}
+	\romannumeral\hlst_ifempty{#2}
+% Si la <cl\xE9> est vide, message d'erreur (il ne peut y avoir de <valeur>
+% associ\xE9e \xE0 une <cl\xE9> vide)
+		{\hlst_stop\errmessage{Key name missing}}
+		{\hlst_ifcsname{hlst_[#1]_\hlst_removeextremespaces{#2}}
+% Si la macro "\hlst_[<trousseau>]_<cl\xE9>" existe, 2-d\xE9velopper le \csname pour
+% avoir la <valeur>
+			{\expandafter\expandafter\expandafter\hlst_stop\csname hlst_[#1]_\hlst_removeextremespaces{#2}\endcsname}
+% Sinon, message d'erreur
+			{\hlst_stop\errmessage{Key "\hlst_removeextremespaces{#2}" not defined}}%
+		}%
+}
+
+% Voici une macro purement d\xE9veloppable qui teste si #2 (la <cl\xE9> du <trousseau>
+% #1) est \xE9gale \xE0 "true" ou \xE0 "false" et selon l'issue, ex\xE9cute le 1er ou 2e
+% argument qui suit (arguments appel\xE9s <vrai> et <faux>)
+\def\ifboolKV[#1]#2{%
+% Cette macro donnera un des 2 arguments <vrai> ou <faux> en _2_ d\xE9veloppements
+% gr\xE2ce au \romannumeral
+	\romannumeral\hlst_ifempty{#2}
+% Si la <cl\xE9> est vide, message d'erreur
+		{\hlst_stop\errmessage{Key name missing}\hlst_second}
+		{\hlst_ifcsname{hlst_[#1]_\hlst_removeextremespaces{#2}}
+% Si la <cl\xE9> d\xE9barrass\xE9e de ses espaces extr\xEAmes existe, tester son contenu
+			{\hlst_eearg\ifboolKV_i{\csname hlst_[#1]_\hlst_removeextremespaces{#2}\endcsname}}
+% Sinon, message d'erreur
+			{\hlst_stop\errmessage{Key "\hlst_removeextremespaces{#2}" not defined}\hlst_second}%
+		}%
+}
+
+% Cette macro teste si #1, qui est une <valeur>, vaut "true" ou "false"
+\def\ifboolKV_i#1{%
+% Tester d'abord si elle vaut "true"
+	\hlst_ifargtrue{#1}
+		{\expandafter\hlst_stop\hlst_first}
+		{\hlst_ifargfalse{#1}
+% Puis si elle vaut "false"
+			{\expandafter\hlst_stop\hlst_second}
+% Si ni l'un ni l'autre, la <valeur> n'est pas un bool\xE9en acceptable
+			{\hlst_stop\errmessage{Value "#1" is not a valid boolean}\hlst_second}%
+		}%
+}
+
+% La macro \hlst_ifargtrue{<argument>} teste de fa\xE7on purement d\xE9veloppable si
+% <argument> vaut "true" ou "false".
+% Pour cela, on transmet \xE0 \hlst_ifargtrue_i l'argument "<argument>true" qui est
+% d\xE9limit\xE9 par \_nil
+\def\hlst_ifargtrue#1{\hlst_ifargtrue_i#1true\_nil}
+% Dans la macro \hlst_ifargtrue_i, l'argument #1 est ce qui se trouve avant
+% "true" dans "<argument>true" :
+%     - s'il n'est pas vide, s\xE9lectionner l'argument <faux>
+%     - s'il est vide, cela signifie que <argument> commence par "true" ; il est
+%       donc de la forme "true<autre>"
+%       L'argument #2 est ce qui se trouve apr\xE8s "true" dans "true<autre>true",
+%       c'est donc "<autre>true".
+%       Pour \xEAtre s\xFBr que <autre> est <vide>, on transmet "<autre>true" \xE0
+%       \hlst_ifargtrue_ii qui teste si la r\xE9union de ce qui est avant le
+%       premier "true" et ce qui est apr\xE8s est <vide>
+\def\hlst_ifargtrue_i#1true#2\_nil{\hlst_ifempty{#1}{\hlst_ifargtrue_ii#2\_nil}\hlst_second}
+\def\hlst_ifargtrue_ii#1true#2\_nil{\hlst_ifempty{#1#2}}
+
+% On proc\xE8de de m\xEAme pour tester "false"
+\def\hlst_ifargfalse#1{\hlst_ifargfalse_i#1false\_nil}
+\def\hlst_ifargfalse_i#1false#2\_nil{\hlst_ifempty{#1}{\hlst_ifargfalse_ii#2\_nil}\hlst_second}
+\def\hlst_ifargfalse_ii#1false#2\_nil{\hlst_ifempty{#1#2}}
+
+%################################################
+%############### macros de  hlist ###############
+%################################################
+% Voici les registres utilis\xE9s :
+% 1) le compteur d'imbrication, incr\xE9ment\xE9 de 1 \xE0 chaque nouvelle liste 
+%    imbriqu\xE9e :
+\newcount\hlst_nest
+
+% 2) Le compteur des \items sur chaque ligne :
+\newcount\hlst_colcnt
+
+% 3) La largeur des \hbox enfermant les <items> (un <item> est le <label> _et_
+%    le <texte> de l'item) :
+\newdimen\hlst_itemboxwidth
+
+% 4) L'espace entre chaque <item> :
+\newdimen\hlst_colsep
+
+% 5) La largeur disponible pour loger une ligne d'<items> :
+\newdimen\hlst_textwidth
+
+% 6) La profondeur maximale des \vtop rencontr\xE9es jusqu'alors dans une ligne :
+\newdimen\hlst_maxdepth
+
+% 7) La profondeur du dernier \xE9l\xE9ment de la \vtop la plus profonde de la ligne :
+\newdimen\hlst_maxprevdepth
+
+% 8) La boite chapeau contenant l'<item> (<label> + <texte>) :
+\newbox\hlst_currenthbox
+
+% 9) La boite contenant le <label> :
+\newbox\hlst_labelbox
+
+%10) La boite contenant le <texte>
+\newbox\hlst_textbox
+
+%11) Un bool\xE9en \xE0 fins de d\xE9bogage et une dimension de d\xE9bogage
+%    Il sera mis \xE0 faux apr\xE8s la phase de tests et supprim\xE9 d\xE8s
+%    la version 0.2
+\newif\ifhlstdebugmode\hlstdebugmodefalse
+\newdimen\hlst_debugdim
+
+% La macro qui \xE9crit les avertissement dans le fichier log de fa\xE7on \xE9quivalente
+% \xE0 \wlog :
+\def\hlst_warning#1{\immediate\write-1 {Package hlist Warning: #1}}
+
+% Cette macro renvoie le 1er caract\xE8re d\xE9tok\xE9niz\xE9 de la <valeur> obtenue par
+% 2-d\xE9veloppement de #1, de la forme \useKV[hlist]{<cl\xE9>}
+\def\hlst_firstcarof#1{\expandafter\hlst_firsttonil\detokenize\expandafter\expandafter\expandafter{#1}\_nil}
+
+% Cette macro \xE9value la dimension contenue dans la <valeur> d'une <cl\xE9>
+% pass\xE9e dans l'argument #1 et l'assigne \xE0 la <valeur> de cette <cl\xE9>
+\def\hlst_evaldim#1{%
+% On n'\xE9value que si la <valeur> ne commence pas par "*" qui est r\xE9serv\xE9
+	\if\string*\hlst_firstcarof{\useKV[\hlstname]{#1}*}\else
+		\expandafter\edef\csname hlst_[\hlstname]_\detokenize{#1}\endcsname{\the\dimexpr\useKV[\hlstname]{#1}\relax}%
+	\fi
+}
+
+% M\xEAme principe pour les ressorts
+\def\hlst_evalskip#1{\expandafter\edef\csname hlst_[\hlstname]_\detokenize{#1}\endcsname{\the\glueexpr\useKV[\hlstname]{#1}\relax}}
+
+% Voici la macro par qui tout commence; elle peut \xEAtre appel\xE9e par \hlist fa\xE7on TeX
+% ou par \begin{hlist} fa\xE7on LaTeX.
+% On teste d'abord si elle dispose d'un argument optionnel qui serait les
+% <cl\xE9>=<valeur> applicables \xE0 cette liste
+\def\hlist{\begingroup\hlst_ifnxttok[{\hlist_i}{\hlist_i[]}}
+\def\hlist_i[#1]{%
+% Si les <cl\xE9>=<valeur> ne sont pas vide, les d\xE9finir dans le groupe semi simple
+% qui vient d'\xEAtre ouvert
+	\hlst_ifempty{#1}{}{\sethlist{#1}}%
+% Fixer les dimensions et les ressorts
+	\hlst_evaldim{list parindent}\hlst_evaldim{item sep}\hlst_evaldim{left margin}\hlst_evaldim{col sep}%
+	\hlst_evaldim{item offset}\hlst_evaldim{label sep}\hlst_evalskip{pre skip}\hlst_evalskip{post skip}%
+% Ensuite, lire un /entier/ et stocker dans \hlst_colcnt le nombre de colonnes voulu
+	\afterassignment\hlist_ii\hlst_colcnt=
+}
+
+\def\hlist_ii{%
+% Incr\xE9menter le compteur d'imbrications
+	\global\advance\hlst_nest 1
+% Si le compteur de label correspondant \xE0 cette imbrication existe,
+	\hlst_ifcsname{c at hlist\romannumeral\hlst_nest}
+% l'initialiser sauf si la <cl\xE9> "resume" vaut "true"
+		{\ifboolKV[\hlstname]{resume}{}{\csname c at hlist\romannumeral\hlst_nest\endcsname\hlst_stop}}
+% S'il n'existe pas, le cr\xE9er (attention, \newcount est \outer)!
+		{\csname newcount\expandafter\endcsname\csname c at hlist\romannumeral\hlst_nest\endcsname}%
+	\hlst_ifnum{\hlst_colcnt<1 }
+% Envisager le cas o\xF9 le nombre de colonnes demand\xE9 est < 1 et message d'erreur
+		{\errmessage{Invalid column number "\the\hlst_colcnt", 1 column used instead}\def\hlst_nbcol{1}}
+% La macro \hlst_nbcol contient finalement le nombre de colonnes
+		{\edef\hlst_nbcol{\the\hlst_colcnt}}%
+% Si on doit afficher les labels
+	\ifboolKV[\hlstname]{show label}
+% Calculer combien de dimensions explicites sont demand\xE9es par l'utilisateur
+		{\edef\hlst_implicitdim{\the\numexpr
+			\if\string*\hlst_firstcarof{\useKV[\hlstname]{item offset}*}1\else0\fi+
+			\if\string*\hlst_firstcarof{\useKV[\hlstname]{label width}*}1\else0\fi+
+			\if\string*\hlst_firstcarof{\useKV[\hlstname]{label sep}*}1\else0\fi\relax
+			}%
+% Si ce nombre est au moins 1
+		\ifnum\hlst_implicitdim>0
+			\hlst_ifnum{\hlst_implicitdim>1 }
+% S'il est plus grand que 1, message d'erreur car parmi les 3 dimensions, _une_
+% seule peut \xEAtre implicite
+				{\errmessage{Too many implicit dimensions for labels, default settings used instead}%
+				\sethlist{item offset=1.5em,label sep=0.25em,label width=1.25em}%
+				}
+% Si ce nombre est \xE9gal \xE0 1, calculer la dimension implicite en fonction des 2
+% autres dimensions explicites...
+				{\if\string*\hlst_firstcarof{\useKV[\hlstname]{item offset}*}%
+					\edef\hlst_implicitdim{[\hlstname]{item offset=\the\dimexpr\useKV[\hlstname]{label sep}+\useKV[\hlstname]{label width}\relax}}%
+				\else\if\string*\hlst_firstcarof{\useKV[\hlstname]{label sep}*}%
+					\edef\hlst_implicitdim{[\hlstname]{label sep=\the\dimexpr\useKV[\hlstname]{item offset}-\useKV[\hlstname]{label width}\relax}}%
+				\else\if\string*\hlst_firstcarof{\useKV[\hlstname]{label width}*}%
+					\edef\hlst_implicitdim{[\hlstname]{label width=\the\dimexpr\useKV[\hlstname]{item offset}-\useKV[\hlstname]{label sep}\relax}}%
+				\fi\fi\fi
+% ...et la sauvegarder dans le <trousseau> "hlist" via la <cl\xE9> correspondante
+				\expandafter\setKV\hlst_implicitdim
+				}%
+		\fi
+% V\xE9rifier que "item offset" >= label sep + label width et dans le cas
+% contraire, avertir
+		\ifdim\useKV[\hlstname]{item offset}<\dimexpr\useKV[\hlstname]{label sep}+\useKV[\hlstname]{label width}\relax
+			\hlst_warning{incompatibles dimensions: item offset (\the\dimexpr\useKV[\hlstname]{item offset}\relax) < label sep (\the\dimexpr\useKV[\hlstname]{label sep}\relax) + label width (\the\dimexpr\useKV[\hlstname]{label width}\relax)}%
+		\fi
+		}
+		{}%
+% Si l'imbrication est 1, on est donc dans la hlist de plus haut niveau
+	\ifnum\hlst_nest=1 % si liste m\xE8re
+% R\xE9gler la parindent \xE0 la <valeur> de la <cl\xE9> "left margin"
+		\parindent\dimexpr\useKV[\hlstname]{left margin}\relax
+% et ins\xE9rer le ressort "pre skip"
+		\ifhmode\par\fi\vskip\useKV[\hlstname]{pre skip}%
+	\else
+% Sinon, pas d'indentation pour les listes imbriqu\xE9es
+		\parindent0pt
+	\fi
+% Sauvegarder la largeur actuelle horizontale
+	\hlst_textwidth=\dimexpr\ifdefined\linewidth\linewidth\else\hsize\fi-\parindent\relax
+% Informations de d\xE9bogage sur les dimensions des composants
+	\ifhlstdebugmode
+		\message{*** hlist mode debug : largeur = \the\hlst_textwidth}%
+		\hlst_debugdim=0pt \def\hlst_debuglineno{0}%
+		\edef\hlst_debuglineno{\number\numexpr\hlst_debuglineno+1}%
+		\def\debuginfoB{\space\space Ligne d'items no \hlst_debuglineno\space:^^J}%
+	\fi
+	\leavevmode
+% Initialiser le compteur de colonnes \hlst_colcnt \xE0 0
+	\hlst_colcnt0
+% Sauvegarder dans \hlst_colsep la <valeur> de la <cl\xE9> "col sep"
+	\hlst_colsep\useKV[\hlstname]{col sep}\relax
+% Au d\xE9but de la liste : pas de multicolonne
+	\def\hlst_askedmulticol{1}%
+% Calculer la largeur de chaque <item> (=<label>+<texte>) s'il est non multicol
+	\edef\hlst_colwidth{\the\dimexpr(\hlst_textwidth-\useKV[\hlstname]{col sep}*(\hlst_nbcol-1))/(\hlst_nbcol)}%
+% Collecter dans une boite tout ce qui se trouve jusqu'au premier \hitem
+% (neutraliser l'espace, le tab et le retour charriot)
+	\setbox0\hbox\bgroup\catcode`\^^I 9 \catcode`\^^M 9 \catcode32 9
+}
+
+% Voici maintenant la macro qui ferme l'environnement. Elle aussi peut \xEAtre
+% \xE0 la TeX par \endhlist ou par \end{hlist} comme on le fait en LaTeX.
+\def\endhlist{%
+% En premier lieu, il faut ex\xE9cuter la routine qui ach\xE8ve un \hitem (fermeture
+% des boites, calcul de la \vtop la plus profonde et de son \prevdepth, etc)
+	\hlst_enditem
+% D\xE9bogage
+	\ifhlstdebugmode
+		\message{\debuginfoB\space\space\space\space TOTAL = \the\hlst_debugdim/\the\hlst_textwidth^^J
+			\space\space\space\space Depassement = \number\numexpr\hlst_debugdim-\hlst_textwidth\relax sp^^J
+			*** Fin de la liste^^J^^J}%
+		\ifnum\numexpr\hlst_debugdim-\hlst_textwidth\relax>4 \errmessage{Depassement !}\fi
+	\fi
+% Si la liste est non imbriqu\xE9e, ins\xE9rer le ressort "post skip"
+	\ifnum\hlst_nest=1 \vskip\useKV[\hlstname]{post skip}\fi
+% D\xE9cr\xE9menter le compteur d'imbrications
+	\global\advance\hlst_nest -1
+% Fermer le groupe semi simple ouvert avec \hlist et manger les espaces
+	\endgroup
+	\ignorespaces
+}
+
+% Voici \xE0 pr\xE9sent des macros traduisant un <nombre> en un <label>.
+% La premi\xE8re, qui est appel\xE9e par toutes les autres, converti le <nombre> en un
+% nombre arabe.
+\def\hlst_arabic#1{%
+% Si le compteur (au mod\xE8le latex, c'est-\xE0-dire "\c@<nom>") existe
+	\hlst_ifcsname{c@\detokenize{#1}}
+% Donner le nombre arabe avec \number, sinon, message d'erreur
+		{\number\csname c@\detokenize{#1}\endcsname}
+		{\errmessage{Unkonwn counter named "\detokenize{#1}"}}%
+}
+% Ensuite, ces macros convertissent un <nombre> en nombre romain ou en lettre,
+% avec choix de la casse
+\def\hlst_roman#1{\romannumeral\hlst_arabic{#1}\relax}
+\def\hlst_Roman#1{\uppercase\expandafter\expandafter\expandafter{\hlst_roman{#1}}}
+\def\hlst_alpha#1{\ifcase\hlst_arabic{#1}\relax\or a\or b\or c\or d\or e\or f\or g\or h\or i\or j\or
+	k\or l\or m\or n\or o\or p\or q\or r\or s\or t\or u\or v\or w\or x\or
+	y\or z\else\errmessage{No letter for a value of \number\numexpr#1\relax}\fi}
+\def\hlst_Alpha#1{\ifcase\hlst_arabic{#1}\relax\or A\or B\or C\or D\or E\or F\or G\or H\or I\or J\or
+	K\or L\or M\or N\or O\or P\or Q\or R\or S\or T\or U\or V\or W\or X\or
+	Y\or Z\else\errmessage{No letter for a value of \number\numexpr#1\relax}\fi}
+
+% Voici maintenant la macro \hitem, qui marque le d\xE9but d'un nouvel <item>
+% Tout d'abord, on s'int\xE9resse \xE0 ce qui suit, c'est-\xE0-dire aux argument
+% optionnels.
+% On teste si elle est suivie d'une "*" (qui commande un retour \xE0 la ligne pour
+% cet item) et on transmet le token 0 ou 1 selon l'issue du test
+\def\hitem{\hlst_ifstar{\hlst_hitem_grabopts1}{\hlst_hitem_grabopts0}}
+
+% Ensuite, on teste si elle est suivie de ">" (qui commande un multicol maximal
+% pour cet item) et on transmet le token 0 ou 1  selon l'issue du test
+\def\hlst_hitem_grabopts#1{\hlst_ifnxttok>{\hlst_first{\hlst_hitem_grabopts_i#11}}{\hlst_hitem_grabopts_i#10}}
+
+% La macro \hlst_hitem_grabopts_i re\xE7oit les 2 premiers arguments concernant la
+% pr\xE9sence ou pas de "*" et de ">" ; ces 2 tokens seront transmis de proche en
+% proche jusqu'\xE0 la la macro \hitem_ii qui est la macro qui fait le boulot.
+\def\hlst_hitem_grabopts_i#1#2{%
+% On teste si une parenth\xE8se (pour demander un multicol) est le prochain token
+	\hlst_ifnxttok(
+% Si oui, aller lire ce qui est \xE0 l'int\xE9rieur avec \hlst_hitem_grabopts_ii
+		{\hlst_hitem_grabopts_ii#1#2}
+% Sinon, on teste si un crochet (pour forcer un label pour cet item) est le
+% prochain token 
+		{\hlst_ifnxttok[
+% Si oui, aller lire ce qu'il contient
+			{\hlst_hitem_grabopts_iii#1#2}
+% Si ni parenth\xE8se ni crochet, transmettre "()[<quark>]" \xE0 \hitem_i
+			{\hitem_i#1#2()[\hlst_quark]}%
+		}%
+}
+
+% Ici, une parenth\xE8se a \xE9t\xE9 lue en premier, tester si la suite est un crochet
+\def\hlst_hitem_grabopts_ii#1#2(#3){\hlst_ifnxttok[{\hitem_i#1#2(#3)}{\hitem_i#1#2(#3)[\hlst_quark]}}
+
+% Ici, un crochet a \xE9t\xE9 lu en premier, tester si la suite est une parenth\xE8se
+\def\hlst_hitem_grabopts_iii#1#2[#3]{\hlst_ifnxttok({\hlst_hitem_grabopts_iv#1#2[#3]}{\hitem_i#1#2()[#3]}}
+
+% Au cas o\xF9 le crochet est lu en premier, remettre les argument optionnels dans
+% le bon ordre : parenth\xE8se _puis_ crochet
+\def\hlst_hitem_grabopts_iv#1#2[#3](#4){\hitem_i#1#2(#4)[#3]}
+
+% Cette macro mange tous les espaces _explicites_ qui se trouvent \xE9ventuellement
+% apr\xE8s les arguments optionnels
+% Pour r\xE9sumer, \hitem peut \xEAtre suivi de "*" _puis_ ">" (ordre impos\xE9)
+% Ensuite on peut trouver (<multicol>) et/ou [<label>] dans n'importe quel ordre
+\def\hitem_i#1#2(#3)[#4]{%
+	\hlst_ifnxttok\hlst_sptok
+		{\def\__temp{\hitem_i#1#2(#3)[#4]}\expandafter\__temp\hlst_gobspace}
+		{\hitem_ii#1#2(#3)[#4]}%
+}
+
+% Voici la /vraie/ macro qui va faire le boulot et ses arguments :
+%     - #1 et #2 valent 0 ou 1 selon la pr\xE9sence de "*" et ">"
+%     - #3 est le nombre de multicolonnes demand\xE9 (si vide, comprendre 1)
+%     - #4 est le label demand\xE9 (si <quark>, comprendre absence d'argument
+%       optionnel)
+\def\hitem_ii#1#2(#3)[#4]{%
+% si ce n'est _pas_ le 1er de la liste
+	\hlst_ifnum{\hlst_colcnt>0 }
+% Ex\xE9cuter la routine de fin d'item
+		{\hlst_enditem
+		}
+% Sinon, fermer la boite ouverte par \hlist
+		{\egroup
+% Si toutes ses dimensions ne sont pas nulles, message d'erreur
+		\ifnum0\ifnum\wd0=0 1\fi\ifnum\dp0=0 1\fi\ifnum\ht0=0 1\fi<111
+			\errmessage{\string\hitem\space expected}%
+		\fi
+% comme il s'agit du 1er item de la liste, initialiser les profondeurs
+		\hlst_maxdepth0pt \hlst_maxprevdepth0pt
+		}%
+% Incr\xE9menter le compteur de label associ\xE9 \xE0 cette imbrication
+	\hlst_argcsname\global\advance{c at hlist\romannumeral\hlst_nest} 1
+% Incr\xE9menter le compteur de colonnes du nombre de colonnes saut\xE9es pr\xE9c\xE9demment
+	\advance\hlst_colcnt\hlst_askedmulticol\relax
+% Si "*", mettre le compteur de colonnes au maximum pour forcer retour \xE0 la
+% ligne
+	\ifnum#1=1 \hlst_colcnt\numexpr\hlst_nbcol+1\relax\fi
+	\ifnum\hlst_colcnt>1
+% Si ce n'est pas le 1er item de la liste
+		\hlst_ifnum{\hlst_colcnt=\numexpr\hlst_nbcol+1\relax}
+% Si le nombre d'item sur la ligne a atteint son maximum,
+% former le paragraphe, sauter l'espace verticale "item sep"
+			{\par\vskip\useKV[\hlstname]{item sep}\relax
+% D\xE9bogage
+			\ifhlstdebugmode
+				\message{\debuginfoB\space\space\space\space TOTAL = \the\hlst_debugdim/\the\hlst_textwidth^^J
+					\space\space\space\space Depassement = \number\numexpr\hlst_debugdim-\hlst_textwidth\relax sp^^J}%
+				\ifnum\numexpr\hlst_debugdim-\hlst_textwidth\relax>\hlst_colcnt \errmessage{Depassement !}\fi% d\xE9passement si plus que <nb colonnes>sp
+				\edef\hlst_debuglineno{\number\numexpr\hlst_debuglineno+1}%
+				\def\debuginfoB{\space\space Ligne d'items no \hlst_debuglineno\space:^^J}%
+				\hlst_debugdim0pt
+			\fi
+% Tromper TeX : ne pas tenir compte des profondeurs des \vtop, mais utiliser la
+% profondeur du dernier \xE9l\xE9ment de la \vtop la plus profonde
+			\prevdepth\hlst_maxprevdepth
+% Passer en mode horizontal, initialiser les variables pour commencer une
+% nouvelle ligne d'items
+			\leavevmode
+			\hlst_maxdepth0pt \hlst_maxprevdepth0pt \hlst_colcnt=1
+			}
+% S'il reste des items \xE0 loger sur la ligne, ins\xE9rer espace inter-item
+			{\kern\hlst_colsep\relax
+% D\xE9bogage
+			\ifhlstdebugmode
+				\edef\debuginfoB{\debuginfoB\space\space\space\space colsep (\the\hlst_colsep)^^J}%
+				\advance\hlst_debugdim\hlst_colsep
+			\fi
+			}%
+	\fi
+% Calculer le nombre de multicolonne pour l'item courant
+	\edef\hlst_askedmulticol{\number\numexpr
+		\hlst_ifnum{#2=1 }
+% Si ">", prendre le maximum disponible
+			{\hlst_nbcol+1-\hlst_colcnt}
+% Sinon, prendre l'argument #3 (s'il est vide ce qui correspond \xE0 une absence
+% d'argument optionnel, prendre 1)
+			{\hlst_ifempty{#3}{1}{(#3)}}%
+		\relax}%
+	\hlst_ifnum{\hlst_askedmulticol<1 }
+% Si l'utilisateur est un joueur ou un abruti !
+		{\errmessage{Invalid multicol "(#3)", "(1)" used instead}\def\hlst_askedmulticol{1}}
+% Si trop de multicol demand\xE9
+		{\hlst_ifnum{\numexpr\hlst_colcnt+\hlst_askedmulticol-1\relax>\hlst_nbcol\relax}
+% Prendre le maximum et avertir
+			{\edef\hlst_askedmulticol{\number\numexpr\hlst_nbcol+1-\hlst_colcnt\relax}%
+			\hlst_warning{too much multicol (#3) asked, (\hlst_askedmulticol) used instead}}%
+			{}%
+		}%
+% Calculer la largeur de la \hbox contenant l'<items>
+	\hlst_itemboxwidth\dimexpr\hlst_colwidth*\hlst_askedmulticol+\useKV[\hlstname]{col sep}*(\hlst_askedmulticol-1)\relax
+% D\xE9finir la boite  contenant <label> + <texte>
+	\setbox\hlst_currenthbox\hbox to \hlst_itemboxwidth\bgroup
+% Initialiser le d\xE9bordement du <label>
+		\xdef\hlst_labeloverwidth{0pt}%
+% Si on affiche les labels ET si #4 n'est pas vide (un label explicitement
+% demand\xE9 "[]" doit \xEAtre compris comme "ne pas afficher de label du tout pour
+% cet item").
+		\hlst_ifnum{\ifboolKV[\hlstname]{show label}10\hlst_ifempty{#4}01=11 }%
+% Ouvrir la boite des labels
+			{\hbox to \useKV[\hlstname]{item offset}{%
+% Pousser \xE0 droite au cas o\xF9 "item offset">"label sep"+"label width"
+				\hfill
+% Ouvrir la \hbox contenant le label et forcer sa dimension horizontale \xE0 la
+% <valeur> "label width"
+				\hbox to \useKV[\hlstname]{label width}{%
+% Trouver la premi\xE8re lettre de la <valeur> "label align", sachant qu'une
+% consigne vide sera comprise comme un alignement "l"
+					\edef\hlst_align{\hlst_firstcarof{\useKV[\hlstname]{label align}l}}%
+% Pousser \xE0 droite si cette lettre est "r" ou "c"
+					\if      \string r\hlst_align\hfill
+					\else\if \string c\hlst_align\hfill
+					\fi\fi
+% Localement, (re)d\xE9finir les macros de formatage pour le label afin qu'elles
+% deviennent accessible \xE0 l'utilisateur
+					\let\arabic\hlst_arabic\let\roman\hlst_roman\let\Roman\hlst_Roman\let\alpha\hlst_alpha\let\Alpha\hlst_Alpha
+% Mettre dans la boite \hlst_labelbox tout ce qui concerne le label (les codes
+% avant/apr\xE8s et le label format\xE9 selon la <valeur> "label")
+					\setbox\hlst_labelbox\hbox{%
+						\useKV[\hlstname]{pre label}%
+						\hlst_ifx{\hlst_quark#4}{\useKV[\hlstname]{label}}{#4}%
+						\useKV[\hlstname]{post label}%
+					}%
+% Mesurer le d\xE9passement (sign\xE9) du label par rapport \xE0 sa dimension autoris\xE9e
+% "label width"
+					\xdef\hlst_labeloverwidth{\the\dimexpr\wd\hlst_labelbox-\useKV[\hlstname]{label width}\relax}%
+% Afficher la boite contenant le label avec ou sans cadre
+					\ifboolKV[\hlstname]{show frame}
+						{\fboxrule.4pt  \fboxsep-\fboxrule \fbox{\box\hlst_labelbox}}
+						{\box\hlst_labelbox}%
+% Si on g\xE8re le d\xE9passement de largeur
+					\ifboolKV[\hlstname]{autoindent}
+% Mettre le ressort \hss pour neutraliser l'avertissement de "overful hbox"
+						{\ifdim\hlst_labeloverwidth>0pt \hss\fi}
+						{}%
+% Pousser \xE0 gauche si l'alignement demand\xE9 est "l" ou "c"
+					\if      \string l\hlst_align\hfill
+					\else\if \string c\hlst_align\hfill
+					\fi\fi
+					}%
+% S\xE9paration horizontale entre boite de <label> et boite de <texte>
+				\kern\useKV[\hlstname]{label sep}\relax
+				}%
+% Diminuer la largeur disponible de la largeur de la boite de <label>, soit la
+% <valeur> "item offset"
+			\advance\hlst_itemboxwidth-\useKV[\hlstname]{item offset}\relax
+			}
+			{}%
+% Maintenant que la boite du <label> est affich\xE9e (ou pas si c'est le choix de
+% l'utilisateur), il faut passer \xE0 la boite qui contient le <texte> du label.
+% Bien entendu, on utilise des accolades _implicites_ puisque la fin de la boite
+% ne se situe pas dans cette macro.
+% Cette boite sera une \vtop...
+		\setbox\hlst_textbox\vtop\bgroup
+% ...de largeur \hlst_itemboxwidth...
+			\hsize\hlst_itemboxwidth
+% ...que l'on copie vers \linewidth pour les utilisateurs de LaTeX, afin que
+% cette macro garde sa coh\xE9rence
+			\ifdefined\linewidth\linewidth\hlst_itemboxwidth\fi\relax
+% R\xE9glage du parindent \xE0 "list parindent"
+			\parindent\useKV[\hlstname]{list parindent}\relax
+% Passage en mode H et pas d'indentation pour le 1er paragraphe si on
+% affiche les labels
+			\ifboolKV[\hlstname]{show label}\noindent\indent
+% Apr\xE8s \xEAtre pass\xE9 en mode horizontal, on ins\xE8re l'indentation suppl\xE9mentaire en
+% cas de d\xE9bordement de la largeur du <label>
+			\ifboolKV[\hlstname]{autoindent}
+				{\ifdim\hlst_labeloverwidth>0pt \kern\hlst_labeloverwidth\fi}
+				{}%
+% Puis, on ex\xE9cute le code ins\xE9r\xE9 juste avant le <texte> de l'item
+			\useKV[\hlstname]{pre item}%
+}
+%            __________________________________________
+%           |                                          |
+%           |   <texte> de l'item entre ces 2 macros   |
+%           |__________________________________________|
+%
+% Une fois que le <texte> de l'item est /librement/ compos\xE9 (librement, cela
+% autorise les changements de catcode, le "verbatim", etc), la macro de fin du
+% <texte> est ex\xE9cut\xE9e.
+\def\hlst_enditem{%
+% D'abord, ex\xE9cuter le code de fin d'item
+			\useKV[\hlstname]{post item}%
+% Ensuite, former le paragraphe pour acc\xE9der \xE0 \prevdepth
+			\par
+% et d\xE9velopper "\the\prevdepth" _avant_ de fermer la \vtop et la \hbox (le
+% double \egroup) pour que cette dimension soit le texte de remplacement de
+% \hlst_currentdepth
+			\hlst_exparg{%
+% fermeture de la \vtop
+			\egroup
+			\ifboolKV[\hlstname]{show frame}{\fboxrule.4pt  \fboxsep-.4pt \fbox{\box\hlst_textbox}}{\box\hlst_textbox}%
+		\egroup
+		\def\hlst_currentdepth}{\the\prevdepth}%
+% Si la profondeur de la \vtop qui vient d?\xEAtre cr\xE9\xE9 est sup\xE9rieure \xE0 toutes
+% celles rencontr\xE9es dans cette ligne,
+		\ifdim\dp\hlst_currenthbox>\hlst_maxdepth
+% retenir la valeur de \prevdepth
+			\hlst_maxprevdepth\hlst_currentdepth\relax
+% et mettre \xE0 jour la profondeur maximale des \vtop de la ligne en cours.
+% Le but de cette manoeuvre est de trouver la profondeur du dernier \xE9l\xE9ment de
+% la plus profonde \vtop de la ligne en cours.
+% Cette valeur de \prevdepth sera utilis\xE9e au prochain \par pour tromper
+% TeX qui sinon, prendrait en compte la /grande/ profondeur des \vtop, menant \xE0
+% des lignes trop proches.
+			\hlst_maxdepth\dp\hlst_currenthbox
+		\fi
+% Une fois tout ceci fait, afficher la boite contenant le <texte>
+	\box\hlst_currenthbox
+% D\xE9bogage
+	\ifhlstdebugmode
+		\edef\debuginfoB{\debuginfoB\space\space\space\space item (\the\hlst_itemboxwidth)^^J}%
+		\advance\hlst_debugdim\hlst_itemboxwidth
+	\fi
+}%
+
+\hlst_restorecatcode
+% Cr\xE9ation, si n\xE9cessaire d'une macro \fbox, \xE9quivalente \xE0 celle de LaTeX
+\unless\ifdefined\fbox
+% Prendre les r\xE9glages par d\xE9faut identiques \xE0 ceux de laTeX
+	\newdimen\fboxrule \newdimen\fboxsep \fboxrule=.4pt \fboxsep=3pt
+% Pour les explications, voir codes 251 \`a 254 de ce fichier :
+%      http://progtex.fr/wp-content/uploads/2014/09/code.txt
+% et pages 271 \`a 274 de "Apprendre \xE0 programmer en TeX"
+	\def\fbox#1{%
+		\hbox{%
+			\vrule width\fboxrule
+			\vtop{%
+				\vbox{\hrule height\fboxrule \kern\fboxsep \hbox{\kern\fboxsep#1\kern\fboxsep}}%
+				\kern\fboxsep \hrule height\fboxrule
+			}\vrule width\fboxrule
+		}%
+	}
+\fi
+
+% Les r\xE9glages par d\xE9faut (modifiables avec \setdefaulthlist)
+\setKVdefault[\hlstname]{
+	pre skip      = \medskipamount,% ressort vertical avant la liste m\xE8re
+	post skip     = \medskipamount,% ressort vertical apr\xE8s la liste m\xE8re
+	left margin   = 0pt,% d\xE9calage \xE0 droite des premi\xE8res boites de chaque ligne de la liste m\xE8re
+	col sep       = 2.5em,% espace de s\xE9paration entre colonnes
+	item offset   = 1.75em,% distance entre bord gauche du label et bord gauche de l'item
+	label sep     = 0.25em,% recul du label
+	label width   = *,% largeur du label automatique (=1.75-0.25 em) car "item ofset" = "label width" + "label sep"
+	label align   = left,% consigne d'alignement
+	show label    = true,% afficher les num\xE9rotations et tenir compte de leur largeur
+	pre label     = \bf,% code ex\xE9cut\xE9 au d\xE9but de la boite contenant le label
+	label         = \arabic{hlisti}.,% code du label
+	post label    = {},% code ex\xE9cut\xE9 apr\xE8s le label
+	item sep      = 0pt,% espace vertical suppl\xE9mentaire entre lignes d'items
+	list parindent= 0pt,% indentation des paragraphes des items (sauf le 1er)
+	pre item      = {},% code ex\xE9cut\xE9 avant le texte de l'item
+	post item     = {},% code ex\xE9cut\xE9 apr\xE8s le texte de l'item
+	resume        = false,% pas de reprise de num\xE9rotation
+	autoindent    = false,% pas d'indentation auto en cas de label trop large
+	show frame    = false% ne pas afficher les cadres autour des boites <label> et <texte>
+}
+
+% La macro \inithlist remet toutes les <cl\xE9s> \xE0 leur <valeur> par d\xE9faut
+\expandafter\let\expandafter\inithlist\csname hlst_[\hlstname]\endcsname
+
+% Macros permettant de modifier les <valeurs> des <cl\xE9s> de hlist...
+\def\sethlist#{\setKV[\hlstname]}
+
+% ... ainsi que les <valeurs> par d\xE9faut
+\def\setdefaulthlist#{\setKVdefault[\hlstname]}
+\endinput
+
+Versions :
+ _____________________________________________________________________________
+| Version |    Date    | Changements                                          |
+|-----------------------------------------------------------------------------|
+|   0.1   | 01/05/2017 | Premi\xE8re version                                     |
+|-----------------------------------------------------------------------------|


Property changes on: trunk/Master/texmf-dist/tex/generic/hlist/hlist.tex
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/tlpkg/bin/tlpkg-ctan-check
===================================================================
--- trunk/Master/tlpkg/bin/tlpkg-ctan-check	2017-05-02 21:42:35 UTC (rev 44157)
+++ trunk/Master/tlpkg/bin/tlpkg-ctan-check	2017-05-02 21:44:16 UTC (rev 44158)
@@ -313,7 +313,7 @@
     hc he-she hep hepnames
     hepparticles hepthesis hepunits here heuristica hexgame
     hf-tikz hfbright hfoldsty
-    hhtensor histogr historische-zeitschrift hitec hletter
+    hhtensor histogr historische-zeitschrift hitec hletter hlist
     hobby hobete hook-pre-commit-pkg horoscop
     hpsdiss hrefhide hrlatex hustthesis hvfloat hvindex
     hypdvips hyper hypernat hyperref hyperxmp hyph-utf8 hyphen-base 

Modified: trunk/Master/tlpkg/libexec/ctan2tds
===================================================================
--- trunk/Master/tlpkg/libexec/ctan2tds	2017-05-02 21:42:35 UTC (rev 44157)
+++ trunk/Master/tlpkg/libexec/ctan2tds	2017-05-02 21:44:16 UTC (rev 44158)
@@ -1616,6 +1616,7 @@
  'hanoi',       'hanoi\.tex',           
  'harvmac',     'mac\.tex',
  'hc',          '\.hld|' . $standardtex,
+ 'hlist',	'hlist\.tex|' . $standardtex,
  'hobby',       'code\.tex|' . $standardtex,
  'hrefhide',    '\.sty|[^c]\.cfg',      # omit ltxdoc.cfg, would be system-wide
  'hyper',       '^[^d].*\.sty|\.hyp',   # not defpattern.sty

Modified: trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc
===================================================================
--- trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc	2017-05-02 21:42:35 UTC (rev 44157)
+++ trunk/Master/tlpkg/tlpsrc/collection-genericextra.tlpsrc	2017-05-02 21:44:16 UTC (rev 44158)
@@ -28,6 +28,7 @@
 depend gates
 depend gobble
 depend gtl
+depend hlist
 depend ifetex
 depend iftex
 depend insbox

Added: trunk/Master/tlpkg/tlpsrc/hlist.tlpsrc
===================================================================


More information about the tex-live-commits mailing list