r3tex

custom LuaTeX format
git clone git://git.rr3.xyz/r3tex
Log | Files | Refs | README | LICENSE

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