续订后枚举错误

续订后枚举错误

我想减少文档中所有枚举项之间的间距,因此我使用以下方法更新了环境

\let\oldenum\enumerate
\let\oldendenum\endenumerate
\renewenvironment{enumerate}{\oldenum\setlength{\parskip}{\smallskipamount}}{\oldendenum}

但是当我尝试将枚举的标签更改为使用罗马数字时,我收到一条错误消息Missing number, treated as zero。以下是重现错误的简单代码。有人知道这里的问题是什么吗?

提前致谢。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage{parskip}


\let\oldenum\enumerate
\let\oldendenum\endenumerate
\renewenvironment{enumerate}{\oldenum\setlength{\parskip}{\smallskipamount}}{\oldendenum}


\begin{document}

\begin{enumerate}[label=\roman*)] % THIS THROWS A COMPILATION ERROR
    \item one
    \item two
    \item three
\end{enumerate}

\end{document}

答案1

您可以使用enumitem的选项来定义段落之间的距离。此代码应该有效:

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage{parskip}

\setlist[enumerate]{parsep=\smallskipamount}

\begin{document}

\begin{enumerate}[label=\roman*)]
    \item one
    \item two
    \item three
\end{enumerate}

\end{document}

答案2

enumitem带有和的解决方案itemsep更清晰,因为它已经得到软件包的支持。

为了完整性,我给出了一种使用重新定义环境的方法。

由于enumerate有一个可选参数,\let是不够的,但是\LetLtxMacro从包中使用\letltxmacro可以解决这种捕获问题。

必须捕获可选参数\renewenvironment,否则[....]将会被误解。

\documentclass{article}

\usepackage[utf8]{inputenc}
\usepackage{enumitem}
\usepackage{parskip}
\usepackage{letltxmacro}

\LetLtxMacro\oldenum\enumerate
\LetLtxMacro\oldendenum\endenumerate


\begin{document}

{%
\hrule
\begin{enumerate}[label=\roman*)] 
\item one 
\item two
\item three
\end{enumerate}
}


{%
\hrule
\parskip=\smallskipamount
\begin{enumerate}[label=\roman*)] % THIS IS THROWN A COMPILATION ERROR
\item one
\item two
\item three
\end{enumerate}
}


\renewenvironment{enumerate}[1][]{%
  \setlength{\parskip}{\smallskipamount}
  \oldenum[#1]}{\oldendenum}

\hrule
\begin{enumerate}[label=\roman*)] % THIS IS THROWN A COMPILATION ERROR
    \item one
    \item two
    \item three
\end{enumerate}


\end{document}

在此处输入图片描述

相关内容