在下面的代码中,我想生成一个彩色形状,例如\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