使用 \let 重新定义 \enumerate - 为什么它会这样表现以及我该怎么做才能绕过它?

使用 \let 重新定义 \enumerate - 为什么它会这样表现以及我该怎么做才能绕过它?

下面的代码产生了一个我觉得很奇怪的结果:

\documentclass{article}
\let\origenumerate\enumerate
\renewenvironment{enumerate}{\begin{origenumerate}}{\end{origenumerate}}

\begin{document}

\begin{enumerate}
\item{First}
\begin{enumerate}
    \item{First-1}
    \item{First-2}
\end{enumerate}
\item{Second}
\end{enumerate}

\end{document}

实际结果:

    1. First
        (a) First-1
    (b) First-2
2. Second

预期结果(代码中没有第三行):

    1. First
        (a) First-1
        (b) First-2
    2. Second

为什么会这样?我怎样才能重新定义 \enurate 以使用自定义 \parskip 和 \itemsep 而不会收到这种(糟糕的)笑话?

编辑:我正在使用 pdfTeX 3.1415926-2.3-1.40.12(TeX Live 2011)

答案1

通常在这些情况下,您需要使用环境的较低级别的内部命令,并且还要记住一个\end...。尝试

\documentclass{article}
\let\origenumerate\enumerate
\let\origendenumerate\endenumerate
\renewenvironment{enumerate}{\origenumerate}{\origendenumerate}

\begin{document}

\begin{enumerate}
\item{First}
\begin{enumerate}
    \item{First-1}
    \item{First-2}
\end{enumerate}
\item{Second}
\end{enumerate}

\end{document}

答案2

如果你只想改变间距,可以使用类似enumitem可能比这种低级黑客攻击更安全。

相关内容