
Fondo
Cuando el texto llega al final de una columna, se activa la inserción de una página en blanco. Esto no sucede cuando el texto llega al final de una página fuera de un entorno de columnas.
Problema
En el código de muestra, \dorecurse{3}
hace que aparezca una página en blanco, pero \dorecurse{2}
no aparece. La única diferencia es que cuando se establece en 3
, se escribe texto adicional en la última línea de la última columna. Este escenario da como resultado una página en blanco.
Ejemplo de trabajo mínimo
Código que muestra el problema:
\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
Producción
Salida antes de que el texto llegue a la última línea:
Salida después de que el texto llega a la última línea:
Pregunta
¿Alguna idea de cómo se puede suprimir la página en blanco?
Ideas
Las sugerencias de la lista de correo no parecen suprimir la página:
\setuppagenumbering[page=no]
\installpagebreakhandler{last}{}
Suprimir página de expulsión
Los columnset
comandos tienen alias de pagegrid
comandos, por lo que lo siguiente debería ser equivalente. El resultado del siguiente ejemplo tiene algunas superposiciones desagradables, pero aun así muestra cómo eliminar las páginas en blanco. Al \unprotect
ejecutar la \page_grd_stop
macro, es posible redefinirla para suprimir los saltos de página.
Sin embargo, esto tiene algunos efectos secundarios, ya que es posible que algunas páginas no se escriban en el documento final (es decir, las páginas no se exportan).
\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
Versión
$ 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
Respuesta1
Solución parcial
El siguiente código suprimirá los saltos de página cuando el texto en un entorno de varias columnas llegue al final de la última columna:
\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
Sin embargo, la solución tiene un costo. En primer lugar, esto suprimirá el vaciado de páginas de texto quenoextenderse hasta la última línea de la última columna de texto de varias columnas. En segundo lugar, se rompe el siguiente escenario:
\setuplayout[grid=yes]
\starttext
\startcolumnset[n=2]
\dorecurse{100}{Line #1\par}
\stopcolumnset
\stoptext
Problemas
Los columnset
comandos tienen alias de pagegrid
comandos, por lo que lo siguiente debería ser equivalente. El resultado del siguiente ejemplo tiene algunas superposiciones desagradables, pero aun así muestra cómo eliminar las páginas en blanco. Al \unprotect
ejecutar la \page_grd_stop
macro, es posible redefinirla para suprimir los saltos de página.
\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
Detalles adicionales
Para solucionar este problema de modo que las columnas múltiples (es decir, las cuadrículas de páginas) se comporten como páginas normales y otros entornos de columnas probablemente será necesario parchear el propio ConTeXt.