将命令附加到现有环境而不完全重新定义它

将命令附加到现有环境而不完全重新定义它

我正在研究如何定制其他软件包提供的环境,而不必在我的文档序言中完全重新定义环境。

具体来说,该verse包定义其环境如下,我只想使所有行变为斜体(使用简单的\itshape),而不必每次都输入它,\begin{verse}\itshape ... \end{verse}因为我经常使用它,并且我想将它一次性集成到我的文档的环境中。

106 \renewenvironment{verse}[1][\linewidth]{%
107 \stepcounter{verse@envctr}%
108 \setcounter{poemline}{0}\refstepcounter{poemline}%
109 \setcounter{vslineno}{1}%
110 \let\\=\@vscentercr
111 \list{}{\itemsep \z@
112 \itemindent -\vindent%
113 \listparindent\itemindent
114 \parsep \stanzaskip
115 \ifdim #1 < \linewidth
116 \rightmargin \z@
117 \setlength{\leftmargin}{\linewidth}%
118 \addtolength{\leftmargin}{-#1}%
119 \addtolength{\leftmargin}{-0.5\leftmargin}%
120 \else
121 \rightmargin \leftmargin
122 \fi
123 \addtolength{\leftmargin}{\vindent}}%
124 \item[]%
125 }
126 {\endlist}

答案1

etoolbox正如 Hafid 在评论中所建议的,我选择了实现该命令的包提供的工具\AtBeginEnvironment{ env }{ what to append }

因此我在我的代码中实现了:

\AtBeginEnvironment{verse}{\itshape}

答案2

您可以使用\let命令来实现这个技巧。请注意,\newenvironment{verse}{}{}已经创建了命令\verse\endverse

\documentclass[a4paper]{article}
\usepackage{lipsum}

\let\myverse\verse % store the definition of \verse in \myverse
\renewcommand{\verse}{\myverse\itshape} % renew the definition of \verse to previous difinition plus \itshape

\begin{document}    
\begin{verse}
    \lipsum
\end{verse} 
\end{document}

相关内容