From e0c6872cf40896c7be36b11dcc744620f10adf1d Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Mon, 2 Sep 2019 13:46:59 +0900 Subject: Initial commit --- macros/latex/contrib/oberdiek/tabularht.dtx | 1267 +++++++++++++++++++++++++++ 1 file changed, 1267 insertions(+) create mode 100644 macros/latex/contrib/oberdiek/tabularht.dtx (limited to 'macros/latex/contrib/oberdiek/tabularht.dtx') diff --git a/macros/latex/contrib/oberdiek/tabularht.dtx b/macros/latex/contrib/oberdiek/tabularht.dtx new file mode 100644 index 0000000000..3ea8cc4933 --- /dev/null +++ b/macros/latex/contrib/oberdiek/tabularht.dtx @@ -0,0 +1,1267 @@ +% \iffalse meta-comment +% +% File: tabularht.dtx +% Version: 2016/05/16 v2.6 +% Info: Tabular with height specified +% +% Copyright (C) 2005-2007 by +% Heiko Oberdiek +% 2016 +% https://github.com/ho-tex/oberdiek/issues +% +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3c of this license or (at your option) any later +% version. This version of this license is in +% http://www.latex-project.org/lppl/lppl-1-3c.txt +% and the latest version of this license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of +% LaTeX version 2005/12/01 or later. +% +% This work has the LPPL maintenance status "maintained". +% +% This Current Maintainer of this work is Heiko Oberdiek. +% +% This work consists of the main source file tabularht.dtx +% and the derived files +% tabularht.sty, tabularht.pdf, tabularht.ins, tabularht.drv, +% tabularht-example1.tex, tabularht-example2.tex. +% +% Distribution: +% CTAN:macros/latex/contrib/oberdiek/tabularht.dtx +% CTAN:macros/latex/contrib/oberdiek/tabularht.pdf +% +% Unpacking: +% (a) If tabularht.ins is present: +% tex tabularht.ins +% (b) Without tabularht.ins: +% tex tabularht.dtx +% (c) If you insist on using LaTeX +% latex \let\install=y\input{tabularht.dtx} +% (quote the arguments according to the demands of your shell) +% +% Documentation: +% (a) If tabularht.drv is present: +% latex tabularht.drv +% (b) Without tabularht.drv: +% latex tabularht.dtx; ... +% The class ltxdoc loads the configuration file ltxdoc.cfg +% if available. Here you can specify further options, e.g. +% use A4 as paper format: +% \PassOptionsToClass{a4paper}{article} +% +% Programm calls to get the documentation (example): +% pdflatex tabularht.dtx +% makeindex -s gind.ist tabularht.idx +% pdflatex tabularht.dtx +% makeindex -s gind.ist tabularht.idx +% pdflatex tabularht.dtx +% +% Installation: +% TDS:tex/latex/oberdiek/tabularht.sty +% TDS:doc/latex/oberdiek/tabularht.pdf +% TDS:doc/latex/oberdiek/tabularht-example1.tex +% TDS:doc/latex/oberdiek/tabularht-example2.tex +% TDS:source/latex/oberdiek/tabularht.dtx +% +%<*ignore> +\begingroup + \catcode123=1 % + \catcode125=2 % + \def\x{LaTeX2e}% +\expandafter\endgroup +\ifcase 0\ifx\install y1\fi\expandafter + \ifx\csname processbatchFile\endcsname\relax\else1\fi + \ifx\fmtname\x\else 1\fi\relax +\else\csname fi\endcsname +% +%<*install> +\input docstrip.tex +\Msg{************************************************************************} +\Msg{* Installation} +\Msg{* Package: tabularht 2016/05/16 v2.6 Tabular with height specified (HO)} +\Msg{************************************************************************} + +\keepsilent +\askforoverwritefalse + +\let\MetaPrefix\relax +\preamble + +This is a generated file. + +Project: tabularht +Version: 2016/05/16 v2.6 + +Copyright (C) 2005-2007 by + Heiko Oberdiek + +This work may be distributed and/or modified under the +conditions of the LaTeX Project Public License, either +version 1.3c of this license or (at your option) any later +version. This version of this license is in + http://www.latex-project.org/lppl/lppl-1-3c.txt +and the latest version of this license is in + http://www.latex-project.org/lppl.txt +and version 1.3 or later is part of all distributions of +LaTeX version 2005/12/01 or later. + +This work has the LPPL maintenance status "maintained". + +This Current Maintainer of this work is Heiko Oberdiek. + +This work consists of the main source file tabularht.dtx +and the derived files + tabularht.sty, tabularht.pdf, tabularht.ins, tabularht.drv, + tabularht-example1.tex, tabularht-example2.tex. + +\endpreamble +\let\MetaPrefix\DoubleperCent + +\generate{% + \file{tabularht.ins}{\from{tabularht.dtx}{install}}% + \file{tabularht.drv}{\from{tabularht.dtx}{driver}}% + \usedir{tex/latex/oberdiek}% + \file{tabularht.sty}{\from{tabularht.dtx}{package}}% + \usedir{doc/latex/oberdiek}% + \file{tabularht-example1.tex}{\from{tabularht.dtx}{example1}}% + \file{tabularht-example2.tex}{\from{tabularht.dtx}{example2}}% + \nopreamble + \nopostamble +% \usedir{source/latex/oberdiek/catalogue}% +% \file{tabularht.xml}{\from{tabularht.dtx}{catalogue}}% +} + +\catcode32=13\relax% active space +\let =\space% +\Msg{************************************************************************} +\Msg{*} +\Msg{* To finish the installation you have to move the following} +\Msg{* file into a directory searched by TeX:} +\Msg{*} +\Msg{* tabularht.sty} +\Msg{*} +\Msg{* To produce the documentation run the file `tabularht.drv'} +\Msg{* through LaTeX.} +\Msg{*} +\Msg{* Happy TeXing!} +\Msg{*} +\Msg{************************************************************************} + +\endbatchfile +% +%<*ignore> +\fi +% +%<*driver> +\NeedsTeXFormat{LaTeX2e} +\ProvidesFile{tabularht.drv}% + [2016/05/16 v2.6 Tabular with height specified (HO)]% +\documentclass{ltxdoc} +\usepackage{holtxdoc}[2011/11/22] +\begin{document} + \DocInput{tabularht.dtx}% +\end{document} +% +% \fi +% +% +% \CharacterTable +% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +% Digits \0\1\2\3\4\5\6\7\8\9 +% Exclamation \! Double quote \" Hash (number) \# +% Dollar \$ Percent \% Ampersand \& +% Acute accent \' Left paren \( Right paren \) +% Asterisk \* Plus \+ Comma \, +% Minus \- Point \. Solidus \/ +% Colon \: Semicolon \; Less than \< +% Equals \= Greater than \> Question mark \? +% Commercial at \@ Left bracket \[ Backslash \\ +% Right bracket \] Circumflex \^ Underscore \_ +% Grave accent \` Left brace \{ Vertical bar \| +% Right brace \} Tilde \~} +% +% \GetFileInfo{tabularht.drv} +% +% \title{The \xpackage{tabularht} package} +% \date{2016/05/16 v2.6} +% \author{Heiko Oberdiek\thanks +% {Please report any issues at https://github.com/ho-tex/oberdiek/issues}\\ +% \xemail{heiko.oberdiek at googlemail.com}} +% +% \maketitle +% +% \begin{abstract} +% This package defines some environments that adds +% a height specification to tabular and array. +% \end{abstract} +% +% \tableofcontents +% +% \section{Usage} +% +% \begin{quote} +% |\usepackage{tabularht}| +% \end{quote} +% The package provides the following environments +% that extend the tabular/array environment by +% a height specification as first argument: +% \begin{itemize} +% \item |tabularht|, |tabularht*| +% \item |arrayht| +% \item |tabularhtx| +% (if package \xpackage{tabularx} is loaded) +% \end{itemize} +% The height argument allows a length specification, +% package \xpackage{calc} is supported if used. This means, +% the tabular will have the specified height. +% You can also use the prefixes |to=| and |spread=|. +% |to=| is the default, |spread=| means, the natural +% height of the tabular box is changed by the length +% after |spread=|. +% +% Examples: +% \begin{quote} +% \begin{tabular}{@{}l@{ $\rightarrow$ }l@{}} +% |\begin{tabularht}{1in}| +% & height is 1in\\ +% |\begin{tabularht}{to=1in}| +% & height is 1in\\ +% |\begin{tabularht}{spread=0pt}| +% & natural height, same as |\begin{tabular}|\\ +% |\begin{tabularht}{spread=1in}| +% & natural height increased by 1in +% \end{tabular} +% \end{quote} +% +% Hint: See also package \xpackage{tabularkv}, it provides an interface, +% where most parameters for the environments can be given +% by key-value pairs. +% +% \begin{declcs}{interrowspace}\,|{|\dots|}| +% \end{declcs} +% Adds space between table rows. It is essentially +% the same as |\noalign{\vspace{...}}|. +% \begin{declcs}{interrowfill} +% \end{declcs} +% Short for |\interrowspace{\fill}| +% \begin{declcs}{interrowstart}\,\dots\,\cs{interrowstop} +% \end{declcs} +% Marker commands, useful for option \xoption{vlines}. +% +% \subsection{Option \xoption{vlines}} +% +% Warning: This stuff is experimental. +% +% \vspace{2ex} +% \noindent +% Vertical lines are interrupted, if space is inserted +% in \cs{noalign}, \cs{interrowspace}, \cs{addlinespace} +% (\xpackage{booktabs}), +% between double \cs{hline}s. This option tries to detect +% and add the vertical lines. The lines in a tabular +% with \xpackage{tabularht} support (environments of this package) +% are numbered from left to right. The gap that is +% controlled by \cs{interrowspace} or inbetween \cs{interrowstart} +% and \cs{interrowstop} is then filled with the detected +% vertical lines. +% +% If only a limited selection of the lines should be +% drawn, the commands know an optional argument with a +% list of line numbers, e.g. +% \begin{quote} +%\begin{verbatim} +%\begin{tabularht}{50mm}{|l|l|} +% Hello & World\\ +% \interrowfill[1,3] +% Foo & Bar +%\end{tabularht} +%\end{verbatim} +% \end{quote} +% There are three lines, but the middle line is not drawn +% in the gap between the first and second row. +% Zero can be used to suppress all lines: +% \begin{quote} +% |\interrowspace[0]{10mm}| +% \end{quote} +% The syntax of the commands with the optional argument +% with the line number list \meta{list}. \meta{list} is a comma +% separated list of numbers, \meta{height} means the +% height specification described above with the optional +% prefixes |to=| or |spread=|. +% \begin{quote} +% \cs{interrowspace}\,|[|\meta{list}|]|\,|{|\meta{height}|}|\\ +% \cs{interrowfill}\,|[|\meta{list}|]|\\ +% \cs{interrowstart}\,|[|\meta{list}|]|\,\dots\,\cs{interrowstop} +% \end{quote} +% +% Option \xoption{vlines} is driver dependent and uses \eTeX\ features. +% \begin{description} +% \item[\xoption{pdftex}:] \pdfTeX\ in PDF mode. +% Here the positions of the lines are written with the +% help of the \cs{pdfsavepos} feature into the \xfile{.aux} file(s). +% Therefore you need two LaTeX runs to get the lines. +% \item[\xoption{dvips}:] +% Here, PostScript's currentpoint it used to get +% the line positions. The lines are then drawn at the end +% of the page. Thus one \LaTeX/dvips run is sufficient +% for this option. +% \item[Other drivers:]\mbox{} +% \begin{description} +% \item[PostScript drivers:] probably possible, an end of page +% hook would be nice. +% \item[\VTeX:] with GeX (PostScript interpreter) probably possible. +% \item[dvipdfm:] no idea. The big problem is, how to get the +% current position? +% \end{description} +% \end{description} +% +% \subsection{Limitations} +% +% \begin{itemize} +% \item +% Vertical lines are interrupted by |\noalign{\vfill}|. +% \end{itemize} +% +% \subsection{Compatibility} +% +% \begin{itemize} +% \item +% \xpackage{array}, \xpackage{delarray}, \xpackage{tabularx} +% are supported. +% \item There can be problems with packages that +% redefine \cs{@array} (or \cs{@@array}, \cs{@tabarray}) and +% \cs{@arrayrule} (for option \xoption{vlines}). +% \item \xpackage{colortbl}: it should at least work, but there isn't +% support for filling the gaps with color, neither +% the rules nor the backgrounds. +% \end{itemize} +% +% \subsection{Examples} +% +% \subsubsection{Example 1} +% +% \begin{macrocode} +%<*example1> +\documentclass{article} +\usepackage{tabularht} + +\begin{document} +\fbox{% + \begin{tabularht*}{1in}{4in}{@{}l@{\extracolsep{\fill}}r@{}}% + upper left corner & upper right corner\\% + \noalign{\vfill}% + \multicolumn{2}{@{}c@{}}{bounding box}\\% + \noalign{\vfill}% + lower left corner & lower right corner\\% + \end{tabularht*}% +} +\end{document} +% +% \end{macrocode} +% +% \subsubsection{Example 2} +% +% \begin{macrocode} +%<*example2> +\documentclass{article} +\usepackage{booktabs} +\usepackage[dvips,vlines]{tabularht} + +\begin{document} + +\begin{tabularht}{spread=0pt}{|l|l|} + \hline + First&Line\\% + \hline +\interrowstart + \addlinespace[10mm]% +\interrowstop + \hline + Second&Line\\% +\interrowstart + \hline + \hline +\interrowstop + Third&Line\\% + \hline +\interrowspace{10mm} + \hline + Fourth&Line\\% + \hline +\end{tabularht} + +\end{document} +% +% \end{macrocode} +% +% \StopEventually{ +% } +% +% \section{Implementation} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% Package identification. +% \begin{macrocode} +\NeedsTeXFormat{LaTeX2e} +\ProvidesPackage{tabularht}% + [2016/05/16 v2.6 Tabular with height specified (HO)] +% \end{macrocode} +% +% \subsection{Environments} +% +% \begin{macrocode} +\let\@toarrayheight\@empty +\let\tabH@array@init\@empty + +\toks@={% + \begingroup + \long\def\x#1\vcenter\fi\fi\bgroup#2\@sharp#3#4\@nil{% + \endgroup + \gdef\@array[##1]##2{% + \tabH@array@init + #1% + \vcenter\fi\fi + \@toarrayheight + \bgroup + \let\@toarrayheight\@empty + #2\@sharp###3#4% + }% + }% + \expandafter\x\@array[#1]{#2}\@nil % hash-ok +} +\edef\tabH@patch@array{\the\toks@} +\def\tabH@patch@@array{% + \ifx\@array\@@array + \def\reserved@a{\let\@@array\@array}% + \else + \let\reserved@a\relax + \fi + \tabH@patch@array + \reserved@a +} +\tabH@patch@@array + +\@ifpackageloaded{array}{}{% + \AtBeginDocument{% + \@ifpackageloaded{array}{% + \tabH@patch@@array + }{}% + }% +} + +\def\tabH@setheight#1{% + \tabH@@setheight#1==\@nil +} +\def\tabH@@setheight#1=#2=#3\@nil{% + \ifx\\#2#3\\% + \setlength{\dimen@}{#1}% + \edef\@toarrayheight{to\the\dimen@}% + \else + \edef\tabH@temp{\zap@space#1 \@empty}% + \ifx\tabH@temp\tabH@to + \else + \ifx\tabH@temp\tabH@spread + \else + \PackageError{tabularht}{% + Unknown height specifier % + `\expandafter\strip@prefix\meaning\tabH@temp'% + }{% + The height dimension for tabular height can be prefixed% + \MessageBreak + with `to=' or `spread=', default is `to='.% + }% + \let\tabH@temp\tabH@to + \fi + \fi + \setlength{\dimen@}{#2}% + \edef\@toarrayheight{\tabH@temp\the\dimen@}% + \fi +} +\def\tabH@to{to} +\def\tabH@spread{spread} +% \end{macrocode} +% First argument is the height of the table, +% then the orignal arguments for tabular follow. +% \begin{macrocode} +\newenvironment{tabularht}[1]{% + \tabH@setheight{#1}% + \tabular +}{% + \endtabular +} + +\newenvironment{tabularht*}[1]{% + \tabH@setheight{#1}% + \@nameuse{tabular*}% +}{% + \@nameuse{endtabular*}% +} + +\newenvironment{tabularhtx}[1]{% + \tabH@setheight{#1}% + \tabularx +}{% + \endtabularx +} + +\newenvironment{arrayht}[1]{% + \tabH@setheight{#1}% + \array +}{% + \endarray +} + +\def\interrowspace{% + \noalign\bgroup + \tabH@interrowspace +} +\newcommand*{\tabH@interrowspace}[2][]{% + \tabH@vspace{#1}{#2}% + \egroup +} +\def\interrowfill{% + \noalign\bgroup + \tabH@interrowfill +} +\newcommand*{\tabH@interrowfill}[1][]{% + \tabH@vspace{#1}{\fill}% + \egroup +} +\def\tabH@vspace#1#2{% + \tabH@vspace@start{#1}% + \vspace{#2}% + \tabH@vspace@stop +} +\let\tabH@vspace@start\@gobble +\let\tabH@vspace@stop\@empty + +\newcommand*{\interrowstart}{% + \noalign\bgroup + \tabH@interrowstart +} +\newcommand*{\tabH@interrowstart}[1][]{% + \tabH@vspace@start{#1}% + \egroup +} +\newcommand*{\interrowstop}{% + \noalign{\tabH@vspace@stop}% +} +% \end{macrocode} +% +% \subsection{Options} +% +% \begin{macrocode} +\providecommand*{\tabH@driver}{} + +\DeclareOption{vlines}{% + \let\tabH@temp\relax +} +\DeclareOption{pdftex}{} +\DeclareOption{dvips}{% + \def\tabH@driver{dvips}% +} +\ProcessOptions*\relax + +\ifx\tabH@temp\relax +\else + \expandafter\endinput +\fi + +\begingroup + \@ifundefined{eTeXversion}{% + \PackageError{tabularht}{% + Option `vlines' requires eTeX% + }{% + Use of eTeX is recommended for LaTeX, see ltnews16.% + }% + \endgroup + \endinput + }{}% +\endgroup +% \end{macrocode} +% +% \subsection{Option vlines, driver independent stuff} +% +% \begin{macrocode} +\begingroup + \let\@addtoreset\@gobbletwo + \newcounter{tabH@unique}% +\endgroup +\let\tabH@currenttab\@empty + +\def\tabH@array@init{% + \ifx\@toarrayheight\@empty + % ignore vertical lines of nested tabular environments + \let\tabH@currenttab\@empty + \else + \stepcounter{tabH@unique}% + \edef\tabH@currenttab{\the\c@tabH@unique}% + \fi +} + +\renewcommand*{\@arrayrule}{% + \@addtopreamble{% + \hskip -.5\arrayrulewidth + \ifx\tabH@currenttab\@empty + \else + \tabH@vrule{\tabH@currenttab}% + \fi + \begingroup + \expandafter\ifx\csname CT@arc@\endcsname\relax + \else + \expandafter\CT@arc@ + \fi + \vline + \endgroup + \hskip -.5\arrayrulewidth + }% +} +\let\tabH@arrayrule\@arrayrule +\AtBeginDocument{% + \@ifpackageloaded{colortbl}{% + \let\@arrayrule\tabH@arrayrule + }{}% +} + +\let\tabH@vrule\@gobble +% \end{macrocode} +% +% \subsection{Driver pdftex} +% +% \begin{macrocode} +\RequirePackage{ifpdf} +\ifpdf + \begingroup + \@ifundefined{pdfsavepos}{% + \PackageError{tabularht}{% + Your pdfTeX is too old% + }{% + \string\pdfsavepos\space is missing.% + }% + \endgroup + \csname fi\endcsname + \endinput + }{}% + + \let\on@line\@empty + \PackageInfo{tabularht}{% + Using driver `pdftex' because of pdfTeX in PDF mode% + }% + \endgroup + + \protected\def\tabH@vrule#1{% + \if@filesw + \pdfsavepos + \protected@write\@auxout{% + \let\tabH@lastxpos\relax + }{% + \tabH@aux@vrule{#1}{\tabH@lastxpos}% + }% + \fi + }% + + \def\tabH@lastxpos{\the\pdflastxpos}% + \def\tabH@lastypos{\the\pdflastypos}% + + % The .aux file contains three commands: + % \tabH@aux@vrule{tabular id}{x position} + % \tabH@aux@vstart{tabular id}{row id}{x position}{y position} + % \tabH@aux@vstop{y position} + % + \AtBeginDocument{% + % The .aux files are read the first time before + % \AtBeginDocument and later at \end{document}. + % \tabH@aux@done is a marker to distinguish + % between these two readings. Only in the first + % case we need the \tabH@aux@... commands. + \let\tabH@aux@done\@empty + \if@filesw + \immediate\write\@mainaux{% + \@percentchar\@percentchar BeginProlog: tabularht% + }% + % items in the aux file are executed, + % if tabularht is loaded + % and during the aux file read at \begin{document} only + \immediate\write\@mainaux{% + \detokenize{% + % the \tabH@aux@... commands are needed only if + % tabularht is loaded with driver pdftex. + \@ifundefined{tabH@aux@vrule}\@secondoftwo\@firstofone + {% + % disable commands except for the first .aux files reading + \@ifundefined{tabH@aux@done}\@gobble\@firstofone + }% + {% + \let\tabH@aux@vrule\@gobbletwo + \let\tabH@aux@vstart\@gobblefour + \let\tabH@aux@vstop\@gobble + }% + }% + }% + \immediate\write\@mainaux{% + \@percentchar\@percentchar EndProlog: tabularht% + }% + \fi + }% + + % the x positions of vrules are stored in + % \tabH@list with distinct values + \protected\def\tabH@aux@vrule#1#2{% + \@ifundefined{tabH@#1list}{% + \expandafter\xdef\csname tabH@#1list\endcsname{% + \noexpand\do{#2}% + }% + }{% + \begingroup + \def\x{#2}% + \let\y\@undefined + \let\do\tabH@do@add + \expandafter\xdef\csname tabH@#1list\endcsname{% + \csname tabH@#1list\endcsname\@empty + \ifx\y\@undefined + \noexpand\do{\x}% + \fi + }% + \endgroup + }% + }% + \def\tabH@do@add#1{% + \ifx\y\@undefined + \ifnum#1<\x\space + \else + \expandafter\ifx\csname y\endcsname\relax\fi + \ifnum#1>\x\space + \noexpand\do{\x}% + \fi + \fi + \fi + \noexpand\do{#1}% + }% + + \def\tabH@vspace@start#1{% + \if@filesw + \stepcounter{tabH@unique}% + \edef\tabH@currentrow{\the\c@tabH@unique}% + \pdfsavepos + \protected@write\@auxout{% + \let\tabH@lastxpos\relax + \let\tabH@lastypos\relax + }{% + \tabH@aux@vstart{\tabH@currenttab}{\tabH@currentrow}% + {\tabH@lastxpos}{\tabH@lastypos}% + }% + \fi + \begingroup + \edef\a{tabH@\tabH@currenttab row\tabH@currentrow}% + \expandafter\let\expandafter\x\csname\a x\endcsname + \ifx\x\relax + \else + \expandafter\let\expandafter\y\csname\a y\endcsname + \expandafter\let\expandafter\l + \csname tabH@\tabH@currenttab list\endcsname + \ifx\l\relax + \else + \def\f{#1}% + \ifx\f\@empty + \let\do\tabH@do@set + \else + \count@=\z@ + \let\do\tabH@do@filter + \fi + \setbox\z@=\hbox{\l}% + \wd\z@=\z@ + \dp\z@=\z@ + \copy\z@ + \fi + \fi + \endgroup + }% + \def\tabH@vspace@stop{% + \if@filesw + \pdfsavepos + \protected@write\@auxout{% + \let\tabH@lastypos\relax + }{% + \tabH@aux@vstop{\tabH@lastypos}% + }% + \fi + }% + \def\tabH@do@set#1{% + \hbox to \z@{% + \hskip \dimexpr #1sp - \x sp\relax + \vrule \@width\arrayrulewidth + \@depth\dimexpr \y sp\relax + \hss + }% + }% + \def\tabH@do@filter{% + \@tempswafalse + \advance\count@\@ne + \@for\e:=\f\do{% + \ifnum\e=\count@ + \@tempswatrue + \fi + }% + \if@tempswa + \expandafter\tabH@do@set + \else + \expandafter\@gobble + \fi + }% + + \protected\def\tabH@aux@vstart#1#2#3#4{% + \def\tabH@current@vstart{{#1}{#2}{#3}{#4}}% + }% + \protected\def\tabH@aux@vstop{% + \expandafter\tabH@aux@v\tabH@current@vstart + }% + \def\tabH@aux@v#1#2#3#4#5{% + \expandafter\gdef\csname tabH@#1row#2x\endcsname{#3}% + \expandafter\xdef\csname tabH@#1row#2y\endcsname{% + \the\numexpr #4 - #5\relax + }% + }% + + \csname fi\endcsname + \endinput + +\fi +% \end{macrocode} +% +% \subsection{DVI drivers} +% +% \begin{macrocode} +\ifx\tabH@driver\@empty + \PackageError{tabularht}{% + Missing DVI driver, option `vlines' disabled% + }{% + Supported DVI drivers: dvips.% + }% + \expandafter\endinput +\fi + +\def\tabH@driver@dvips{% + \def\tabH@literalps##1{\special{ps:SDict begin ##1 end}}% + \def\tabH@headerps##1{\special{! ##1}}% +} + +\@onelevel@sanitize\tabH@driver +\@ifundefined{tabH@driver@\tabH@driver}{% + \PackageError{tabularht}{% + Unsupported driver `\tabH@driver'% + }{% + Supported DVI drivers: dvips.% + }% + \endinput +}{} + +\begingroup + \let\on@line\@empty + \PackageInfo{tabularht}{% + Using driver `\tabH@driver'% + }% +\endgroup +\csname tabH@driver@\tabH@driver\endcsname + +\protected\def\tabH@vrule#1#2\vrule#3\arrayrulewidth{% + #2% \fi or empty + % hack to get rid of maxdrift rounding of dvips, + % thus simulate a large motion + \kern1in\relax + \tabH@literalps{% + #1 tabH.vrule % + Resolution neg 0 translate% + }% + \vrule#3\arrayrulewidth + \tabH@literalps{Resolution 0 translate}% + \kern-1in\relax +} + +\def\tabH@vspace@start#1{% + \begingroup + \let\y\@empty + \@for\x:=#1\do{% + \ifx\y\@empty + \edef\y{\x}% + \else + \edef\y{\y\space\x}% + \fi + }% + \tabH@literalps{\tabH@currenttab[\y]currentpoint exch pop}% + \endgroup +} +\def\tabH@vspace@stop{% + \tabH@literalps{% + currentpoint exch pop % + \number\dimexpr\arrayrulewidth\relax\space + tabH.vspace% + }% +} + +\tabH@headerps{% + userdict begin% + /tabH.list 10 dict def% + /tabH.job [] def % + end% + /tabH.vrule{% + 10 string cvs cvn dup tabH.list exch known{% + tabH.list exch dup [ exch tabH.list exch get % + currentpoint pop round exch true exch{% + % tabH.list key [ ... x true i + % tabH.list key [ ... false i + exch{% + % ... [ ... x i + 2 copy lt{false}{% + 2 copy eq{pop false}{exch true}ifelse% + }ifelse% + }{false}ifelse% + }forall % + pop% + ]put% + }{% + tabH.list exch[currentpoint pop round]put% + }ifelse% + }bind def% + % + /tabH.vspace{% + userdict begin % + 10 dict dup begin % + exch 65536 div Resolution mul 72.27 div % + % dvips uses a poor man's ceil function + % see dopage.c before "drawrule": (int)(... + 0.9999999) + 0.9999999 add truncate% + /rulewidth exch def % + exch/ybottom exch def % + exch/ytop exch def % + exch/cols exch def % + exch/tabkey exch 10 string cvs cvn def % + end% + /tabH.job exch[exch userdict/tabH.job get aload pop]def % + end% + }bind def % + % Now we do the work at the end of the page. + % Unhappily "eop-hook" cannot be used, because "eop" + % executes "restore" before, so that all data are lost. + TeXDict begin% + /eop% + [% + {% + tabH.job{% + begin% + /colarray % + tabH.list tabkey known{tabH.list tabkey get}{[]}ifelse % + def % + cols length 0 eq not{% + /colarray[% + cols{1 sub % + dup 0 lt{pop}{% + dup colarray length ge{pop}{% + colarray exch get% + }ifelse% + }ifelse% + }forall% + ]def% + }if % + colarray{% + % (rulewidth) == rulewidth == % debug + Resolution sub % + ytop rulewidth ytop ybottom sub v% + }forall % + end% + }forall% + % tabH.list{== ==}forall % debug + }bind aload pop % + TeXDict /eop get aload pop% + ]cvx def % + end% +} +% \end{macrocode} +% +% \begin{macrocode} +% +% \end{macrocode} +% +% \section{Installation} +% +% \subsection{Download} +% +% \paragraph{Package.} This package is available on +% CTAN\footnote{\url{http://ctan.org/pkg/tabularht}}: +% \begin{description} +% \item[\CTAN{macros/latex/contrib/oberdiek/tabularht.dtx}] The source file. +% \item[\CTAN{macros/latex/contrib/oberdiek/tabularht.pdf}] Documentation. +% \end{description} +% +% +% \paragraph{Bundle.} All the packages of the bundle `oberdiek' +% are also available in a TDS compliant ZIP archive. There +% the packages are already unpacked and the documentation files +% are generated. The files and directories obey the TDS standard. +% \begin{description} +% \item[\CTAN{install/macros/latex/contrib/oberdiek.tds.zip}] +% \end{description} +% \emph{TDS} refers to the standard ``A Directory Structure +% for \TeX\ Files'' (\CTAN{tds/tds.pdf}). Directories +% with \xfile{texmf} in their name are usually organized this way. +% +% \subsection{Bundle installation} +% +% \paragraph{Unpacking.} Unpack the \xfile{oberdiek.tds.zip} in the +% TDS tree (also known as \xfile{texmf} tree) of your choice. +% Example (linux): +% \begin{quote} +% |unzip oberdiek.tds.zip -d ~/texmf| +% \end{quote} +% +% \paragraph{Script installation.} +% Check the directory \xfile{TDS:scripts/oberdiek/} for +% scripts that need further installation steps. +% Package \xpackage{attachfile2} comes with the Perl script +% \xfile{pdfatfi.pl} that should be installed in such a way +% that it can be called as \texttt{pdfatfi}. +% Example (linux): +% \begin{quote} +% |chmod +x scripts/oberdiek/pdfatfi.pl|\\ +% |cp scripts/oberdiek/pdfatfi.pl /usr/local/bin/| +% \end{quote} +% +% \subsection{Package installation} +% +% \paragraph{Unpacking.} The \xfile{.dtx} file is a self-extracting +% \docstrip\ archive. The files are extracted by running the +% \xfile{.dtx} through \plainTeX: +% \begin{quote} +% \verb|tex tabularht.dtx| +% \end{quote} +% +% \paragraph{TDS.} Now the different files must be moved into +% the different directories in your installation TDS tree +% (also known as \xfile{texmf} tree): +% \begin{quote} +% \def\t{^^A +% \begin{tabular}{@{}>{\ttfamily}l@{ $\rightarrow$ }>{\ttfamily}l@{}} +% tabularht.sty & tex/latex/oberdiek/tabularht.sty\\ +% tabularht.pdf & doc/latex/oberdiek/tabularht.pdf\\ +% tabularht-example1.tex & doc/latex/oberdiek/tabularht-example1.tex\\ +% tabularht-example2.tex & doc/latex/oberdiek/tabularht-example2.tex\\ +% tabularht.dtx & source/latex/oberdiek/tabularht.dtx\\ +% \end{tabular}^^A +% }^^A +% \sbox0{\t}^^A +% \ifdim\wd0>\linewidth +% \begingroup +% \advance\linewidth by\leftmargin +% \advance\linewidth by\rightmargin +% \edef\x{\endgroup +% \def\noexpand\lw{\the\linewidth}^^A +% }\x +% \def\lwbox{^^A +% \leavevmode +% \hbox to \linewidth{^^A +% \kern-\leftmargin\relax +% \hss +% \usebox0 +% \hss +% \kern-\rightmargin\relax +% }^^A +% }^^A +% \ifdim\wd0>\lw +% \sbox0{\small\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\footnotesize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\scriptsize\t}^^A +% \ifdim\wd0>\linewidth +% \ifdim\wd0>\lw +% \sbox0{\tiny\t}^^A +% \ifdim\wd0>\linewidth +% \lwbox +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \else +% \lwbox +% \fi +% \else +% \usebox0 +% \fi +% \end{quote} +% If you have a \xfile{docstrip.cfg} that configures and enables \docstrip's +% TDS installing feature, then some files can already be in the right +% place, see the documentation of \docstrip. +% +% \subsection{Refresh file name databases} +% +% If your \TeX~distribution +% (\teTeX, \mikTeX, \dots) relies on file name databases, you must refresh +% these. For example, \teTeX\ users run \verb|texhash| or +% \verb|mktexlsr|. +% +% \subsection{Some details for the interested} +% +% \paragraph{Attached source.} +% +% The PDF documentation on CTAN also includes the +% \xfile{.dtx} source file. It can be extracted by +% AcrobatReader 6 or higher. Another option is \textsf{pdftk}, +% e.g. unpack the file into the current directory: +% \begin{quote} +% \verb|pdftk tabularht.pdf unpack_files output .| +% \end{quote} +% +% \paragraph{Unpacking with \LaTeX.} +% The \xfile{.dtx} chooses its action depending on the format: +% \begin{description} +% \item[\plainTeX:] Run \docstrip\ and extract the files. +% \item[\LaTeX:] Generate the documentation. +% \end{description} +% If you insist on using \LaTeX\ for \docstrip\ (really, +% \docstrip\ does not need \LaTeX), then inform the autodetect routine +% about your intention: +% \begin{quote} +% \verb|latex \let\install=y\input{tabularht.dtx}| +% \end{quote} +% Do not forget to quote the argument according to the demands +% of your shell. +% +% \paragraph{Generating the documentation.} +% You can use both the \xfile{.dtx} or the \xfile{.drv} to generate +% the documentation. The process can be configured by the +% configuration file \xfile{ltxdoc.cfg}. For instance, put this +% line into this file, if you want to have A4 as paper format: +% \begin{quote} +% \verb|\PassOptionsToClass{a4paper}{article}| +% \end{quote} +% An example follows how to generate the +% documentation with pdf\LaTeX: +% \begin{quote} +%\begin{verbatim} +%pdflatex tabularht.dtx +%makeindex -s gind.ist tabularht.idx +%pdflatex tabularht.dtx +%makeindex -s gind.ist tabularht.idx +%pdflatex tabularht.dtx +%\end{verbatim} +% \end{quote} +% +% \section{Catalogue} +% +% The following XML file can be used as source for the +% \href{http://mirror.ctan.org/help/Catalogue/catalogue.html}{\TeX\ Catalogue}. +% The elements \texttt{caption} and \texttt{description} are imported +% from the original XML file from the Catalogue. +% The name of the XML file in the Catalogue is \xfile{tabularht.xml}. +% \begin{macrocode} +%<*catalogue> + + + + tabularht + Tabular environments with height specified. + + + + + + The tabularht package defines some environments that add a height + specification to tabular and array environments. The default set + of new environments take a value for their height in the first + argument: defined environments are: tabularht, + tabularht* and arrayht. If package + tabularx is also loaded, + the package also defines environments tabularxht and + tabularxht*. +

