有没有办法让命令在项目内具有范围?

有没有办法让命令在项目内具有范围?

我定义了一个命令

\newcommand{\done}{\color[RGB]{124, 124, 255}}

有没有办法使用它作为

\item \done la-la

代替

\item {\done la-la}

总是加括号让我很烦。
所以基本上我只想\done在 内有一个范围\item

答案1

使用重置颜色\item

\documentclass{article}
\usepackage{xcolor}
\newcommand\done{\color[RGB]{124, 124, 255}}
\let\Item\item
\renewcommand\item{\normalcolor\Item}

\begin{document}

\begin{enumerate}
\item \done la-la
\item foo
\item \done la-la
\end{enumerate}

\end{document}

答案2

\item基于 Gonzalo 的解决方案,您可以改变环境内的定义Lenumerate,而环境外的行为将照常。

\documentclass{article}

\newenvironment{Lenumerate}{%
  \begingroup
  \let\latexsaveditem\item
  \renewcommand{\item}{\endgroup\begingroup\latexsaveditem}
  \enumerate\begingroup%
}{%
  \endgroup\endenumerate\endgroup%
}

\begin{document}

\begin{Lenumerate}
  \item \bfseries a
  \item \itshape b
  \item \scshape c
  \item d
\end{Lenumerate}

\end{document}

答案3

这个答案在某种程度上被认为是实验性的;我定义了三个命令:(\Mfitem专门用于列表的第一项),\Mitem(专门用于不同于第一项和最后一项的项目)和\Mlitem(专门用于列表的最后一项)。\Mfitem只需调用\item并开始一个组(而不关闭它);\Mitem结束一个组,打开另一个组,然后调用\item(感谢 Caramdir 建议此顺序),并\Mlitem在调用之前关闭最后一个组\item。一个例子:

\documentclass{article}

\newcommand\Mfitem{\begingroup\item}
\newcommand\Mitem{\endgroup\begingroup\item}
\newcommand\Mlitem{\endgroup\item}

\begin{document}

\begin{enumerate}
  \Mfitem \bfseries a
  \Mitem \itshape b
  \Mitem \scshape c
  \Mlitem d
\end{enumerate}

\end{document}

编辑:根据 Caramdir 的建议,这里还有另一种选择:使用 定义一个新环境,但在开头和结尾environment添加;现在命令和不再需要:\begingroup\endgroup\Mfitem\Mlitem

\documentclass{article}

\newenvironment{Lenumerate}
  {\enumerate\begingroup}
  {\endgroup\endenumerate}

\newcommand\Mitem{\endgroup\begingroup\item}

\begin{document}

\begin{Lenumerate}
  \Mitem \bfseries a
  \Mitem \itshape b
  \Mitem \scshape c
  \Mitem d
\end{Lenumerate}

\end{document}

相关内容