summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/makecell
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/makecell
Initial commit
Diffstat (limited to 'macros/latex/contrib/makecell')
-rw-r--r--macros/latex/contrib/makecell/README16
-rw-r--r--macros/latex/contrib/makecell/makecell-rus.pdfbin0 -> 526531 bytes
-rw-r--r--macros/latex/contrib/makecell/makecell-rus.tex1387
-rw-r--r--macros/latex/contrib/makecell/makecell.dtx1983
-rw-r--r--macros/latex/contrib/makecell/makecell.pdfbin0 -> 266039 bytes
5 files changed, 3386 insertions, 0 deletions
diff --git a/macros/latex/contrib/makecell/README b/macros/latex/contrib/makecell/README
new file mode 100644
index 0000000000..612fa394bd
--- /dev/null
+++ b/macros/latex/contrib/makecell/README
@@ -0,0 +1,16 @@
+makecell 0.1e
+Managing of tabular column heads and cells.
+
+ Package offers a command, based on one-column tabular environment, which
+ allows to support a common layout for tabular column heads in whole
+ document. Another offered command is for creation of multilined tabular
+ cells. There are also: 1) a macro, which changes vertical spaces
+ around all cells in tabular, like in tabls package, but based on array
+ package; 2) macros for multirow cells/heads, which use macro from
+ multirow package; 3) macros for numbered rows of cells or skipping
+ cells and rows in tabulars; 4) diagonally divided cells (plus
+ citation of the sample file of slashbox package); 5) macros for
+ horizonral lines in tabulars with defined thickness.
+
+Documentation: makecell.pdf, makecell-rus.pdf.
+
diff --git a/macros/latex/contrib/makecell/makecell-rus.pdf b/macros/latex/contrib/makecell/makecell-rus.pdf
new file mode 100644
index 0000000000..87e334fb87
--- /dev/null
+++ b/macros/latex/contrib/makecell/makecell-rus.pdf
Binary files differ
diff --git a/macros/latex/contrib/makecell/makecell-rus.tex b/macros/latex/contrib/makecell/makecell-rus.tex
new file mode 100644
index 0000000000..daaed9cb67
--- /dev/null
+++ b/macros/latex/contrib/makecell/makecell-rus.tex
@@ -0,0 +1,1387 @@
+% \iffalse
+%
+% makecell.dtx - Managing of tabular column heads and cells.
+% Russian documentation.
+% (c) 2005--2006 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.
+%
+%<*driver>
+\ProvidesFile{makecell-rus.tex}
+\documentclass{ltxdoc}
+
+\usepackage{mathtext}
+\usepackage[T2A]{fontenc}
+\usepackage[cp1251]{inputenc}
+\usepackage[english,russian]{babel}
+
+\IfFileExists{rotating.sty}{\usepackage{rotating}}{}
+\IfFileExists{footmisc.sty}{\usepackage[perpage]{footmisc}}{}
+\IfFileExists{multirow.sty}{\usepackage{multirow}}{}
+\IfFileExists{hyperref.sty}{\usepackage[unicode]{hyperref}}{}
+\IfFileExists{hypcap.sty}{\usepackage{hypcap}}{}
+\usepackage{makecell}
+\IfFileExists{caption.sty}
+ {\usepackage[font=small,labelfont=bf,labelsep=period]{caption}[2004/11/28]
+ \IfFileExists{floatrow.sty}
+ {\usepackage[font=small,style=plaintop,captionskip=5pt]{floatrow}}
+ {}}{}
+\makeatletter
+\@ifundefined{ttabbox}{\let\ttabbox\relax}{}
+\makeatother
+\usepackage{tabularx}
+\usepackage{slashbox}
+\usepackage{hhline}
+\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}}
+\begin{document}
+ \DocInput{makecell-rus.tex}
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% \GetFileInfo{makecell-rus.tex}
+%
+% \title{Пакет \textsf{makecell}}
+% \author{%
+% Ольга Лапко\\
+% {\tt Lapko.O@g23.relcom.ru} }
+% \maketitle
+% \begin{abstract}
+%^^A% This package helps to create common layout for tabular material.
+%^^A% The |\thead| command, based on one-column tabular environment, is offered
+%^^A% for creation of tabular column heads. This macro allows to support common
+%^^A% layout for tabular column heads in whole documentation. Another command,
+%^^A% |\makecell|, is offered for creation of multilined tabular cells.
+%^^A% There are also command |\makecellbox| command and |mcellbox| environment
+%^^A% usage of tabular cells inside text.
+% Данный пакет помогает создать единое оформление для таблиц во всём
+% документе. Команда |\thead|, использующая окружение одноколоночной
+% таблицы, позволяет создать единообразное оформление для заголовков
+% табличных колонок в~документе. Ещё одна команда, |\makecell|,
+% предлагается для создания многострочных ячеек в~таблицах.
+% Также созданы команда |\makecellbox| и~окружение |mcellbox|
+% для создания таблиц-ячеек внутри текста.
+%
+%^^A% Package also offers: \quad 1)\nobreak\enskip macro |\makegapedcells|,
+%^^A% which changes vertical spaces around all cells in tabular, like in
+%^^A% \package{tabls} package, but uses code of \package{array} package. (Macro
+%^^A% |\makegapedcells| redefines macro |\@classz| from \package{array} package.
+%^^A% Macro |\nomakegapedcells| cancels this redefinition.);
+%^^A% \quad 2)\nobreak\enskip macros |\multirowhead| and |\multirowcell|,
+%^^A% which use |\multirow| macro from \package{multirow} package;
+%^^A% \quad 3)\nobreak\enskip numbered rows |\nline| or skipping cells |\eline|
+%^^A% in tabulars; also are the skipping rows command |\erows| and
+%^^A% repeated rows command |\Xrows|;
+%^^A% \quad 4)\nobreak\enskip diagonally divided cells (|\diaghead|)
+%^^A% plus citation of sample file of \package{slashbox} package, which does the same;
+%^^A% \quad 5)\nobreak\enskip |\hline| and |\cline| width necessary thickness:
+%^^A% |\Xhline| and |\Xcline| consequently.
+% Также предлагается: \qquad 1)\nobreak\enskip макрокоманда |\makegapedcells|,
+% которая изменяет вертикальные отбивки вокруг табличных ячеек, аналогично
+% пакету \package{tabls}, но использует пакет \package{array}. (Команда
+% |\makegapedcells| переопределяет макрокоманду |\@classz| пакета
+% \package{array}. Макрокоманда |\nomakegapedcells| отменяет переопределение.);
+% \qquad 2)\nobreak\enskip макрокоманды |\multirowhead| и~|\multirowcell|,
+% использующие макрокоманду |\multirow| из пакета \package{multirow};
+% \qquad 3)\nobreak\enskip ряд нумерованных |\nline| или пропущенных |\eline|
+% ячеек, а~также пустых рядов |\erows| и~рядов с~повторяющимся текстом |\Xrows|;
+% \qquad 4)\nobreak\enskip ячейки разделённые диагональю (|\diaghead|),
+% а~также файл образец пакета \package{slashbox}, делающего то же самое;
+% \qquad 5)\nobreak\enskip линейки |\hline| и~|\cline| с~заданной толщиной:
+% |\Xhline| и~|\Xcline|.
+% \smallskip
+%
+% \end{abstract}
+%
+% \clearpage
+% \tableofcontents
+%
+% \clearpage
+%^^A% \section{Tabular Cells and Column Heads}
+% \section{Табличные ячейки и~заголовки колонок}
+%
+%^^A% \subsection{Building Commands}
+% \subsection{Основные команды}
+%
+% \DescribeMacro{\makecell}
+%^^A% Macro creates one-column tabular with predefined common settings of
+%^^A% alignment, spacing and vertical spaces around (see section~\ref{sec:sets}).
+%^^A% This will be useful for creation of multilined cells. This macro allows
+%^^A% optional alignment settings.
+% Макрокоманда создаёт окружение одноколоночной таблицы с~предопределёнными общими
+% параметрами выключки, интерлиньяжа и~вертикальных отбивок вокруг
+% (см. разд.~\ref{sec:sets}). Её удобно использовать для
+% многострочных ячеек. Дополнительный аргумент команды позволяет
+% изменить выключку таблицы.
+% \begin{quote}
+% |\makecell|\oarg{vertical or/and horizontal alignment}\marg{cell text}
+% \end{quote}
+%^^A% For vertical alignment you use \texttt{t}, \texttt{b}, or \texttt{c}---%^^A
+%^^A% this letters you usually put in optional argument of \env{tabular} or
+%^^A% \texttt{array} environments. For horizontal alignment you may use alignment
+%^^A% settings like \texttt{r}, \texttt{l}, or \texttt{c}, or more complex, like
+%^^A% |{p{3cm}}|. Since this package loads \package{array} package, you may
+%^^A% use such alignment settings like |{>{\parindent1cm}p{3cm}}|.
+% Для вертикальной выключки используются обозначения \texttt{t}, \texttt{b},
+% или \texttt{c} \cdash--- эти буквы используются в~дополнительном аргументе окружений
+% \env{tabular} или \texttt{array}. Для горизонтальной выключки вы можете
+% использовать обозначения \texttt{r}, \texttt{l}, или \texttt{c}, или более
+% сложные: |{p{3cm}}|. Поскольку данный пакет загружает пакет \package{array}, вы
+% можете использовать и~такие определения выключки: |{>{\parindent1cm}p{3cm}}|.
+%\begin{verbatim}
+%\begin{tabular}{|c|c|}
+%\hline
+%Cell text & 28--31\\
+%\hline
+%\makecell{Multilined \\ cell text} & 28--31\\
+%\hline
+%\makecell[l]{Left aligned \\ cell text} & 37--43\\
+%\hline
+%\makecell*[r]{Right aligned \\ cell text} & 37--43\\
+%\hline
+%\makecell[b]{Bottom aligned \\ cell text} & 52--58\\
+%\hline
+%\makecell*[{{p{3cm}}}]{Cell long text with predefined width} & 52--58\\
+%\hline
+%\makecell[{{>{\parindent1em}p{3cm}}}]{Cell long...} & 52--58\\
+%\hline
+%\end{tabular}
+%\end{verbatim}
+% \begin{table}[h]
+% \ttabbox
+% {\caption{Пример многострочных ячеек}\label{tab:cells}}%
+% {\begin{tabular}{|c|c|}
+% \hline
+% Cell text & 28--31\\
+% \hline
+% \makecell{Multilined \\ cell text} & 28--31\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & 52--58\\
+% \hline
+% \makecell*[{{p{3cm}}}]{Cell long text with predefined width} & 52--58\\
+% \hline
+% \makecell[{{>{\parindent1em}p{3cm}}}]{Cell long text with predefined width} &
+% 52--58\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+%^^A% Starred form of command, |\makecell*|, creates vertical |\jot| spaces
+%^^A% around.
+% Звёздная форма команды, |\makecell*|, создаёт вертикальные отбивки равные~|\jot|.
+%
+%^^A% \emph{Note}. When you define column alignment like |p{3cm}| in optional
+%^^A% argument of |\makecell| (or |\thead|, see below), please follow these
+%^^A% rules: \quad 1)\nobreak\enskip if vertical
+%^^A% alignment defined, write column alignment in group, e.g. |[c{p{3cm}}]|;
+%^^A% \quad 2)\nobreak\enskip if vertical alignment is absent,
+%^^A% write column alignment in double
+%^^A% group---|[{{p{3cm}}}]|, or add empty group---|[{}{p{3cm}}]|. Be also
+%^^A% careful with vertical alignment when you define column alignment as
+%^^A% paragraph block: e.g., use |{{b{3cm}}}| for bottom alignment (and
+%^^A% |{{m{3cm}}}| for centered vertical alignment).
+% \emph{Замечание}. При определении выключки колонки типа |{p{3cm}}|
+% в~дополнительном аргументе команды |\makecell| (или |\thead|, см.~ниже),
+% нужно соблюдать следующие правила:
+% \quad 1)\nobreak\enskip если есть
+% обозначение вертикальной выключки, взять выключку колонки в~группу:
+% |[c{p{3cm}}]|; \quad
+% 2)\nobreak\enskip если вертикальной выключки нет, взять выключку
+% колонки в~двойную группу \cdash--- |[{{p{3cm}}}]| или добавить пустую группу
+% \cdash--- |[{}{p{3cm}}]|.
+% Будьте внимательны с~вертикальной выключкой ячейки при задании выключки
+% колонки в~виде абзаца:
+% например, нужно использовать |{b{3cm}}| для выключки по нижней линии
+% (и~|{m{3cm}}| для выключки по средней линии).
+%
+% \DescribeMacro{\thead}
+%^^A% Macro creates one-column \texttt{tabular} for column heads with predefined
+%^^A% common settings (see table~\ref{tab:thead}). This macro uses common layout
+%^^A% for column heads: font, alignment, spacing, and vertical spaces around
+%^^A% (see section~\ref{sec:sets}).
+% Макрокоманда создаёт окружение одноколоночной таблицы для заголовков колонок
+% с~предопределёнными
+% общими параметрами выключки и~интерлиньяжа (см.~табл.~\ref{tab:thead}).
+% Эта макрокоманда использует общие установки для заголовков колонок: шрифт,
+% выключку, интерлиньяж, вертикальные отбивки вокруг (см. разд.~\ref{sec:tsets}).
+%\begin{verbatim}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\begin{tabular}{|l|c|}
+%\hline
+%\thead{First column head}&
+% \thead{Second \\multlined \\ column head}\\
+%\hline
+%Left column text & 28--31\\
+%\hline
+%\end{tabular}
+%\end{verbatim}
+% \begin{table}[h]
+% \ttabbox
+% {\caption{Пример заголовков колонок}\label{tab:thead}}
+% {\renewcommand\theadset{\def\arraystretch{.85}}
+% \begin{tabular}{|l|c|}
+% \hline
+% \thead{First column head}&
+% \thead{Second \\multlined \\ column head}\\
+% \hline
+% Long left column text & 28--31\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+%^^A% Starred form of command, |\thead*|, creates vertical |\jot| spaces around.
+% Звёздная форма команды, |\thead*|, создаёт вертикальные отбивки равные~|\jot|.
+%
+% \DescribeMacro{\rothead}
+%^^A% Creates table heads rotated by 90$^\circ$ counterclockwise.
+%^^A% Macro uses the same font and spacing settings as previous
+%^^A% one, but column alignment changed to |p{\rotheadsize}| with |\raggedright|
+%^^A% justification: in this case left side of all text lines ``lies''
+%^^A% on one base line.
+% Создаёт заголовки колонок, развёрнутые на 90$^\circ$ против часовой стрелки.
+% Макрокоманда использует те же установки шрифта и~интерлиньяжа как и~предыдущая,
+% но выключка колонки изменена на |p{\rotheadsize}| с~выравниванием вправо
+% (|\raggedright|): в~результате левый край строк заголовка оказывается
+% на одной базовой линии.
+%
+% \DescribeMacro{\rotheadsize}
+%^^A% This parameter defines the width of rotated tabular heads. You may define
+%^^A% that like:
+% Данный параметр определяет ширину колонки для развёрнутых вертикально заголовков.
+% Его можно определить как:
+% \begin{quote}
+% |\setlength\rotheadsize{3cm}|
+% \end{quote}
+% или
+% \begin{quote}
+% |\settowidth\rotheadsize{\theadfont |\meta{Widest head text}|}|
+% \end{quote}
+%^^A% like in following example:
+% как сделано в~следующем примере (табл.~\ref{tab:rotheads}):
+% \begin{table}
+% \ttabbox
+% {\caption{Пример заголовков колонок, развёрнутых вертикально}\label{tab:rotheads}}%
+% {\settowidth\rotheadsize{\theadfont Second multilined}%^^A
+% \begin{tabular}{l|l}
+% \hline
+% \thead{First column head}&
+% \rothead{Second multilined \\ column head}\\
+% \hline
+% Long left column text & 28--31\\
+% \hline
+% \end{tabular}}
+% \end{table}%
+%\begin{verbatim}
+%\settowidth\rotheadsize{\theadfont Second multilined}
+%\begin{tabular}{|l|c|}
+%\hline
+%\thead{First column head}&
+% \rotthead{Second multilined \\ column head}\\
+%\hline
+%Left column text & 28--31\\
+%\hline
+%\end{tabular}
+%\end{verbatim}
+%
+%^^A% \subsection{Settings For Tabular Cells}\label{sec:sets}
+% \subsection{Установки для табличных ячеек}\label{sec:sets}
+%
+%^^A% This section describes macros, which make layout tuning for multilined
+%^^A% cells, created by |\makecell| macro (and also |\multirowcell| and
+%^^A% |\rotcell| macros). The |\cellset| macro also is used by |\thead|
+%^^A% (|\rothead|, |\multirowtead|) macro.
+% В~данном разделе приведены команды, которые задают оформление
+% многострочных ячеек, заданных командой |\makecell| (а~также
+% |\multirowcell| и~|\rotcell|).
+% Команда |\cellset| используется также командой |\thead| (а~также
+% |\rothead|, |\multirowtead|).
+%
+% \DescribeMacro{\cellset}
+%^^A% Spacing settings for cells. Here you could use commands like:
+% Установки интерлиньяжа для табличных ячеек. Здесь можно использовать следующие
+% команды:
+% \begin{quote}
+% |\renewcommand\cellset{\renewcommand\arraytretch{1}%|\\
+% | \setlength\extrarowheight{0pt}}|
+% \end{quote}
+%^^A% as was defined in current package.
+% как определено в~данном пакете.
+%
+% \DescribeMacro{\cellalign}
+%^^A% Default align for cells. Package offers vertical and horizontal centering
+%^^A% alignment, it defined like:
+% Выключка по умолчанию для табличных ячеек. Пакет предлагает вертикальную
+% и~горизонтальную выключку по центру, определённую следующим образом:
+% \begin{quote}
+% |\renewcommand\cellalign{cc}|
+% \end{quote}
+%
+% \DescribeMacro{\cellgape}
+%^^A% Define vertical spaces around |\makecell|, using |\gape| command if
+%^^A% necessary. It defined like:
+% Определяет вертикальные отбивки вокруг ячейки (|\makecell|), используя,
+% если нужно, команду |\gape|. Она определена как:
+% \begin{quote}
+% |\renewcommand\cellgape{}|
+% \end{quote}
+%^^A% You may define this command like
+% Можно определить макрокоманду как
+% \begin{quote}
+% |\renewcommand\cellgape{\Gape[1pt]}|
+% \end{quote}
+%^^A% or
+% или
+% \begin{quote}
+% |\renewcommand\cellgape{\gape[t]}|
+% \end{quote}
+%^^A% (See also section~\ref{sec:gape} about |\gape| and |\gape| command.)
+% (См.~также разд.~\ref{sec:gape} о~командах |\gape| и~|\Gape|.)
+%
+% \DescribeMacro{\cellrotangle}
+%^^A% The angle for rotated cells and column heads. The default value 90
+%^^A% (counterclockwise). This value definition is used by both |\rotcell| and
+%^^A% |\rothead| macros.
+% Угол поворота для развёрнутых ячеек и~заголовков колонок.
+% По умолчанию задан угол 90 (против часовой стрелки). Это определение
+% используется командами |\rotcell| и~|\rothead|.
+%
+%^^A% \subsection{Settings For Column Heads}
+% \subsection{Установки для заголовков колонок}\label{sec:tsets}
+%
+%^^A% This section describes macros, which make layout tuning for tabular column
+%^^A% heads, created by |\thead| (|\rothead|, |\multirowtead|) macro.
+% В~данном разделе приведены команды, которые позволяют настроить оформление заголовков
+% табличных колонок, заданных командой |\thead| (|\rothead|, |\multirowtead|).
+%
+% \DescribeMacro{\theadfont}
+%^^A% Sets a special font for column heads. It could be smaller size
+% Задаёт шрифт для заголовков колонок. Может быть задан меньший кегель
+% \begin{quote}
+% |\renewcommand\theadfont{\foonotesize}|
+% \end{quote}
+%^^A% as was defined in current package (here we suppose that
+%^^A% \verb|\small| command used for tabular contents itself).
+%^^A% Next example defines italic shape
+% как определено в данном пакете (здесь учитывается, что задана
+% команда \verb|\small| для шрифта самой таблицы).
+% Следующий пример задаёт курсивное начертание
+% \begin{quote}
+% |\renewcommand\theadfont{\itshape}|
+% \end{quote}
+%
+% \DescribeMacro{\theadset}
+%^^A% Spacing settings for column heads. Here you could use commands like:
+% Установки интерлиньяжа для заголовков колонок. Здесь можно использовать следующие
+% команды:
+% \begin{quote}
+% |\renewcommand\theadset{\renewcommand\arraytretch{1}%|\\
+% | \setlength\extrarowheight{0pt}}|
+% \end{quote}
+%
+% \DescribeMacro{\theadalign}
+%^^A% Default align for tabular column heads. Here also offered centering
+%^^A% alignment:
+% Выключка по умолчанию для заголовков колонок. Здесь также задана выключка по центру:
+% \begin{quote}
+% |\renewcommand\theadalign{cc}|
+% \end{quote}
+%
+% \DescribeMacro{\theadgape}
+%^^A% Define vertical spaces around column head (|\thead|),
+%^^A% using |\gape| command if necessary.
+%^^A% It defined like:
+% Определяет вертикальные отбивки вокруг заголовка колонки (|\thead|), используя,
+% если нужно, команду |\gape|. Определена как:
+% \begin{quote}
+% |\renewcommand\theadgape{\gape}|
+% \end{quote}
+%
+% \DescribeMacro{\rotheadgape}
+%^^A% Analogous definition for rotated column heads. Default is absent:
+% То же самое для вертикальных заголовков. По умолчанию отсутствует:
+% \begin{quote}
+% |\renewcommand\rotheadgape{}|
+% \end{quote}
+%
+% \clearpage
+%^^A% \section{Changing of Height and Depth of Boxes}\label{sec:gape}
+% \section{Изменение высоты и глубины боксов}\label{sec:gape}
+%
+%^^A% Sometimes \env{tabular} or \env{array} cells, or some elements in text need a
+%^^A% height/depth correction. The |\raisebox| command could help for it, but
+%^^A% usage of that macro in these cases, especially inside math, is rather
+%^^A% complex. Current package offers the |\gape| macro, which usage is similar
+%^^A% to |\smash| macro. The |\gape| macro allows to change height and/or depth
+%^^A% of included box with necessary dimension.
+% Иногда заголовки табличных колонок, табличные ячейки или элементы текста требуют
+% коррекции высоты/глубины. Макрокоманда |\raisebox| может помочь,
+% но использование её в~подобных ситуациях, особенно в~математике, довольно громоздко.
+% Данный пакет предлагает макрокоманду |\gape|, которая используется аналогично
+% команде |\smash|. Макрокоманда |\gape| позволяет изменить высоту и/или глубину бокса
+% на необходимую величину.
+%
+% \DescribeMacro{\gape}
+%^^A% This macro changes included box by |\jot| value (usually 3\,pt). It is
+%^^A% defined with optional and mandatory arguments, like |\smash| macro, which
+%^^A% (re)defined by \package{amsmath} package. Optional argument sets change of
+%^^A% height only (\texttt{t}) or depth only~(\texttt{b}). Mandatory argument
+%^^A% includes text.
+% Первая макрокоманда изменяет бокс на величину |\jot| (обычно 3\,pt). Она задаётся
+% дополнительным и~обязательным аргументами, как и~команда |\smash|,
+% (пере)определённая пакетом \package{amsmath}. Дополнительный аргумент задаёт
+% изменение только высоты (\texttt{t}) или только глубины
+% (\texttt{b}). Обязательный включает собственно текст.
+% \begin{quote}
+% |\gape|\oarg{\texttt{t} or \texttt{b}}\marg{text}
+% \end{quote}
+%^^A% Examples of usage:
+% Примеры использования:
+% \begin{quote}
+% \noindent
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \gape{\cmd{\gape}\texttt{\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \gape[t]{\cmd{\gape}\texttt{[t]\{text\}}}\cr
+% \noalign{\hrule\vskip\jot}
+% \crcr}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \gape[b]{\cmd{\gape}\texttt{[b]\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}
+% \end{quote}
+%
+% \DescribeMacro{\Gape}
+%^^A% Another way of height/depth modification. This macro allows different
+%^^A% correction for height and depth of box:
+% Другой вариант изменения высоты/глубины. Данная макрокоманда позволяет сделать
+% корректировку отдельно для высоты и~глубины бокса:
+% \begin{quote}
+% |\Gape|\oarg{height corr}\oarg{depth corr}\marg{text}
+% \end{quote}
+%
+%^^A% If both arguments absent, |\Gape| command works like |\gape|\marg{text}, in
+%^^A% other words, command uses |\jot| as correction value for height and depth
+%^^A% of box.
+% Если отсутствуют оба необязательных аргумента, команда |\Gape| работает аналогично
+% |\gape|\marg{text}, другими словами, использует для корректировки высоты и~глубины
+% величину~|\jot|.
+%
+%^^A% If only one optional argument exists, |\Gape| command uses value
+%^^A% from this argument for both height and depth box corrections.
+% Если присутствует только один необязательный аргумент, команда |\Gape| использует
+% его значение для корректировки высоты и~глубины бокса.
+% \begin{quote}
+% \noindent
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape{\cmd{\Gape}\texttt{\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\texttt{\phantom{xxxxx}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape[\jot]{\cmd{\Gape}\texttt{[\cmd{\jot}]\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\\[2ex]
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape[6pt]{\cmd{\Gape}\texttt{[6pt]\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape[6pt][-2pt]{\cmd{\Gape}\texttt{[6pt][-2pt]\{text\}}}\cr
+% \noalign{\hrule\vskip8pt}
+% \crcr}}
+% \end{quote}
+%
+%^^A% You may also use |\height| and |\depth| parameters in optional arguments
+%^^A% of |\Gape| macro, parameters was borrowed from |\raisebox| command.
+% В~опциях команды |\Gape| вы можете использовать параметры |\height| и~|\depth|,
+% которые позаимствованы из команды |\raisebox|.
+%
+% \DescribeMacro{\bottopstrut}
+% \DescribeMacro{\topstrut}
+% \DescribeMacro{\botstrut}
+%^^A% These three macros modify standard |\strut| by |\jot| value:
+%^^A% |\bottopstrut| changes both height and depth;
+%^^A% \nopagebreak|\topstrut| changes only height;
+%^^A% |\botstrut| changes only depth.
+%^^A% These commands could be useful, for example, in first and last table rows.
+% Эти три команды изменяют стандартную команду |\strut| на величину |\jot|:
+% |\bottopstrut| изменяет и~высоту и~глубину;
+% |\topstrut| изменяет только высоту;
+% |\botstrut| изменяет только глубину.
+% Эти команды можно использовать, например, в~первом и~последнем рядах таблицы.
+%
+%^^A% \emph{Note}. If you use
+%^^A% \package{bigstrut} package note that these macros duplicate \cmd{\bigstrut},
+%^^A% \cmd{\bigstrut[t]}, and \cmd{\bigstrut[b]} commands consequently. Please
+%^^A% note that value, which increases strut in \cmd{\topstrut} etc. equals to
+%^^A% \cmd{\jot}, but \cmd{\bigstrut} and others use a special dimension
+%^^A% \cmd{\bigstrutjot}.
+% \emph{Замечание}. Если
+% вы используете пакет \package{bigstrut}, обратите внимание, что эти три команды
+% дублируют \cmd{\bigstrut}, \cmd{\bigstrut[t]}, и~\cmd{\bigstrut[b]} соответственно.
+% Обратите также внимание что величина, изменяющая \cmd{\strut} в~команде
+% \cmd{\topstrut} и~других равна \cmd{\jot}, а~команда
+% \cmd{\bigstrut} и~использует специальную величину \cmd{\bigstrutjot}.
+%
+% \clearpage
+%^^A% \section{How to Change Vertical Spaces Around
+%^^A% in Whole Table}\label{sec:beta}
+% \section{Как изменить вертикальные отбивки во всей таблице}\label{sec:beta}
+%
+%^^A% This section describes macros which try to emulate one of possibilities of
+%^^A% \package{tabls} package: to get necessary vertical spacing around cells.
+% Данный раздел описывает макрокоманды, которые пытаются эмулировать
+% одну из возможностей пакета \package{tabls}:
+% создание необходимых отбивок вокруг ячеек таблицы.
+%
+% \DescribeMacro{\setcellgapes}
+%^^A% Sets the parameters for vertical spaces:
+% Определяет параметры для вертикальных отбивок:
+% \begin{quote}
+% |\setcellgapes|\oarg{\texttt{t} or \texttt{b}}\marg{value}
+% \end{quote}
+%^^A% The next examples with array and tabular use following settings:
+% Примеры таблиц, приведённые ниже используют следующие установки:
+% \begin{quote}
+% |\setcellgapes{5pt}|
+% \end{quote}
+%^^A% You may also try to load negative values if you wish. This macro you may
+%^^A% put in the preamble as common settings.
+% Вы можете также ввести отрицательные значения. Данную макрокоманду можно поместить
+% в~преамбуле документа как общие установки.
+%
+% \DescribeMacro{\makegapedcells}
+% \DescribeMacro{\nomakegapedcells}
+%^^A% The first macro switches on vertical spacing settings. The second cancels
+%^^A% first~one.
+% Первая макрокоманда включает создание вертикальных отбивок. Вторая отменяет первую.
+%
+%^^A% The \cmd{\makegapedcells} macro temporarily redefines macro
+%^^A% |\@classz| of \package{array} package, so use this mechanism carefully.
+%^^A% Load |\makegapedcells| inside group or inside environment
+%^^A% (see table~\ref{tab:gaped}):
+% Макрокоманда \cmd{\makegapedcells} временно переопределяет макрокоманду
+% |\@classz| из пакета \package{array}, поэтому используйте её осторожно.
+% Вводите команду |\makegapedcells| внутри группы или внутри окружения
+% (см.~табл.~\ref{tab:gaped}):
+%\begin{verbatim}
+%\begin{table}[h]
+%\makegapedcells
+%...
+%\end{table}
+%\end{verbatim}
+% \setcellgapes{5pt}
+% \begin{table}
+% \makegapedcells
+% \ttabbox
+% {\caption{Пример многострочных ячеек с~дополнительными вертикальными отбивками}%^^A
+% \label{tab:gaped}}%
+% {\begin{tabular}{|c|c|}
+% \hline
+% Cell text & 28--31\\
+% \hline
+% \makecell{Multilined \\ cell text} & 28--31\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & 52--58\\
+% \hline
+% \makecell*[{{p{3cm}}}]{Cell long text with predefined width} & 52--58\\
+% \hline
+% \makecell[{{>{\parindent1em}p{3cm}}}]{Cell long text with predefined width} &
+% 52--58\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+%^^A% Please note that space defined in |\setcellgapes| and space which creates
+%^^A% |\gape| mechanism in commands
+%^^A% for tabular cells (usually |\thead| or |\makecell*|) are summarized.
+% Обратите внимание, что отбивка заданная в~|\setcellgapes| и~отбивки, которые
+% создаёт макрокоманда |\gape| (|\Gape|) в~командах ячеек (обычно в~|\thead|
+% или в~|\makecell*|) суммируются.
+%
+% \clearpage
+%^^A% \section{Multirow Table Heads and Cells}
+% \section{Заголовки колонок и~ячейки, занимающие несколько рядов}
+%
+%^^A% The next examples show usage of macros which use |\multirow| command from
+%^^A% \package{multirow} package.\nopagebreak
+% Следующие примеры показывают использование макрокоманд, использующих команду
+% |\multirow| из пакета \package{multirow}.\nopagebreak
+%
+%^^A% At first goes short repetition of arguments of |\multirow| macro itself:
+% В~начале краткое повторение значений аргументов команды |\multirow|:
+% \begin{quote}
+% |\multirow|\marg{nrow}\oarg{njot}\marg{width}\oarg{vmove}\marg{contents}
+% \end{quote}
+%^^A% \marg{nrow} sets number of rows (i.e. text lines);
+% \marg{nrow} задаёт число рядов (то есть строк текста);
+%^^A% \oarg{njot} is mainly used if you've used \package{bigstrut} package: it makes
+%^^A% additional tuning of vertical position (see comments in
+%^^A% \package{multirow} package);
+% \oarg{njot} обычно используется если вы используете пакет \package{bigstrut}: делает
+% дополнительную настройку вертикального положения (см. пояснения в~пакете
+% \package{mutirow});
+%^^A% \marg{width} defines width of contents, the |*| sign used to indicate that
+%^^A% the text argument's natural width is to be used;
+% \marg{width} определяет ширину включённого текста, знак~|*| используется
+% для указания, что используется натуральная ширина включённого текста;
+%^^A% \oarg{vmove} is a length used for fine tuning: the text will be raised (or
+%^^A% lowered, if \meta{vmove} is negative) by that length;
+% \oarg{vmove} величина, используемая для тонкой настройки: текст может быть
+% поднят (или опущен, если \meta{vmove} отрицательна) на эту величину;
+%^^A% \marg{contents} includes ``|\multirow|'ed'' text.\smallskip
+% \marg{contents} <<многорядный>> текст.\smallskip\pagebreak[3]
+%
+% \DescribeMacro{\multirowcell}
+% \DescribeMacro{\multirowthead}
+%^^A% These two macros use following arguments (example uses |\multirowcell|
+%^^A% command):
+% Эти две команды используют следующие аргументы (пример использует команду
+% |\multirowcell|):
+% \begin{quote}
+% |\multirowcell|\marg{nrow}\oarg{vmove}\oarg{v or/and h alignment}\marg{contents}
+% \end{quote}
+%^^A% in these macros were skipped \oarg{njot} and \marg{width}. Instead of
+%^^A% tuning optional argument \oarg{njot} for vertical
+%^^A% correction used \oarg{vmove} optional argument.
+%^^A% For the \marg{width} argument both |\multirowcell| and |\multirowthead|
+%^^A% macros use natural width of contents (i.e. the |*| argument used).
+% в~этих макрокомандах опущены аргументы \oarg{njot} и~\marg{width}.
+% Вместо дополнительного аргумента \oarg{njot} для вертикальной настройки
+% используется дополнительный аргумент \oarg{vmove}.
+% В~качестве аргумента \marg{width} макрокоманды |\multirowcell| и~|\multirowthead|
+% используют натуральную величину включённого текста (то есть используется
+% аргумент |*|).
+%
+%^^A% First example (table~\ref{tab:mrowI}) with ``|\multirow|'ed'' column heads
+%^^A% and cells:
+% Первый пример (табл.~\ref{tab:mrowI}) с~<<многорядными>> заголовками
+% табличных колонок и~ячейками:
+%\begin{verbatim}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\begin{tabular}{|l|c|c|}
+% \multirowthead{4}{First ...}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second ...} & \thead{Third ...}\\
+% \hline
+% Cell text & A &\multirowcell{3}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined\\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left ...} & C & \multirowcell{4}[1ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right ...} & D & \\
+% \hline
+% \makecell[b]{Bottom ...} & E & \multirowcell{5}[1ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell ...} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell ...} & G & \\
+% \hline
+% \end{tabular}
+%\end{verbatim}
+%
+% \begin{table}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+% \ttabbox
+% {\caption{Пример <<многорядных>> ячеек}\label{tab:mrowI}}%
+% {\begin{tabular}{|l|c|c|}
+% \hline
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \hline
+% Cell text & A &\multirowcell{3}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined\\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned\\ cell text} & C & \multirowcell{4}[1ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned\\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & E &
+% \multirowcell{5}[1ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell long long long long text with predefined width} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell long long long long text with
+% predefined width} & G & \\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+%^^A% Second example (table~\ref{tab:mrowII}) with ``multirow'ed'' column heads
+%^^A% and cells uses |\makegapedcells| command. The |\theadgape| command does
+%^^A% nothing:
+% Второй пример (табл.~\ref{tab:mrowII}) с~<<многорядными>> заголовками колонок
+% и~ячейками использует команду |\makegapedcells|. Команда |\theadgape| ничего
+% не делает:
+%\begin{verbatim}
+%\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+%...
+%\end{verbatim}
+% \begin{table}\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+% \ttabbox
+% {\caption{Пример <<многорядных>> ячеек с~дополнительными вертикальными
+% отбивками}\label{tab:mrowII}}%
+% {\begin{tabular}{|l|c|c|}
+% \hline
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \hline
+% Cell text & A &\multirowcell{4}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined \\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & C & \multirowcell{4}[0ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned \\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & E &
+% \multirowcell{6}[0ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell long long long long text with predefined width} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell long long long long text
+% with predefined width} & G & \\
+% \hline
+% \end{tabular}}
+% \end{table}
+% \bigskip
+%
+%^^A% The last example (table~\ref{tab:mrowIII}) uses \env{tabularx} environment
+%^^A% with |\hsize| in the width argument.
+% Последний пример (табл.~\ref{tab:mrowIII}) использует окружение \env{tabularx}
+% со значением |\hsize| в~аргументе ширины таблицы.
+%\begin{verbatim}
+%\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+%\begin{tabularx}\hsize{|X|c|c|}
+%...
+%\cline{1-2}
+%\makecell[{{p{\hsize}}}]{Cell ...} & F & \\
+%\cline{1-2}
+%\makecell[{{>{\parindent1em}p{\hsize}}}]{Cell ...} & G & \\
+%\hline
+%\end{tabularx}
+%\end{verbatim}
+%^^A% As you may see the |\makecell|'s in last two rows defined as
+% Как можно видеть, ячейки |\makecell| в~последних двух рядах определены как
+% \begin{quote}
+% |\makecell[{{p{\hsize}}}]{...}|
+% \end{quote}
+% и
+% \begin{quote}
+% |\makecell[{{>{\parindent1em}p{\hsize}}}]{...}|
+% \end{quote}
+%^^A% consequently.
+% соответственно.
+% \begin{table}\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadfont{\footnotesize}%
+%\renewcommand\theadgape{}
+% \ttabbox
+% {\caption{Пример окружения \env{tabularx}}\label{tab:mrowIII}}%
+% {\begin{tabularx}\hsize{|X|c|c|}
+% \hline
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \hline
+% Cell text & A &\multirowcell{4}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined \\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & C & \multirowcell{4}[0ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned \\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & E &
+% \multirowcell{6}[0ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{\hsize}}}]{Cell long long long long long long text with
+% predefined width} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{\hsize}}}]{Cell long long long long
+% long long text with predefined width} & G & \\
+% \hline
+% \end{tabularx}}
+% \end{table}
+%
+%^^A% \subsection{Multirow Table Heads and Cells: Second Variant}
+% \subsection{Ячейки на несколько рядов: второй вариант}
+%
+%^^A% Another, simplified, variant of multirow cell: use
+%^^A% |\makecell| and |\thead| commands, and set |\\| with
+%^^A% negative space at the end, for example
+% Второй, упрощённый, вариант задания ячейки на несколько рядов: \cdash---
+% использовать команды |\makecell| и~|\thead|, а~в~конце аргумента задать |\\|
+% с~отрицательной отбивкой, например
+%\begin{quote}
+% |\thead{First Column head\\[-5ex]}|
+%\end{quote}
+%^^A% cells, which stay in one ``multi row'' will have the same value of this
+%^^A% negative space, in spite of different number of lines in their contents.
+% при этом у~ячеек в~одном <<многоярусном>> ряду, сколько бы строк они ни имели бы,
+% отрицательная отбивка будет всегда одинаковая.
+%
+% \clearpage\suppressfloats[t]
+%^^A% \section{Numbered Lines in Tabulars}
+% \section{Нумерованные ряды ячеек в~таблицах}
+%
+%^^A% The three commands |\eline|, |\nline|, |\rnline| allow to skip:
+% Команды |\eline|, |\nline|, |\rnline| позволяют пропустить несколько ячеек:
+% \begin{quote}
+% |\eline|\marg{number of cells}
+% \end{quote}
+% и~пронумеровать (|\nline|) несколько или все ячейки в~ряду:
+% \begin{quote}
+% |\nline|\oarg{numbering type}\oarg{start number}\marg{number of cells}
+% \end{quote}
+%^^A% Command |\rnline| does the same as |\nline|, but allows numbering by
+%^^A% Russian letters (it redefines
+%^^A% \LaTeX's |\Alph| and |\alph| with |\Asbuk| and |\asbuk| consequently).
+%^^A% (see table~\ref{tab:elines})
+% Команда |\rnline| работает так же как |\nline|, но вместо нумерации
+% латинскими буквами задаётся нумерация русскими (переопределяются счётчики
+% \LaTeX'а |\Alph| а~|\alph| на |\Asbuk| и~|\asbuk| соответственно).
+% (см.~табл.~\ref{tab:elines})
+%\begin{verbatim}
+% \begin{tabular}{|*{12}{c|}}
+% \hline
+% \eline{6} \\ \hline
+% \nline{6} \\ \hline
+% \eline{3} & \nline[1][4]{3} \\ \hline
+% \rnline[(a)]{6} \\ \hline
+% \nline[column I]{6} \\ \hline
+% \end{tabular}
+%\end{verbatim}
+%
+% \begin{table}[htb]
+% \ttabbox
+% {\caption{Примеры заполнения ячеек}\label{tab:elines}}%
+% {\begin{tabular}{|*{12}{c|}}
+% \hline
+% \eline{6} \\ \hline
+% \nline{6} \\ \hline
+% \eline{3} & \nline[1][4]{3} \\ \hline
+% \rnline[(a)]{6} \\ \hline
+% \nline[column I]{6} \\ \hline
+% \end{tabular}}
+%\end{table}
+%
+%^^A% Two ``lazy'' commands: for empty table rows
+%^^A% (|\erows|) and for rows with repeated text (|\Xrows|) were added in the version V0.1e.
+% В~версии V0.1e добавлены две команы «для лодырей»: для создания пустых рядов в~таблице
+% (|\erows|) и~для рядов с~повторяющимся текстом (|\Xrows|).
+%
+%\DeleteShortVerb{\|}
+%\begin{verbatim}
+% \begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \erows{4}{8}
+% \end{tabular}\quad
+% \begin{tabular}{||c||c||c||c||}
+% \hhline{|t:=:t:=:t:=:t:=:t|}
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hhline{|:=::=::=::=:|}
+% \erows[\\ \hhline{|:=::=::=::=:|}]{4}{8}
+% \eline{4}\\ \hhline{|b:=:b:=:b:=:b:=:b|}
+% \end{tabular}\quad
+% \begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \Xrows{\refstepcounter{enumi}\arabic{enumi}.\eline{3}\\ \hline}{8}
+% \end{tabular}
+%\end{verbatim}
+%
+% \begin{table}[hbt]\extrarowheight1pt
+% \ttabbox[\hsize]
+% {\caption{Examples of filling of cells}\label{tab:elines}}%
+% {\begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \erows{4}{8}
+% \end{tabular}\par\bigskip
+% \begin{tabular}{||c||c||c||c||}
+% \hhline{|t:*3{=:t:}=:t|}
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hhline{|:*3{=::}=:|}
+% \erows[\\ \hhline{|:*3{=::}=:|}]{4}{7}
+% \eline{4}\\
+% \hhline{|b:*3{=:b:}=:b|}
+% \end{tabular}\par\bigskip
+% \begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \Xrows{\refstepcounter{enumi}\arabic{enumi}.\eline{4}\\ \hline}{8}
+% \end{tabular}}
+%\end{table}
+%\MakeShortVerb{\|}
+%
+%^^A% \section{Cells (One-Column Tabulars) in the Text}
+% \section{Ячейки (одноколоные таблицы) вкралпённые в~текст}
+%
+%^^A% If the |\makecell| command appears in the text (outside outer tabular
+%^^A% environment) it could create wrong layout. The |\makecellbox| command
+%^^A% and |mcellbox| environment are created for one-column tabulars in the text.
+% Если команда |\makecell| появится внутри текста (т.\,е. вне другого окружения
+% выравнивания) она создаст неверную вёрстку. Команда |\makecellbox| и~окружение
+% |mcellbox| созданы для одноколонных простых таблиц, вкраплённых в~текст.
+%
+%^^A% \section{Diagonally Divided Cell}
+% \section{Ячейки, разделённые по диагонали}
+%
+%^^A% This variant of head's positioning is not too popular nowadays, but in
+%^^A% the some cases it could be used. Instead of creating of
+%^^A% multicolumn head above a wide couple of all column heads except the
+%^^A% very left column, the most left column head (upper left cell)
+%^^A% divided by diagonal line. The lower head is usually head of very left
+%^^A% column and upper head---``multicolumn'' to all other column heads of
+%^^A% table to the right.
+% Сейчас такой вариант расположения заголовков колонок не так популярен,
+% но всё же иногда используется. Вместо создания большого
+% заголовка-перереза над большим числом колонок, самый левый заголовок
+% (верхняя левая ячейка таблицы) разделяется диагональю, где в~нижнем
+% треугольнике обычно помещают заголовок боковика, а~в~верхнем \cdash---
+% заголовок относящийся к~колонкам прографки (заголовкам всех колонок справа).
+%
+%^^A% This package offers macro based on possibilities of \env{picture}
+%^^A% environment.
+% Данный пакет предлагает макрокоманду, в~основе которой используется
+% окружение \env{picture}.
+% \begin{quote}
+% |\diaghead|\texttt{(}\meta{\texttt{\textup{H}} ratio,%^^A
+% \textup{\texttt{V}} ratio}\texttt{)}%^^A
+% \marg{Text set for column width}|%|\\
+% \phantom{/diaghead }\marg{First head}\marg{Second head}
+% \end{quote}
+%^^A% where \texttt{(}\meta{\textup{\texttt{H ratio}},%^^A
+%^^A% \textup{\texttt{V ratio}}}\texttt{)} sets the ratios like in |\line|
+%^^A% command (digits from~|1| up to~|6|). This argument is optional,
+%^^A% the default ratio (|\line|
+%^^A% direction) defined as~|(5,-2)|.
+% где \texttt{(}\meta{\textup{\texttt{H ratio}},%^^A}
+% \textup{\texttt{V ratio}}}\texttt{)} определяет отношение диагонали, как
+% в~первом аргументе команды |\line|
+% (целые числа от~|1| до~|6|). Аргумент не является обязательным, отношение,
+% заданное по умолчанию (направление диагонали |\line|) равно~|(5,-2)|.
+%
+%^^A% The \marg{Text set for column width}
+%^^A% defined by hand, for example:
+%^^A% \quad 1)\nobreak\enskip sets the width, using longest text lines from
+%^^A% both heads---in this case you must put |\theadfont| macro, if you use
+%^^A% |\thead|s; \quad 2)\nobreak\enskip the longest text from the rest of
+%^^A% column; \quad 3)\nobreak\enskip |\hskip|\meta{value}, even |\hskip\hsize|
+%^^A% the case of |p| column (or |X| column in \env{tabularx} environment).
+%^^A% The \marg{First head}
+%^^A% is head in lower corner (usually for first or very left column),
+%^^A% \marg{Second head}---in the upper corner (head for the all right columns).
+% Аргумент \marg{Text set for column width}
+% задаётся обычно подбором, например:
+% \quad 1)\nobreak\enskip задаёт ширину, используя самые длинные строки
+% в~обоих заголовках \cdash--- в~этом случае, если вы
+% используете в~таблицах команды |\thead|, нужно задать |\theadfont|;
+% \quad 2)\nobreak\enskip самую длинную строку боковика,
+% если она больше заголовков;
+% \quad 3)\nobreak\enskip горизонтальную отбивку |\hskip|\meta{value},
+% можно использовать даже такое: |\hskip\hsize| если это
+% колонка |p| (или |X| из окружения \env{tabularx}).
+% Аргумент \marg{First head} \cdash---
+% заголовок в~нижнем углу (обычно для боковика),
+% \marg{Second head} \cdash--- в~верхнем углу (заголовок для прографки
+% \cdash--- остальных колонок).
+%
+%^^A% Here is code of table~\ref{tab:diaghead}.
+% Здесь приведён код табл.~\ref{tab:diaghead}.
+%\begin{verbatim}
+% \begin{tabular}{|c|c|c|}%
+% \hline
+% \diaghead{\theadfont Diag ColumnmnHead II}%^^A
+% {Diag \\Column Head I}{Diag Column\\ Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% ...
+% \end{tabular}\medskip
+%
+% \begin{tabularx}{.62\hsize}{|X|c|c|}%
+% \hline
+% \diaghead(4,1){\hskip\hsize}%
+% %^^A{\theadfont Diag ColuDiag Column}%^^A
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% ...
+% \end{tabularx}\medskip
+%
+% \nomakegapedcells
+% \begin{tabular}{|l|c|c|}%
+% \hline
+% \diaghead(-4,1){\hskip4.2cm}%^^A
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% ...
+% \end{tabular}%
+%\end{verbatim}%
+%
+% \begin{table}[!bp]\makegapedcells
+% \begin{tabular}{|c|c|c|}%
+% \hline
+% \diaghead{\theadfont Diag ColumnmnHead II}%^^A
+% {Diag \\Column Head I}{Diag Column\\ Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & A & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & B & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & C & 52--58\\
+% \hline
+% \end{tabular}%
+% \medskip
+%
+% \begin{tabularx}{.62\hsize}{|X|c|c|}%
+% \hline
+% \diaghead(4,1){\hskip\hsize}%
+% %^^A{\theadfont Diag ColuDiag Column}%^^A
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & A & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & B & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & C & 52--58\\
+% \hline
+% \end{tabularx}%
+% \medskip
+%
+% \nomakegapedcells
+% \begin{tabular}{|l|c|c|}%
+% \hline
+% \diaghead(-4,1){\hskip4.2cm}%^^A
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & A & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & B & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & C & 52--58\\
+% \hline
+% \end{tabular}%
+% \caption{Пример таблиц с~ячейками поделёнными по
+% диагонали}\label{tab:diaghead}
+% \end{table}%
+%^^A% The correct position of diagonal ends depends of width of column. If cell width
+%^^A% is narrower then necessary
+%^^A% column ends of diagonal don't touch corners of cell.
+% Точное попадание концов диагонали в~углы ячейки зависит от её ширины. Если ячейка
+% \'уже необходимого то концы диагонали не «дотягиваются» до углов.
+%
+%^^A% \section{Comparison: Diagonally Divided Cell with the slashbox package}
+% \section{Сравнение: ячейки, разделённые по диагонали в~пакете slashbox}
+%
+%^^A% I didn't know about the \texttt{slashbox} package in time
+%^^A% when the part of code for the diagonal cells was created. This package uses also picture
+%^^A% |\line| mechanism, but calculates slopes automatically. It creates the
+%^^A% |\backslash| direction of diagonal lines only. (The |\slash| direction
+%^^A% is not correct? Or direction depends to traditions of current publishing house?)
+% Во время создания команд ячеек, разделённых по диагонали мне не было известно
+% о~пакете \texttt{slashbox}. Этот пакет также использует механизм окружения |picture|
+% и~команды |\line|, но наклон линии рассчитывается автоматически. Пакет создаёт
+% только наклон, соответствующий обратной наклонной (|\backslash|). (Направление,
+% соответствующее прямой наклонной (|\slash|) всё-таки не является
+% корректным. Или направление зависит от традиций издательства?)
+%
+%^^A% Here is used citation of the sample file distributed with the \texttt{slashbox} package%^^A
+%^^A% \footnote{by Koichi Yasuoka, May 27, 1993; minor modification by Toru Sato, May 31, 1993}.
+%^^A% The verbatim of the table examples are added only in citation.\smallskip
+% Далее цитируется файл-образец (лучше читать текст этого параграфа
+% на английском!), распространяемый вместе с~пакетом \texttt{slashbox}%^^A
+% \footnote{by Koichi Yasuoka, May 27, 1993; minor modification by Toru Sato, May 31, 1993}.
+% Здесь только добавлен |verbatim| примеров.\smallskip
+%
+% \begingroup\slshape
+%^^A% The usage is pretty straightforward, such as
+% Использование достаточно простое, например
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{5}{c|}}\hline
+%\backslashbox{Room}{Date}
+%&\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+%&\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+%Meeting Room &&&&&\\\hline
+%Auditorium &&&&&\\\hline
+%Seminar Room &&&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{5}{c|}}\hline
+% \backslashbox{Room}{Date}
+% &\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+% &\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+% Meeting Room &&&&&\\\hline
+% Auditorium &&&&&\\\hline
+% Seminar Room &&&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+%^^A% You may include a newline (\verb+\\+) in `Room' and/or `Date'.
+%^^A% Note that you will get spaces aside the slash line if there is a
+%^^A% wider column in the same column of a different line.
+%^^A% In such a case, you need to specify the width of the slashed column
+%^^A% by saying
+% Вы можете использовать команду новой строки (\verb+\\+) в~аргументах,
+% где заданы слова «Room» и/или «Date». Обратите внимание, что вы
+% получите пробелы около наклонной линии, если содержимое колонки
+% шире её головки. В~этом случае вам нужно определить ширину колонки,
+% задав
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{4}{c|}}\hline
+%\backslashbox[48mm]{Room}{Date}
+%&\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+%&\makebox[3em]{6/3}\\\hline\hline
+%Room With a Long Name &&&&\\\hline
+%Auditorium &&&&\\\hline
+%Seminar Room &&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{4}{c|}}\hline
+% \backslashbox[48mm]{Room}{Date}
+% &\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+% &\makebox[3em]{6/3}\\\hline\hline
+% Room With a Long Name &&&&\\\hline
+% Auditorium &&&&\\\hline
+% Seminar Room &&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+%^^A% The specified width is neglected if it is narrower than the natural
+%^^A% width of the column.
+% Заданная ширина не будет принята в~расчёт, если реальная ширина шапки
+% больше.
+%
+%^^A% \verb+\(back)slashbox+ assumes by default that there is a blank space
+%^^A% of width \verb+\tabcolsep+ on both sides of the column. Thus the
+%^^A% slash line might exceeds the boundary when you use \verb+@{}+
+%^^A% etc.
+% Команда \verb+\(back)slashbox+ по умолчанию предполагает, что вокруг колонки
+% задана отбивка, равная \verb+\tabcolsep+. В~результате, если вы используете
+% что-то вроде \verb+@{}+, наклонная может вылезти на поля.
+%
+% Этого можно избежать, задав
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|@{\ $\bullet$\hspace*{3mm}}l||*{5}{c|}}\hline
+%\multicolumn{1}{|@{}l||}{\backslashbox[0pt][l]{Room}{Date}}
+%&\makebox[3em]{5/31}&\makebox[4em]{6/1}&\makebox[3em]{6/2}
+%&\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+%Meeting Room &&&&&\\\hline
+%Auditorium &&&&&\\\hline
+%Seminar Room &&&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \bigskip
+%
+% \noindent
+% \begin{tabular}{|@{\ $\bullet$\hspace*{3mm}}l||*{5}{c|}}\hline
+% \multicolumn{1}{|@{}l||}{\backslashbox[0pt][l]{Room}{Date}}
+% &\makebox[3em]{5/31}&\makebox[4em]{6/1}&\makebox[3em]{6/2}
+% &\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+% Meeting Room &&&&&\\\hline
+% Auditorium &&&&&\\\hline
+% Seminar Room &&&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+%^^A% Here \verb+[l]+ tells the command that there is no extra space on the
+%^^A% left of this column. You can use \verb+[r]+ and \verb+[lr]+ likewise.
+%^^A% You have to also specify the width of the column in this case, but it
+%^^A% can be~0pt.
+% Здесь \verb+[l]+ сообщает, что слева не дополнительной отбивки слева.
+% Можно использовать \verb+[r]+ и~\verb+[lr]+ аналогично.
+% В~этом случае вы должны не забыть задать ширину колонки, которую можно
+% задать как~0pt.
+% \endgroup
+%
+%^^A% The addition for the sample with |\slashbox| command. This example demonstrates
+%^^A% that you may combine the \texttt{makecell} commands and |\backslashbox|.
+% Небольшое дополнение к~файлу-образцу. Даный пример показывает, что возможно
+% использование команд \texttt{thead} (или \texttt{makecell}), а~также
+% команд-настроек выключки и~шрифта вместе с~|\backslashbox|.
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{5}{c|}}\hline
+%\theadset\theadfont\backslashbox{Room}{Date}
+%&\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+%&\makebox[3em]{6/3}&\makebox[3em]{\thead{6/4}}\\\hline\hline
+%Meeting Room &&&&&\\\hline
+%Auditorium &&&&&\\\hline
+%Seminar Room &&&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{5}{c|}}\hline
+%\theadset\theadfont\backslashbox{Room}{Date}
+%&\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+%&\makebox[3em]{6/3}&\makebox[3em]{\thead{6/4}}\\\hline\hline
+% Meeting Room &&&&&\\\hline
+% Auditorium &&&&&\\\hline
+% Seminar Room &&&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+%\begin{table}[H]
+%\begin{verbatim}
+%\begin{tabular}{|l||*{4}{c|}}\hline
+%\theadset\backslashbox[48mm]{Room}{Date}
+%&\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+%&\makebox[3em]{\thead{6/3}}\\\hline\hline
+%Room With a Long Name &&&&\\\hline
+%Auditorium &&&&\\\hline
+%Seminar Room &&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{4}{c|}}\hline
+% \theadset\backslashbox[48mm]{Room}{Date}
+% &\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+% &\makebox[3em]{\thead{6/3}}\\\hline\hline
+% Room With a Long Name &&&&\\\hline
+% Auditorium &&&&\\\hline
+% Seminar Room &&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+% \clearpage
+%^^A% \section{Thick \cmd{\hline} and \cmd{\cline}}
+% \section{Команды \texorpdfstring{\cmd{\hline}}{hline} и~\texorpdfstring{\cmd{\cline}}{cline} заданной толщины}
+%
+%^^A% For horizontal rules in tabular there were added two commands
+%^^A% \cmd{\Xhline} and \cmd{\Xcline}
+%^^A% They use additional mandatory argument with defined rule width.
+% Для горизонтальных линеек в~табличном материале добавлены две команды
+% \cmd{\Xhline} и~\cmd{\Xcline}
+% Они имеют обязательный аргумент с~заданием ширины линейки.
+%
+%^^A% The example, with result in table~\ref{tab:XmrowIII}.
+% Пример применения команд см.~в~табл.~\ref{tab:XmrowIII}.
+%\begin{verbatim}%
+%\begin{table}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+%\ttabbox
+%{\caption{...}\label{...}}%
+%{\begin{tabular}{!{\vrule width1.2pt}c
+% !{\vrule width1.2pt}c|c
+% !{\vrule width1.2pt}}
+%\Xhline{1.2pt}
+%\multirowthead{4}{First Column head}&
+%\multicolumn{2}{c!{\vrule width1.2pt}}{\thead{Multicolumn head}}\\
+%\Xcline{2-3}{1.2pt}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+%\Xhline{1.2pt}
+%Cell text & A &\multirowcell{4}{28--31}\\
+%...
+%\Xhline{1.2pt}
+%\end{tabular}}
+%\end{table}
+%\end{verbatim}%
+%
+% \begin{table}\makegapedcells\relax
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+% \ttabbox
+% {\caption{Пример окружения \env{tabular} с~использованием толстых
+% линеек}\label{tab:XmrowIII}}%
+% {\begin{tabular}{!{\vrule width1.2pt}c
+% !{\vrule width1.2pt}c|c!{\vrule width1.2pt}}
+% \Xhline{1.2pt}
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c!{\vrule width1.2pt}}{\thead{Multicolumn head}}\\
+% \Xcline{2-3}{1.2pt}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \Xhline{1.2pt}
+% Cell text & A &\multirowcell{4}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined \\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & C
+% & \multirowcell{4}[0ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned \\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & E &
+% \multirowcell{6}[0ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell long long long long long long text with
+% predefined width} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell long long long long long
+% long text with predefined width} & G & \\
+% \Xhline{1.2pt}
+% \end{tabular}}
+% \end{table}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/makecell/makecell.dtx b/macros/latex/contrib/makecell/makecell.dtx
new file mode 100644
index 0000000000..c0988087b4
--- /dev/null
+++ b/macros/latex/contrib/makecell/makecell.dtx
@@ -0,0 +1,1983 @@
+% \iffalse
+%
+% makecell.dtx - Managing of tabular column heads and cells.
+% (c) 2005--2007 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{makecell.dtx}
+%</driver>
+%<package>\NeedsTeXFormat{LaTeX2e}[1999/12/01]
+%<package>\ProvidesPackage{makecell}
+%<*package>
+ [2009/08/03 V0.1e Managing of Tab Column Heads and Cells]
+%</package>
+%
+%<*batchfile>
+\begingroup
+
+\input docstrip.tex
+
+\keepsilent
+\askforoverwritefalse
+
+\generate{\file{makecell.sty}{\from{makecell.dtx}{package}}}
+
+\endgroup
+%</batchfile>
+%
+%<*driver>
+\documentclass{ltxdoc}
+\IfFileExists{rotating.sty}{\usepackage{rotating}}{}
+\IfFileExists{footmisc.sty}{\usepackage[perpage,bottom]{footmisc}}{}
+\IfFileExists{multirow.sty}{\usepackage{multirow}}{}
+\IfFileExists{hyperref.sty}{\usepackage{hyperref}}{}
+\IfFileExists{hypcap.sty}{\usepackage{hypcap}}{}
+\usepackage{makecell}
+\IfFileExists{caption.sty}
+ {\usepackage[font=small,labelfont=bf,labelsep=period]{caption}[2004/11/28]
+ \IfFileExists{floatrow.sty}
+ {\usepackage[font=small,style=plaintop,captionskip=5pt]{floatrow}}
+ {}}{}
+\makeatletter
+\@ifundefined{ttabbox}{\let\ttabbox\relax}{}
+\makeatother
+\usepackage{tabularx}
+\usepackage{slashbox}
+\usepackage{hhline}
+\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{makecell.dtx}
+ \PrintChanges
+\end{document}
+%</driver>
+% \fi
+%
+% \CheckSum{1407}
+%
+% \GetFileInfo{makecell.dtx}
+%
+% \DoNotIndex{\newcommand,\newenvironment}
+%
+%
+% \title{The \textsf{makecell} 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 helps to create common layout for tabular material.
+% The |\thead| command, based on one-column tabular environment, is offered
+% for creation of tabular column heads. This macro allows to support common
+% layout for tabular column heads in whole documentation. Another command,
+% |\makecell|, is offered for creation of multilined tabular cells.
+% There are also command |\makecellbox| command and |mcellbox| environment
+% usage of tabular cells inside text.
+%
+% Package also offers: \quad 1)\nobreak\enskip macro |\makegapedcells|,
+% which changes vertical spaces around all cells in tabular, like in
+% \package{tabls} package, but uses code of \package{array} package. (Macro
+% |\makegapedcells| redefines macro |\@classz| from \package{array} package.
+% Macro |\nomakegapedcells| cancels this redefinition.);
+% \quad 2)\nobreak\enskip macros |\multirowhead| and |\multirowcell|,
+% which use |\multirow| macro from \package{multirow} package;
+% \quad 3)\nobreak\enskip numbered rows |\nline| or skipping cells |\eline|
+% in tabulars; also are the skipping rows command |\erows| and
+% repeated rows command |\Xrows|;
+% \quad 4)\nobreak\enskip diagonally divided cells (|\diaghead|)
+% plus citation of sample file of \package{slashbox} package, which does the same;
+% \quad 5)\nobreak\enskip |\hline| and |\cline| with defined thickness:
+% |\Xhline| and |\Xcline| consequently.
+% \smallskip
+%
+% \end{abstract}
+%
+% \clearpage
+% \tableofcontents
+%
+% \clearpage
+% \section{Tabular Cells and Column Heads}
+%
+% \subsection{Building Commands}
+%
+% \DescribeMacro{\makecell}
+% Macro creates one-column tabular with predefined common settings of
+% alignment, spacing and vertical spaces around (see section~\ref{sec:sets}).
+% This will be useful for creation of multilined cells. This macro allows
+% optional alignment settings.
+% \begin{quote}
+% |\makecell|\oarg{vertical or/and horizontal alignment}\marg{cell text}
+% \end{quote}
+% For vertical alignment you use \texttt{t}, \texttt{b}, or \texttt{c}---%^^A
+% this letters you usually put in optional argument of \env{tabular} or
+% \texttt{array} environments. For horizontal alignment you may use alignment
+% settings like \texttt{r}, \texttt{l}, or \texttt{c}, or more complex, like
+% |{p{3cm}}|. Since this package loads \package{array} package, you may
+% use such alignment settings like |{>{\parindent1cm}p{3cm}}|.
+%\begin{verbatim}
+%\begin{tabular}{|c|c|}
+%\hline
+%Cell text & 28--31\\
+%\hline
+%\makecell{Multilined \\ cell text} & 28--31\\
+%\hline
+%\makecell[l]{Left aligned \\ cell text} & 37--43\\
+%\hline
+%\makecell*[r]{Right aligned \\ cell text} & 37--43\\
+%\hline
+%\makecell[b]{Bottom aligned \\ cell text} & 52--58\\
+%\hline
+%\makecell*[{{p{3cm}}}]{Cell long text with predefined width} & 52--58\\
+%\hline
+%\makecell[{{>{\parindent1em}p{3cm}}}]{Cell long...} & 52--58\\
+%\hline
+%\end{tabular}
+%\end{verbatim}
+% \begin{table}[h]
+% \ttabbox
+% {\caption{Example of multilined cells}\label{tab:cells}}%
+% {\begin{tabular}{|c|c|}
+% \hline
+% Cell text & 28--31\\
+% \hline
+% \makecell{Multilined \\ cell text} & 28--31\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & 52--58\\
+% \hline
+% \makecell*[{{p{3cm}}}]{Cell long text with predefined width} & 52--58\\
+% \hline
+% \makecell[{{>{\parindent1em}p{3cm}}}]{Cell long text with predefined width} &
+% 52--58\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+% Starred form of command, |\makecell*|, creates vertical |\jot| spaces
+% around.
+%
+% \emph{Note}. When you define column alignment like |{p{3cm}}| in optional
+% argument of |\makecell| (or |\thead|, see below), please follow these
+% rules: \quad 1)\nobreak\enskip if vertical
+% alignment defined, write column alignment in group, e.g. |[c{p{3cm}}]|;
+% \quad 2)\nobreak\enskip if vertical alignment is absent,
+% write column alignment in double
+% group---|[{{p{3cm}}}]|, or add empty group---|[{}{p{3cm}}]|. Be also
+% careful with vertical alignment when you define column alignment as
+% paragraph block: e.g., use |{{b{3cm}}}| for bottom alignment (and
+% |{{m{3cm}}}| for centered vertical alignment).
+%
+% \DescribeMacro{\thead}
+% Macro creates one-column \texttt{tabular} for column heads with predefined
+% common settings (see table~\ref{tab:thead}). This macro uses common layout
+% for column heads: font, alignment, spacing, and vertical spaces around
+% (see section~\ref{sec:tsets}).
+%\begin{verbatim}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\begin{tabular}{|l|c|}
+%\hline
+%\thead{First column head}&
+% \thead{Second \\multlined \\ column head}\\
+%\hline
+%Left column text & 28--31\\
+%\hline
+%\end{tabular}
+%\end{verbatim}
+% \begin{table}[h]
+% \ttabbox
+% {\caption{Example of column heads}\label{tab:thead}}
+% {\renewcommand\theadset{\def\arraystretch{.85}}
+% \begin{tabular}{|l|c|}
+% \hline
+% \thead{First column head}&
+% \thead{Second \\multlined \\ column head}\\
+% \hline
+% Long left column text & 28--31\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+% Starred form of command, |\thead*|, creates vertical |\jot| spaces around.
+%
+% \DescribeMacro{\rothead}
+% Creates table heads rotated by 90$^\circ$ counterclockwise.
+% Macro uses the same font and spacing settings as previous
+% one, but column alignment changed to |p{\rotheadsize}| with |\raggedright|
+% justification: in this case left side of all text lines ``lies''
+% on one base line.
+%
+% \DescribeMacro{\rotheadsize}
+% This parameter defines the width of rotated tabular heads. You may define
+% that like:
+% \begin{quote}
+% |\setlength\rotheadsize{3cm}|
+% \end{quote}
+% or
+% \begin{quote}
+% |\settowidth\rotheadsize{\theadfont |\meta{Widest head text}|}|
+% \end{quote}
+% like in following example (table~\ref{tab:rotheads}):
+%\begin{verbatim}
+%\settowidth\rotheadsize{\theadfont Second multilined}
+%\begin{tabular}{|l|c|}
+%\hline
+%\thead{First column head}&
+% \rothead{Second multilined \\ column head}\\
+%\hline
+%Left column text & 28--31\\
+%\hline
+%\end{tabular}
+%\end{verbatim}
+% \begin{table}[h]
+% \ttabbox
+% {\caption{Example of rotated column heads}\label{tab:rotheads}}%^^A%
+% {\settowidth\rotheadsize{\theadfont Second multilined}%^^A
+% \begin{tabular}{l|l}
+% \hline
+% \thead{First column head}&
+% \rothead{Second multilined \\ column head}\\
+% \hline
+% Long left column text & 28--31\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+% \subsection{Settings For Tabular Cells}\label{sec:sets}
+%
+% This section describes macros, which make layout tuning for multilined
+% cells, created by |\makecell| macro (and also |\multirowcell| and
+% |\rotcell| macros). The |\cellset| macro also is used by |\thead|
+% (|\rothead|, |\multirowtead|) macro.
+%
+% \DescribeMacro{\cellset}
+% Spacing settings for cells. Here you could use commands like:
+% \begin{quote}
+% |\renewcommand\cellset{\renewcommand\arraytretch{1}%|\\
+% | \setlength\extrarowheight{0pt}}|
+% \end{quote}
+% as was defined in current package.
+%
+% \DescribeMacro{\cellalign}
+% Default align for cells. Package offers vertical and horizontal centering
+% alignment, it defined like:
+% \begin{quote}
+% |\renewcommand\cellalign{cc}|
+% \end{quote}
+%
+% \DescribeMacro{\cellgape}
+% Define vertical spaces around |\makecell|, using |\gape| command if
+% necessary. It defined like:
+% \begin{quote}
+% |\renewcommand\cellgape{}|
+% \end{quote}
+% You may define this command like
+% \begin{quote}
+% |\renewcommand\cellgape{\Gape[1pt]}|
+% \end{quote}
+% or
+% \begin{quote}
+% |\renewcommand\cellgape{\gape[t]}|
+% \end{quote}
+% (See also section~\ref{sec:gape} about |\gape| and |\Gape| command.)
+%
+% \DescribeMacro{\cellrotangle}
+% The angle for rotated cells and column heads. The default value 90
+% (counterclockwise). This value definition is used by both |\rotcell| and
+% |\rothead| macros.
+%
+% \subsection{Settings For Column Heads}\label{sec:tsets}
+%
+% This section describes macros, which make layout tuning for tabular column
+% heads, created by |\thead| (|\rothead|, |\multirowtead|) macro.
+%
+% \DescribeMacro{\theadfont}
+% Sets a special font for column heads. It could be smaller size
+% \begin{quote}
+% |\renewcommand\theadfont{\foonotesize}|
+% \end{quote}
+% as was defined in current package (here we suppose that
+% \verb|\small| command used for tabular contents itself).
+% Next example defines italic shape
+% \begin{quote}
+% |\renewcommand\theadfont{\itshape}|
+% \end{quote}
+%
+% \DescribeMacro{\theadset}
+% Spacing settings for column heads. Here you could use commands like:
+% \begin{quote}
+% |\renewcommand\theadset{\renewcommand\arraytretch{1}%|\\
+% | \setlength\extrarowheight{0pt}}|
+% \end{quote}
+%
+% \DescribeMacro{\theadalign}
+% Default align for tabular column heads. Here also offered centering
+% alignment:
+% \begin{quote}
+% |\renewcommand\theadalign{cc}|
+% \end{quote}
+%
+% \DescribeMacro{\theadgape}
+% Define vertical spaces around column head (|\thead|),
+% using |\gape| command if necessary.
+% It defined like:
+% \begin{quote}
+% |\renewcommand\theadgape{\gape}|
+% \end{quote}
+%
+% \DescribeMacro{\rotheadgape}
+% Analogous definition for rotated column heads. Default is absent:
+% \begin{quote}
+% |\renewcommand\rotheadgape{}|
+% \end{quote}
+%
+% \clearpage
+% \section{Changing of Height and Depth of Boxes}\label{sec:gape}
+%
+% Sometimes \env{tabular} or \env{array} cells, or some elements in text need a
+% height/depth correction. The |\raisebox| command could help for it, but
+% usage of that macro in these cases, especially inside math, is rather
+% complex. Current package offers the |\gape| macro, which usage is similar
+% to |\smash| macro. The |\gape| macro allows to change height and/or depth
+% of included box with necessary dimension.
+%
+% \DescribeMacro{\gape}
+% This macro changes included box by |\jot| value (usually 3\,pt). It is
+% defined with optional and mandatory arguments, like |\smash| macro, which
+% (re)defined by \package{amsmath} package. Optional argument sets change of
+% height only (\texttt{t}) or depth only~(\texttt{b}). Mandatory argument
+% includes text.
+% \begin{quote}
+% |\gape|\oarg{\texttt{t} or \texttt{b}}\marg{text}
+% \end{quote}
+% Examples of usage:
+% \begin{quote}
+% \noindent
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \gape{\cmd{\gape}\texttt{\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \gape[t]{\cmd{\gape}\texttt{[t]\{text\}}}\cr
+% \noalign{\hrule\vskip\jot}
+% \crcr}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \gape[b]{\cmd{\gape}\texttt{[b]\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}
+% \end{quote}
+%
+% \DescribeMacro{\Gape}
+% Another way of height/depth modification. This macro allows different
+% correction for height and depth of box:
+% \begin{quote}
+% |\Gape|\oarg{height corr}\oarg{depth corr}\marg{text}
+% \end{quote}
+%
+% If both arguments absent, |\Gape| command works like |\gape|\marg{text}, in
+% other words, command uses |\jot| as correction value for height and depth
+% of box.
+%
+% If only one optional argument exists, |\Gape| command uses value
+% from this argument for both height and depth box corrections.
+% \begin{quote}
+% \noindent
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape{\cmd{\Gape}\texttt{\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\texttt{\phantom{xxxxx}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape[\jot]{\cmd{\Gape}\texttt{[\cmd{\jot}]\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\\[2ex]
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape[6pt]{\cmd{\Gape}\texttt{[6pt]\{text\}}}\cr
+% \noalign{\hrule}
+% \crcr}}\qquad
+% \vbox{\halign{#\cr
+% \noalign{\hrule}
+% \Gape[6pt][-2pt]{\cmd{\Gape}\texttt{[6pt][-2pt]\{text\}}}\cr
+% \noalign{\hrule\vskip8pt}
+% \crcr}}
+% \end{quote}
+%
+% You may also use |\height| and |\depth| parameters in optional arguments
+% of |\Gape| macro, parameters was borrowed from |\raisebox| command.
+%
+% \DescribeMacro{\bottopstrut}
+% \DescribeMacro{\topstrut}
+% \DescribeMacro{\botstrut}
+% These three macros modify standard |\strut| by |\jot| value:
+% |\bottopstrut| changes both height and depth;
+% \nopagebreak|\topstrut| changes only height;
+% |\botstrut| changes only depth.
+% These commands could be useful, for example, in first and last table rows.
+%
+% \emph{Note}. If you use
+% \package{bigstrut} package note that these macros duplicate \cmd{\bigstrut},
+% \cmd{\bigstrut[t]}, and \cmd{\bigstrut[b]} commands consequently. Please
+% note that value, which increases strut in \cmd{\topstrut} etc. equals to
+% \cmd{\jot}, but \cmd{\bigstrut} and others use a special dimension
+% \cmd{\bigstrutjot}.
+%
+% \clearpage
+% \section{How to Change Vertical Spaces Around Cells
+% in Whole Table}\label{sec:beta}
+%
+% This section describes macros which try to emulate one of possibilities of
+% \package{tabls} package: to get necessary vertical spacing around cells.
+%
+% \DescribeMacro{\setcellgapes}
+% Sets the parameters for vertical spaces:
+% \begin{quote}
+% |\setcellgapes|\oarg{\texttt{t} or \texttt{b}}\marg{value}
+% \end{quote}
+% The next examples with array and tabular use following settings:
+% \begin{quote}
+% |\setcellgapes{5pt}|
+% \end{quote}
+% You may also try to load negative values if you wish. This macro you may
+% put in the preamble as common settings.
+%
+% \DescribeMacro{\makegapedcells}
+% \DescribeMacro{\nomakegapedcells}
+% The first macro switches on vertical spacing settings. The second cancels
+% first~one.
+%
+% The \cmd{\makegapedcells} macro temporarily redefines macro
+% |\@classz| of \package{array} package, so use this mechanism carefully.
+% Load |\makegapedcells| inside group or inside environment
+% (see table~\ref{tab:gaped}):
+%\begin{verbatim}
+%\begin{table}[h]
+%\makegapedcells
+%...
+%\end{table}
+%\end{verbatim}
+% \setcellgapes{5pt}
+% \begin{table}
+% \makegapedcells
+% \ttabbox
+% {\caption{Example of multilined cells with additional vertical spaces}%^^A
+% \label{tab:gaped}}%
+% {\begin{tabular}{|c|c|}
+% \hline
+% Cell text & 28--31\\
+% \hline
+% \makecell{Multilined \\ cell text} & 28--31\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & 52--58\\
+% \hline
+% \makecell*[{{p{3cm}}}]{Cell long text with predefined width} & 52--58\\
+% \hline
+% \makecell[{{>{\parindent1em}p{3cm}}}]{Cell long text with
+% predefined width} & 52--58\\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+% Please note that space defined in |\setcellgapes| and space which creates
+% |\gape| mechanism in commands
+% for tabular cells (usually |\thead| or |\makecell*|) are summarized.
+%
+% \clearpage
+% \section{Multirow Table Heads and Cells}
+%
+% The next examples show usage of macros which use |\multirow| command from
+% \package{multirow} package.\nopagebreak
+%
+% At first goes short repetition of arguments of |\multirow| macro itself:
+% \begin{quote}
+% |\multirow|\marg{nrow}\oarg{njot}\marg{width}\oarg{vmove}\marg{contents}
+% \end{quote}
+% \marg{nrow} sets number of rows (i.e. text lines);
+% \oarg{njot} is mainly used if you've used \package{bigstrut} package: it makes
+% additional tuning of vertical position (see comments in
+% \package{multirow} package);
+% \marg{width} defines width of contents, the |*| sign used to indicate that
+% the text argument's natural width is to be used;
+% \oarg{vmove} is a length used for fine tuning: the text will be raised (or
+% lowered, if \meta{vmove} is negative) by that length;
+% \marg{contents} includes ``|\multirow|'ed'' text.\smallskip
+%
+% \DescribeMacro{\multirowcell}
+% \DescribeMacro{\multirowthead}
+% These two macros use following arguments (example uses |\multirowcell|
+% command):
+% \begin{quote}
+% |\multirowcell|\marg{nrow}\oarg{vmove}\oarg{hor alignment}\marg{contents}
+% \end{quote}
+% in these macros were skipped \oarg{njot} and \marg{width}. Instead of
+% tuning optional argument \oarg{njot} for vertical
+% correction used \oarg{vmove} optional argument.
+% For the \marg{width} argument both |\multirowcell| and |\multirowthead|
+% macros use natural width of contents (i.e. the |*| argument used).
+%
+% First example (table~\ref{tab:mrowI}) with ``|\multirow|'ed'' column heads
+% and cells:
+%\begin{verbatim}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\begin{tabular}{|l|c|c|}
+% \multirowthead{4}{First ...}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\ \cline{2-3}
+% & \thead{Second ...} & \thead{Third ...}\\ \hline
+% Cell text & A &\multirowcell{3}{28--31}\\ \cline{1-2}
+% \makecell{Multilined\\Cell text} & B& \\ \hline
+% \makecell[l]{Left ...} & C & \multirowcell{4}[1ex][l]{37--43}\\ \cline{1-2}
+% \makecell[r]{Right ...} & D & \\ \hline
+% \makecell[b]{Bottom ...} & E & \multirowcell{5}[1ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell ...} & F & \\ \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell ...} & G & \\ \hline
+% \end{tabular}
+%\end{verbatim}
+%
+% \begin{table}[p]
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+% \ttabbox
+% {\caption{Example of ``\cmd{\multirow}'ed'' cells}\label{tab:mrowI}}%
+% {\begin{tabular}{|l|c|c|}
+% \hline
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \hline
+% Cell text & A &\multirowcell{3}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined\\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned\\ cell text} & C
+% & \multirowcell{4}[1ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned\\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & E &
+% \multirowcell{5}[1ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell long long long long text with predefined width}
+% & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell long long long long text with
+% predefined width} & G & \\
+% \hline
+% \end{tabular}}
+% \end{table}
+%
+% Second example (table~\ref{tab:mrowII}) with ``multirow'ed'' column heads
+% and cells uses |\makegapedcells| command. The |\theadgape| command does
+% nothing:
+%\begin{verbatim}
+%\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+%...
+%\end{verbatim}
+% \begin{table}[p]\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+% \ttabbox
+% {\caption{Example of ``\cmd{\multirow}'ed'' cells and additional vertical
+% spaces}\label{tab:mrowII}}%
+% {\begin{tabular}{|l|c|c|}
+% \hline
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \hline
+% Cell text & A &\multirowcell{4}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined \\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & C
+% & \multirowcell{4}[0ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned \\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & E &
+% \multirowcell{6}[0ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell long long long long text with predefined width}
+% & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell long long long long text with
+% predefined width} & G & \\
+% \hline
+% \end{tabular}}
+% \end{table}
+% \bigskip
+%
+% The last example (table~\ref{tab:mrowIII}) uses \env{tabularx} environment
+% with |\hsize| in the width argument.
+%\begin{verbatim}
+%\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+%\begin{tabularx}\hsize{|X|c|c|}
+%...
+%\cline{1-2}
+%\makecell[{{p{\hsize}}}]{Cell ...} & F & \\
+%\cline{1-2}
+%\makecell[{{>{\parindent1em}p{\hsize}}}]{Cell ...} & G & \\
+%\hline
+%\end{tabularx}
+%\end{verbatim}
+% As you may see the |\makecell|'s in last two rows defined as
+% \begin{quote}
+% |\makecell[{{p{\hsize}}}]{...}|
+% \end{quote}
+% and
+% \begin{quote}
+% |\makecell[{{>{\parindent1em}p{\hsize}}}]{...}|
+% \end{quote}
+% consequently.
+% \begin{table}\makegapedcells
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+% \ttabbox
+% {\caption{Example of \env{tabularx} environment}\label{tab:mrowIII}}%
+% {\begin{tabularx}\hsize{|X|c|c|}
+% \hline
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c|}{\thead{Multicolumn head}}\\
+% \cline{2-3}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \hline
+% Cell text & A &\multirowcell{4}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined \\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & C
+% & \multirowcell{4}[0ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned \\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & E &
+% \multirowcell{6}[0ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{\hsize}}}]{Cell long long long long long long text with
+% predefined width} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{\hsize}}}]{Cell long long long long long
+% long text with predefined width} & G & \\
+% \hline
+% \end{tabularx}}
+% \end{table}
+%
+% \subsection{Multirow Table Heads and Cells: Second Variant}
+%
+% Another, simplified, variant of multirow cell: use
+% |\makecell| and |\thead| commands, and set |\\| with
+% negative space at the end, for example
+%\begin{quote}
+% |\thead{First Column head\\[-5ex]}|
+%\end{quote}
+% cells, which stay in one ``multi row'' will have the same value of this
+% negative space, in spite of different number of lines in their contents.
+%
+% \clearpage\suppressfloats[t]
+% \section{Numbered Lines in Tabulars}
+%
+% The three commands |\eline|, |\nline|, |\rnline| allow to skip:
+% \begin{quote}
+% |\eline|\marg{number of cells}
+% \end{quote}
+% and numbering (|\nline|) a few/all sells in the row:
+% \begin{quote}
+% |\nline|\oarg{numbering type}\oarg{start number}\marg{number of cells}
+% \end{quote}
+% Command |\rnline| does the same as |\nline|, but allows numbering by
+% Russian letters (it redefines
+% \LaTeX's |\Alph| and |\alph| with |\Asbuk| and |\asbuk| consequently).
+% (see table~\ref{tab:elines})
+%\begin{verbatim}
+% \begin{tabular}{|*{12}{c|}}
+% \hline
+% \eline{6} \\ \hline
+% \nline{6} \\ \hline
+% \eline{3} & \nline[1][4]{3} \\ \hline
+% \nline[(a)]{6} \\ \hline
+% \nline[column I]{6} \\ \hline
+% \end{tabular}
+%\end{verbatim}
+%
+% \begin{table}[H]
+% \ttabbox
+% {\caption{Examples of filling of cells}\label{tab:elines}}%
+% {\begin{tabular}{|*{6}{c|}}
+% \hline
+% \eline{6} \\ \hline
+% \nline{6} \\ \hline
+% \eline{3} & \nline[1][4]{3} \\ \hline
+% \nline[(a)]{6} \\ \hline
+% \nline[column I]{6} \\ \hline
+% \end{tabular}}
+%\end{table}
+%
+% Two ``lazy'' commands: for empty table rows
+% (|\erows|) and for rows with repeated text (|\Xrows|) were added in the version V0.1e.
+%
+%\DeleteShortVerb{\|}
+%\begin{verbatim}
+% \begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \erows{4}{8}
+% \end{tabular}\quad
+% \begin{tabular}{||c||c||c||c||}
+% \hhline{|t:=:t:=:t:=:t:=:t|}
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hhline{|:=::=::=::=:|}
+% \erows[\\ \hhline{|:=::=::=::=:|}]{4}{8}
+% \eline{4}\\ \hhline{|b:=:b:=:b:=:b:=:b|}
+% \end{tabular}\quad
+% \begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \Xrows{\refstepcounter{enumi}\arabic{enumi}.\eline{3}\\ \hline}{8}
+% \end{tabular}
+%\end{verbatim}
+%
+% \begin{table}[hbt]\extrarowheight1pt
+% \ttabbox[\hsize]
+% {\caption{Examples of filling of cells}\label{tab:elines}}%
+% {\begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \erows{4}{8}
+% \end{tabular}\par\bigskip
+% \begin{tabular}{||c||c||c||c||}
+% \hhline{|t:*3{=:t:}=:t|}
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hhline{|:*3{=::}=:|}
+% \erows[\\ \hhline{|:*3{=::}=:|}]{4}{7}
+% \eline{4}\\
+% \hhline{|b:*3{=:b:}=:b|}
+% \end{tabular}\par\bigskip
+% \begin{tabular}{|*{4}{c|}}
+% \hline
+% \thead{No}&\thead{First Data}&\thead{Second Data}&\thead{Third Data} \\
+% \hline
+% \Xrows{\refstepcounter{enumi}\arabic{enumi}.\eline{4}\\ \hline}{8}
+% \end{tabular}}
+%\end{table}
+%\MakeShortVerb{\|}
+%
+% \section{Cells (One-Column Tabulars) in the Text}
+%
+% If the |\makecell| command appears in the text (outside outer tabular environment)
+% it could create wrong layout. The |\makecellbox| command
+% and |mcellbox| environment are created for one-column tabulars in the text.
+%
+% \section{Diagonally Divided Cell}
+%
+% This variant of head's positioning is not too popular nowadays, but in
+% the some cases it could be used. Instead of creating of
+% multicolumn head above a wide couple of all column heads except the
+% very left column, the most left column head (upper left cell)
+% divided by diagonal line. The lower head is usually head of very left
+% column and upper head---``multicolumn'' to all other column heads of
+% table to the right.
+%
+% This package offers macro based on possibilities of \env{picture}
+% environment.
+% \begin{quote}
+% |\diaghead|\texttt{(}\meta{\texttt{\textup{H}} ratio,%^^A
+% \textup{\texttt{V}} ratio}\texttt{)}%^^A
+% \marg{Text set for column width}|%|\\
+% \phantom{/diaghead }\marg{First head}\marg{Second head}
+% \end{quote}
+% where \texttt{(}\meta{\textup{\texttt{H ratio}},%^^A
+% \textup{\texttt{V ratio}}}\texttt{)} sets the ratios like in |\line|
+% command (digits from~|1| up to~|6|). This argument is optional,
+% the default ratio (|\line|
+% direction) defined as~|(5,-2)|.
+%
+% The \marg{Text set for column width}
+% defined by hand, for example:
+% \quad 1)\nobreak\enskip sets the width, using longest text lines from
+% both heads---in this case you must put |\theadfont| macro, if you use
+% |\thead|'s; \quad 2)\nobreak\enskip the longest text from the rest of
+% column; \quad 3)\nobreak\enskip |\hskip|\meta{value}, even |\hskip\hsize|
+% the case of |p| column (or |X| column in \env{tabularx} environment).
+% The \marg{First head}
+% is head in lower corner (usually for first or very left column),
+% \marg{Second head}---in the upper corner (head for the all right columns).
+%
+% Here is code of table~\ref{tab:diaghead}.
+%\begin{verbatim}\makegapedcells
+%\begin{tabular}{|l|c|c|}\hline
+%\diaghead{\theadfont Diag ColumnmnHead II}%
+% {Diag Column \\Head I}{Diag\\Column Head II}&
+%\thead{Second\\column}&\thead{Third\\column}\\
+%\hline...
+%\end{tabular}\medskip
+%
+%\begin{tabularx}{.62\hsize}{|X|c|c|}\hline
+%\diaghead(-4,1){\hskip\hsize}%
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+%\thead{Second\\column}&\thead{Third\\column}\\
+%\hline...
+%\end{tabularx}\medskip
+%
+% \nomakegapedcells
+% \begin{tabular}{|l|c|c|}\hline
+% \diaghead(4,1){\hskip4.2cm}%
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+%...
+%\end{verbatim}%
+%
+% \begin{table}[!bp]\makegapedcells
+% \begin{tabular}{|c|c|c|}%
+% \hline
+% \diaghead{\theadfont Diag ColumnmnHead II}%^^A
+% {Diag \\Column Head I}{Diag Column\\ Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & A & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & B & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & C & 52--58\\
+% \hline
+% \end{tabular}%
+% \medskip
+%
+% \begin{tabularx}{.62\hsize}{|X|c|c|}%
+% \hline
+% \diaghead(4,1){\hskip\hsize}%
+% %^^A{\theadfont Diag ColuDiag Column}%^^A
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & A & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & B & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & C & 52--58\\
+% \hline
+% \end{tabularx}%
+% \medskip
+%
+% \nomakegapedcells
+% \begin{tabular}{|l|c|c|}%
+% \hline
+% \diaghead(-4,1){\hskip4.2cm}%^^A
+% {Diag \\Column Head I}{Diag Column \\Head II}&
+% \thead{Second\\column}&\thead{Third\\column}\\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & A & 37--43\\
+% \hline
+% \makecell*[r]{Right aligned \\ cell text} & B & 37--43\\
+% \hline
+% \makecell[b]{Bottom aligned\\ cell text} & C & 52--58\\
+% \hline
+% \end{tabular}%
+%
+% \caption{Examples of tabulars with diagonally divided
+% cells}\label{tab:diaghead}
+%
+% \end{table}%
+% The correct position of diagonal ends depends of width of column. If cell width
+% is narrower then necessary
+% column ends of diagonal don't touch corners of cell.
+%
+% \section{Comparison: Diagonally Divided Cell with the slashbox package}
+%
+% I didn't know about the \texttt{slashbox} package in time
+% when the code for the diagonal cells was created. This package uses also picture
+% |\line| mechanism, but calculates slopes automatically. It creates the
+% |\backslash| direction of diagonal lines only. (The |\slash| direction seems to be
+% not correct. Or direction depends to traditions of current publishing house?)
+%
+% Here is used citation of the sample file distributed with the \texttt{slashbox} package%^^A
+% \footnote{by Koichi Yasuoka, May 27, 1993; minor modification by Toru Sato, May 31, 1993}.
+% The verbatim of the table examples are added only in citation.\smallskip
+%
+% \begingroup\slshape
+% The usage is pretty straightforward, such as
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{5}{c|}}\hline
+%\backslashbox{Room}{Date}
+%&\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+%&\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+%Meeting Room &&&&&\\\hline
+%Auditorium &&&&&\\\hline
+%Seminar Room &&&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{5}{c|}}\hline
+% \backslashbox{Room}{Date}
+% &\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+% &\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+% Meeting Room &&&&&\\\hline
+% Auditorium &&&&&\\\hline
+% Seminar Room &&&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+% You may include a newline (\verb+\\+) in `Room' and/or `Date'.
+% Note that you will get spaces aside the slash line if there is a
+% wider column in the same column of a different line.
+% In such a case, you need to specify the width of the slashed column
+% by saying
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{4}{c|}}\hline
+%\backslashbox[48mm]{Room}{Date}
+%&\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+%&\makebox[3em]{6/3}\\\hline\hline
+%Room With a Long Name &&&&\\\hline
+%Auditorium &&&&\\\hline
+%Seminar Room &&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{4}{c|}}\hline
+% \backslashbox[48mm]{Room}{Date}
+% &\makebox[3em]{5/31}&\makebox[3em]{6/1}&\makebox[3em]{6/2}
+% &\makebox[3em]{6/3}\\\hline\hline
+% Room With a Long Name &&&&\\\hline
+% Auditorium &&&&\\\hline
+% Seminar Room &&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+% \bigskip
+% The specified width is neglected if it is narrower than the natural
+% width of the column.
+%
+% \verb+\(back)slashbox+ assumes by default that there is a blank space
+% of width \verb+\tabcolsep+ on both sides of the column.
+% Thus the slash line might exceeds the boundary when you use \verb+@{}+
+% etc.
+%
+% You can avoid it by specifying
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|@{\ $\bullet$\hspace*{3mm}}l||*{5}{c|}}\hline
+%\multicolumn{1}{|@{}l||}{\backslashbox[0pt][l]{Room}{Date}}
+%&\makebox[3em]{5/31}&\makebox[4em]{6/1}&\makebox[3em]{6/2}
+%&\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+%Meeting Room &&&&&\\\hline
+%Auditorium &&&&&\\\hline
+%Seminar Room &&&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \bigskip
+%
+% \noindent
+% \begin{tabular}{|@{\ $\bullet$\hspace*{3mm}}l||*{5}{c|}}\hline
+% \multicolumn{1}{|@{}l||}{\backslashbox[0pt][l]{Room}{Date}}
+% &\makebox[3em]{5/31}&\makebox[4em]{6/1}&\makebox[3em]{6/2}
+% &\makebox[3em]{6/3}&\makebox[3em]{6/4}\\\hline\hline
+% Meeting Room &&&&&\\\hline
+% Auditorium &&&&&\\\hline
+% Seminar Room &&&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+% Here \verb+[l]+ tells the command that there is no extra space on the
+% left of this column. You can use \verb+[r]+ and \verb+[lr]+ likewise.
+% You have to also specify the width of the column in this case, but it
+% can be~0pt.
+% \endgroup
+%
+% The addition for the sample with |\slashbox| command. This example demonstrates that you may combine
+% the \texttt{makecell} commands and |\backslashbox|.
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{5}{c|}}\hline
+%\theadset\theadfont\backslashbox{Room}{Date}
+%&\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+%&\makebox[3em]{6/3}&\makebox[3em]{\thead{6/4}}\\\hline\hline
+%Meeting Room &&&&&\\\hline
+%Auditorium &&&&&\\\hline
+%Seminar Room &&&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{5}{c|}}\hline
+%\theadset\theadfont\backslashbox{Room}{Date}
+%&\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+%&\makebox[3em]{6/3}&\makebox[3em]{\thead{6/4}}\\\hline\hline
+% Meeting Room &&&&&\\\hline
+% Auditorium &&&&&\\\hline
+% Seminar Room &&&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+%\begin{table}[H]%
+%\begin{verbatim}
+%\begin{tabular}{|l||*{4}{c|}}\hline
+%\theadset\backslashbox[48mm]{Room}{Date}
+%&\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+%&\makebox[3em]{\thead{6/3}}\\\hline\hline
+%Room With a Long Name &&&&\\\hline
+%Auditorium &&&&\\\hline
+%Seminar Room &&&&\\\hline
+%\end{tabular}
+%\end{verbatim}%
+%
+% \noindent
+% \begin{tabular}{|l||*{4}{c|}}\hline
+% \theadset\backslashbox[48mm]{Room}{Date}
+% &\makebox[3em]{\thead{5/31}}&\makebox[3em]{\thead{6/1}}&\makebox[3em]{\thead{6/2}}
+% &\makebox[3em]{\thead{6/3}}\\\hline\hline
+% Room With a Long Name &&&&\\\hline
+% Auditorium &&&&\\\hline
+% Seminar Room &&&&\\\hline
+% \end{tabular}
+%\end{table}%
+%
+% \clearpage
+% \section{Thick Rules for the hline and cline Commands}
+%
+% For horizontal rules in tabular there were added two commands
+% \cmd{\Xhline} and \cmd{\Xcline}
+% They use additional mandatory argument with defined rule width.
+%
+% The example, with result in table~\ref{tab:XmrowIII}.
+%\begin{verbatim}%
+%\begin{table}
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+%\ttabbox
+%{\caption{...}\label{...}}%
+%{\begin{tabular}{!{\vrule width1.2pt}c
+% !{\vrule width1.2pt}c|c
+% !{\vrule width1.2pt}}
+%\Xhline{1.2pt}
+%\multirowthead{4}{First Column head}&
+%\multicolumn{2}{c!{\vrule width1.2pt}}{\thead{Multicolumn head}}\\
+%\Xcline{2-3}{1.2pt}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+%\Xhline{1.2pt}
+%Cell text & A &\multirowcell{4}{28--31}\\
+%...
+%\Xhline{1.2pt}
+%\end{tabular}}
+%\end{table}
+%\end{verbatim}%
+%
+% \begin{table}\makegapedcells\relax
+%\renewcommand\theadset{\def\arraystretch{.85}}%
+%\renewcommand\theadgape{}
+% \ttabbox
+% {\caption{Example of \env{tabular} environment with
+% thick lines}\label{tab:XmrowIII}}%
+% {\begin{tabular}{!{\vrule width1.2pt}c
+% !{\vrule width1.2pt}c|c!{\vrule width1.2pt}}
+% \Xhline{1.2pt}
+% \multirowthead{4}{First Column head}&
+% \multicolumn{2}{c!{\vrule width1.2pt}}{\thead{Multicolumn head}}\\
+% \Xcline{2-3}{1.2pt}
+% & \thead{Second \\multlined \\ column head} &
+% \thead{Third \\ column head}\\
+% \Xhline{1.2pt}
+% Cell text & A &\multirowcell{4}{28--31}\\
+% \cline{1-2}
+% \makecell{Multilined \\Cell text} & B& \\
+% \hline
+% \makecell[l]{Left aligned \\ cell text} & C
+% & \multirowcell{4}[0ex][l]{37--43}\\
+% \cline{1-2}
+% \makecell[r]{Right aligned \\ cell text} & D & \\
+% \hline
+% \makecell[b]{Bottom aligned \\ cell text} & E &
+% \multirowcell{6}[0ex][r]{37--43\\52--58}\\
+% \cline{1-2}
+% \makecell[{{p{5cm}}}]{Cell long long long long long long text with
+% predefined width} & F & \\
+% \cline{1-2}
+% \makecell[{{>{\parindent1em}p{5cm}}}]{Cell long long long long long
+% long text with predefined width} & G & \\
+% \Xhline{1.2pt}
+% \end{tabular}}
+% \end{table}
+%
+% \StopEventually{}\clearpage
+%
+% \section{Code of package}
+%
+% \subsection{Multilined cells}
+%
+% First goes request of \package{array} package.
+% \begin{macrocode}
+\RequirePackage{array}
+% \end{macrocode}
+%
+% \begin{macro}{\makecell}
+% The definition of command for multilined cells. At first defined |\gape|
+% stuff. Non-star form loads special setting for vertical space around (if it
+% used). Star form always creates additional vertical |\jot|-spaces.
+% \begin{macrocode}
+\newcommand\makecell{\@ifstar{\let\tabg@pe\gape\makecell@}%
+ {\let\tabg@pe\cellgape\makecell@}}
+% \end{macrocode}
+% Next macro loads vertical and horizontal common alignment for cells and
+% loads redefined spacing parameters |\arraystretch| and |\extrarowheight|
+% if these parameters were redefined.
+% \begin{macrocode}
+\newcommand\makecell@{\def\t@bset{\cellset}%
+ \let\mcell@align\cellalign
+ \@ifnextchar[\mcell@tabular
+ {\expandafter\mcell@@tabular\cellalign\@nil}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\thead}
+% The macro for tabular column heads. At first defined |\gape| stuff.
+% Non-star from loads special setting for vertical space around (if it used).
+% Star form always creates additional vertical |\jot|-spaces.
+% \begin{macrocode}
+\newcommand\thead{\@ifstar{\let\tabg@pe\gape\thead@}%
+ {\let\tabg@pe\theadgape\thead@}}
+% \end{macrocode}
+% Next macro loads vertical and horizontal common alignment for column heads
+% and loads redefined spacing parameters |\arraystretch| and |\extrarowheight|
+% if these parameters were redefined. (First go settings
+% for cells, as for |\makecell|, then special settings for column heads.)
+%
+% For column heads also loaded font settings.
+% \begin{macrocode}
+\newcommand\thead@{\def\t@bset{\cellset\theadfont\theadset}%
+ \let\mcell@align\theadalign
+ \@ifnextchar[\mcell@tabular
+ {\expandafter\mcell@@tabular\theadalign\@nil}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rotheadsize}
+% The width dimension for rotated cells.
+% \begin{macrocode}
+\@ifdefinable\rotheadsize{\newdimen\rotheadsize}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rotcell}
+% The macro for rotated cell. If no \package{rotating} package loaded
+% this macro works like |\makecell|.
+% \begin{macrocode}
+\newcommand\rotcell{\@ifundefined{turn}%
+ {\PackageWarning{makecell}%
+ {\string\rotcell\space needs rotating package}%
+ \let\tabg@pe\empty\let\t@bset\cellset\makecell@}
+ {\@ifnextchar[{\@rotcell}{\@@rotcell}}}
+% \end{macrocode}
+% For rotated cell default column setting is similar to |p{\rotheadsize}| (plus
+% some additional justification settings)
+% \begin{macrocode}
+\@ifdefinable\@rotcell{}
+\def\@rotcell[#1]#2{\makecell*{\\[-.65\normalbaselineskip]
+ \turn{\cellrotangle}\makecell[#1]{#2}\endturn}}
+\newcommand\@@rotcell[1]{\makecell*{\\[-.65\normalbaselineskip]
+ \turn{\cellrotangle}\makecell[c{>{\rightskip0explus
+ \rotheadsize\hyphenpenalty0\pretolerance-1%
+ \noindent\hskip\z@}p{\rotheadsize}
+ }]{#1}\endturn}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rothead}
+% The macro for rotated tabular column heads. If no \package{rotating} package
+% loaded this macro works like |\thead|.
+% \begin{macrocode}
+\newcommand\rothead{\@ifundefined{turn}%
+ {\PackageWarning{makecell}{\string\rothead\space
+ needs rotating package}%
+ \let\tabg@pe\theadgape
+ \def\t@bset{\cellset\theadfont\theadset}\thead@}%
+ {\let\theadgape\rotheadgape
+ \@ifnextchar[{\@rothead}{\@@rothead}}}
+% \end{macrocode}
+% For rotated column head default column setting is similar to
+% |p{\rotheadsize}| (plus some additional justification settings)
+% \begin{macrocode}
+\@ifdefinable\@rothead{}
+\def\@rothead[#1]#2{\thead{\\[-.65\normalbaselineskip]
+ \turn{\cellrotangle}\thead[#1]{#2@{}}\endturn}}
+\newcommand\@@rothead[1]{\thead{\\[-.65\normalbaselineskip]
+ \turn{\cellrotangle}\thead[c{>{\rightskip0explus
+ \rotheadsize\hyphenpenalty0\pretolerance-1%
+ \noindent\hskip\z@}p{\rotheadsize}
+ @{}}]{#1}\endturn}}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multirowcell}
+% The macro for multirow cells. If no \package{multirow} package loaded
+% this macro works like |\makecell|.
+% \begin{macrocode}
+\newcommand\multirowcell{\@ifundefined{multirow}%
+ {\PackageWarning{makecell}{\string\multirowcell\space
+ needs multirow package}}%
+ {\let\mcell@multirow\multirow}\mcell@mrowcell@}
+% \end{macrocode}
+% These macros define settings for |\multirow| arguments.
+% \begin{macrocode}
+\newcommand\mcell@mrowcell@[1]{\@ifnextchar
+ [{\mcell@mrowcell@@{#1}}{\mcell@mrowcell@@{#1}[0pt]}}
+\@ifdefinable\mcell@mrowcell@@{}
+\def\mcell@mrowcell@@#1[#2]{\edef\mcell@nrows{#1}\edef\mcell@fixup{#2}%
+ \let\tabg@pe\cellgape\makecell@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\multirowthead}
+% The macro for multirow column heads. If no \package{multirow} package loaded
+% this macro works like |\thead|.
+% \begin{macrocode}
+\newcommand\multirowthead{\@ifundefined{multirow}%
+ {\PackageWarning{makecell}{\string\multirowthead\space
+ needs multirow package}}%
+ {\let\mcell@multirow\multirow}\mcell@mrowhead@}
+% \end{macrocode}
+% These macros define settings for |\multirow| arguments.
+% \begin{macrocode}
+\newcommand\mcell@mrowhead@[1]{\@ifnextchar
+ [{\mcell@mrowhead@@{#1}}{\mcell@mrowhead@@{#1}[0pt]}}
+\@ifdefinable\mcell@mrowhead@@{}
+\def\mcell@mrowhead@@#1[#2]{\edef\mcell@nrows{#1}\edef\mcell@fixup{#2}%
+ \let\tabg@pe\theadgape\thead@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mcell@multirow}
+% By default |\mcell@multirow| macro gobbles |\multirow|'s arguments.
+% \begin{macrocode}
+\@ifdefinable\mcell@multirow{}
+\def\mcell@multirow#1#2[#3]{}%
+% \end{macrocode}
+% \end{macro}
+%
+% Definitions for horizontal and vertical alignments, which use by \env{tabular}
+% and \env{array} environments.
+%
+% For \texttt{l}, \texttt{r}, \texttt{t}, and \texttt{b} alignments commands
+% set |c|-argument as vertical or horizontal centering alignment if necessary.
+% For \texttt{l} and \texttt{r} alignments also redefined alignment
+% settings for |\makecell| (|\thead|) blocks.
+% \begin{macrocode}
+\newcommand\mcell@l{\def\mcell@ii{l}\let\mcell@c\mcell@ic
+ \global\let\mcell@left\relax}
+\newcommand\mcell@r{\def\mcell@ii{r}\let\mcell@c\mcell@ic
+ \global\let\mcell@right\relax}
+\newcommand\mcell@t{\def\mcell@i{t}\let\mcell@c\mcell@iic}
+\newcommand\mcell@b{\def\mcell@i{b}\let\mcell@c\mcell@iic}
+\newcommand\mcell@{}
+% \end{macrocode}
+% If alone |c|-argument loaded it is used for horizontal alignment.
+% \begin{macrocode}
+\newcommand\mcell@c{\def\mcell@ii{c}}
+\newcommand\mcell@ic{\def\mcell@i{c}}
+\newcommand\mcell@iic{\def\mcell@ii{c}}
+% \end{macrocode}
+% Default vertical and horizontal alignment is centered.
+% \begin{macrocode}
+\newcommand\mcell@i{c}
+\newcommand\mcell@ii{c}
+% \end{macrocode}
+%
+% Default horizontal alignment of |\makecell| (|\thead|) blocks is centered.
+% \begin{macrocode}
+\@ifdefinable\mcell@left{\let\mcell@left\hfill}
+\@ifdefinable\mcell@right{\let\mcell@right\hfill}
+% \end{macrocode}
+%
+% \begin{macro}{\mcell@tabular}
+% \begin{macro}{\mcell@@tabular}
+% \begin{macro}{\mcell@@@tabular}
+% The core macros for tabular building.
+%
+% Next few macros for sorting of |\makecell| (|\thead|) arguments.
+% \begin{macrocode}
+\@ifdefinable\mcell@tabular{}\@ifdefinable\mcell@@tabular{}
+\@ifdefinable\mcell@@@tabular{}
+\def\mcell@tabular[#1]#2{\mcell@@tabular#1\@nil{#2}}
+% \end{macrocode}
+% The code for this macro borrowed from \package{caption} 3.x package (AS).
+% \begin{macrocode}
+\newcommand\mcell@ifinlist[2]{%
+ \let\next\@secondoftwo
+ \edef\mcell@tmp{#1}%
+ \@for\mcell@Tmp:={#2}\do{%
+ \ifx\mcell@tmp\mcell@Tmp
+ \let\next\@firstoftwo
+ \fi}\next}
+% \end{macrocode}
+%
+% The |\mcell@@tabular| macro at first calls |\mcell@setalign| macro for
+% sorting of alignment arguments, then calls |\mcell@@@tabular|
+% macro, which created tabular cell or column head.
+% \begin{macrocode}
+\def\mcell@@tabular#1#2\@nil#3{%
+ \expandafter\mcell@setalign\mcell@align\@nil
+ \mcell@setalign{#1}{#2}\@nil
+ \expandafter\mcell@@@tabular\expandafter\mcell@i\mcell@ii\@nil{#3}}
+% \end{macrocode}
+%
+% \begin{macro}{\mcell@setalign}
+% This macro sorts arguments for vertical and horizontal alignment.
+%
+% First argument has second check at the end of macro for the case if
+% it is |c|-argument.
+% \begin{macrocode}
+\@ifdefinable\mcell@setalign{}
+\def\mcell@setalign#1#2\@nil{\def\@tempa{#1}\def\@tempc{c}%
+% \end{macrocode}
+% Restore default alignment for |\makecell| and |\thead| blocks.
+% \begin{macrocode}
+ \global\let\mcell@left\hfill\global\let\mcell@right\hfill
+% \end{macrocode}
+% If in optional argument appears alone |c|-argument it defines
+% horizontal centering only.
+% \begin{macrocode}
+ \def\mcell@c{\def\mcell@ii{c}}%
+ \mcell@ifinlist{#1}{l,r,t,b,c,}{\@nameuse{mcell@#1}}%
+% \end{macrocode}
+% If argument is not \texttt{l}, \texttt{r}, \texttt{c}, \texttt{t},
+% or \texttt{b} it could define horizontal alignment only.
+% \begin{macrocode}
+ {\def\mcell@ii{#1}\let\mcell@c\mcell@ic
+ \let\mcell@left\relax\let\mcell@right\relax}%
+ \mcell@ifinlist{#2}{l,r,t,b,c,}{\@nameuse{mcell@#2}}%
+% \end{macrocode}
+% If argument is not \texttt{l}, \texttt{r}, \texttt{c}, \texttt{t},
+% or \texttt{b} it could define horizontal alignment only.
+% \begin{macrocode}
+ {\def\mcell@ii{#2}\let\mcell@c\mcell@ic
+ \let\mcell@left\relax\let\mcell@right\relax}%
+% \end{macrocode}
+% Here goes repeated check for first argument, if it is |c|-argument
+% we call |\mcell@c| command, which can be now redefined.
+% \begin{macrocode}
+ \ifx\@tempa\@tempc\mcell@c\fi
+}
+% \end{macrocode}
+% \end{macro}
+%
+% This macro builds tabular itself.
+% First (and last) go commands which align |\makecell| and |\thead|
+% blocks like \texttt{l}, \texttt{r}, or \texttt{c} (if they loaded).
+% Then goes check whether math mode exists.
+% The |\mcell@multirow| emulation macro transforms to |\multirow|
+% when necessary.
+% \begin{macrocode}
+\def\mcell@@@tabular#1#2\@nil#3{%\mcell@mstyle
+ \ifdim\parindent<\z@\leavevmode\else\noindent\fi
+ \null\mcell@left
+ \ifmmode
+ \mcell@multirow\mcell@nrows*[\mcell@fixup]{\tabg@pe
+ {\hbox{\t@bset$\array[#1]{@{}#2@{}}#3\endarray$}}}%
+ \else
+ \mcell@multirow\mcell@nrows*[\mcell@fixup]{\tabg@pe
+ {\hbox{\t@bset\tabular[#1]{@{}#2@{}}#3\endtabular}}}%
+ \fi\mcell@right\null}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{environment}{\mcellbox}
+% \begin{macro}{\makecellbox}
+% \begin{macrocode}
+\@ifdefinable\mcell@start{}\@ifdefinable\mcell@stop{}
+\newcommand\mcellbox[1][c]{%
+ \expandafter\mcell@setalign\cellalign\@nil
+ \expandafter\mcell@setalign#1\@nil
+ \expandafter\mcell@box\expandafter\mcell@i\mcell@ii\@nil}
+\@ifdefinable\mcell@box{}
+\def\mcell@box#1#2\@nil{%
+ \ifdim\parindent<\z@\leavevmode\else\noindent\fi
+ \ifmmode\def\mcell@start{$\array}\def\mcell@stop{\endarray$}\else
+ \def\mcell@start{\tabular}\def\mcell@stop{\endtabular}\fi
+ \hbox\bgroup\cellset\mcell@start[#1]{@{}#2@{}}}%
+\def\endmcellbox {\mcell@stop\egroup}
+\newcommand\makecellbox[2][c]{\begin{mcellbox}[#1]#2\end{mcellbox}}
+% \end{macrocode}
+% \end{macro}
+% \end{environment}
+%
+% \begin{macro}{\cellset}
+% \begin{macro}{\cellgape}
+% \begin{macro}{\cellalign}
+% \begin{macro}{\cellrotangle}
+% \begin{macro}{\theadfont}
+% \begin{macro}{\theadset}
+% \begin{macro}{\theadgape}
+% \begin{macro}{\rotheadgape}
+% \begin{macro}{\theadalign}
+% The layout macros for tabular building settings.\nopagebreak
+%
+% Spacing settings for tabular spacing inside cells (like |\arraystretch|
+% or |\extrarowheight|).\nopagebreak
+% \begin{macrocode}
+\newcommand\cellset{\def\arraystretch{1}\extrarowheight\z@
+ \nomakegapedcells}
+% \end{macrocode}
+% Vertical space around cells (created by |\gape| stuff).
+% \begin{macrocode}
+\newcommand\cellgape{}
+% \end{macrocode}
+% Vertical and horizontal alignment of cell text.
+% \begin{macrocode}
+\newcommand\cellalign{cc}
+% \end{macrocode}
+% Angle for rotated column heads and cells.
+% \begin{macrocode}
+\newcommand\cellrotangle{90}
+% \end{macrocode}
+%
+% Font for column heads
+% \begin{macrocode}
+\newcommand\theadfont{\footnotesize}
+% \end{macrocode}
+% Special spacing settings for tabular spacing in column heads (like
+% |\arraystretch| or/and |\extrarowheight|).
+% \begin{macrocode}
+\newcommand\theadset{}
+% \end{macrocode}
+% Vertical space around column heads (created by |\gape| stuff).
+% \begin{macrocode}
+\newcommand\theadgape{\gape}
+% \end{macrocode}
+% Vertical space around rotated column heads.
+% \begin{macrocode}
+\newcommand\rotheadgape{}
+% \end{macrocode}
+% Vertical and horizontal alignment of column head text.
+% \begin{macrocode}
+\newcommand\theadalign{cc}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Gape commands}
+%
+% \begin{macro}{\gape}
+% \begin{macro}{\setcellgapes}
+% The macro itself. It uses analogous to |\smash| macro from \package{amsmath}
+% package.
+% \begin{macrocode}
+\@ifdefinable\gape{}
+\DeclareRobustCommand\gape{\@ifnextchar[\@gape{\@gape[tb]}}
+% \end{macrocode}
+%
+% The |\setcellgapes| defines settings used by |\makegapedcells| command.
+%
+% First goes check for optional argument.
+% \begin{macrocode}
+\newcommand\setcellgapes{\@ifnextchar[%]
+ {\mcell@setgapes{MB}}{\mcell@setgapes{MB}[tb]}}
+% \end{macrocode}
+% Then body of settings.
+% \begin{macrocode}
+\@ifdefinable\@setcellgapes{}
+\def\mcell@setgapes#1[#2]#3{\expandafter\let\csname
+ mcell@#1@\expandafter\endcsname\csname mcell@mb@#2\endcsname
+ \@namedef{mcell@#1jot}{#3}%
+% \end{macrocode}
+% Negative compensate inside |\makegapedsells| area.
+% \begin{macrocode}
+ \@namedef{mcell@#1negjot}{-#3}\@namedef{mcell@#1negtb}{#2}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\newcommand\negjot[1]{{\jot\mcell@MBnegjot\gape[mcell@MBnegtb]{#1}}}
+% \end{macrocode}
+%
+% The macros which count advanced height and depth of boxes.
+% \begin{macrocode}
+\newcommand\mcell@mb@t[2]{%
+ \@tempdima\ht#1\advance\@tempdima#2\ht#1\@tempdima}
+\newcommand\mcell@mb@b[2]{%
+ \@tempdimb\dp#1\advance\@tempdimb#2\dp#1\@tempdimb}
+\newcommand\mcell@mb@tb[2]{\mcell@mb@t{#1}{#2}\mcell@mb@b{#1}{#2}}
+% \end{macrocode}
+%
+% The body of |\gape| macros.
+% \begin{macrocode}
+\@ifdefinable\@gape{}\@ifdefinable\@@gape{}
+\def\@gape[#1]{\mcell@setgapes{mb}[#1]{\jot}\@@gape}
+\def\@@gape{%
+ \ifmmode \expandafter\mathpalette\expandafter\mathg@pe
+ \else \expandafter\makeg@pe
+ \fi}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\makeg@pe}
+% The macros which put box with necessary parameters in text and math mode.
+% \begin{macrocode}
+\newcommand\makeg@pe[1]{\setbox\z@
+ \hbox{\color@begingroup#1\color@endgroup}\mcell@mb@\z@\mcell@mbjot\box\z@}
+\newcommand\mathg@pe[2]{\setbox\z@
+ \hbox{$\m@th#1{#2}$}\mcell@mb@\z@\mcell@mbjot\box\z@}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Gape}
+% The macros which put box with necessary parameters in text and math mode.
+% \begin{macrocode}
+\@ifdefinable\Gape{}
+\DeclareRobustCommand\Gape{\@ifnextchar[\@Gape{\@Gape[\jot]}}
+\@ifdefinable\@Gape{}\@ifdefinable\@@Gape{}
+\def\@Gape[#1]{\@ifnextchar[{\@@Gape[#1]}{\@@Gape[#1][#1]}}
+\def\@@Gape[#1][#2]{\def\depth{\dp\z@}\def\height{\ht\z@}%
+ \edef\mcell@mb@##1##2{%
+ \@tempdima\ht\z@\advance\@tempdima#1\ht\z@\@tempdima
+ \@tempdimb\dp\z@\advance\@tempdimb#2\dp\z@\@tempdimb}%
+ \@@gape}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\topstrut}
+% \begin{macro}{\botstrut}
+% \begin{macro}{\bottopstrut}
+% The macros abbreviations for |\strut| which changed by value of |\jot|.
+% First enlarges both depth and height.
+% \begin{macrocode}
+\newcommand\bottopstrut{\gape{\strut}}
+% \end{macrocode}
+% Second enlarges only height.
+% \begin{macrocode}
+\newcommand\topstrut{\gape[t]{\strut}}
+% \end{macrocode}
+% Third enlarges only depth.
+% \begin{macrocode}
+\newcommand\botstrut{\gape[b]{\strut}}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Modification of command from \package{array} package}
+%
+% \begin{macro}{\makegapedcells}
+% \begin{macro}{\nomakegapedcells}
+% At first is saved |\@classz| macro.
+% \begin{macrocode}
+\@ifdefinable\mcell@oriclassz{\let\mcell@oriclassz\@classz}
+% \end{macrocode}
+% This macros redefine and restore the |\@classz| macro from \package{array}
+% package.
+% \begin{macrocode}
+\newcommand\makegapedcells{\let\@classz\mcell@classz}
+\newcommand\nomakegapedcells{\let\@classz\mcell@oriclassz}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\mcell@agape}
+% Following macro creates tabular/array cells with changed vertical spaces.
+% \begin{macrocode}
+\newcommand\mcell@agape[1]{\setbox\z@\hbox{#1}\mcell@MB@\z@\mcell@MBjot
+ \null\mcell@left\box\z@\mcell@right\null}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\mcell@classz}
+% Redefined |\@classz| macro from \package{array} package.
+% \begin{macrocode}
+\newcommand\mcell@classz{\@classx
+ \@tempcnta \count@
+ \prepnext@tok
+ \@addtopreamble{%\mcell@mstyle
+ \ifcase\@chnum
+ \hfil
+ \mcell@agape{\d@llarbegin\insert@column\d@llarend}\hfil \or
+ \hskip1sp
+ \mcell@agape{\d@llarbegin\insert@column\d@llarend}\hfil \or
+ \hfil\hskip1sp
+ \mcell@agape{\d@llarbegin \insert@column\d@llarend}\or
+ $\mcell@agape{\vcenter
+ \@startpbox{\@nextchar}\insert@column\@endpbox}$\or
+ \mcell@agape{\vtop
+ \@startpbox{\@nextchar}\insert@column\@endpbox}\or
+ \mcell@agape{\vbox
+ \@startpbox{\@nextchar}\insert@column\@endpbox}%
+ \fi
+ \global\let\mcell@left\relax\global\let\mcell@right\relax
+ }\prepnext@tok}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Rows of skipped and numbered cells}
+%
+% \begin{macro}{\eline}
+% The row of empty cells.
+% \begin{macrocode}
+\@ifdefinable\eline{}
+\DeclareRobustCommand\eline[1]{\@temptokena{}\count@ #1%
+ \advance\count@\m@ne
+ \loop \@temptokena\expandafter{\the\@temptokena&}%
+ \advance\count@\m@ne \ifnum\count@>\z@\repeat
+ \the\@temptokena\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\erows}
+% \begin{macro}{\Xrows}
+% Lazy macros for filling few rows.
+% \begin{macrocode}
+%\newtoks\@temptokenb\newtoks\@temptokenc
+%\newcommand\erows[3][\\ \hline]{\relax\@temptokenb{}\@temptokenc{}\@tempcnta#3\relax
+% \count@#2\advance\count@\m@ne\loop\showthe\@temptokenc
+% \@temptokenc\expandafter{\the\@temptokenc&}%
+% \advance\count@\m@ne \ifnum\count@>\z@\repeat
+% \loop
+% \global\@temptokenb\expandafter{\the\expandafter\@temptokenb\expandafter\the\@temptokenc#1}%
+% \advance\@tempcnta\m@ne \ifnum\@tempcnta>\z@\repeat
+% \the\@temptokenb\showthe\@temptokenb}
+\newcommand\erows[3][\\ \hline]{\@temptokena{}\count@ #3%
+ \loop \@temptokena\expandafter{\the\@temptokena\eline{#2}#1}%
+ \advance\count@\m@ne \ifnum\count@>\z@\repeat
+ \the\@temptokena}
+\newcommand\Xrows[2]{\@temptokena{}\count@ #2%
+ \loop \@temptokena\expandafter{\the\@temptokena#1}%
+ \advance\count@\m@ne \ifnum\count@>\z@\repeat
+ \the\@temptokena}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\rnline}
+% \begin{macro}{\nline}
+% The rows of numbered cells. The |\rnline| command replaces |\Alph| and
+% |\alph| counter by |\Asbuk| and |\asbuk| consequently.
+% \begin{macrocode}
+\newcounter{nlinenum}
+\@ifdefinable\rnline{}
+\DeclareRobustCommand\rnline{\gdef
+ \TeXr@rus{\let\@Alph\@Asbuk\let\@alph\@asbuk}\@nline}
+\@ifdefinable\nline{}
+\DeclareRobustCommand\nline{\gdef\TeXr@rus{}\@nline}
+\newcommand\@nline{\@ifnextchar[%]
+ {\@@nline}{\@@nline[1]}}
+\@ifdefinable\@@nline{}
+\def\@@nline[#1]{\@ifnextchar[%]
+ {\@@@nline[#1]}{\@@@nline[#1][1]}}
+\@ifdefinable\@@@nline{}
+\def\@@@nline[#1][#2]#3{\count@ #3
+ \def\TeXr@label{\TeXr@label@{nlinenum}}%
+ \expandafter\TeXr@loop\@gobble{}#1\@@@
+ \xdef\Num{\the\TeXr@lab}%
+ \c@nlinenum#2\relax%
+ \expandafter\@temptokena\expandafter{\Num
+ \global\advance\c@nlinenum\@ne}%
+ \advance\count@\m@ne
+ \loop\@temptokena\expandafter{\the\@temptokena&
+ \Num \global\advance\c@nlinenum\@ne}%
+ \advance\count@\m@ne \ifnum\count@>\z@ \repeat
+ \the\@temptokena\ignorespaces}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% [Borrowed code stuff and explanation from \package{enumerate}/\package{paralist}
+% packages just with changes of command names.]
+%
+% Internal token register used to build up the label command from the
+% optional argument.
+% \begin{macrocode}
+\newtoks\TeXr@lab
+% \end{macrocode}
+% This just expands to a `?'. |\ref| will produce this, if no counter
+% is printed.
+% \begin{macrocode}
+\def\TeXr@qmark{?}
+% \end{macrocode}
+% The next four macros build up the command that will print the item
+% label. They each gobble one token or group from the optional argument,
+% and add corresponding tokens to the register |\@enLab|. They each end
+% with a call to |\@enloop|, which starts the processing of the next
+% token.
+% \begin{macro}{\TeXr@label}
+% Add the counter to the label. |#2| will be one of the `special'
+% tokens |A a I i 1|, and is thrown away. |#1| will be a command
+% like |\Roman|.
+% \begin{macrocode}
+\def\TeXr@label@#1#2#3{%
+ \edef\TeXr@the{\noexpand#2{#1}}%
+ \TeXr@lab\expandafter
+ {\the\TeXr@lab\TeXr@rus\csname the#1\endcsname}%
+ \advance\@tempcnta1
+ \TeXr@loop}
+% \end{macrocode}
+% The only foreign command in this stuff. It indicates whether
+% the list has numeration by Russian letters.
+% \begin{macrocode}
+\def\TeXr@rus{}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TeXr@space}
+% \begin{macro}{\TeXr@sp@ce}
+% Add a space to the label. The tricky bit is to gobble the space token,
+% as you can not do this with a macro argument.
+% \begin{macrocode}
+\def\TeXr@space{\afterassignment\TeXr@sp@ce\let\@tempa= }
+\def\TeXr@sp@ce{\TeXr@lab\expandafter{\the\TeXr@lab\space}\TeXr@loop}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\TeXr@group}
+% Add a |{ }| group to the label.
+% \begin{macrocode}
+\def\TeXr@group#1{\TeXr@lab\expandafter{\the\TeXr@lab{#1}}\TeXr@loop}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TeXr@other}
+% Add anything else to the label
+% \begin{macrocode}
+\def\TeXr@other#1{\TeXr@lab\expandafter{\the\TeXr@lab#1}\TeXr@loop}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\TeXr@loop}
+% \begin{macro}{\TeXr@loop@}
+% The body of the main loop.
+% Eating tokens this way instead of using |\@tfor| lets you see
+% spaces and {\bf all} braces. |\@tfor| would treat {\tt a} and
+% |{a}| as special, but not |{{a}}|.
+% \begin{macrocode}
+\def\TeXr@loop{\futurelet\TeXr@temp\TeXr@loop@}
+% \end{macrocode}
+% \begin{macrocode}
+\def\TeXr@loop@{%
+ \ifx A\TeXr@temp \def\@tempa{\TeXr@label\Alph }\else
+ \ifx a\TeXr@temp \def\@tempa{\TeXr@label\alph }\else
+ \ifx i\TeXr@temp \def\@tempa{\TeXr@label\roman }\else
+ \ifx I\TeXr@temp \def\@tempa{\TeXr@label\Roman }\else
+ \ifx 1\TeXr@temp \def\@tempa{\TeXr@label\arabic}\else
+ \ifx \@sptoken\TeXr@temp \let\@tempa\TeXr@space \else
+ \ifx \bgroup\TeXr@temp \let\@tempa\TeXr@group \else
+ \ifx \@@@\TeXr@temp \let\@tempa\@gobble \else
+ \let\@tempa\TeXr@other
+% \end{macrocode}
+% Hook for possible extensions
+% \begin{macrocode}
+ \TeXr@hook
+ \fi\fi\fi\fi\fi\fi\fi\fi
+ \@tempa}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\TeXr@hook}
+% \begin{macrocode}
+\providecommand\TeXr@hook{}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Diagonally separated column heads}
+%
+% \begin{macro}{\diaghead}
+% Macro for diagonally separated column heads.
+% \begin{macrocode}
+\newcommand\diaghead{\@ifnextchar({\mcell@diaghead}{\mcell@diagheads}}
+\@ifdefinable\mcell@diaghead{}
+\def\mcell@diaghead(#1){\def\celldiagratio{(#1)}\mcell@diagheads}
+% \end{macrocode}
+% The default value of diagonal ratio.
+% \begin{macrocode}
+\newcommand\celldiagratio{(5,-2)}
+% \end{macrocode}
+% The building itself
+% \begin{macrocode}
+\newcommand\mcell@diagheads[3]{\hbox\bgroup\expandafter
+ \mcell@getcelldiagratios\celldiagratio\relax
+ \@tempswafalse
+% \end{macrocode}
+% depends of sign of ratios.
+% \begin{macrocode}
+ \ifnum\mcell@Hratio<\z@\count@-\mcell@Hratio\relax
+ \edef\mcell@Hratio{\the\count@}\relax
+ \ifnum\mcell@Vratio<\z@\count@-\mcell@Vratio\relax
+ \edef\mcell@Vratio{\the\count@}\else\@tempswatrue
+ \fi
+ \else
+ \ifnum\mcell@Vratio<\z@\count@-\mcell@Vratio\relax
+ \edef\mcell@Vratio{\the\count@}\@tempswatrue\else
+ \fi
+ \fi
+ \settowidth\@tempdima{#1}\advance\@tempdima2\tabcolsep
+ \edef\mcell@diagH{\the\@tempdima}\divide\@tempdima\mcell@Hratio
+ \@tempdima\mcell@Vratio\@tempdima\edef\mcell@diagV{\the\@tempdima}%
+% \end{macrocode}
+% The |\unitlength| here is |\relaxed|, we use just real dimensions.
+% \begin{macrocode}
+ \let\mcell@oriunitlength\unitlength\let\unitlength\relax
+ \kern-\tabcolsep\kern-\@wholewidth
+ \setbox\z@\hbox{\theadfont{\strut}}\@tempdima\dp\z@
+% \end{macrocode}
+% The value of compensate vertical spacing defined here experimentally
+% and equals to 2~default line thickness.
+% \begin{macrocode}
+ \advance\@tempdima.8\p@%2\@wholewidth
+% \end{macrocode}
+% If |\makedgapedcells| switched on for the table there is
+% compensate spacing.
+% \begin{macrocode}
+ {\ifx\@classz\mcell@classz
+ \setbox\z@\hbox{#1}\ht\z@\z@\dp\z@\z@
+ \mcell@MB@\z@\mcell@MBjot
+ \global\dimen@\@tempdima\global\@tempdimb\@tempdimb
+ \else\global\dimen@\z@\global\@tempdimb\z@\fi
+ }%
+ \advance\@tempdima\dimen@
+ \edef\mcell@diagVoffset{\the\@tempdima}%
+ \@tempdima\mcell@diagV\advance\@tempdima-\mcell@diagVoffset
+ \advance\@tempdima-\@tempdimb
+ \edef\mcell@diagVcorr{\the\@tempdima}%
+ \noindent\nomakegapedcells\hbox{\begin{tabular}{@{}c@{}}%
+% \end{macrocode}
+% At least a~|\normallineskip| vertical space from top and bottom of cell.
+% \begin{macrocode}
+ \ifdim\jot<2\p@\jot2\p@\fi
+ \if@tempswa
+% \end{macrocode}
+% For South-East or North-West directions.
+% \begin{macrocode}
+ \begin{picture}(\mcell@diagH,\mcell@diagVcorr)(\z@,\mcell@diagVoffset)%
+ \put(\z@,\mcell@diagV){\makebox(\z@,\z@)[tl]%
+ {\edef\tempa{(\mcell@Hratio,-\mcell@Vratio)}\expandafter
+ \line\tempa{\mcell@diagH}}}
+ \put(\tabcolsep,\jot)%
+ {\makebox(\z@,\z@)[bl]{\theadfont
+ \let\cellset\theadset\makecell[bl]{\strut#2}}}
+ \@tempdima\mcell@diagH\advance\@tempdima-\tabcolsep
+ \@tempdimb\mcell@diagV\advance\@tempdimb-\jot
+ \put(\@tempdima,\@tempdimb)%
+ {\makebox(\z@,\z@)[tr]{\theadfont
+ \let\cellset\theadset\makecell[tr]{#3\strut}}}
+ \end{picture}%
+ \else
+% \end{macrocode}
+% For South-West or North-East directions.
+% \begin{macrocode}
+ \begin{picture}(\mcell@diagH,\mcell@diagVcorr)(\z@,\mcell@diagVoffset)%
+ \put(\z@,\mcell@diagV){\makebox(\z@,\z@)[tl]%
+ {\edef\tempa{(\mcell@Hratio,\mcell@Vratio)}\expandafter
+ \line\tempa{\mcell@diagH}}}
+ \@tempdima\mcell@diagV\advance\@tempdima-\jot
+ \put(\tabcolsep,\@tempdima)%
+ {\makebox(\z@,\z@)[tl]{\theadfont
+ \let\cellset\theadset\makecell[tl]{\strut#3}}}
+ \@tempdima\mcell@diagH\advance\@tempdima-\tabcolsep
+ \put(\@tempdima,\jot)%
+ {\makebox(\z@,\z@)[br]%
+ {\theadfont
+ \let\cellset\theadset{\makecell[br]{#2\strut}}}}
+ \end{picture}%
+ \fi
+ \end{tabular}%
+ \kern-\tabcolsep\kern-\@wholewidth
+ }\let\unitlength\mcell@oriunitlength\egroup\par
+ \ifvmode\strut
+ \vspace*{-\normalbaselineskip}\vspace*{-\normallineskip}
+ \fi
+}
+% \end{macrocode}
+% \end{macro}
+% Macro used by previous one. Extracts ratios for defining of height of cell.
+% \begin{macrocode}
+\@ifdefinable\mcell@getcelldiagratios{}
+\def\mcell@getcelldiagratios(#1,#2){\def\mcell@Hratio{#1}\def\mcell@Vratio{#2}}
+% \end{macrocode}
+%
+% \subsection{The \cmd{\hline} and \cmd{\cline} with necessary thickness}
+%
+% \begin{macro}{\Xhline}
+% The commands for |\hline| and |\cline| with necessary thickness.
+% Added code for the |longtable| environment.
+% \begin{macrocode}
+\newcommand\Xhline[1]{\noalign{\ifnum0=`}\fi\arrayrulewidth#1%
+ \ifx\hline\LT@hline\let\@xhline\LT@@hline\fi
+ \hrule\@height\arrayrulewidth\futurelet\reserved@a\@xhline}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\Xcline}
+% \begin{macrocode}
+\def\Xcline#1#2{\@Xcline#1;#2\@nil}
+\def\@Xcline#1-#2;#3\@nil{%
+ \omit
+ \@multicnt#1%
+ \advance\@multispan\m@ne
+ \ifnum\@multicnt=\@ne\@firstofone{&\omit}\fi
+ \@multicnt#2%
+ \advance\@multicnt-#1%
+ \advance\@multispan\@ne
+ \leaders\hrule\@height#3\hfill
+ \cr
+ \noalign{\vskip-#3}}
+% \end{macrocode}
+% \end{macro}
+%
+% \Finale
+\endinput
diff --git a/macros/latex/contrib/makecell/makecell.pdf b/macros/latex/contrib/makecell/makecell.pdf
new file mode 100644
index 0000000000..f05e77f5b2
--- /dev/null
+++ b/macros/latex/contrib/makecell/makecell.pdf
Binary files differ