我有以下用于戏剧表演的代码。有时页面会在角色名称之后中断。我想避免这种情况。如果我可以仅通过修改命令来实现这一点,那就太好了,\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}
输出
附录
您还可以将角色名称和他的单词包装在一起,\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}
笔记:输出几乎和上面一样。