问题 1,如果不用 needspace
或类似的方法,会有极少的概率不能正确判断是否已经分页,比如下面的第四个标题就有可能会判断失败。
看看这是不是你想要的:
\documentclass{ctexart}
\usepackage{zhlipsum}
%\usepackage{showframe}
\ExplSyntaxOn\makeatletter
\cs_set_eq:NN \section:nn \section
\cs_new_protected:Npn \__my_needspace_if_newpage:nTF #1
{
% 可以试试删掉 \begingroup 和 \endgroup 之间的内容,看看能否正确判断第四个标题
\par \penalty-100\begingroup
\setlength{\dimen@}{\dimexpr#1}
\dimen@ii\pagegoal \advance\dimen@ii-\pagetotal
\ifdim \dimen@>\dimen@ii
\ifdim\dimen@ii>\z@ \vfil\fi
\penalty-\@M
\fi\endgroup
% 上面这些是 \Needspace 的代码,可以直接用 \Needspace{\dimexpr#1} 或 \Needspace*{\dimexpr#1} 替代
\bool_lazy_or:nnTF
{ \dim_compare_p:nNn { \pagegoal } = { \c_max_dim} }
{ \int_compare_p:nNn { \lastpenalty } < { -9999 } } % -\@M = -10000
}
\RenewDocumentCommand{ \section }{ m }
{
\__my_needspace_if_newpage:nTF { 1.5cm }
{ }
{ \hrule height0.4pt depth0pt }
\section:nn {#1}
}
\ExplSyntaxOff\makeatother
\begin{document}
\section{测试}
\zhlipsum[1-2]
\section{测试}
\zhlipsum[1]
\section{测试}
\zhlipsum[3-9][name=zhufu]
\section{测试}
\zhlipsum[1]
\end{document}
问 如何判断 section 是否位于某一页的页首,并与其它非页首的 section 进行不同处理?