定义我自己的描述环境

定义我自己的描述环境

我需要帮助来编写我自己的描述环境。我唯一想改变的是描述标签的外观。我可以用序言中的以下位很好地实现我想要的通用功能。

\renewcommand\descriptionlabel[1]{\hspace{\labelsep}\textbf{(#1)}}

但是,我只想在一个特定列表中使用此更改,而不是在整个文档中。我没有足够的经验来做\newenvironment我想做的事情。请问,您能向我展示这个新描述环境的定义是什么样的吗?

答案1

要定义新环境,只需在其中分别将原始环境作为“开始”和“结束”部分的最后一个和第一个调用即可。您可以在其之前放置自己的重新定义。它们将只限于此环境。请注意,#宏参数中的哈希 ( )#1必须在此例中加倍 ( ##1),以区分环境的潜在参数。

\documentclass{article}

\newenvironment{mydescription}{%
   \renewcommand\descriptionlabel[1]{\hspace{\labelsep}\textbf{(##1)}}
   \begin{description}%
}{%
   \end{description}%
}

\begin{document}

\begin{mydescription}
  \item[First] Test
  \item[Second] Test
\end{mydescription}

\begin{description}
  \item[First] Test
  \item[Second] Test
\end{description}

\end{document}

您还可以稍微改进一下,然后写下:

\newcommand\mydescriptionlabel[1]{\hspace{\labelsep}\textbf{(#1)}}
\newenvironment{mydescription}{%
   \let\descriptionlabel\mydescriptionlabel
   \description
}{%
   \enddescription
}

这在环境之外定义了自定义宏,这样哈希就不会成为问题,这在更复杂的宏中很重要。然后可以使用宏复制定义\let。内部环境被写入纯格式\description...\enddescription而不是\begin{description}...\end{description}以避免在\end{mydescription}缺少时混淆错误消息。在这种情况下,最后一个\begin将是内部宏的名称,其名称将打印在错误消息中,而不是源文件中写入的名称。这对于您自己的小环境来说不是问题,但如果它们被其他人使用,则很重要。

相关内容