如何定义新的 \item 命令来产生不同的颜色?

如何定义新的 \item 命令来产生不同的颜色?

我正在尝试定义一个替代\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}

相关内容