
Среда Longtable имеет разделы дляпервая головаидругой голова. Я хочу добавить третий раздел дляпоследняя головакоторый должен быть на последней странице таблицы с немного другим текстом. Возможно ли это?
P.S. Я не уверен, что этот вопрос требует минимального рабочего примера.
решение1
(Некоторые объяснения написаны в ответеНастроить длинный заголовок таблицы
Это возможно. Взгляните на следующий код изlongtable.sty
\def\LT@output{% \ifnum\outputpenalty <-\@Mi%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \ifnum\outputpenalty > -\LT@end@pen \LT@err{floats and marginpars not allowed in a longtable}\@ehc \else \setbox\z@\vbox{\unvbox\@cclv}% \ifdim \ht\LT@lastfoot>\ht\LT@foot \dimen@\pagegoal \advance\dimen@-\ht\LT@lastfoot \ifdim\dimen@<\ht\z@ \setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}% \@makecol \@outputpage \setbox\z@\vbox{\box\LT@head}% \fi \fi \global\@colroom\@colht \global\vsize\@colht \vbox {\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}% \fi \else \setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}% \@makecol \@outputpage \global\vsize\@colroom \copy\LT@head\nobreak%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \fi}
Мы могли бы видеть, что \ifnum\outputpenalty <-\@Mi
используется для проверки, является ли эта страница последней страницей. Поэтому мы хотели бы \copy\LT@lasthead
в этой точке. Однако в этот момент \LT@head
уже вставлен в начало \@cclv
. (В противном случае проверка штрафа не имеет смысла.) Поэтому нам нужно \setbox\LT@head=\vsplit\@cclv to0pt
удалить \LT@head
из \@cclv
. (И вернуть его обратно в \LT@head
). Но это не удается, так как \LT@head
за \@cclv
ним следует \nobreak
. Поэтому нам нужно изменить строку \copy\LT@head\nobreak
, чтобы получить следующий код:
\documentclass{article}
\usepackage{longtable,setspace}
\begin{document}
\listoftables
\setstretch{5}
\makeatletter
\newif\ifmorethanonepage\morethanonepagefalse
\newbox\LT@lasthead\def\endlasthead{\LT@end@hd@ft\LT@lasthead}
\def\LT@output{%
\ifnum\outputpenalty <-\@Mi
\ifmorethanonepage\copy\LT@lasthead\fi%%%%%
\setbox\LT@head=\vsplit\@cclv to0pt%%%%%%
\ifnum\outputpenalty > -\LT@end@pen
\LT@err{floats and marginpars not allowed in a longtable}\@ehc
\else
\setbox\z@\vbox{\unvbox\@cclv}%
\ifdim \ht\LT@lastfoot>\ht\LT@foot
\dimen@\pagegoal
\advance\dimen@-\ht\LT@lastfoot
\ifdim\dimen@<\ht\z@
\setbox\@cclv\vbox{\unvbox\z@\copy\LT@foot\vss}%
\@makecol
\@outputpage
\setbox\z@\vbox{\box\LT@lasthead}%
\fi
\fi
\global\@colroom\@colht
\global\vsize\@colht
\vbox
{\unvbox\z@\box\ifvoid\LT@lastfoot\LT@foot\else\LT@lastfoot\fi}%
\fi
\else
\global\morethanonepagetrue%
\setbox\@cclv\vbox{\unvbox\@cclv\copy\LT@foot\vss}%
\@makecol
\@outputpage
\global\vsize\@colroom
\copy\LT@head%%%%%\nobreak
\fi}
\makeatother
\begin{longtable}{ccc}
\caption{FIRST} \\\endfirsthead
\caption{OTHER} \\\endhead
\caption{LAST} \\\endlasthead
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 \\ \end{longtable}
\end{document}