如果此行是新页前的最后一行,则插入换行符

如果此行是新页前的最后一行,则插入换行符

我有这个简单的想法:

我想让 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和定制标题代码。

相关内容