배경

배경

배경

텍스트가 열 끝에 도달하면 빈 페이지 삽입이 트리거됩니다. 텍스트가 열 형식 환경 외부의 페이지 끝에 도달하는 경우에는 이런 일이 발생하지 않습니다.

문제

샘플 코드에서는 \dorecurse{3}빈 페이지가 표시되지만 \dorecurse{2}표시되지는 않습니다. 유일한 차이점은 으로 설정하면 3마지막 열의 마지막 줄에 추가 텍스트가 기록된다는 것입니다. 이 시나리오에서는 빈 페이지가 생성됩니다.

최소 작업 예

문제를 보여주는 코드:

\showgrid
\setuplayout[grid=yes]

\starttext
  \startcolumnset[n=2]
    \input knuth \input lorem \input lorem \input knuth
    \dorecurse{3}{No TV and no beer make Homer something something.}
  \stopcolumnset
\stoptext

산출

텍스트가 마지막 줄에 도달하기 전에 출력됩니다.

마지막 줄 앞의 텍스트

텍스트가 마지막 줄에 도달한 후 출력:

마지막 줄의 텍스트

질문

빈 페이지를 어떻게 억제할 수 있는지 아시나요?

아이디어

메일링 리스트의 제안은 페이지를 표시하지 않는 것으로 보입니다.

\setuppagenumbering[page=no]
\installpagebreakhandler{last}{}

꺼내기 페이지 억제

명령 은 명령 columnset에 별칭이 지정되므로 pagegrid다음은 동일해야 합니다. 다음 예의 출력에는 일부 불쾌한 중복이 있지만 그럼에도 불구하고 빈 페이지를 제거하는 방법을 보여줍니다. 매크로를 \unprotect사용 하면 \page_grd_stop매크로를 재정의하여 페이지 나누기를 억제할 수 있습니다.

그러나 일부 페이지가 최종 문서에 기록되지 않을 수 있다는(즉, 페이지가 내보내지지 않음) 몇 가지 부작용이 있습니다.

\showgrid
\setuppagenumbering[alternative=doublesided,page=no]
\setuplayout[grid=yes]

\definepagegrid[example][n=3,distance=.05\makeupwidth,page=no]

\setuppagegrid[example:1][width=.4\makeupwidth]
\setuppagegrid[example:2][width=.2\makeupwidth]
\setuppagegrid[example:3][width=.2\makeupwidth]

\setuppagegrid[example:4][width=.40\makeupwidth]
\setuppagegrid[example:5][width=.2\makeupwidth]
\setuppagegrid[example:6][width=.2\makeupwidth]

\unprotect
\def\page_grd_stop{%
  \endgraf % needed, else wrong vsize in one par case
  \vfill % otherwise weird \placenotes[endnotes]
  \page_grd_command_set_vsize % needed
  \penalty\c_page_otr_eject_penalty
  %\page_grd_command_flush_page
  \page_otr_fill_and_eject_page
  \page_grd_command_set_vsize % why here
  \egroup
  \page_otr_command_set_vsize
  \page_otr_command_set_hsize
}
\protect

\starttext
  \startpagegrid[example]
    \input knuth \input lorem \input lorem \input knuth \input lorem
    \dorecurse{3}{No TV and no beer make Homer something something.}
  \stoppagegrid
\stoptext

버전

$ context --version
mtx-context     | ConTeXt Process Management 1.03
mtx-context     |
mtx-context     | main context file: /opt/context/tex/texmf-context/tex/context/base/mkiv/context.mkiv
mtx-context     | current version: 2019.12.06 19:45
mtx-context     | main context file: /opt/context/tex/texmf-context/tex/context/base/mkiv/context.mkxl
mtx-context     | current version: 2019.12.06 19:45

답변1

부분적인 해결책

다음 코드는 다중 열 환경의 텍스트가 마지막 열 끝에 도달할 때 페이지 나누기를 억제합니다.

\unprotect
\def\page_grd_stop{%
   \endgraf % needed, else wrong vsize in one par case
   \vfill % otherwise weird \placenotes[endnotes]
   \page_grd_command_set_vsize % needed
   \penalty\c_page_otr_eject_penalty
   %\page_grd_command_flush_page
   \page_otr_fill_and_eject_page
   \page_grd_command_set_vsize % why here
   \egroup
   \page_otr_command_set_vsize
   \page_otr_command_set_hsize}
\protect

그러나 솔루션에는 비용이 발생합니다. 첫째, 이는 다음과 같은 텍스트 페이지 플러시를 억제합니다.하지 마라여러 열 텍스트의 마지막 열의 마지막 줄까지 확장됩니다. 둘째, 다음 시나리오가 중단됩니다.

\setuplayout[grid=yes]

\starttext
   \startcolumnset[n=2]
     \dorecurse{100}{Line #1\par}
   \stopcolumnset
\stoptext

문제

명령 은 명령 columnset에 별칭이 지정되므로 pagegrid다음은 동일해야 합니다. 다음 예의 출력에는 일부 불쾌한 중복이 있지만 그럼에도 불구하고 빈 페이지를 제거하는 방법을 보여줍니다. 매크로를 \unprotect사용 하면 \page_grd_stop매크로를 재정의하여 페이지 나누기를 억제할 수 있습니다.

\showgrid
\setuppagenumbering[alternative=doublesided,page=no]
\setuplayout[grid=yes]

\definepagegrid[example][n=3,distance=.05\makeupwidth,page=no]

\setuppagegrid[example:1][width=.4\makeupwidth]
\setuppagegrid[example:2][width=.2\makeupwidth]
\setuppagegrid[example:3][width=.2\makeupwidth]

\setuppagegrid[example:4][width=.4\makeupwidth]
\setuppagegrid[example:5][width=.2\makeupwidth]
\setuppagegrid[example:6][width=.2\makeupwidth]

\unprotect
\def\page_grd_stop{%
  \endgraf % needed, else wrong vsize in one par case
  \vfill % otherwise weird \placenotes[endnotes]
  \page_grd_command_set_vsize % needed
  \penalty\c_page_otr_eject_penalty
  %\page_grd_command_flush_page
  \page_otr_fill_and_eject_page
  \page_grd_command_set_vsize % why here
  \egroup
  \page_otr_command_set_vsize
  \page_otr_command_set_hsize
}
\protect

\starttext
  \startpagegrid[example]
    \input knuth \input lorem \input lorem \input knuth \input lorem
    \dorecurse{3}{No TV and no beer make Homer something something.}
  \stoppagegrid
\stoptext

추가 세부 사항

다중 열(예: 페이지 그리드)이 일반 페이지 및 기타 열 기반 환경처럼 작동하도록 이 문제를 해결하려면 ConTeXt 자체를 패치해야 할 가능성이 높습니다.

관련 정보