% !TeX encoding = ISO-8859-1
% Ceci est la documentation du package "hlist"
%
% Fichier compilé avec pdflatex
\documentclass[french,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=«,fg=»}
\def\eTeX{\hbox{$\varepsilon$-\TeX}}
\def\HLIST{\texttt{\hlstname}\xspace}
\makeatletter
\def\code{\expandafter\code@i\string}
\def\code@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@ii##1#1{##1\par\medbreak\endgroup}%
\code@ii
}
\long\def\grab@toks#1\relax{\gdef\right@content{#1}}
\newcommand\disable@lig[1]{%
\catcode`#1\active
\begingroup
\lccode`\~`#1\relax
\lowercase{\endgroup\def~{\leavevmode\kern\z@\string#1}}%
}
\newcommand\make@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@car@active\ { {}}%
\make@car@active\^^M{\par\leavevmode}%
\make@car@active\^^I{\space\space}%
\make@car@active\,{\leavevmode\kern\z@\string,}%
\make@car@active\-{\leavevmode\kern\z@\string-}%
\make@car@active\>{\leavevmode\kern\z@\string>}%
\make@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@code{#1}%
\endgroup
\begingroup
\fboxrule0.4pt \fboxsep=5pt
\let\breakboxparindent\z@
\def\bkvz@top{\hrule\@height\fboxrule}%
\def\bkvz@bottom{\hrule\@height\fboxrule}%
\let\bkvz@before@breakbox\relax
\def\bkvz@set@linewidth{\advance\linewidth\dimexpr-2\fboxrule-2\fboxsep\relax}%
\def\bkvz@left{\vrule\@width\fboxrule\kern\fboxsep}%
\def\bkvz@right{\kern\fboxsep\vrule\@width\fboxrule}%
\breakbox
\kern.5ex\relax
\begingroup
\ttfamily\small\the@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@eol@error \let\do\@makeother \dospecials
\verbatim@font\@noligs
\catcode`\<13 \catcode`\>13 \def<{\begingroup$\langle$\itshape}\def>{$\rangle$\endgroup}%
\@ifstar\@sverb\@verb}
\endgroup
\def\longfrhlstdate@i#1/#2/#3\@nil{\number#3\relax\space \ifcase#2 \or janvier\or février\or mars\or avril\or mai\or juin\or juillet\or aout\or septembre\or octobre\or novembre\or décembre\fi\space#1}
\edef\longfrhlstdate{\expandafter\longfrhlstdate@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éfaut} : {\color{teal}\ttfamily
\skv_eearg\skv_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}\par
\texttt{unbonpetit@netc.fr}\par
\endgroup
\vskip2cm
\leftskip=.2\linewidth \rightskip=.2\linewidth \small
Cette petite extension sans prétention permet de créer des listes horizontale d'items; s'ils s'étendent sur plus d'une ligne, ils seront alignés les uns au-dessous des autres, en colonnes de largeurs égales, un peu à la manière d'un tableau.
\end{titlepage}
\parindent1.5em
\section{Comment ça marche}
Au tout début, j'avais écrit ce code pour présenter des questions courtes \emph{en ligne}, comme on peut le voir parfois dans les manuels scolaires, pour une économie de place verticale dans mes feuilles d'exercices ou de contrôles\footnote{On ne trouve pas ce genre de questions dans mes contrôles !} :
\exemple/Qu'est ce que \TeX ?
\begin{hlist}3
\hitem Une marque \emph{distributeur} de vêtements que l'on trouve dans l'enseigne Carrefour;
\hitem Une unité de mesure de la finesse de filaments;
\hitem Un logiciel de composition créé par Donald \bsc{Knuth};
\hitem Le nom \emph{de scène} 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 était bien plus basique que celui de cette extension; depuis, il s'est complexifié, mais les méthodes qu'il mettait en \oe uvre sont restées les mêmes. Or, j'avais programmé les listes horizontales en utilisant des \emph{boites} de \TeX{} et non pas des \emph{alignements}. Évidemment, il semble plus naturel de faire appel aux alignements de \TeX{} pour réaliser une telle tâche, mais leur mise en \oe uvre est plus délicate que celle des boites et j'ai été partisan du moindre effort (et je le suis toujours).
Récemment\footnote{\texttt{http://forum.mathematex.net/latex-f6/macros-a-parametres-indefini-t16733.html\char`\#p155215}}, alors que la finalisation du code avait déjà commencée, j'ai découvert que l'extension \texttt{Tasks} offrait \emph{presque} les mêmes fonctionnalités que \HLIST. Comme \emph{presque} n'est pas synonyme d'\emph{exactement}, je me suis finalement décidé à publier cette extension. Il n'est bien entendu pas dans mon intention de dénigrer le travail de C. \bsc{Niederberger} et encore moins de considérer \HLIST comme meilleure que \texttt{Tasks}, mais au niveau des principales différences entre \texttt{Tasks} et \HLIST, on peut citer :
\begin{itemize}
\item \HLIST peut être utilisé avec \TeX{} (\eTeX en réalité) alors que \texttt{Tasks} requiert \LaTeX;
\item les listes de \HLIST peuvent être imbriquées tandis que celles de \texttt{Tasks} ne le peuvent pas;
\item les changements de catcode (et donc le « verbatim ») 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} (écrit en \LaTeX3) et, contrairement à ce dernier, \HLIST ne fait appel à aucune extension tierce\footnote{Vu les facilités prétendument offertes par \LaTeX3 et les extensions chargées par \texttt{Tasks}, je suis resté médusé face à la longueur du code de \texttt{Tasks}. Je ne m'explique pas une telle différence avec la taille de \HLIST, alors que \HLIST embarque son propre système de clés/valeurs, ses macros de développement, etc. Avant de me lancer dans une critique sans ménagement de \LaTeX3 et comme j'ai un fort soupçon que quelque chose m'échappe là-dedans, je serais très 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çais. Cesser de docilement se plier à cette prétendue nécessité de fournir une documentation en anglais, fût-ce pour des extensions de \TeX/\LaTeX, compte \emph{beaucoup} à 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éfaut : une coupure de page ne peut pas avoir lieu au sein d'un item qui s'étendrait sur plusieurs lignes.
\section{Syntaxe}
L'environnement \HLIST peut être appelé de ces deux manières:
\begin{itemize}
\item façon \LaTeX: \begin{tabular}[t]{l}\relax\verb|\begin{hlist}[]|\\\hskip2em \ttfamily contenu de l'environnement\\\verb|\end{hlist}|\end{tabular}
\item façon \TeX: \begin{tabular}[t]{l}\relax\verb|\hlist[]|\\\hskip2em \ttfamily contenu de l'environnement\\\verb|\endhlist|\end{tabular}
\end{itemize}
Les options, décrites plus loin, seront celles qui s'appliquent à cette liste et le \verb|| est le nombre de colonnes demandées.
L'environnement \HLIST doit commencer par un item, c'est-à-dire par la macro \verb|\hitem|, éventuellement 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'étendre sur toutes les colonnes restant disponibles sur la ligne en cours ;
\item l'argument entre crochets "\verb|[