-
Notifications
You must be signed in to change notification settings - Fork 11
/
longtable.hva
72 lines (70 loc) · 2.46 KB
/
longtable.hva
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%From code by Gilles Gregoire. %%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\@primitives{longtable}
%% Of no interest to hevea
\def\setlongtables{}
%%Those commands are invoked by the special scanner 'scan_bycommand'
%%in verb.mll.
%%They assume that scanned text is in the token command '\@tmp@scanned'
\newtokens{\lt@lines}%
\newcommand{\lt@save@line}[1]
{\appendtokens\lt@lines\@tmp@scanned%
\let#1\lt@lines\resettokens{\lt@lines}}
\def\lt@endhead{\addtokens{\@tmp@scanned}{\\}\lt@save@line{\lt@head}}
\def\lt@endfirsthead{\addtokens{\@tmp@scanned}{\\}\lt@save@line{\lt@firsthead}}
\def\lt@endfoot{\lt@save@line{\lt@foot}}
\def\lt@endlastfoot{\lt@save@line{\lt@lastfoot}}
\def\lt@kill{}
\newcommand{\lt@saveline}[1][]
{\appendtokens\lt@lines\@tmp@scanned%
\addtokens{\lt@lines}{\\[#1]}}
\newcommand{\lt@nosaveline}[1][]{\let\\\lt@saveline}
%%Infamous hack, prepare a '\caption' command for 'table' env
\newcommand{\lt@caption}[2][]
{\ifx\lt@fst@caption\@empty\gdef\lt@fst@caption{\caption[#1]{#2}}\fi%
\let\\\lt@nosaveline}
%%No more than a tabular in a table
%%For interpreting optionnal arg.
\def\lt@fmt@{\begin{center}}
\def\lt@fmt@e{\end{center}}
\def\lt@fmt@c{\begin{center}}
\def\lt@fmt@ec{\end{center}}
\def\lt@fmt@l{\begin{flushleft}}
\def\lt@fmt@el{\end{flushleft}}
\def\lt@fmt@r{\begin{flushright}}
\def\lt@fmt@er{\end{flushright}}
%% Define commands being active during scan_bycommand
\def\lt@let#1#2{\let#1#2\lt@exists{#1}}
%% Invoke comand #1 or command #2 or nothing, if they exist
\def\lt@choose#1#2{\ifu#1\ifu#2\else#2\fi\else#1\fi}
%Table is typeset first in this box (to place caption above it)
\newsavebox{\lt@tabular@box}
%Here we go
\newenvironment{longtable}[2][]
{\def\lt@arg{#2}\def\lt@opt{#1}
\@forcecommand{\pagebreak}[1][]{}%
\@forcecommand{\nopagebreak}[1][]{}%
\@forcecommand{\newpage}{}
\lt@let\endhead\lt@endhead%
\lt@let\endfirsthead\lt@endfirsthead%
\lt@let\endfoot\lt@endfoot%
\lt@let\endlastfoot\lt@endlastfoot%
\lt@let\kill\lt@kill%
\lt@let\\\lt@saveline\lt@let\\*\lt@saveline\lt@let\tabularnewline\lt@saveline%
\global\let\lt@fst@caption\@empty%
\lt@let\caption\lt@caption\lt@let\caption*\lt@caption%
\@longtable}
{\lt@saveline%For the last line
\begin{lrbox}{\lt@tabular@box}%
\begin{tabular}{\lt@arg}%
\lt@choose{\lt@firsthead}{\lt@head}%
\lt@lines%
\lt@choose{\lt@lastfoot}{\lt@foot}%
\end{tabular}
\end{lrbox}
\begin{table}\lt@fst@caption%
\csname lt@fmt@\lt@opt\endcsname%
\usebox{\lt@tabular@box}
\csname lt@fmt@e\lt@opt\endcsname%
\end{table}}