中心环境之后的 \nopagebreak

中心环境之后的 \nopagebreak

我有以下用于戏剧表演的代码。有时页面会在角色名称之后中断。我想避免这种情况。如果我可以仅通过修改命令来实现这一点,那就太好了,\character因为该剧长达 200 页,有许多不同的角色。我尝试使用\nopagebreak但没有成功。我该怎么做才能让角色的名字永远不会出现在页面底部?

\documentclass[a5paper]{book}
\usepackage{geometry}
\usepackage{lipsum}

\newcommand{\character}[1]{
  \begin{center}
    \textsc{#1}
  \end{center}}

\begin{document}
  \character{Alice} \lipsum[2]
  \character{Bob} \lipsum[2]
  \character{Charles} \lipsum[2]
  \character{David} \lipsum[2]
  \character{Edmond} \lipsum[2]
  \character{Francis} \lipsum[2]
\end{document}

答案1

latex 标题包含代码以防止分页直到标题后几行,因此最好将其定义为未编号的标题:

\documentclass[a5paper]{book}
\usepackage{geometry}
\usepackage{lipsum}

\makeatletter
\newcommand{\character}{%
 \@startsection {section}{1}{\z@}%
                                   {-3.5ex \@plus -1ex \@minus -.2ex}%
                                   {2.3ex \@plus.2ex}%
                                   {\normalfont\scshape\centering}*}
\makeatother

\begin{document}
  \character{Alice} \lipsum[2]
  \character{Bob} \lipsum[2]
  \character{Charles} \lipsum[2]%aaa\\bb
  \character{David} \lipsum[2]
  \character{Edmond} \lipsum[2]
  \character{Francis} \lipsum[2]
\end{document}

答案2

在命令中的环境\vfil前添加:center

\documentclass[a5paper]{book}
\usepackage{geometry}
\usepackage{lipsum}

\newcommand{\character}[1]{%
  \vfil
  \begin{center}
    \textsc{#1}
  \end{center}
}

\begin{document}
  \character{Alice} \lipsum[2]
  \character{Bob} \lipsum[2]
  \character{Charles} \lipsum[2]
  \character{David} \lipsum[2]
  \character{Edmond} \lipsum[2]
  \character{Francis} \lipsum[2]
\end{document}

输出

output

附录

您还可以将角色名称和他的单词包装在一起,\vbox以防止它们分开。但是,为此您需要更改角色宏的每一个调用。(我添加它只是为了完整性,以便将来对排版戏剧剧本感兴趣并遇到类似问题的用户能够理解。)

\documentclass[a5paper]{book}
\usepackage{geometry}
\usepackage{lipsum}

\newcommand{\character}[2]{%
  \par\vspace{1em}
  \vbox{%
    \par\hfil\textsc{#1}\hfil
    \par\vspace{1em}
    \par#2
  }
}

\begin{document}
  \character{Alice}{\lipsum[2]}
  \character{Bob}{\lipsum[2]}
  \character{Charles}{\lipsum[2]}
  \character{David}{\lipsum[2]}
  \character{Edmond}{\lipsum[2]}
  \character{Francis}{\lipsum[2]}
\end{document}

笔记:输出几乎和上面一样。

相关内容