Current File : //usr/share/texlive/texmf-dist/tex/latex/oberdiek/tabularht.sty |
%%
%% This is file `tabularht.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% tabularht.dtx (with options: `package')
%%
%% This is a generated file.
%%
%% Project: tabularht
%% Version: 2019/12/29 v2.7
%%
%% Copyright (C)
%% 2005-2007 Heiko Oberdiek
%% 2016-2019 Oberdiek Package Support Group
%%
%% 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
%% https://www.latex-project.org/lppl/lppl-1-3c.txt
%% and the latest version of this license is in
%% https://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".
%%
%% The Current Maintainers of this work are
%% Heiko Oberdiek and the Oberdiek Package Support Group
%% https://github.com/ho-tex/oberdiek/issues
%%
%%
%% 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.
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{tabularht}%
[2019/12/29 v2.7 Tabular with height specified (HO)]
\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}
\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}%
}
\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
\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
\RequirePackage{iftex}[2019/11/07]
\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@<tabcount>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
\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%
% <tab num> <cols array> <ytop> <ybottom> <rulewidth[sp]>
/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%
}
\endinput
%%
%% End of file `tabularht.sty'.