如何设置 \sbox / \usebox 的颜色?

如何设置 \sbox / \usebox 的颜色?

在下面的代码中,我想生成一个彩色形状,例如\rule{1em}{1em}。如果我\rule按原样使用 ,它会按预期工作。但是,将其放入 中会以\sbox某种方式破坏着色,我得到一个黑框。

\documentclass{standalone}
\usepackage{xcolor}

\newsavebox\myrule
\sbox\myrule{\rule{1em}{1em}}

\begin{document}

  \color{red}
  \usebox\myrule   % this gives me a black square
  \rule{1em}{1em}  % this gives me a red square

\end{document}

有人能解释一下这种行为的原因吗?我知道该框也可以放在宏定义中,我只是有点困惑为什么它不适用于\usebox。此外,是否有一些简单的方法可以让我\usebox\myrule采用当前文本颜色,以便它基本上可以像通常的字形一样使用?

答案1

LaTeX 颜色命令的设计工作方式与字体命令类似。如果您重复实验,将默认罗马文本保存在框中,并在斜体上下文中使用该框,框内容将不是改为斜体。

因此,对于字体更改,您需要将颜色命令放入保存的框内容中。

根据您使用的颜色后端,可以颠覆 LaTeX 的命令,例如,您可以使用原始命令\setbox代替\sbox,但颠覆 LaTeX 费尽心思以一致的方式工作的东西通常不是一个好主意。如果您使用的系统包含颜色字体属性的一部分,颜色必然像字体变化一样。

答案2

\sbox保存框的视觉内容以供日后使用,即定义保存的框后您无法更改其内部的颜色!

我认为您可能需要一个宏而不是一个保存的框,例如:

\newcommand{\myrule}{\rule{1em}{1em}}

进而:

\color{red}
\myrule

甚至更好:

\newcommand{\myrule}[1][black]{\color{#1}\rule{1em}{1em}}

你可以\myrule这样使用:

\myrule[red] % to draw a red box

要不就:

\myrule % to draw a box with default color, here black

相关内容