
배경
텍스트가 열 끝에 도달하면 빈 페이지 삽입이 트리거됩니다. 텍스트가 열 형식 환경 외부의 페이지 끝에 도달하는 경우에는 이런 일이 발생하지 않습니다.
문제
샘플 코드에서는 \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 자체를 패치해야 할 가능성이 높습니다.