我遇到的问题是,我需要排版一些文本(在本例中为字符串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}