我需要帮助来编写我自己的描述环境。我唯一想改变的是描述标签的外观。我可以用序言中的以下位很好地实现我想要的通用功能。
\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
将是内部宏的名称,其名称将打印在错误消息中,而不是源文件中写入的名称。这对于您自己的小环境来说不是问题,但如果它们被其他人使用,则很重要。