我有时会在论文中使用多列来表示特定块,它有一个标题和类似于以下内容的内容块:
\documentclass{article}
\usepackage{lipsum}
\usepackage{multicol}
\newenvironment{mh}[1]{%
\textbf{#1}%
\begin{multicols}{2}%
}{%BODY
\end{multicols}%
}
\begin{document}
\begin{mh}{This is the title.}
\lipsum[1]
\end{mh}
\end{document}
我遇到了一个事件,它在标题和正文之间创建了一个分页符,所以我需要能够指示它们位于同一页上。但问题是,使用会begin{samepage} ... \end{samepage}
破坏multicols
环境,将所有文本放在一列中,如下所示:
%NEED TO FORCE HEADING AND BLOCK ON SAME PAGE
\begin{samepage}
\begin{mh}{This is the title.}
\lipsum[1]
\end{mh}
\end{samepage}
有人知道这个该怎么做吗?
答案1
最简单的方法:使用环境所具有的可选参数{multicols}
来实现这样的目的:
\documentclass{article}
\usepackage{lipsum}
\usepackage{multicol}
\newenvironment{mh}[1]{%
\begin{multicols}{2}[\textbf{#1}]%
}{%BODY
\end{multicols}%
}
\begin{document}
\vspace*{.89\textheight}% this page
% \vspace*{.90\textheight}% next page
\begin{mh}{This is the title.}
\lipsum[1]
\end{mh}
\end{document}
答案2
您可以使用包裹needspace
如果没有足够的空间容纳标题和内容,则添加新页面。
笔记:
最好提供能够实际重现该问题的 MWE(如下面的示例所示,如果您注释掉
\needspace{3\baselineskip}
.下面的 MWE 将在页面上保留三行,否则将转到新页面。如果您希望保留带有节标题的更多行,您可以将因子增加到
3
更大的数字。
代码:
\documentclass{article}
\usepackage{needspace}
\usepackage{lipsum}
\usepackage{multicol}
\newenvironment{mh}[1]{%
\needspace{3\baselineskip}%
\textbf{#1}%
\begin{multicols}{2}%
}{%BODY
\end{multicols}%
}
\begin{document}
\lipsum[1-5]
\begin{mh}{This is the title.}
\lipsum[1]
\end{mh}
\end{document}
答案3
您可以改用小页面环境:
\documentclass{article}
\usepackage{lipsum}
\usepackage{multicol}
\newenvironment{mh}[1]{%
\textbf{#1}%
\begin{multicols}{2}%
}{%BODY
\end{multicols}%
}
\begin{document}
\begin{minipage}{\linewidth}
\begin{mh}{This is the title.}
\lipsum[1]
\end{mh}
\end{minipage}
\end{document}