我的文档中有一个自定义分段命令,定义如下:
\newcommand{\newtitle}[4]{% \newtitle{<Title>}{<Author>}{<Date>}{<miscellaneous indications>}
\vspace{2em}
\begin{center}
\textbf{\LARGE #1}\nopagebreak[4]\vspace{1em}\nopagebreak[4]\\\nopagebreak[4]
%
\nopagebreak[4]\Large #2\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]\\\nopagebreak
%
\ifx&%
\else%
\nopagebreak[4]#3\nopagebreak[4]\\\nopagebreak[4]%
\fi%
%
\ifx&%
\else%
\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]
%
\nopagebreak[4]\footnotesize\emph{#4}\nopagebreak[4]%
\fi%
\nopagebreak[4]\end{center}\nopagebreak[4]}
因此,代码非常奇怪,\nopagebreak
只是因为这种多行样式的标题绝对不应该被破坏。
问题实际上并不在于标题内部,而在于遵循命令的文本\newtitle
。正如我所说,这是一个分段命令,那么它不应该被打破,但它也总是在同一页中,至少有两个或三个以下行,除非它是一个寡妇标题。
例如,在以下 MWE 中:
\documentclass[a4paper,12pt]{article}
\newcommand{\newtitle}[4]{% \newtitle{<Title>}{<Author>}{<Date>}{<miscellaneous indications>}
\vspace{2em}
\begin{center}
\textbf{\LARGE #1}\nopagebreak[4]\vspace{1em}\nopagebreak[4]\\\nopagebreak[4]
%
\nopagebreak[4]\Large #2\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]\\\nopagebreak
%
\ifx&%
\else%
\nopagebreak[4]#3\nopagebreak[4]\\\nopagebreak[4]%
\fi%
%
\ifx&%
\else%
\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]
%
\nopagebreak[4]\footnotesize\emph{#4}\nopagebreak[4]%
\fi%
\nopagebreak[4]\end{center}\nopagebreak[4]}
\title{Title}
\author{Author}
\date{\today}
\begin{document}
\maketitle
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede. Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum. Maecenas adipiscing ante non diam sodales hendrerit.
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere.
\newtitle{9 symphony}{Bethoven}{1922}{Lipsum}
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis. Curabitur aliquet pellentesque diam. Integer quis metus vitae elit lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien. Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam. Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum posuere, metus purus iaculis lectus, et tristique ligula justo vitae magna.
Aliquam convallis sollicitudin purus.
\end{document}
我在页面底部看到了寡妇标题:
那么,我该如何避免这种行为并获得与\section
强制以下文本位于同一页面的命令相同的行为?
答案1
当您想将几行或几段放在一起时,无需到处使用\nopagebreak[4]
:将它们全部放在一个框内(通常是minipage
环境或\parbox
命令)。这可以防止标题内容出现分页符。为了防止分页符标题之后,你可以使用这样的方法:
\par\nopagebreak\vspace{4ex plus .1ex minus .1ex}%
% Uncomment this if you want to suppress paragraph indentation after the title
% \@afterindentfalse
\@afterheading
至关重要的是\nopagebreak
(或\nobreak
TeX 命令)前。何时\vspace
允许换行或分页的规则在 TeXbook 中有很好的解释(Lamport 的LaTeX 书...)。如果您真的想了解这种构造的工作原理,您可以阅读它。下面是完整的示例,其中包含一些更改(特别是,我更喜欢使用单位ex
而不是em
垂直方向,因为它们的定义是这样的):
\documentclass{article}
\usepackage{etoolbox}
\usepackage{lipsum}
\makeatletter
% \newtitle{<Title>}{<Author>}{<Date>}{<miscellaneous indications>}
\newcommand*{\newtitle}[4]{%
\par\vspace{2ex}
\noindent
\begin{minipage}{\linewidth}
\begin{center}
\textbf{\LARGE #1}\par\vspace{1ex}
\Large #2\par\vspace{0.5ex}
\ifblank{#3}{}{#3\par}%
\ifblank{#4}{}{%
\vspace{0.5ex}% this percent sign could be removed (vertical mode)
\footnotesize\emph{#4}%
}%
\end{center}
\end{minipage}%
\par\nopagebreak\vspace{4ex plus .1ex minus .1ex}%
% Uncomment this if you want to suppress paragraph indentation after the title
% \@afterindentfalse
\@afterheading
}
\makeatother
\title{Title}
\author{Author}
\date{\today}
\begin{document}
\maketitle
\lipsum[1-2]\lipsum[3][1-14] One% more word is enough
\newtitle{9\textsuperscript{th}~symphony}{Beethoven}{1922}{Lipsum}
%
\lipsum[4]
\end{document}
第 1 页
第2页
如果您只取消注释我所写的“更多”一词,即“再多一个词就足够了”,那么您的全部内容\newtitle
就会按需要推迟到下一页:
第 1 页
第2页
答案2
嗯,你的\newtitle
有点大,不是吗?
这里的问题是,自动方法不能解决每种情况。您的问题很简单,您的新标题适合放在页面末尾(空白处会很大),因此设置了新标题。如果您添加一个小文本,例如text. text % <====
在新标题之前,情况就会改变。现在空间不足以容纳您的非常大的新标题...
查看代码:
\documentclass[a4paper,12pt]{article}
% \newtitle{<Title>}{<Author>}{<Date>}{<miscellaneous indications>}
\newcommand{\newtitle}[4]{%
\vspace{2em}
\begin{center}
\textbf{\LARGE #1}\nopagebreak[4]\vspace{1em}\nopagebreak[4]\\\nopagebreak[4]
%
\nopagebreak[4]\Large #2\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]\\\nopagebreak
%
\ifx&%
\else%
\nopagebreak[4]#3\nopagebreak[4]\\\nopagebreak[4]%
\fi%
%
\ifx&%
\else%
\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]
%
\nopagebreak[4]\footnotesize\emph{#4}\nopagebreak[4]%
\fi%
\nopagebreak[4]%
\end{center}%
\nopagebreak[4]%
}
\title{Title}
\author{Author}
\date{\today}
\begin{document}
\maketitle
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus.
Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies
sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius
a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy
molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.
Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium
a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra
tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede.
Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit
sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede
pellentesque fermentum. Maecenas adipiscing ante non diam sodales
hendrerit.
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci
vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula
non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros
vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis.
Curabitur aliquet pellentesque diam. Integer quis metus vitae elit
lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien.
Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.
Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum
posuere.
text. text % <==========================================================
\newtitle{9 symphony}{Bethoven}{1922}{Lipsum}
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci
vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula
non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros
vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis.
Curabitur aliquet pellentesque diam. Integer quis metus vitae elit
lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien.
Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.
Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum
posuere, metus purus iaculis lectus, et tristique ligula justo vitae
magna.
Aliquam convallis sollicitudin purus.
\end{document}
及其结果:
Lipsum.
如果你在给定的代码中添加一些内容,你会得到另一个结果\newtitle
。你会在命令的第四个参数中获得一个分页符\newtitle
。请参阅以下代码
\documentclass[a4paper,12pt]{article}
% \newtitle{<Title>}{<Author>}{<Date>}{<miscellaneous indications>}
\newcommand{\newtitle}[4]{%
\nopagebreak[4]%
\vspace{2em}
\begin{center}
\textbf{\LARGE #1}\nopagebreak[4]\vspace{1em}\nopagebreak[4]\\\nopagebreak[4]
%
\nopagebreak[4]\Large #2\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]\\\nopagebreak
%
\ifx&%
\else%
\nopagebreak[4]#3\nopagebreak[4]\\\nopagebreak[4]%
\fi%
%
\ifx&%
\else%
\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]
%
\nopagebreak[4]\footnotesize\emph{#4}\nopagebreak[4]%
\fi%
\nopagebreak[4]%
\end{center}%
\nopagebreak[4]%
}
\title{Title}
\author{Author}
\date{\today}
\begin{document}
\maketitle
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus.
Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies
sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius
a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy
molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.
Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium
a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra
tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede.
Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit
sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede
pellentesque fermentum. Maecenas adipiscing ante non diam sodales
hendrerit.
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci
vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula
non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros
vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis.
Curabitur aliquet pellentesque diam. Integer quis metus vitae elit
lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien.
Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.
Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum
posuere.
%text. text % <==========================================================
\newtitle{9 symphony}{Bethoven}{1922}{Lipsum. Lipsum. Lipsum. Lipsum.
Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. Lipsum.
Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. Lipsum. } % <=========
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci
vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula
non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros
vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis.
Curabitur aliquet pellentesque diam. Integer quis metus vitae elit
lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien.
Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.
Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum
posuere, metus purus iaculis lectus, et tristique ligula justo vitae
magna.
Aliquam convallis sollicitudin purus.
\end{document}
及其结果:
最后,目前还不是很清楚第二种情况是否会发生在你身上,也许包needspace
可以帮助你,但目前我认为你的情况非常特殊,你最好简单使用\newpage
或\clearpage
进入\newtitle
下一页:
\documentclass[a4paper,12pt]{article}
% \newtitle{<Title>}{<Author>}{<Date>}{<miscellaneous indications>}
\newcommand{\newtitle}[4]{%
\nopagebreak[4]%
\vspace{2em}
\begin{center}
\textbf{\LARGE #1}\nopagebreak[4]\vspace{1em}\nopagebreak[4]\\\nopagebreak[4]
%
\nopagebreak[4]\Large #2\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]\\\nopagebreak
%
\ifx&%
\else%
\nopagebreak[4]#3\nopagebreak[4]\\\nopagebreak[4]%
\fi%
%
\ifx&%
\else%
\nopagebreak[4]\vspace{0.5em}\nopagebreak[4]
%
\nopagebreak[4]\footnotesize\emph{#4}\nopagebreak[4]%
\fi%
\nopagebreak[4]%
\end{center}%
\nopagebreak[4]%
}
\title{Title}
\author{Author}
\date{\today}
\begin{document}
\maketitle
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non risus.
Suspendisse lectus tortor, dignissim sit amet, adipiscing nec, ultricies
sed, dolor. Cras elementum ultrices diam. Maecenas ligula massa, varius
a, semper congue, euismod non, mi. Proin porttitor, orci nec nonummy
molestie, enim est eleifend mi, non fermentum diam nisl sit amet erat.
Duis semper. Duis arcu massa, scelerisque vitae, consequat in, pretium
a, enim. Pellentesque congue. Ut in risus volutpat libero pharetra
tempor. Cras vestibulum bibendum augue. Praesent egestas leo in pede.
Praesent blandit odio eu enim. Pellentesque sed dui ut augue blandit
sodales. Vestibulum ante ipsum primis in faucibus orci luctus et
ultrices posuere cubilia Curae; Aliquam nibh. Mauris ac mauris sed pede
pellentesque fermentum. Maecenas adipiscing ante non diam sodales
hendrerit.
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci
vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula
non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros
vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis.
Curabitur aliquet pellentesque diam. Integer quis metus vitae elit
lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien.
Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.
Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum
posuere.
\clearpage % <==========================================================
\newtitle{9 symphony}{Bethoven}{1922}{Lipsum.}
Ut velit mauris, egestas sed, gravida nec, ornare ut, mi. Aenean ut orci
vel massa suscipit pulvinar. Nulla sollicitudin. Fusce varius, ligula
non tempus aliquam, nunc turpis ullamcorper nibh, in tempus sapien eros
vitae ligula. Pellentesque rhoncus nunc et augue. Integer id felis.
Curabitur aliquet pellentesque diam. Integer quis metus vitae elit
lobortis egestas. Lorem ipsum dolor sit amet, consectetuer adipiscing
elit. Morbi vel erat non mauris convallis vehicula. Nulla et sapien.
Integer tortor tellus, aliquam faucibus, convallis id, congue eu, quam.
Mauris ullamcorper felis vitae erat. Proin feugiat, augue non elementum
posuere, metus purus iaculis lectus, et tristique ligula justo vitae
magna.
Aliquam convallis sollicitudin purus.
\end{document}