summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/tablists/tablists.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/tablists/tablists.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/tablists/tablists.dtx')
-rw-r--r--macros/latex/contrib/tablists/tablists.dtx933
1 files changed, 933 insertions, 0 deletions
diff --git a/macros/latex/contrib/tablists/tablists.dtx b/macros/latex/contrib/tablists/tablists.dtx
new file mode 100644
index 0000000000..df558fa4f9
--- /dev/null
+++ b/macros/latex/contrib/tablists/tablists.dtx
@@ -0,0 +1,933 @@
+% \iffalse
+%
+% tablists.dtx - tabulated list of short items.
+% (c) 2007, 2008 Olga Lapko (Lapko.O@g23.relcom.ru)
+%
+% This program is provided under the terms of the
+% LaTeX Project Public License distributed from CTAN
+% archives in directory macros/latex/base/lppl.txt.
+%
+% \fi
+%
+% \iffalse
+%<*driver>
+\ProvidesFile{tablists.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{tablists}
+%<*package>
+ [2009/08/04 v0.0e (beta) Tabulated list of short items]
+%</package>
+%
+%<*batchfile>
+\begingroup
+
+\input docstrip.tex
+
+\keepsilent
+\askforoverwritefalse
+
+\generate{\file{tablists.sty}{\from{tablists.dtx}{package}}}
+
+\endgroup
+%</batchfile>
+%
+%<*driver>
+\documentclass{ltxdoc}
+
+\usepackage{ifpdf}
+\ifpdf
+ \usepackage{mathptmx,courier}
+ \usepackage[scaled=0.90]{helvet}
+ \addtolength\marginparwidth{15pt}
+\fi
+
+\usepackage{paralist}
+\usepackage{makecell}
+\usepackage{amsthm}
+\newtheorem{theorem}{Theorem}
+\usepackage{tablists}
+\IfFileExists{hyperref.sty}{\usepackage{hyperref}}{}
+\IfFileExists{listpen.sty}{\usepackage{listpen}}{}
+\providecommand\RestoreSpaces{\bigskip}
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+\makeatletter
+\@beginparpenalty10000
+\widowpenalty10000
+\clubpenalty10000
+\makeatother
+\providecommand*{\file}[1]{\texttt{#1}}
+\providecommand*{\package}[1]{\textsf{#1}}
+\providecommand*{\cls}[1]{\textsf{#1}}
+\providecommand*{\env}[1]{\texttt{#1}}
+
+\OnlyDescription
+\begin{document}
+ \DocInput{tablists.dtx}
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{493}
+%
+% \GetFileInfo{tablists.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+%
+% \title{The \textsf{tablists} package\thanks{This
+% file has version number \fileversion,
+% last revised \filedate.}}
+% \author{%
+% Olga Lapko\\
+% {\tt Lapko.O@g23.relcom.ru} }
+% \date{\filedate}
+% \maketitle
+% \begin{abstract}
+% This package gives variant of environment for creating of list of short
+% items in the way of tabular alignment. That could be useful for list of
+% exercises in math educational literature. It allows to build one-level
+% and two-level tabulated lists.
+% \end{abstract}
+%
+% \tableofcontents
+%
+%\newpage
+% \section{Building Commands}
+%
+% \DescribeMacro{tabenum}
+% \DescribeMacro{\tabenumitem}
+% \DescribeMacro{\item}
+% The \env{tabenum} environment prints short items aligned in columns.
+%
+% Each item starts with |\tabenumitem| command.
+% First example of \env{tabenum} list---please note that you may set optional
+% argument in the same way as in modified environments from \package{enumerate}
+% or \package{paralist} packages:
+%\par\begin{small}%
+%\begin{verbatim}
+%\begin{tabenum}[\bfseries1)]%
+%\tabenumitem
+%$z=\displaystyle\frac xy$;
+%\tabenumitem
+%$2^x=9;$\cr
+%
+%\tabenumitem
+%$3^{2x+3}=16 $;
+%\tabenumitem
+%$z=2x^2+4y^2$;\par
+%\tabenumitem
+%$u=\sqrt{x^2+y^2+z^2}$;
+%\tabenumitem
+%$v=gt+\displaystyle\frac{g}{4}t$;\\[1ex]
+%\tabenumitem
+%$u=2^{5x-3y+z}$;
+%\tabenumitem
+%$w=(v+7)^2+(u-3)^2$;
+%
+%
+%\tabenumitem
+%$5^x=\displaystyle\frac{4}{3} ;$
+%\tabenumitem
+%$z=(x+1)^2+y^2$;\\*
+%\tabenumitem
+%$2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$
+%\tabenumitem
+%$t=5u^2+8v^2$;
+%\end{tabenum}
+%\end{verbatim}
+%\end{small}
+% \begin{tabenum}[\bfseries1)]%
+% \tabenumitem
+% $z=\displaystyle\frac xy$;
+% \tabenumitem
+% $2^x=9;$\cr
+%
+% \tabenumitem
+% $3^{2x+3}=4 $;
+% \tabenumitem
+% $z=2x^2+4y^2$;\par
+% \tabenumitem
+% $u=\sqrt{x^2+y^2+z^2}$;
+% \tabenumitem
+% $v=gt+\displaystyle\frac{g}{4}t$;\\[1ex]
+% \tabenumitem
+% $u=2^{5x-3y+z}$;
+% \tabenumitem
+% $w=(v+7)^2+(u-3)^2$;
+%
+%
+% \tabenumitem
+% $5^x=\displaystyle\frac{4}{3} ;$
+% \tabenumitem
+% $z=(x+1)^2+y^2$;\\*
+% \tabenumitem
+% $2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$
+% \tabenumitem
+% $t=5u^2+8v^2$;
+% \end{tabenum}
+%
+% You may see that empty line (or |\par| command), |\\| command and |\cr|
+% do the same: start a new row. The |\\| macro works like in array environment
+% and allows optional argument with vertical correction.
+% (Also the |\\*| command suppresses breaking between pages, see next example.)
+%
+% Please note that two or more |\par|'s
+% |\cr|'s or |\\|'s (and also any combination of these three commands)
+% create additional empty lines.
+%
+% You may use the |\item|
+% macro instead of |\tabenumitem| in this \env{tabenum} environments (see next examples).
+%
+% \DescribeMacro{\notabenumitem}
+% \DescribeMacro{\noitem}
+% \DescribeMacro{\skipitem}
+% On the next step you can wish to do the list like before more compact. The
+% |\multicolumn| does not work here correctly\footnote{
+% Also the plain \TeX's commands like \cs{omit} and \cs{span}/\cs{multispan} commands,
+% I think, need too complex code.}. At first you may use plain \TeX's
+% command |\hidewidth| to hide width of widest column entry; then you may use
+% other variant of |\tabenumitem|(|\item|) command---|\notabenumitem|(|\noitem|)---%^^A
+% this command increases list entry, but does not create a new column;
+% third command |\skipitem| allows you to skip
+% one \env{tabenum} column\footnote{The \env{tabenum} column includes two columns:
+% it works like \texttt{rl} columns in \env{tabular} environment. Thus, \cs{skipitem}
+% equals to \texttt{\&\&} combination.}.
+% Next example show usage of these three commands:
+%\par\begin{small}%
+%\begin{verbatim}
+%\begin{tabenum}[\bfseries1)]%
+%\item
+%$z=\displaystyle\frac xy$;
+%\noitem
+%$2^x=9;$
+%\item
+%$3^{2x+3}=4 $.
+%\item
+%$z=2x^2+4y^2$;\nopagebreak
+%
+%\item
+%$u=\sqrt{x^2+y^2+z^2}$;
+%\item
+%$v=gt+\displaystyle\frac{g}{4}t$,
+%\item
+%$u=2^{5x-3y+z}$.\cr
+%\item
+%$w=(v+7)^2+(u-3)^2$;
+%\item
+%$5^x=\displaystyle\frac{4}{3} ;$
+%\item
+%$z=(x+1)^2+y^2$;\\*
+%\item
+%$2+5+8+ \ldots +(3n+2)=155$,
+% $n\in \mathrm{N};$\hidewidth\skipitem
+%\item
+%$t=5u^2+8v^2$;
+%\end{tabenum}
+%\end{verbatim}
+%\end{small}%
+% \begin{tabenum}[\bfseries1)]%
+% \item\label{tabenum:I:1}
+% $z=\displaystyle\frac xy$;
+% \noitem\label{tabenum:I:2}
+% $2^x=9;$
+% \item
+% $3^{2x+3}=4 $.
+% \item
+% $z=2x^2+4y^2$;\nopagebreak
+%
+% \item
+% $u=\sqrt{x^2+y^2+z^2}$;
+% \item
+% $v=gt+\displaystyle\frac{g}{4}t$,
+% \item
+% $u=2^{5x-3y+z}$.\cr
+% \item
+% $w=(v+7)^2+(u-3)^2$;
+% \item
+% $5^x=\displaystyle\frac{4}{3} ;$
+% \item
+% $z=(x+1)^2+y^2$;\\*
+% \item\label{tabenum:I:11}
+% $2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$\hidewidth\skipitem
+% \item
+% $t=5u^2+8v^2$;
+% \end{tabenum}
+% The items \ref{tabenum:I:1} and \ref{tabenum:I:2} were joined in one column: the item \ref{tabenum:I:2}
+% used |\noitem| (|\notabenumitem|) command. The item \ref{tabenum:I:11} occupies two columns,
+% so it uses the |\hidewidth| (hides item width) and |\skipitem| (skips column of next item) commands.
+%
+%
+% \subsection{Spacing}
+%
+% Vertical spaces around tabulated list are equal to the list ones |\topsep+\partopsep|.
+%
+% Space between rows depends on the |\jot| value, like in \package{amsmath} environments
+% like \env{align}, \package{gather} etc.
+%
+% \DescribeMacro{\tabenumsep}
+% The horizontal spacing between items of list. It defined like:
+% \begin{quote}
+% |\renewcommand\tabenumsep{\hskip1em}|
+% \end{quote}
+% The |\labelsep| parameter is used after item number.
+%
+% \DescribeMacro{\tabenumindent}
+% The |\tabenumindent| command sets left margin of \env{tabenum} environment.
+% It can be defined like horizontal space/skip or text,
+% for example:
+% \begin{quote}
+% |\renewcommand\tabenumindent{\hskip\parindent}|
+% \end{quote}
+% or
+% \begin{quote}
+% |\renewcommand\tabenumindent{Word }|
+% \end{quote}
+% That could be useful also
+% inside, e.g., a proper list environments like \env{enumerate} or \env{itemise}
+% for corrections of left margins.
+%
+% \subsection{The \env{tabenum} environment inside a proper list}
+%
+% The version 0.0e of \package{tablists} package enlarges left margin
+% of \env{tabenum}, when environment appears inside proper list,
+% by the value of left margin of this list. Sometimes left edges
+% of \env{tabenum} labels and list labels of the same level are not aligned
+% correctly (it happens when |\labelwidth| value is not equal to the natural
+% width of labels). In these cases you may define the correction skip
+% with the |\tabenumindent| command.
+%
+% Also the version 0.0e loads labels of empty items of upper/outer list
+% at the left side of the first item of \env{tabenum} automatically. It follows
+% mechanism similar to building of empty items in list environment.
+% (Empty items of \LaTeX\ list are consecutively stored to special box register
+% and printed out at the beginning when the list text appears;
+% the same happens at the beginning of \env{tabenum} environment:
+% this box, if not empty, is printed at the left of first \env{tabenum} item.)
+%\par\begin{small}%
+%\begin{verbatim}
+%\begin{enumerate}[\bfseries1)]%
+%\item
+%\begin{tabenum}[a)]%
+%...
+%\end{verbatim}%
+%\end{small}%
+% \begin{enumerate}[\bfseries1)]%
+% \item
+% \begin{tabenum}[a)]%
+% \item
+% {$z=\displaystyle\frac xy$};
+% \noitem
+% {$2^x=9;$}
+% \item
+% {$3^{2x+3}=4 $}.
+% \item
+% {$z=2x^2+4y^2$};\nopagebreak
+%
+% \item
+% $u=\sqrt{x^2+y^2+z^2}$;
+% \item
+% $v=gt+\displaystyle\frac{g}{4}t$,
+% \item
+% $u=2^{5x-3y+z}$.\\
+% \item
+% $w=(v+7)^2+(u-3)^2$;
+% \item
+% $5^x=\displaystyle\frac{4}{3} ;$
+% \item
+% $z=(x+1)^2+y^2$;\cr
+% \item
+% $2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$\hidewidth\skipitem
+% \item
+% $t=5u^2+8v^2$.%
+% \end{tabenum}%
+% \end{enumerate}%
+%\par\kern-\baselineskip
+% \emph{Please note} that for the case of \env{tabenum} environment inside list,
+% there is not compatibility between version 0.0e and earlier
+% versions---left margin of \env{tabenum} is changed (mechanism
+% of placing empty list items on one baseline using compensating vertical
+% spaces could work but its calculation was changed, see also next paragraph).\smallskip
+%
+% \begin{small}%
+% \DescribeMacro{\liststrut}
+% In versions until 0.0d there was offered the |\liststrut| command in the
+% cases when needed to put empty list item on the same line with first item of
+% \env{tabenum}. The command raises first line of next text block at the baseline of
+% previous. (Without any option it puts negative
+% baselineskip. If there is a high element (any math sentence) in the first
+% line of next text, it must be written in option without |$|'s,
+% the height of this argument is used for compensating skips argument.)
+% Since this command must take into account various vertical skips, which
+% appear at the start of new item and also height of printing text,
+% the adjusting of baselines does not always work correctly.\par
+% \end{small}%
+% \RestoreSpaces
+% \subsection{The \env{subtabenum} environment: second level, variant I}
+%
+% \DescribeMacro{subtabenum}
+% The second level of equations/exersizes list \env{subtabenum} based on \env{tabular}
+% environment.
+%
+%\begin{small}%
+%\begin{verbatim}
+%\begin{tabenum}[\bfseries 1)]%
+%\item
+%\begin{subtabenum}[a)]%
+%\item
+%$z=\displaystyle\frac xy$;
+%\noitem
+%$2^x=9;$
+%\item
+%$3^{2x+3}=4 $.
+%\item
+%$z=2x^2+4y^2$;
+%\end{subtabenum}
+%
+%\item
+%\begin{subtabenum}[a)]%
+%\item
+%$u=\sqrt{x^2+y^2+z^2}$;
+%\item
+%...
+%\end{subtabenum}
+%\end{tabenum}
+%\end{verbatim}%
+%\end{small}%
+% \begin{tabenum}[\bfseries 1)]%
+% \item
+% \begin{subtabenum}[a)]%
+% \item
+% $z=\displaystyle\frac xy$;
+% \noitem
+% $2^x=9;$
+% \item
+% $3^{2x+3}=4 $.
+% \item
+% $z=2x^2+4y^2$;
+% \end{subtabenum}\nopagebreak
+%
+% \item
+% \begin{subtabenum}[a)]
+% \item
+% $u=\sqrt{x^2+y^2+z^2}$;
+% \item
+% $v=gt+\gape[b]{\displaystyle\frac{g}{4}}t$,
+% \item
+% $u=2^{5x-3y+z}$.\\
+% \item
+% $w=(v+7)^2+(u-3)^2$;
+% \item
+% $5^x=\gape[b]{\displaystyle\frac{4}{3}} ;$
+% \item
+% $z=(x+1)^2+y^2$;\\
+% \item
+% $2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$\hidewidth\strut\skipitem
+% \item
+% $t=5u^2+8v^2$;
+% \end{subtabenum}
+% \end{tabenum}
+% Please note that |\hidewidth| skip is followed by the |\strut| command inside
+% \env{subtabenum} environment:
+% the skips at the ``edges'' of \env{tabular} columns or before |\\| command doesn't work.
+%
+% \subsection{The \cs{subtabenumitem}/\cs{subitem} macros: second level, variant II}
+%
+% The previous example shows that columns were destroyed from one
+% \env{subtabenum} environment to another. Also the rows of sublist cannot break between pages.
+%
+% \DescribeMacro{\subtabenumitem}
+% \DescribeMacro{\subitem}
+% There is another variant for two-level tabulated list. If you use second option
+% in \env{tabenum} environment, you may use |\subtabenumitem|/|\subitem| commands
+% for the second level\footnote{If there are not second optional argument, these commands
+% work like \cs{tabenumitem}/\cs{item}.}.
+%
+% If you put |\subtabenumitem| (|\subitem|) after |\tabenumitem| (|\item|), you get extra space between
+% two numbers, created by |\tabenumsep| skip. The |\negtabenumsep| command
+% cancels this skip: the version 0.0c included this command inside the |\tabenumitem| definition.
+%\par\begin{small}\openup-1pt\enlargethispage{2\baselineskip}
+%\begin{verbatim}
+%\def\tabenumsep{\qquad}
+%\begin{tabenum}[\bfseries 1)][a)]%
+%\item
+%\subitem
+%$z=\displaystyle\frac xy$;
+%\nosubitem
+%$2^x=9;$
+%\subitem
+%$3^{2x+3}=4 $.
+%\subitem
+%$z=2x^2+4y^2$;\\
+%\startnumber{4}
+%\item
+%\subitem
+%$u=\sqrt{x^2+y^2+z^2}$;
+%\subitem
+%$v=gt+\displaystyle\frac{g}{4}t$,
+%\subitem
+%$u=2^{5x-3y+z}$.\\
+%\startsubnumber{7}\subtabrow
+%\subitem
+%$w=(v+7)^2+(u-3)^2$;
+%\subitem
+%$5^x=\displaystyle\frac{4}{3} ;$
+%\subitem
+%$z=(x+1)^2+y^2$;\\
+%\subtabrow
+%\subitem
+%$2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$\hidewidth\skipitem
+%\subitem
+%$t=5u^2+8v^2$;
+%\end{tabenum}
+%\end{verbatim}%
+%\end{small}
+% \begin{tabenum}[\bfseries 1)][a)]%
+% \item
+% \subitem
+% $z=\displaystyle\frac xy$;
+% \nosubitem
+% $2^x=9;$
+% \subitem
+% $3^{2x+3}=4 $.
+% \subitem
+% $z=2x^2+4y^2$;\\
+% \startnumber{4}\relax
+% \item
+% \subitem
+% $u=\sqrt{x^2+y^2+z^2}$;
+% \subitem
+% $v=gt+\displaystyle\frac{g}{4}t$,
+% \subitem
+% $u=2^{5x-3y+z}$.\\
+%\startsubnumber{7}\subtabrow
+% \subitem
+% $w=(v+7)^2+(u-3)^2$;
+% \subitem
+% $5^x=\displaystyle\frac{4}{3} ;$
+% \subitem
+% $z=(x+1)^2+y^2$;\\
+%\subtabrow
+% \subitem
+% $2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$\hidewidth\skipitem
+% \subitem
+% $t=5u^2+8v^2$;
+% \end{tabenum}
+% There were used two commands |\startnumber| and |\startsubnumber| which set
+% next start numbers for items of each of two levels\footnote{The \cs{startnumber}
+% command can be used inside any list
+% environment.}. The |\startnumber|
+% allows you to divide \env{tabenum} environment and restart with necessary counter.
+% You may still use the traditional |\setcounter{enum..}{..}| combination,
+% if you know the level of your list and \env{tabenum}/\allowbreak\env{subtabenum} environments.
+% For start of the new row from subitem, you need to use~\nobreak\quad1)\nobreak\enskip
+% the |\skipitem| command to skip
+% column, occupied by the ``parent'' label (|\tabenumitem|) and~\nobreak\quad2)\nobreak\enskip
+% the |\negtabenumsep| command to undo column separation.
+% These two commands abbreviated by |\subtabrow| command.
+%
+% \subsection{Placing the QED sign at the end of \env{tabenum} environment}
+%
+% When the \env{tabenum} environment is used inside \env{proof} environment (the
+% \texttt{amsthm} package),
+% the better way is to put QED at the end of last \env{tabenum} line. You may use
+% the |\tabqedhere| command:
+%
+% \begin{theorem}%
+% You may put the QED sign inside the \env{tabenum} environment.
+% \end{theorem}%
+% \begin{proof}%
+% Let's put our favorite \env{tabenum} environment inside the \env{proof} one,
+% and at the end of it write the |\tabqedhere| (or |\qedhere|) command:
+%\begin{verbatim}
+%\begin{theorem}
+% You may put the QED sign inside the \env{tabenum} environment.
+%\end{theorem}
+%\begin{proof}
+% Let's put...
+%\begin{tabenum}[\bfseries 1)][a)]%
+%...
+%\subitem
+%$t=5u^2+8v^2$;\qedhere
+%\end{tabenum}
+%\end{proof}
+%\end{verbatim}%
+% \begin{tabenum}[\bfseries 1)][a)]%
+% \item
+% \subitem
+% $z=\displaystyle\frac xy$;
+% \nosubitem
+% $2^x=9;$
+% \subitem
+% $3^{2x+3}=4 $.
+% \subitem
+% $z=2x^2+4y^2$;\\
+% \startnumber{4}\relax
+% \item
+% \subitem
+% $u=\sqrt{x^2+y^2+z^2}$;
+% \subitem
+% $v=gt+\displaystyle\frac{g}{4}t$,
+% \subitem
+% $u=2^{5x-3y+z}$.\\ \subtabrow
+% \subitem
+% $w=(v+7)^2+(u-3)^2$;
+% \subitem
+% $5^x=\displaystyle\frac{4}{3} ;$
+% \subitem
+% $z=(x+1)^2+y^2$;\\ \subtabrow
+% \subitem
+% $2+5+8+ \ldots +(3n+2)=155$, $n\in \mathrm{N};$\hidewidth\skipitem
+% \subitem
+% $t=5u^2+8v^2$;\qedhere
+% \end{tabenum}
+% \end{proof}%
+%
+% \subsection{Restoring of \cs{item} as command from list environments}
+%
+% \DescribeMacro{\restorelistitem}
+% For the cases when standard lists appear inside \env{tablist}, you may
+% restore original |\item| meaning.
+%
+% \StopEventually{}\clearpage
+%
+% \section{Code of package}
+%
+% First goes request of \package{makecell} package.
+% \begin{macrocode}
+\RequirePackage{makecell}
+\@ifpackagelater{makecell}{2007/05/24 V0.1d}{}{\PackageError
+ {tablists}{For a successful cooperation we need at least\MessageBreak
+ version `2007/05/24 V0.1d' of package makecell,\MessageBreak
+ but only version\MessageBreak
+ `\csname ver@makecell.\@pkgextension\endcsname'\MessageBreak
+ is available}\@eha\endinput}
+% \end{macrocode}
+%
+% The horizontal separation space between items/columns.
+% \begin{macrocode}
+\newcommand\tabenumsep{\hskip1em}
+\newcommand\negtabenumsep{%
+ \settowidth\@tempdima{\tabenumsep}\hspace*{-\@tempdima}}
+% \end{macrocode}
+%
+% \begin{macro}{\tabenumitem}
+% \begin{macro}{\subtabenumitem}
+% Definition of aligned items of `tabular'ed list
+% \begin{macrocode}
+\newcommand\tabenumitem{\ifvoid\@labels\else\llap{\box\@labels\hspace{-\@totalleftmargin}}\fi
+ &\@ifnextchar[%
+ {\TeXr@@tabenumitem{&}}%
+ {\TeXr@tabenumitem{&}{\@enumctr}\setcounter{\@subenumctr}\z@}}
+% \end{macrocode}
+% The macro for second level of tabulated items.
+% \begin{macrocode}
+\newcommand\subtabenumitem{\ifnum\value{\@subenumctr}=\z@\negtabenumsep
+ \let\negtabenumsep\relax\fi&
+ \@ifnextchar[%]
+ {\TeXr@@tabenumitem{&}}%
+ {\TeXr@tabenumitem{&}{\@subenumctr}}}
+% \end{macrocode}
+% The macros for list and optional numeration. For a successful usage of |\label|--|\ref| mechanism
+% the |\refstepcounter| contains were divided in two parts: the |\stepcounter| command was placed in the
+% first column, before printing of label, on the second column was placed mechanism of creation
+% labels.
+% \changes{0.0b}{2007/09/07}{The \cmd{\refstepcounter} command divided into two parts to allow
+% labels for tabular items.}
+% \begin{macrocode}
+\newcommand\TeXr@tabenumitem[2]{%
+ \stepcounter{#2}{\@nameuse{label#2}}#1
+ \protected@edef
+ \@currentlabel{\csname p@#2\endcsname\csname the#2\endcsname}}
+\@ifdefinable\TeXr@@tabenumitem{}
+\def\TeXr@@tabenumitem#1[#2]{{#2}#1}
+% \end{macrocode}
+% \end{macro}%
+% \end{macro}%
+%
+% \begin{macro}{\notabenumitem}
+% \begin{macro}{\nosubtabenumitem}
+% Definition of not aligned items with emulation of spaces around.
+% The starred form of |\notabenumitem| skips space before number.
+% \begin{macrocode}
+\newcommand\notabenumitem{\@ifstar
+ {\TeXr@notabenumitem{\@enumctr}}%
+ {\tabenumsep\TeXr@notabenumitem{\@enumctr}}}
+% \end{macrocode}
+% The macro for second level of tabulated items.
+% \begin{macrocode}
+\newcommand\nosubtabenumitem{\@ifstar
+ {\TeXr@notabenumitem{\@subenumctr}}%
+ {\tabenumsep\TeXr@notabenumitem{\@subenumctr}}}
+\newcommand\TeXr@notabenumitem[1]{\@ifnextchar[%]
+ {\TeXr@@tabenumitem{\hskip\labelsep}}%
+ {\TeXr@tabenumitem{\hskip\labelsep}{#1}}}
+% \end{macrocode}
+% \end{macro}%
+% \end{macro}%
+%
+% \begin{macro}{\skipitem}
+% Command allows to skip column of items in tabulated list.
+% One item column occupies two tabular ones and needs |&&| for skipping
+% \begin{macrocode}
+\newcommand\skipitem[1][1]{\count@=#1\multiply\count@2\advance\count@\@ne
+ \eline{\count@}}
+% \end{macrocode}
+% \end{macro}%
+%
+% \begin{macro}{\subtabrow}
+% Command allows to skip column of items in tabulated list.
+% One item column occupies two tabular ones and needs |&&| for skipping
+% \begin{macrocode}
+\newcommand\subtabrow{\skipitem\negtabenumsep}
+% \end{macrocode}
+% \end{macro}%
+%
+% \begin{macro}{\tabenumindent}
+% If this command empty there is no any indentation. To set necessary indentation
+% you may define this command as any text or horizontal skip.
+% \begin{macrocode}
+\newcommand\tabenumindent{}
+% \end{macrocode}
+% \end{macro}%
+%
+% \begin{environment}{tabenum}
+% \begin{environment}{rtabenum}
+% Start of definition of tabulated lists themselves---\env{tabenum}
+% and \env{rtabenum}.
+% They allow usage of optional argument in the same way as in
+% \env{enumerate} environment from \package{paralist} package.
+% The second definition, \env{rtabenum}, replaces |\Alph|/|\alph|
+% numeration for \texttt{A}/texttt{a} entries by Russian
+% |\Asbuk|/|\asbuk| numeration.
+% \begin{macrocode}
+\newenvironment{rtabenum}{\let\Alph\Asbuk\let\alph\asbuk
+ \tabenum}{\endtabenum}
+% \end{macrocode}
+%
+% These environments use mechanism of optional argument from |\@enumlabel@|
+% command.
+% \begin{macrocode}
+\newcommand\tabenum{\@ifnextchar[{\TeXr@tabenum@}{\TeXr@tabenum@[]}}
+\@ifdefinable\TeXr@tabenum@{}
+\def\TeXr@tabenum@[#1]{\@ifnextchar[%]
+ {\TeXr@tabenum@@[#1]}{\TeXr@tabenum@@[#1][]}}
+% \end{macrocode}
+%
+% These environments allow two options for item numeration and subitem numeration.
+% \begin{macrocode}
+\@ifdefinable\TeXr@tabenum@@{}
+\long\def\TeXr@tabenum@@[#1][#2]{\par
+ \addpenalty\@beginparpenalty
+% \end{macrocode}
+% Vertical spaces around \env{tabenum} similar to spaces in list environments.
+% The space above reduced by |\jot| to make it equal to the space below.
+% \begin{macrocode}
+ \@topsepadd\topsep\advance\@topsepadd\partopsep
+ \advance\@topsepadd-\jot
+ \ifdim\@topsepadd<\z@\@topsepadd=\z@\fi
+ \if@nobreak\vspace{-\jot}\else\addvspace\@topsepadd\fi
+% \end{macrocode}
+% Interline spacing enlarged by |\jot| as in \package{amsmath}'s environments like
+% \env{align} etc.
+% \begin{macrocode}
+ \openup\jot
+% \end{macrocode}
+% Check for list depth and settings for first level.
+% If it exceeded, the error message pops out.
+% \begin{macrocode}
+ \ifnum\@enumdepth>\thr@@
+ \@toodeep
+ \else
+ \advance\@enumdepth\@ne
+ \edef\@enumctr{enum\romannumeral\the\@enumdepth}%
+ \setcounter{\@enumctr}\z@
+ \let\item\tabenumitem\let\noitem\notabenumitem
+% \end{macrocode}
+% Check for list depth and settings for second level.
+% If it exceeded, one level used.
+% \begin{macrocode}
+ \ifnum\@enumdepth>\thr@@
+ \PackageWarning{tablists}{tablist has one level}{}%
+ \let\subitem\tabenumitem\let\nosubitem\notabenumitem
+ \else
+ \let\subitem\subtabenumitem\let\nosubitem\nosubtabenumitem
+ \advance\@enumdepth\@ne
+ \edef\@subenumctr{enum\romannumeral\the\@enumdepth}%
+ \setcounter{\@subenumctr}\z@
+ \fi
+ \fi
+% \end{macrocode}
+% Checks for first option. If option is absent used default enumerating.
+% \begin{macrocode}
+ \def\tempa{#1}\ifx\tempa\empty\else
+ \TeXr@enumlabel@{#1}{\@enumctr}\fi
+% \end{macrocode}
+% Checks for second option. If option is absent used default enumerating.
+% \begin{macrocode}
+ \def\tempa{#2}\ifx\tempa\empty\else
+ \TeXr@enumlabel@{#2}{\@subenumctr}\fi
+ \@TeXr@tabenum
+ }
+% \end{macrocode}
+% There building macro for item/subitem labels.
+% \begin{macrocode}
+\newcommand\TeXr@enumlabel@[2]{%
+ \@tempcnta0
+ \TeXr@lab{}\def\TeXr@label{\TeXr@label@{#2}}%
+ \expandafter\TeXr@loop\@gobble{}#1\@@@
+ \ifnum\@tempcnta=1\else
+ \PackageWarning{tablists}{Incorrect label; no or multiple
+ counters.\MessageBreak The label is: \@gobble#1}%
+ \fi
+ \expandafter\edef\csname label#2\endcsname{\the\TeXr@lab}%
+ \expandafter\let\csname the#2\endcsname\TeXr@the%
+}
+% \end{macrocode}
+%
+% For column alignment is used |\halign| command of plain \TeX.
+% In this case \env{tabenum}/\env{rtabenum} environments can run through a few pages.
+% \begin{macrocode}
+\newcommand{\@TeXr@tabenum}{\begingroup
+ \let\\\TeXr@arraycr\TeXr@tlist@arrayjot\let\par=\cr
+ \settowidth\@tempdima{\tabenumindent}\gdef\tabenumindent{}%
+ \settowidth\@tempdimb{\tabenumsep}%
+ \ifnum\@listdepth>\z@\advance\@tempdima\@totalleftmargin\fi
+ \let\qedhere\tabqedhere
+ \halign\bgroup
+ \strut##\hskip\@tempdima
+ \hskip-\@tempdimb&&\hskip\@tempdimb\hfil##\hskip\labelsep
+ &##\hfil\cr}
+% \end{macrocode}
+%
+% Finish of \env{tabenum} environment.
+% \begin{macrocode}
+\def\endtabenum{\crcr\egroup\endgroup\par
+ \addpenalty\@endparpenalty
+ \advance\@topsepadd\jot
+ \addvspace\@topsepadd}
+% \end{macrocode}
+% \end{environment}%
+% \end{environment}%
+%
+% \begin{environment}{subtabenum}
+% \begin{environment}{rsubtabenum}
+% The tabulated list of second level. This list uses a real \env{tabular}
+% environment. In this case it is placed in one page. This list as its
+% parent environment use optional argument in the way of \package{paralist}'s
+% \env{enumerate}.
+% \begin{macrocode}
+\newcommand\subtabenum[1][]{\TeXr@tlist@arrayjot
+ \setcounter{\@subenumctr}\z@
+ \def\tempa{#1}\ifx\tempa\empty\else
+ \TeXr@enumlabel@{#1}{\@subenumctr}\fi
+ \let\item\subtabenumitem\let\noitem\nosubtabenumitem
+ \let\tabenumitem\subtabenumitem\let\notabenumitem\nosubtabenumitem
+ \let\subitem\subtabenumitem\let\nosubitem\nosubtabenumitem
+ \@TeXr@subtabenum
+ }
+\newcommand{\@TeXr@subtabenum}{\let\negtabenumsep\relax
+ \hbox{\ifnum0=`}\fi
+ \begin{tabular}[t]{@{\tabenumindent}l@{}
+ *{12}{r@{\hskip\labelsep}l@{\tabenumsep}}@{}}%
+ }
+\def\endsubtabenum{\end{tabular}%
+ \ifnum0=`{\fi}\gdef\tabenumindent{}}
+% \end{macrocode}
+%
+% Russified environment with |\Asbuk|/|\asbuk| counters instead of
+% |\Alph|/|\alph|.
+% \begin{macrocode}
+\newenvironment{rsubtabenum}{\let\Alph\Asbuk\let\alph\asbuk%
+ \subtabenum}{\endsubtabenum}
+% \end{macrocode}
+% \end{environment}%
+% \end{environment}%
+%
+% \begin{macro}{\arrayjot}
+% The redefinition of |\\| command inside tabular to enlarge interline spacing
+% by |\jot| value---to create analogous spacing to parent, \env{tabenum}, environment.
+% \begin{macrocode}
+\@ifdefinable\TeXr@rixarraycr{}
+\let\TeXr@rixarraycr\TeXr@xarraycr
+\newcommand\TeXr@Xarraycr{\@ifnextchar[%]
+ \TeXr@Xargarraycr {\@argarraycr[\jot]}}
+\@ifdefinable\TeXr@Xargarraycr{}
+\def\TeXr@Xargarraycr[#1]{\@tempdima\jot\advance\@tempdima#1%
+ \@argarraycr[\@tempdima]}
+\@ifdefinable\TeXr@arrayjot{}
+\def\TeXr@arrayjot [#1]{\let\@xarraycr\TeXr@Xarraycr\jot#1}
+\def\noarrayjot{\let\@xarraycr\TeXr@rixarraycr}
+\newcommand\TeXr@tlist@arrayjot {\@ifnextchar[%]
+ \TeXr@arrayjot{\TeXr@arrayjot[\jot]}}
+\AtBeginDocument{\let\arrayjot\TeXr@tlist@arrayjot}
+\def\TeXr@arraycr{%
+ \relax\iffalse{\fi\ifnum 0=`}\fi
+ \@ifstar{\vadjust{\penalty\@M}\@xarraycr}\@xarraycr}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\startnumber}
+% The variant of |\setcounter{enum..}{..}| sentence.
+% This command sets start number of current list (you must put this command
+% inside of list or \env{tabenum} environment).
+% The |\setcounter{enum..}{..}| sentence needs previous number,
+% but |\startnumber| needs a real start number of a list.
+% \begin{macrocode}
+\newcommand\startnumber[1]{\count@#1\advance\count@-1%
+ \global\expandafter\csname c@\@enumctr\endcsname\count@}
+\newcommand\startsubnumber[1]{\count@#1\advance\count@-1%
+ \global\expandafter\csname c@\@subenumctr\endcsname\count@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\liststrut}
+% For the cases of \env{tablist} appears just after empty
+% \env{enumerate} (or analogous) list entry.
+% This command inserts negative |\baselineskip| and put start of
+% `tabular'ed list on the baseline of list number.
+%
+% Optional argument allows to align baselines in the case of high
+% elements in first line of \env{tablist}. In the version 0.0e the calculation
+% of compensating space was changed.
+% \begin{macrocode}
+\newcommand\liststrut[1][]{\def\tempa{#1}\ifx\tempa\empty
+ \strut\@tempskipa\z@
+ \else\settoheight\@tempdima{{$#1$}}\vrule height\@tempdima depth\dp\strutbox width\z@
+ \advance\@tempdima-\ht\strutbox
+ \ifdim\@tempdima>\lineskip\advance\@tempdima\lineskip\fi
+ \@tempskipa\@tempdima
+ \fi
+ \advance\@tempskipa\baselineskip
+% \advance\@tempskipa-\@outerparskip
+ \par\nobreak\vskip-\parskip
+% \advance\@tempskipa\lastskip
+ \nobreak\kern-\@tempskipa\@nobreaktrue}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tabqedhere}
+% Places the QED sign at the end of \env{tabenum} line inside the \env{proof} environment.
+% \begin{macrocode}
+\newcommand\tabqedhere{\cr
+ \noalign{\@par\@tempdima\prevdepth
+ \kern-\@tempdima\kern-\baselineskip\kern\lineskip
+ {\strut\popQED}\@par\kern\@tempdima}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\restorelistitem}
+% For the cases when standard lists appear inside \env{tablist}.
+% \begin{macrocode}
+\let\TeXr@orilistitem\item
+\newcommand\restorelistitem{\let\item\TeXr@orilistitem}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+\endinput
+%%
+%% End of file tablists.dtx \ No newline at end of file