如何避免居中文本之前/之后出现分页符

如何避免居中文本之前/之后出现分页符

我遇到的问题是,我需要排版一些文本(在本例中为字符串Solution:),并在下一行排版居中图像。我选择了类似以下内容:

\documentclass[a4paper,10pt]{article}
\usepackage[utf8]{inputenc}
\usepackage[showframe]{geometry}

\begin{document}

\rule{1cm}{18cm} % Just here to simulate some text/images/...

Solution:
\nopagebreak

\begin{center}
\nopagebreak
\rule{5cm}{5cm}
\end{center}

\end{document}

我的安装中文本Solution:设置在第一页,其下方留有相当大的空间。下一页设置了包含解决方案本身的 5cmx5cm 块。我不喜欢这样,因为它看起来很尴尬。

此外,底层 tex 文档排版两次(使用\input),一次仅包含练习,一次包含解决方案。这使得手动添加\pagebreak宏变得困难,因为它会破坏仅包含练习的版本。

实现我想要实现的目标的唯一方法是使用

\begingroup
\vspace{1em}\centering
\rule{5cm}{5cm}
\par\vspace{1em}
\endgroup

与传统center环境相比,这有一些不同的空间。当然,我可以稍微调整一下。

那么:除了回到 TeX 指令之外,有没有更好的方法在 LaTeX 中完成此操作\centering

答案1

不幸的是,\nopagebreak不会覆盖其他命令插入的其他有利断点,center环境也是如此。防止此类中断的常规方法是使用\samepage,但您仍然需要\nopagebreak在段落之间。所以

\rule{1cm}{18cm} % Just here to simulate some text/images/...

\begin{samepage}
Solution:

\begin{center}
\rule{5cm}{5cm}
\end{center}

\end{samepage}

请注意,像 这样的命令\samepage可以用作环境来限制其范围。\nopagebreak这里不需要 s,但如果包含任何普通的段落分隔符,则需要 s。

不过,更好的方法可能是使用 needspace 包,即\needspace{6cm}在解决方案之前声明。这将在需要时生成一个不规则的底部页面。

答案2

如果没有软件包,则使用 minipage:

\documentclass[a4paper,10pt]{article}
\begin{document}
\rule{1cm}{18cm} 

\noindent\begin{minipage}{\linewidth}
Solution:
\begin{center}
\rule{5cm}{5cm}
\end{center}
\end{minipage}

\end{document}

另一个更简单的解决方案是使用标题,即使您希望“解决方案”作为普通文本:

\documentclass[a4paper,10pt]{article}

\begin{document}

\rule{1cm}{18cm} 

\subsubsection*{\normalfont Solution:}

\begin{center}
\rule{5cm}{5cm}
\end{center}

\end{document}

相关内容