list.tex (1863B)
1 % The label of each list item is derived from \Lfmt, which is a tokens list 2 % optionally depending on \Llvl (the nesting level of list, where 0 means not 3 % in a list, 1 means in a top-level list, etc.) and \Lcnt (the item number, 4 % where 0 means before the first item, 1 means in the first item, etc.). 5 % Alternatively, \Lfmt can be overridden with an explicit label on an 6 % item-by-item basis by using \xitem in place of \item. Each label is 7 % overlapped in to the ident of the first paragraph in the item. The geometry 8 % of a list is mostly controlled by the following parameters. 9 10 \newtoks\Lfmt % label format; typically depends on \Llvl and \Lcnt 11 \newdimen\Lindent % indent of first paragraph in item 12 \newdimen\Lmaxprotrusion % max protrusion of item label into left margin 13 \newdimen\Llmargin % bring left margin in by this amount 14 \newdimen\Lrmargin % bring right margin in by this amount 15 \newskip\Ltopskip % vskip above list 16 \newskip\Lmidskip % vskip between items 17 \newskip\Lbotskip % vskip below list 18 \newcount\Ltoppenalty % penalty above list 19 \newcount\Lmidpenalty % penalty between items 20 \newcount\Lbotpenalty % penalty below list 21 22 \newcount\Llvl \Llvl=0 % list nesting level 23 \newcount\Lcnt % item number within current list 24 25 \def\Lbeg{% 26 \par 27 \beggroup 28 \Lcnt=0 29 \incr\Llvl 30 \Lfmt={}% 31 \advance\leftskip\Llmargin 32 \advance\rightskip\Lrmargin 33 \penalty\Ltoppenalty 34 \vskip\Ltopskip 35 } 36 37 \def\Lbegx#{\Lbeg\Lfmt=} 38 39 \def\Lend{% 40 \par 41 \endgroup 42 \penalty\Lbotpenalty 43 \vskip\Lbotskip 44 \tmpparindent0pt 45 } 46 47 \def\item{\@Litem{\the\Lfmt}} 48 \def\xitem#1{\@Litem{#1\enspace}\ignorespaces} 49 \def\@Litem#1{% 50 \par 51 \ifnum\Lcnt>0 \penalty\Lmidpenalty \vskip\Lmidskip \fi 52 \incr\Lcnt 53 \setbox\boxA=\hbox{#1}% 54 \dimenB=\dimexpr\wd\boxA-\Lmaxprotrusion\relax 55 \dimenA=\ifdim\Lindent<\dimenB \dimenB \else \Lindent \fi 56 \noindent\hbox to\dimenA{\hss\box\boxA}% 57 } 58 59 \endinput