如何通过 \AtBeginEnvironment 将一些命令放入 longtable 中?

如何通过 \AtBeginEnvironment 将一些命令放入 longtable 中?

就我而言,我 100% 确信第二个标题和其他标题(如“表格 N 的延续”)对于所有表格都是相同的。因此,我有理由将其放在所有longtable' 中:

\endfirsthead\caption*{Окончание Таблицы \thetable} \\
\hline
\endhead\hline
\endfoot

但是当我尝试用 来做这件事时\AtBeginEnvironment{longtable}{...},我收到一个我无法理解的错误:

Misplaced \crcr.
\LT@echunk ->\crcr 
                   \LT@save@row \cr \egroup \global \setbox \@ne \lastbox \u...
l.6 \begin{longtable}{|l|l|l|}

此外,像命令一样可以\small正常工作。这段代码有什么问题?

完整代码

\documentclass[a4paper,14pt]{extarticle}
\usepackage{cmap}
\usepackage[14pt]{extsizes} % для того чтобы задать нестандартный 14-ый размер шрифта
\usepackage[utf8]{inputenc}
\usepackage[russian]{babel}
\usepackage{epigraph} % для эпиграфов и продвинутых цитат
\usepackage{csquotes} % ещё одна штука для цитат
\usepackage[unicode,hidelinks]{hyperref} % подключаем hyperref (для ссылок внутри  pdf)
\usepackage[left=30mm, top=15mm, right=10mm, bottom=20mm, nohead, footskip=10mm]{geometry} % настройки поле документа
\usepackage[tableposition=bottom]{caption}
\usepackage{listings}
\usepackage{indentfirst}
\usepackage{graphicx}
\usepackage{floatrow}
\usepackage{setspace}
\usepackage{chngcntr}
\usepackage{parskip}
\usepackage{tocloft}
\usepackage{fontspec}
\usepackage{courier}
\usepackage{enumitem}
\usepackage{titlesec}
\usepackage{etoolbox}
\usepackage{longtable}

\AtBeginEnvironment{longtable}{\small
\endfirsthead\caption*{Окончание Таблицы \thetable} \\
    \hline
    \endhead\hline
    \endfoot
}

\begin{document}
\section{Тест longtable}
Текст, размером 14pt.
\begin{longtable}{|l|l|l|}
\caption{A sample long table.} \label{tab:long} \\
\hline \multicolumn{1}{|c|}{\textbf{First column}} & \multicolumn{1}{c|}{\textbf{Second column}} & \multicolumn{1}{c|}{\textbf{Third column}} \\ \hline
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
\end{longtable}
\end{document}

答案1

我可能错了。我认为你不能使用\AtBeginEnvironment钩子来设置longtable环境。

参见etoolbox包装 P.5:

\AtBeginEnvironment{<environment>}{<code>} 将任意内容附加code到由 执行的钩子中,该钩子\begin位于 给定命令的开头environment,紧接着该命令之前\<environment>,在 由 打开的组内\begin

据我理解,这意味着代码将在环境之外执行longtable。因此\caption\afterfirsthead此时无法使用诸如 之类的代码。

如果您不想在每个longtable环境中一遍又一遍地输入相同的命令,我认为有一种解决方法是使用您想要在序言中输入的代码定义一个宏。就像这样:

\newcommand{\ltbsetting}{
\caption{A sample long table.} \label{tab:long} \\
\hline \multicolumn{1}{|c|}{\textbf{First column}} & \multicolumn{1}{c|}{\textbf{Second column}} & \multicolumn{1}{c|}{\textbf{Third column}} \\
\hline\endfirsthead
\caption*{\small Окончание Таблицы \thetable} \\
\hline\endhead
\hline\endfoot
}

每次有longtable环境时都使用这个宏:

\begin{longtable}{|l|l|l|}
\ltbsetting
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
One & abcdef ghjijklmn & 123.456778 \\
...
...

另外,您应该注意到,我把 放在了命令\small里面\caption。我想这就是您想要的。标题会很小,而不是表格的其余部分。

相关内容