diff options
author | Karl Berry <karl@freefriends.org> | 2017-08-08 20:38:28 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2017-08-08 20:38:28 +0000 |
commit | 3a8846b896e8f1b37294b5cd54016bf3b6f58490 (patch) | |
tree | fa27d759bb111cc63512b77a7c6aad1b6e3dbeb1 | |
parent | 5be3c625def41bd2ce4fb607f5b262fd56f89c49 (diff) |
hlist (8aug17)
git-svn-id: svn://tug.org/texlive/trunk@44983 c570f23f-e606-0410-a88d-b1316a301751
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/README | 6 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf | bin | 391818 -> 379214 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/hlist-fr.tex | 11 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/htest-latex.pdf | bin | 106461 -> 0 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/htest-latex.tex | 162 | ||||
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/htest-tex.pdf | bin | 78134 -> 0 bytes | |||
-rw-r--r-- | Master/texmf-dist/doc/generic/hlist/htest-tex.tex | 173 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/hlist/hlist.sty | 3 | ||||
-rw-r--r-- | Master/texmf-dist/tex/generic/hlist/hlist.tex | 257 |
9 files changed, 29 insertions, 583 deletions
diff --git a/Master/texmf-dist/doc/generic/hlist/README b/Master/texmf-dist/doc/generic/hlist/README index 2d5817c0fba..ea0b68508fe 100644 --- a/Master/texmf-dist/doc/generic/hlist/README +++ b/Master/texmf-dist/doc/generic/hlist/README @@ -3,14 +3,14 @@ ___________________________________ L'extension hlist - v0.1 + v0.11 - 1er mai 2017 + 8 aout 2017 ___________________________________ Authors : Christian Tellechea Maintainer: Christian Tellechea -E-mail : unbonpetit@openmailbox.org (CT) +E-mail : unbonpetit@netc.fr (CT) Commentaires, signalements de bugs et suggestions bienvenus Licence : Released under the LaTeX Project Public License v1.3c or diff --git a/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf b/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf Binary files differindex f7e8a0923ce..5501858df47 100644 --- a/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf +++ b/Master/texmf-dist/doc/generic/hlist/hlist-fr.pdf diff --git a/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex b/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex index df32418a419..c4b931f8425 100644 --- a/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex +++ b/Master/texmf-dist/doc/generic/hlist/hlist-fr.tex @@ -2,7 +2,7 @@ % Ceci est la documentation du package "hlist" % % Fichier compilé avec pdflatex -\documentclass[frenchb,a4paper,10pt]{article} +\documentclass[french,a4paper,10pt]{article} \usepackage[latin1]{inputenc} \usepackage[T1]{fontenc} \usepackage[margin=2cm]{geometry} @@ -112,7 +112,7 @@ \color{teal}\bfseries\ttfamily \detokenize{#1}=$\langle$\detokenize{#2}$\rangle$\hss}\kern2.5em (\textit{Défaut} : {\color{teal}\ttfamily - \hlst_eearg\hlst_ifempty{\useKV[hlist]{#1}} + \skv_eearg\skv_ifempty{\useKV[hlist]{#1}} {\detokenize{{}}} {\detokenize\expandafter\expandafter\expandafter{\useKV[hlist]{#1}}}})% \par\nobreak @@ -131,7 +131,8 @@ \smallbreak \longfrhlstdate \vskip1.5cm - Christian \bsc{Tellechea}\footnote{\texttt{unbonpetit@openmailbox.org}}\par + Christian \bsc{Tellechea}\par + \texttt{unbonpetit@netc.fr}\par \endgroup \vskip2cm \leftskip=.2\linewidth \rightskip=.2\linewidth \small @@ -158,8 +159,8 @@ Récemment\footnote{\texttt{http://forum.mathematex.net/latex-f6/macros-a-paramet \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 un telle différence entre la taille des deux codes 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, fusse pour des extensions de \TeX/\LaTeX, compte \emph{beaucoup} à mes yeux. + \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. diff --git a/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf b/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf Binary files differdeleted file mode 100644 index 8af038836ac..00000000000 --- a/Master/texmf-dist/doc/generic/hlist/htest-latex.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/generic/hlist/htest-latex.tex b/Master/texmf-dist/doc/generic/hlist/htest-latex.tex deleted file mode 100644 index 97fdc26984a..00000000000 --- a/Master/texmf-dist/doc/generic/hlist/htest-latex.tex +++ /dev/null @@ -1,162 +0,0 @@ -% !TeX encoding = ISO-8859-1 -% Ceci est le fichier de test (pdf)(Xe)(lua)LaTex de l'entension hlist -% -% Fichier compilé 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épète #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écédent \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écédent \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éfaut -Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla } - -\section{Test 3} -Voici le texte précédent \repeatntimes{15}{bla bla bla } -\begin{hlist}[pre skip=0pt,post skip=0pt]4 - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété -\end{hlist} -Voici le texte intermédiaire \repeatntimes{15}{bla bla bla } -\begin{hlist}[resume,pre skip=0pt,post skip=0pt]4 - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété -\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écédent \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écédent \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écédent \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éponse A - \hitem Réponse B - \hitem Réponse C - \hitem Réponse 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écédent \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écédent \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ème 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écédent \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ème item pour remplir une ligne\par - Un deuxième 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 diff --git a/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf b/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf Binary files differdeleted file mode 100644 index 471b4c661d4..00000000000 --- a/Master/texmf-dist/doc/generic/hlist/htest-tex.pdf +++ /dev/null diff --git a/Master/texmf-dist/doc/generic/hlist/htest-tex.tex b/Master/texmf-dist/doc/generic/hlist/htest-tex.tex deleted file mode 100644 index e951d06290c..00000000000 --- a/Master/texmf-dist/doc/generic/hlist/htest-tex.tex +++ /dev/null @@ -1,173 +0,0 @@ -% !TeX encoding = ISO-8859-1 -% Ceci est le fichier de test (pdf)(Xe)(lua)tex de l'entension hlist -% -% Fichier compilé 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épète #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@section\endcsname -\def\section#1{% - \expandafter\advance\csname c@section\endcsname1 - \bigbreak\noindent - \begingroup\hlstsectionfont \the\csname c@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ères actifs de ponctuation française -\catcode`\:=13 \def:{\unskip\penalty10000 \ \string:} -\catcode`\!=13 \def!{\unskip\penalty10000 \ \string!} - -%%%%% DÉBUT DU DOCUMENT -\hlstdebugmodetrue -\hlsttextfont -\parindent1.5em -\begingroup - \hfill\hlsttitlefont Fichier de test \TeX\hfill\null\par -\endgroup - -\section{Test 1} -Voici le texte précédent \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écédent \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éfaut -Voici le texte qui suit la liste \repeatntimes{15}{bla bla bla } - -\section{Test 3} -Voici le texte précédent \repeatntimes{15}{bla bla bla } -\hlist[pre skip=0pt,post skip=0pt]4 - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété -\endhlist -Voici le texte intermédiaire \repeatntimes{15}{bla bla bla } -\hlist[resume,pre skip=0pt,post skip=0pt]4 - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété - \hitem Item répété -\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écédent \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écédent \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écédent \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écédent \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ème 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écédent \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ème item pour remplir une ligne\par - Un deuxième 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 diff --git a/Master/texmf-dist/tex/generic/hlist/hlist.sty b/Master/texmf-dist/tex/generic/hlist/hlist.sty index 71b2bb70f29..b122bbd7f74 100644 --- a/Master/texmf-dist/tex/generic/hlist/hlist.sty +++ b/Master/texmf-dist/tex/generic/hlist/hlist.sty @@ -1,6 +1,7 @@ % !TeX encoding = ISO-8859-1 \input hlist.tex +\ProvidesPackage{hlist}[\hlstdate\space v\hlstver\space Horizontal lists (CT)] \setKVdefault[hlist]{ - pre label = \bfseries,% code exécuté au début de la boite contenant le label + pre label = \bfseries% code exécuté au début de la boite contenant le label } \endinput
\ No newline at end of file diff --git a/Master/texmf-dist/tex/generic/hlist/hlist.tex b/Master/texmf-dist/tex/generic/hlist/hlist.tex index 2afdd6ac529..1ded7bfb69f 100644 --- a/Master/texmf-dist/tex/generic/hlist/hlist.tex +++ b/Master/texmf-dist/tex/generic/hlist/hlist.tex @@ -1,15 +1,15 @@ % !TeX encoding = ISO-8859-1 % Ce fichier contient le code commenté de l'extension "hlist" % -% IMPORTANT : pour que les commentaires s'affichent correctement, lire -% ce fichier avec l'encodage ISO-8859-1 +% IMPORTANT : pour que les commentaires s'affichent correctement, +% ouvrir ce fichier avec l'encodage ISO-8859-1 % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % % \def\hlstname {hlist} % -\def\hlstver {0.1} % +\def\hlstver {0.11} % % % -\def\hlstdate {2017/05/01} % +\def\hlstdate {2017/08/08} % % % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % @@ -27,9 +27,11 @@ % This work has the LPPL maintenance status `maintained'. % % The Current Maintainer of this work is Christian Tellechea -% email: unbonpetit@openmailbox.org +% email: unbonpetit@netc.fr % Commentaires, suggestions et signalement de bugs bienvenus ! % Comments, bug reports and suggestions are welcome. +% Package URL: https://www.ctan.org/pkg/hlist +% Copyright: Christian Tellechea 2017 % -------------------------------------------------------------------- % L'extension hlist est composée des 9 fichiers suivants : % - code : hlist (.tex et .sty) @@ -39,6 +41,9 @@ % - fichier lisezmoi : README % -------------------------------------------------------------------- +\begingroup + \ifdefined\skvname\let\hlsttmp\endgroup\else\def\hlsttmp{\endgroup\input simplekv.tex}\fi +\hlsttmp\relax \expandafter\edef\csname hlst_restorecatcode\endcsname{\catcode`\noexpand\_=\the\catcode`\_\relax} \catcode`\_11 @@ -55,15 +60,14 @@ % Voici les macros habituelles de sélection d'arguments \def\hlst_gobarg#1{} -\long\def\hlst_first#1#2{#1}\long\def\hlst_second#1#2{#2} +\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évelopper ou 2-développer le 2e argument (le 1er étant % dépouillé 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évelopper le 2e argument (le 1er et le 2e argument sont @@ -72,12 +76,6 @@ \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épouillé 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 ################ %################################################ @@ -87,7 +85,6 @@ \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éfinir le token <espace> \def\hlst_deftok#1#2{\let#1= #2\relax}\hlst_deftok\hlst_sptok{ } @@ -101,225 +98,6 @@ {\hlst_ifx{\_futurtok\hlst_toktotest}\__truecode\__falsecode}% } -% Ces macros sont utiles pour \hlst_removeextremespaces, qui retire les -% espaces extrêmes de son argument -% Voir codes 320-324 (http://progtex.fr/wp-content/uploads/2014/09/code.txt) -% et pages 339-343 de "Apprendre à 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ème clé/valeur ############## -%################################################ -% Ceci est le booléen indiquant si la lecture de <clés>=<valeurs> définit les -% <clés> _par défaut_ ou qu'il s'agit d'une _redéfinition_ des <clés> déjà -% existantes -\newif\ifhlst_default - -% macros chapeau appelant la même macro avec le booléen préalablement défini -\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és>=<valeurs> -\def\hlst_readKV[#1]#2{% - \hlst_ifempty{#2} -% Si aucune <clés>=<valeurs> alors qu'on définit les <valeurs> par défaut, -% message d'erreur et on s'arrête là - {\ifhlst_default\errmessage{No key/val found, no default key/val defined}\fi} -% Sinon, initialiser à <vide> la macro \hlst_[<trousseau>] uniquement si on -% créé les <valeurs> par défaut - {\ifhlst_default\hlst_argcsname\let{hlst_[#1]}\empty\fi -% Puis on passe aux choses sérieuses, on va lire un par un tous les éléments -% <clé>=<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é>=<valeur>" de la liste qui reste à traiter : -% tout d'abord, on se débarrasse des espaces extrêmes - \hlst_eearg{\def\__temp}{\hlst_removeextremespaces{#2}}% -% Si ce qui en résulte est égal 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ésulte est vide (le couple "<clé>=<valeur>" était donc -% vide ou composé 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é> et la <valeur> du couple lu en -% prenant soin de mettre à la fin "=<quark>" pour se prémunir du cas où -% "<clé>=<valeur>" ne contient que la "<clé>" et pas de signe "=", ce qui -% ferait planter la macro à arguments délimités - {\expandafter\hlst_find_kv\__temp=\hlst_quark\_nil[#1]% - }% -% Lorsque la <clé> et la <valeur> est trouvée et stockée, recommencer et aller -% lire le prochain couple "<clé>=<valeur>" - \hlst_readKV_i[#1]% - }% -} - -% Voici la macro à arguments délimités à qui on a transmis -% <clé>=<valeur>=<quark> (si <clé>=<valeur> est l'élément lu) -% ou -% <clé>=<quark> (si <clé> est seule) -% et qui va isoler la <clé> 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é>, pas de problème, c'est _obligatoirement_ ce qui est avant le -% signe "=", que ce signe soit présent dans le couple lu ou pas puisqu'on y a -% rajouté "=<quark>". -% On élimine les espaces extrêmes pour obtenir la <clé> définitive stockée dans -% \__key (il faut 2-développer \hlst_removeextremespaces pour qu'elle donne son -% argument sans espace extrême) - \edef\__key{\detokenize\expandafter\expandafter\expandafter{\hlst_removeextremespaces{#1}}}% -% Pour la <valeur>, on lui ôte d'abord les espaces extrêmes - \hlst_eearg{\def\__val}{\hlst_removeextremespaces{#2}}% - \hlst_ifx{\__val\hlst_quark} -% Si elle est égale au <quark>, alors la <valeur> vaut "true" - {\def\__val{true}}% -% Sinon, ôter "=<quark>" de la fin de l'argument #2, éliminer les espaces -% extrêmes de ce qui en résulte et stocker le tout dans \__val (tout ceci est -% effectué par la macro \hlst_find_val <valeur>=<quark>) - {\hlst_find_val#2}% -% Si on lit les <clés>=<valeurs> par défaut, - \ifhlst_default -% assigner à la macro "\hlst_[<trousseau>]_<clé>" la <valeur> trouvée - \hlst_argcsname\let{hlst_[#3]_\detokenize\expandafter{\__key}}\__val -% Puis ajouter à la macro "\hlst_[<trousseau>]", qui a été préalablement -% initialisée à <vide> : -% \def\hlst_[<trousseau>]_<clé>{<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és les couples <clé>/<valeur> : les -% <clés> 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ès sa <clé>, il suffit de développer la -% macro \hlst_[<trousseau>]_<clé> -% b) pour redéfinir une <clé>, il suffit de redéfinir cette macro avec la -% nouvelle <valeur> -% c) il est facile de vérifier qu'une <clé> existe en vérifiant que la macro -% associée est définie, la primitive \ifcsname le fait très bien -% d) en revanche, on ne peut pas faire de recherche _inverse_ de façon -% pratique : il est en effet plus difficile de trouver la (ou les) <clé> -% contenant une <valeur> donnée, mais cette limitation n'a pas grande -% importance ici (je ne sais pas si les autres systèmes de <clé>/<valeur> -% sont programmés de telle sorte que cela soit simple...) -% Bref, la macro "\hlst_[<trousseau>]" contient donc _toutes_ les définitions -% des macros définissant les <clés>/<valeurs> _par défaut_ et exécuter -% "\hlst_[<trousseau>]" remet donc toutes les <clés> à leur <valeur> par défaut. - \else -% Dans le cas où on _lit_ des nouvelles <valeurs> pour des <clés> - \hlst_ifcsname{hlst_[#3]_\__key} -% Si la <clé> existe (ssi la macro "\hlst_[<trousseau>]_<clé>" est définie), -% alors assigner la <valeur> à cette macro - {\hlst_argcsname\let{hlst_[#3]_\__key}\__val}% -% Sinon, émettre un message d'erreur et ne rien faire de plus - {\errmessage{Key "\__key" is not defined: nothing is modified}}% - \fi -} - -% Cette macro à qui on a transmis "<valeur>=<quark>" ne garde que <valeur>, en -% ôte les espaces extrêmes et stocke le résultat dans \__val -\def\hlst_find_val#1=\hlst_quark{\hlst_eearg{\def\__val}{\hlst_removeextremespaces{#1}}} - -% Cette macro remet toutes les <clés> à leur <valeurs> par défaut en exécutant -% 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 à la <clé> contenue dans #2 -\def\useKV[#1]#2{% -% Avec \romannumeral, la <valeur> sera obtenue après _2_ développements de -% \useKV[<trousseau>]{<clé>} - \romannumeral\hlst_ifempty{#2} -% Si la <clé> est vide, message d'erreur (il ne peut y avoir de <valeur> -% associée à une <clé> vide) - {\hlst_stop\errmessage{Key name missing}} - {\hlst_ifcsname{hlst_[#1]_\hlst_removeextremespaces{#2}} -% Si la macro "\hlst_[<trousseau>]_<clé>" existe, 2-développer 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éveloppable qui teste si #2 (la <clé> du <trousseau> -% #1) est égale à "true" ou à "false" et selon l'issue, exécute le 1er ou 2e -% argument qui suit (arguments appelés <vrai> et <faux>) -\def\ifboolKV[#1]#2{% -% Cette macro donnera un des 2 arguments <vrai> ou <faux> en _2_ développements -% grâce au \romannumeral - \romannumeral\hlst_ifempty{#2} -% Si la <clé> est vide, message d'erreur - {\hlst_stop\errmessage{Key name missing}\hlst_second} - {\hlst_ifcsname{hlst_[#1]_\hlst_removeextremespaces{#2}} -% Si la <clé> débarrassée de ses espaces extrêmes 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éen acceptable - {\hlst_stop\errmessage{Value "#1" is not a valid boolean}\hlst_second}% - }% -} - -% La macro \hlst_ifargtrue{<argument>} teste de façon purement développable si -% <argument> vaut "true" ou "false". -% Pour cela, on transmet à \hlst_ifargtrue_i l'argument "<argument>true" qui est -% délimité 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électionner 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ès "true" dans "true<autre>true", -% c'est donc "<autre>true". -% Pour être sûr que <autre> est <vide>, on transmet "<autre>true" à -% \hlst_ifargtrue_ii qui teste si la réunion de ce qui est avant le -% premier "true" et ce qui est après 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ède de même 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 ############### %################################################ @@ -511,7 +289,7 @@ \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}"}}% + {\errmessage{Unknown counter named "\detokenize{#1}"}}% } % Ensuite, ces macros convertissent un <nombre> en nombre romain ou en lettre, % avec choix de la casse @@ -569,7 +347,7 @@ % 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} + {\def\__temp{\hitem_i#1#2(#3)[#4]}\expandafter\__temp\skv_gobspace} {\hitem_ii#1#2(#3)[#4]}% } @@ -582,8 +360,7 @@ % si ce n'est _pas_ le 1er de la liste \hlst_ifnum{\hlst_colcnt>0 } % Exécuter la routine de fin d'item - {\hlst_enditem - } + {\hlst_enditem} % Sinon, fermer la boite ouverte par \hlist {\egroup % Si toutes ses dimensions ne sont pas nulles, message d'erreur @@ -594,7 +371,7 @@ \hlst_maxdepth0pt \hlst_maxprevdepth0pt }% % Incrémenter le compteur de label associé à cette imbrication - \hlst_argcsname\global\advance{c@hlist\romannumeral\hlst_nest} 1 + \expandafter\global\expandafter\advance\csname c@hlist\romannumeral\hlst_nest\endcsname 1 % Incrémenter le compteur de colonnes du nombre de colonnes sautées précédemment \advance\hlst_colcnt\hlst_askedmulticol\relax % Si "*", mettre le compteur de colonnes au maximum pour forcer retour à la @@ -836,3 +613,5 @@ Versions : |-----------------------------------------------------------------------------| | 0.1 | 01/05/2017 | Première version | |-----------------------------------------------------------------------------| +| 0.11 | 08/08/2017 | Chargement de simpleKV | +|-----------------------------------------------------------------------------| |