我有这个简单的想法:
我想让 LaTeX 计算文本部分的数量(已经运行良好):
\newcommand{\newpart}{
\bigskip
\begin{center}
\arabic{partscounter}.
\end{center}
\stepcounter{partscounter}
}
我想用它做这件事:
\newpart
Long Text Number 1
\newpart
Long Text Number 2
...
在这两个文本之间应该标明这两个文本的数量,例如:
1.
Long Text Number 1
2.
Long Text Number 2
如上所述,这有效。但现在我遇到了一个问题:有时,文本太长,它会转到下一页。有时,上一页只有一行,在这种情况下,我有:
2.
------------- % New Page!
Long Text 2
其中partcounter
是页面的最后一行。
我不希望发生这种情况。如果打印的数字\newpart
是最后一行,我想跳过该行并使其像这样:
1.
Long Text 2
------------- % New Page!
2.
Long Text 2
那可能吗?
答案1
David 的想法很好,但不幸的是它不起作用,因为\end{center}
无论\nopagebreak
在它之前发出什么命令,在 它之后总有一个可行的分页点。
这似乎效果更好。
\documentclass{article}
%% geometry is just to have a reduced text height
%% for this example
\usepackage[showframe,textheight=3.514cm,heightrounded]{geometry}
\newcounter{partscounter}
\newcommand{\newpart}{%
\par\addvspace{\bigskipamount}
{\centering
\leavevmode\stepcounter{partscounter}%
\thepartscounter.\par\nopagebreak
\addvspace{\topsep}}
}
\begin{document}
\newpart
Text follows
\newpart
Text follows
\newpart
Text follows
\end{document}
第三部分完全进入新页面,但如果将 3.514cm 更改为 3.515cm,则第三部分适合该页面。
答案2
标准 LaTeX 标题代码有很多代码可以处理这个问题,为什么不直接使用,\part{}
而是手动制作标题呢?
如果您确实想手动执行此操作,则可以使用正常的乳胶样式 id 在标题之前增加,而不是之后,以便计数器在该部分期间具有正确的值,并且也\refstepcounter
可以使用\label
它。\nopagebreak
应该阻止分页。
\newcommand{\newpart}{%
\bigskip
{\centering
\leavevmode\refstepcounter{partscounter}%
\arabic{partscounter}.\par\nopagebreak
}}
}
但如果需要的话,最好使用\part
和定制标题代码。