
次のコードの例の最初の行間でページ区切りを防ぐ方法を見つけたいと思います。
\documentclass{article}
\usepackage{lipsum}
\usepackage{gb4e}
\begin{document}
\lipsum[3-7]
Some extra text to get the page break in the right place.
\begin{exe}
\ex\label{Label} Some description of this example
\begin{xlist}
\ex[*] {
First sentence.}
\ex[] {
First sentence.}
\ex[*] {
Third sentence.}
\end{xlist}
\end{exe}
\end{document}
最初の実際の項目の後の改ページ(つまり項目 (a) と (b) の間)には問題ありません。例のタイトル/見出しが例の実際の項目から分離されることは望ましくありません。
複雑な言語的注釈を含む例が多く、その問題専用のパッケージが必要なため、例をパッケージでフォーマットすることが重要ですgb4e
(より一般的なリスト環境ではなく)。このパッケージ用に既にフォーマットされた例が多数あるため (言語的例用の他のパッケージとは対照的に)、このパッケージを使用することを希望します。
このサイトには、特定のポイントでページ区切りを防止または強制することに関する質問が多数あることは承知していますが、パッケージを使用して作成された例で機能する回答は見つかりませんでした。例自体または例の前にgb4e
次のようなものを追加しようとしましたが、ページ区切りは同じ場所のままです。\nopagebreak
\goodbreak
最後に、環境に置くことで例全体を次のページに強制的に移動できましたminipage
が、これには 2 つの欠点があります。まず、例の (a) と (b) の間に区切りがあっても問題ない場合に、区切りが使用できません。次に、これらの孤立部分を手動で確認する必要があります。これは、長いドキュメント (論文など) ではあまり実用的ではありません。
答え1
\nolistbreak
(ネストされた) の直前に次のコードを使用してみてくださいxlist
:
\makeatletter
\newcommand{\nolistbreak}{%
\let\oldpar\par\def\par{\oldpar\nobreak}% Any \par issues a \nobreak
\@nobreaktrue% Don't break with first \item
}
\makeatletter
ここでは 2 つのことが起こっています。
exe
とはどちらも環境xlist
を作成しlist
、これらのリストは開始時に一連のテストを実行します。その 1 つは、新しい段落を発行することです ( 経由)。その後に常に を発行するように\par
更新します(これは調整できます)。\par
\nobreak
- 最初の項目も を発行し、 の場合には異なる反応を示し
\@nobreaktrue
、任意に高いペナルティを設定します。
これが他の何かを壊すかどうかはわかりませんので、注意して使用してください。呼び出しによって開始された変更は、\nolistbreak
呼び出しが行われる環境内でローカルに適用されるので、それほど悪くないかもしれません。
\documentclass{article}
\usepackage{lipsum,gb4e}
\makeatletter
\newcommand{\nolistbreak}{%
\let\oldpar\par\def\par{\oldpar\nobreak}% Any \par issues a \nobreak
\@nobreaktrue% Don't break with first \item
}
\makeatletter
\begin{document}
\lipsum[3-7]
Some extra text to get the page break in the right place.
\begin{exe}
\ex\label{Label} Some description of this example
\nolistbreak
\begin{xlist}
\ex[*] {
First sentence.}
\ex[] {
First sentence.}
\ex[*] {
Third sentence.}
\end{xlist}
\end{exe}
\end{document}