如何在 longtable 中使用 tcolorbox 来围绕标题

如何在 longtable 中使用 tcolorbox 来围绕标题

我编写了一个脚本来区分 latex 文件,然后通过在大多数类型的内容周围添加绿色或红色 tcolorbox 来生成标记,并特殊处理任何效果不佳的情况(例如表格行),这通常效果很好。注意:使用 latex diff 对于我正在处理的文档中的内容并不实用。

我在使用 longtable 环境(tabular 和 tabularx 都可以)生成表格时遇到了问题。当标题更改后,它会插入到 tcolorbox 中,但是当我尝试使用 xelatex 编译它时,我收到以下错误:

\caption ->\noalign 
                    \bgroup \@ifnextchar [{\egroup \LT@c@ption \@firstofone ..

tabularx 示例(有效)

\begin{table}[H]
\begin{tcolorbox}[on line,arc=0pt,outer arc=0pt,colback=green!10!white,colframe=green!50!black, boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt, boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, rightrule=0pt, leftrule=0pt]\caption{my caption}\end{tcolorbox}
\label{table:mycaption}
\begin{tabular}{|l|l|}
\hline
\rowcolor{table}
\textbf{Value} & \textbf{Description} \\ \hline
abc & waffle here \\ \hline
\rowcolor{green!10!white}"def" & new waffle here \\ \hline
\end{tabular}
\end{table}

longtable 示例(不起作用)

\begin{longtable}{|l|l|l|p{2.77in}|}
\begin{tcolorbox}[on line,arc=0pt,outer arc=0pt,colback=green!10!white,colframe=green!50!black, boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt, boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, rightrule=0pt, leftrule=0pt]\caption{my caption}\end{tcolorbox}
\label{table:mycaption}
\endfirsthead
\endhead
\hline
\rowcolor{table}
\textbf{Value} & \textbf{Description} \\ \hline
abc & waffle here \\ \hline
\rowcolor{green!10!white}"def" & new waffle here \\ \hline
\end{longtable}

答案1

注意longtable使用自定义的\caption,可以通过扩展外面的标题来避免longtable

可以通过 aux 文件获取 longtable 的宽度\csname LT@\roman{LT@tables}\endcsname,但这并不容易(参见如何获取 longtable 的宽度?)。

\documentclass{article}
\usepackage{longtable}
\usepackage{tcolorbox}
\usepackage{caption}
\usepackage{showframe}

\newsavebox{\tempbox}

\begin{document}
\savebox{\tempbox}{%\abovecaptionskip=0pt% reversed for tables
\begin{tcolorbox}[on line,arc=0pt,outer arc=0pt,colback=green!10!white,colframe=green!50!black, boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt, boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, rightrule=0pt, leftrule=0pt]
  \captionof{table}{my caption}% 
  \label{table:mycaption}%
\end{tcolorbox}%
}%
\begin{longtable}{|l|l|l|p{2.77in}|}
\noalign{\noindent\box\tempbox}% avoid duplicate labels
\endfirsthead
\endhead
\hline
%\rowcolor{table}% ?????
\textbf{Value} & \textbf{Description} \\ \hline
abc & waffle here \\ \hline
%\rowcolor{green!10!white}
"def" & new waffle here \\ \hline
\end{longtable}

\end{document}

答案2

您必须在标签后添加双反斜杠,这是 longtable 的一个特殊“怪癖”。

就像这样:

\begin{longtable}{|l|l|l|p{2.77in}|}
\begin{tcolorbox}[on line,arc=0pt,outer arc=0pt,colback=green!10!white,colframe=green!50!black, boxsep=0pt,left=1pt,right=1pt,top=2pt,bottom=2pt, boxrule=0pt,bottomrule=0.5pt,toprule=0.5pt, rightrule=0pt, leftrule=0pt]\caption{my caption}\end{tcolorbox}
\label{table:mycaption}\\
\endfirsthead
\endhead
\hline
\rowcolor{table}
\textbf{Value} & \textbf{Description} \\ \hline
abc & waffle here \\ \hline
\rowcolor{green!10!white}"def" & new waffle here \\ \hline
\end{longtable}

下次请确保您的代码可自行编译,这意味着还可以包括包加载、文档类和开始/结束文档。

相关内容