Fondo

Fondo

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:

Texto antes de la última línea

Salida después de que el texto llega a la última línea:

Texto en 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 columnsetcomandos tienen alias de pagegridcomandos, 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 \unprotectejecutar la \page_grd_stopmacro, 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 columnsetcomandos tienen alias de pagegridcomandos, 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 \unprotectejecutar la \page_grd_stopmacro, 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.

información relacionada