我需要重新定义\item
命令,以便在长列表中,页面顶部显示的项目将表现不同。有什么建议吗?我的方法是找到一种方法来编写一个\ifthenelse{test}{ }{ }
语句,其中“测试”检查页面计数器是否已增加。谢谢
答案1
以下示例使用-系统将内容附加到 s 以\enumerate
跟踪\item
s 以及它们出现在哪个页面上。\label
\ref
\documentclass{article}
\usepackage{etoolbox,lipsum,refcount}
\makeatletter
\newcounter{enumeratecntr}
\newcommand{\setitemlabel}{\label{enum-\theenumeratecntr-\csname the\@enumctr\endcsname}}
\newcommand{\saveprevitem}{\edef\previtem{\csname the\@enumctr\endcsname}}
\patchcmd{\enumerate}% <cmd>
{\fi}% <search>
{\stepcounter{enumeratecntr}% New enumerate environment
\setitemlabel\saveprevitem% Set label and save previous counter
\let\olditem\item% Store \item
\renewcommand{\item}{% Update \item
\olditem\leavevmode% Set regular \item
\setitemlabel
% Check if on a new page
\ifnum\getpagerefnumber{enum-\theenumeratecntr-\previtem}<
\getpagerefnumber{enum-\theenumeratecntr-\csname the\@enumctr\endcsname}
{\bfseries New page.} \par% Set some content to identify new page
\fi
\saveprevitem% Update previous counter
}%
\fi}% <replace>
{}{}% <success><failure>
\makeatother
\begin{document}
\lipsum[1-3]
\begin{enumerate}
\item First
\item Second
\item Third
\item Fourth
\item Fifth
\item Sixth
\item Seventh
\item Eighth
\item Ninth
\item Tenth
\end{enumerate}
\sloppy% Just for this example
\begin{enumerate}
\item\lipsum[1]
\item\lipsum[2]
\item\lipsum[3]
\item\lipsum[4]
\item\lipsum[5]
\item\lipsum[6]
\item\lipsum[7]
\item\lipsum[8]
\item\lipsum[9]
\item\lipsum[10]
\item\lipsum[11]
\item\lipsum[12]
\end{enumerate}
\end{document}
该补丁特定于enumerate
环境,但也可以更新以使用itemize
。此外,可选参数\item
已被删除,以便\item
立即设置(通过\leavevmode
)。