在下面的例子中,第二个例子\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}