如何在不使用两个表的情况下更改 longtable 中间的 \endhead?

如何在不使用两个表的情况下更改 longtable 中间的 \endhead?

我正在尝试构建一个长表(而不是两个粘在一起的表)。前两页应该具有相同的标题,而最后一页应该更改为另一个标题。我尝试使用此问题中的代码(在 longtable 的中间更改 \endhead),但是,我的标题出现在 \begin(longtable) 之后的最开始处,这导致 \endfirsthead 和 \endhead 出现以下错误“Package longtable 错误:Longtable head 或 foot 不在表格的开头”。

使用上述问题中的相同示例,在 \begin(longtable) 后添加标题后,就会出现错误。我只需要将标题作为表格标题的第一项添加,并在出现新页面时重复标题。以下是导致错误的代码:

\documentclass[a4paper]{scrartcl}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage{booktabs}
\usepackage{longtable}


\begin{document}
\newbox\LTheadsave
\makeatletter
\newcommand\saveLThead{\noalign{\global\setbox\LTheadsave\copy\LT@head}}
\newcommand\restoreLThead{\noalign{\global\setbox\LT@head\copy\LTheadsave}}
\makeatother

\setcounter{LTchunksize}{2}
\begin{longtable}{lc}
\caption{Example error}
\toprule
Question 1 & N \\
\cmidrule(r){1-1}
\cmidrule(l){2-2}
\endfirsthead

\multicolumn{2}{@{}l}{\textbf{Table} \ref{tab: example} continued}\\
\toprule
%\textbf{Table} \ref{tab: example} xyz\\
Question 2 (cont.) 1 & N \\
\cmidrule(r){1-1}
\cmidrule(l){2-2}
\endhead\saveLThead

\multicolumn{2}{@{}l}{\textbf{Table} \ref{tab: example} continued}\\
\toprule
%\textbf{Table} \ref{tab: example} xyz\\
Question 1 (cont.) 1 & N \\
\cmidrule(r){1-1}
\cmidrule(l){2-2}
\endhead

\bottomrule\endfoot
Item 1 & 4 \\
Item 2 & 10 \\
Item 3 & 2 \\
Item 4 & 8 \\
Item 5 & 20 \\
Item 6 & 3 \\
Item 7 & 6 \\
Item 8 & 1 \\
Item 9 & 11 \\
Item 10 & 6 \\
& \\\newpage
Item 1 & 4 \\
Item 2 & 10 \\
Item 3 & 2 \\
Item 4 & 8 \\
Item 5 & 20 \\
Item 6 & 3 \\
Item 7 & 6 \\
Item 8 & 1 \\
Item 9 & 11 \\
Item 10 & 6 \\
&\\

Question 2   & N \\
\cmidrule(r){1-1}
\cmidrule(l){2-2}
Item 1 & 4 \\\restoreLThead
Item 2 & 10 \\
Item 3 & 2 \\
Item 4 & 8 \\
Item 5 & 20 \\
Item 6 & 3 \\\newpage
Item 7 & 6 \\
Item 8 & 1 \\
Item 9 & 11 \\
Item 10 & 6 \\
\label{tab: example}
\end{longtable}


\end{document}



请提供任何帮助!

谢谢。Zeinab (她/她)

答案1

您只能在区块之间更改标题,因此\LTchunksize很重要。在此示例中,每页只有一行,因此\def\LTchunksize{1}

我付出了一些努力不是改变的大小\LT@head,虽然我不知道这是否真的有必要。

\documentclass{article}
\usepackage{longtable}
\usepackage{blindtext}

\makeatletter
\newcommand{\changehead}[1]% #1 = tabular...
{\bgroup
  \sbox0{\makebox[\wd\LT@head][c]{\raisebox{0pt}[\ht\LT@head][\dp\LT@head]{#1}}}%
  \global\setbox\LT@head=\copy0
\egroup}
\makeatother

\begin{document}

\begin{longtable}{p{2in}}
  \multicolumn{1}{c}{Inital Definition}\\
\endhead
\def\LTchunksize{1}% must go after headers
\blindtext\\
\changehead{\begin{tabular}[b]{c}New Definition\end{tabular}}
\blindtext
\end{longtable}
\end{document}

相关内容