我正在尝试定义一个替代\item
命令,该命令允许我对某些项目使用不同的颜色。我的代码具有以下形式:
\documentclass{article}
\usepackage{color}
\definecolor{gray}{rgb}{0.7,0.7,0.7}
\newcommand{\grayitem}[1]{{\color{gray} \item #1}}
\begin{document}
\begin{enumerate}
\item First item.
\grayitem Second item.
\item Third item.
\end{enumerate}
\end{document}
我希望
\grayitem Second item.
会产生与以下相同的结果
{\color{gray} \item Second item.}
但由于某种原因,它们并不等同。它们分别产生以下结果:
为什么这两行代码不等效?我做错了什么?如何更改定义以\grayitem
产生第二个结果?
我也尝试过摘掉牙套,就像这样
\newcommand{\grayitem}[1]{\color{gray} \item #1}
但第三项也变成了灰色。
该解决方案也适用于多段落项目。
答案1
有点奇怪,但是没有括号:
\documentclass{article}
\usepackage{color}
\definecolor{gray}{rgb}{0.7,0.7,0.7}
\let\olditem\item
\newcommand{\grayitem}{\color{gray}\olditem}
\renewcommand{\item}{\color{black}\olditem}
\begin{document}
\begin{enumerate}
\item First item.
\grayitem Second item.
\item Third item.
\end{enumerate}
\end{document}
为了使子列表保持灰色,可以执行以下操作,但如果您想在第二级列表中使用灰色项目,则改回黑色将不起作用
\documentclass{article}
\usepackage{color}
\definecolor{gray}{rgb}{0.7,0.7,0.7}
\makeatletter
\let\olditem\item
\newcommand{\grayitem}{\color{gray}\olditem}
\renewcommand{\item}{%
\ifnum\@enumdepth<2
\color{black}%
\fi%
\olditem}
\makeatother
\begin{document}
\begin{enumerate}
\item First item.
\grayitem Second item.
\begin{enumerate}
\item bla
\item bla
\end{enumerate}
\item Third item.
\begin{enumerate}
\item bla
\grayitem bla
\item bla
\end{enumerate}
\end{enumerate}
\end{document}
答案2
解决方案很简单:你忘了在参数周围加上括号。你必须使用\grayitem{Second item.}
。否则 TeX 只会使用第一个标记(“S”),其余部分不再存在#1
。
事实上,那将是具有正确颜色的文档:
\documentclass{article}
\usepackage{color}
\definecolor{gray}{rgb}{0.7,0.7,0.7}
\newcommand{\grayitem}[1]{{\color{gray}\item #1}}
\begin{document}
\begin{enumerate}
\item First item.
\grayitem{Second item.}
\item Third item.
\end{enumerate}
\end{document}
更新:正如我所质疑的( ),这里是另一种以稍微意想不到的方式;)
使用没有括号的项目的解决方案:etoolbox
\documentclass{article}
\usepackage{color}
\usepackage{etoolbox}
\definecolor{gray}{rgb}{0.7,0.7,0.7}
\let\olditem\item
\newcommand{\grayitem}{\let\item\olditem\color{gray}\item\preto\item{\color{black}}}
\begin{document}
\begin{enumerate}
\item First item.
\grayitem Second item.
\item Third item.
\grayitem Another one.
\item Test
\end{enumerate}
\end{document}