% \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} % %\NeedsTeXFormat{LaTeX2e}[1999/12/01] %\ProvidesPackage{makecell} %<*package> [2009/08/03 V0.1e Managing of Tab Column Heads and Cells] % % %<*batchfile> \begingroup \input docstrip.tex \keepsilent \askforoverwritefalse \generate{\file{makecell.sty}{\from{makecell.dtx}{package}}} \endgroup % % %<*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} % % \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