+ The places where stretching is to happen are signalled by
+ \noalign{\vfill}
+ immediately after the \\ that ends a row of the table or + array. +

+ The package is part of the oberdiek bundle. + + + + + + + +% +% \end{macrocode} +% +% \begin{History} +% \begin{Version}{2005/09/22 v1.0} +% \item +% First public version. +% \end{Version} +% \begin{Version}{2005/10/16 v2.0} +% \item +% Height specification allows +% |to=...| or |spread=...|, default is |to=|. +% \item +% Option \xoption{vlines} added, +% drivers \xoption{pdftex} and \xoption{dvips}. +% \item +% \cs{interrowspace}, \cs{interrowfil}, and +% \cs{interrowstart}\dots\cs{interrowstop} added. +% \end{Version} +% \begin{Version}{2005/10/18 v2.1} +% \item +% Fix for package \xpackage{colortbl}, but the colors +% of \xpackage{colortbl} remain unsupported. +% \end{Version} +% \begin{Version}{2006/02/20 v2.2} +% \item +% Code is not changed. +% \item +% DTX framework. +% \end{Version} +% \begin{Version}{2006/12/22 v2.3} +% \item +% Documentation fix. +% \item +% Fix in code of option vlines. +% \end{Version} +% \begin{Version}{2007/03/21 v2.4} +% \item +% Fix: Counter |tabh@unique| must not be changed by \cs{include}. +% \end{Version} +% \begin{Version}{2007/04/11 v2.5} +% \item +% Line ends sanitized. +% \end{Version} +% \begin{Version}{2016/05/16 v2.6} +% \item +% Documentation updates. +% \end{Version} +% \end{History} +% +% \PrintIndex +% +% \Finale +\endinput -- cgit v1.2.3