我希望重新定义enumerate
环境,以便通过不同的列表进行连续编号。我设法做到了这一点,但我的解决方案在使用 babel 包时失败了。这是我的 ECM:注释掉 babel 行后就没问题了。
有人能帮我解释一下这个包有什么问题吗?非常感谢。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\def\nbq{0}
\let\oldenumerate\enumerate
\let\oldendenumerate\endenumerate
\renewenvironment{enumerate}{\oldenumerate\setcounter{enumi}{\nbq}}{\xdef\nbq{\theenumi}\oldendenumerate}
\begin{document}
\begin{enumerate}
\item \nbq
\item \nbq
\end{enumerate}
\begin{enumerate}
\item \nbq
\item \nbq
\end{enumerate}
\end{document}
答案1
babel
因为法语模块重新定义了列表而造成了阻碍后你的重新定义。
在我看来,最好使用基于以下方法的不同方法enumitem
:
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\usepackage{enumitem}
\newlist{contenum}{enumerate}{1}
\setlist[contenum]{label=\arabic*.,resume}
\begin{document}
\begin{contenum}
\item Item
\item Item
\end{contenum}
Break between the lists
\begin{contenum}
\item Item
\item Item
\end{contenum}
\end{document}
答案2
由于 egreg 已经声明(他只是比我快)babel-french
对lists
提供的进行重新定义,因此在开始生效LaTeX
后有必要进行自己的重新定义,即,将其添加到文档主体中或使用钩子,该钩子是连续处理的,即,重新定义已经完成,新的定义就可以生效了。babel
\AtBeginDocument{...}
babel
不过,当然,enumitem
使用选项的方式resume
更简单。
\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage[frenchb]{babel}
\def\nbq{0}
\AtBeginDocument{%
\let\oldenumerate\enumerate
\let\oldendenumerate\endenumerate
\renewenvironment{enumerate}{%
\oldenumerate\setcounter{enumi}{\nbq}
}{%
\xdef\nbq{\number\value{enumi}}
\oldendenumerate
}
}
\begin{document}
\begin{enumerate}
\item \nbq
\item \nbq
\end{enumerate}
\begin{enumerate}
\item \nbq
\item \nbq
\end{enumerate}
\end{document}