예제의 첫 번째 줄 이후 페이지 나누기 방지

예제의 첫 번째 줄 이후 페이지 나누기 방지

다음 코드에서 예제의 첫 번째 줄 사이에 페이지 나누기를 방지하는 방법을 찾고 싶습니다.

\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여기에는 두 가지 단점이 있습니다. 첫째, 예제의 (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

여기서는 두 가지 일이 일어나고 있습니다.

  1. 둘 다 환경을 생성 exe하면 이 목록은 처음에 여러 테스트를 수행합니다. 그 중 하나는 (를 통해) 새 단락을 발행하는 것입니다 . 우리는 항상 이후에 a를 발행하도록 업데이트합니다 (조정 가능).xlistlist\par\par\nobreak
  2. \@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}

관련 정보