我已经设置了这个命令:\newcommand\blue[1]{{\color{blue}#1}}
在我的文档中,我使用\color{blue}
。
然后我想把颜色改回原来的颜色。有没有办法可以做到这一点,而不用
- 范围
\color{blue}
或 - 对颜色进行硬编码
\color{black}
。
答案1
\documentclass{article}
\usepackage{color}
\makeatletter
\def\zz{\edef\zzz{\pdfliteral{\current@color}}}%pdftex version
\makeatother
\begin{document}
\color{green}\zz one two \color{blue} three four \zzz five
\end{document}
答案2
将文档中使用的颜色存储在一个堆栈中。先进先出堆栈该包提供了必要的功能。
\documentclass{article}
\usepackage{color}
\usepackage{fifo-stack}
\FSCreate{colors}{black}
\makeatletter
\let\old@color\color
\renewcommand\color[1]{\FSPush{colors}{#1}\old@color{#1}}
\newcommand\colorend{\FSPop{colors}\old@color{\FSTop{colors}}}
\makeatother
\begin{document}
The quick brown fox jumps over the lazy dog.\par
\color{blue}
The quick brown fox jumps over the lazy dog.\par
\color{red}
The quick brown fox jumps over the lazy dog.\par
\colorend
The quick brown fox jumps over the lazy dog.\par
\colorend
The quick brown fox jumps over the lazy dog.
\end{document}
每次使用颜色时,它都会进入堆栈。\colorend
宏会丢弃堆栈顶部(当前颜色),然后将颜色设置为现在位于顶部的颜色。