加载 colortbl 时将表格存储在序言中的框中存在问题

加载 colortbl 时将表格存储在序言中的框中存在问题

在下面的例子中,第二个例子\sbox在加载 colortbl 时出现错误。

! Undefined control sequence.
<template> ...@setup \CT@row@color \CT@cell@color 
                                                  \CT@do@color \endgroup \@t...
l.25     \end{tabular}}

错误消息可能会根据表格序言而改变。

在文档中移动时没有问题\sbox。但我想将框存储在序言中,因为我需要它的尺寸来设置页面几何形状。那么是什么导致了错误?有解决方法吗?这是否表明一些隐藏的问题也影响了第一个框?

\documentclass[]{article}
\usepackage{colortbl}

\newsavebox\myboxA

\sbox\myboxA{%
   \begin{tabular}{l}
    ab
    \end{tabular}}

\newsavebox\myboxB

\sbox\myboxB{%
   \begin{tabular}{l}
    ab
    \end{tabular}}


\begin{document}
abc
\end{document}

答案1

colortbl延迟了大量处理来检查其他包(如 hhline)是否已加载,可能是这个

\AtBeginDocument{%
  \expandafter\def\expandafter\@tabarray\expandafter{%
    \expandafter\CT@start\@tabarray}}

但如果你查看包,你还会看到其他延迟的定义。

一般来说,虽然我会谨慎地在序言中设置除简单文本之外的任何内容的框,但是乳胶不会设置字体或数学设置,直到\begin{document}在序言中加载字体包,因此在序言中排版并不完全可靠。


如果你想变得勇敢:

\documentclass[]{article}
\usepackage{colortbl}

\newsavebox\myboxA
\makeatletter
\sbox\myboxA{%
\expandafter\def\expandafter\@tabarray\expandafter{%
    \expandafter\CT@start\@tabarray}%
   \begin{tabular}{l}
    ab
    \end{tabular}}

\newsavebox\myboxB

\sbox\myboxB{%
\expandafter\def\expandafter\@tabarray\expandafter{%
    \expandafter\CT@start\@tabarray}%
   \begin{tabular}{l}
    ab
    \end{tabular}}

\makeatother

\begin{document}
abc
\end{document}

相关内容