我想减少文档中所有枚举项之间的间距,因此我使用以下方法更新了环境
\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}