我编写了一个脚本来区分 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}
下次请确保您的代码可自行编译,这意味着还可以包括包加载、文档类和开始/结束文档。