
Considere el siguiente FMWE (ejemplo de trabajo bastante mínimo):
\documentclass[a4paper]{article}
\usepackage{kantlipsum,xgalley}
\usepackage[scale=.8]{geometry}
\pagestyle{empty}
\ExplSyntaxOn
\NewDocumentCommand\resetindents { }
{
\galley_parshape_set_multi:nnnN { 0 } { 0pt } { 0pt } \c_true_bool
}
\NewDocumentCommand\cutleft { m m }
{
\galley_cutout_left:nn { #1 } { #2 }
}
\NewDocumentCommand\cutright { m m }
{
\galley_cutout_right:nn { #1 } { #2 }
}
\ExplSyntaxOff
\begin{document}
% \ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
% \resetindents
\kant[6-7]
% \ExplSyntaxOff
\end{document}
El resultado esperado por mí de este código es
La salida real es
¿Existe una forma correcta de lograr el resultado esperado sin modificar el cuerpo del documento?
Tenga en cuenta que cualquiera de las siguientes dos modificaciones en el cuerpo es suficiente para lograr el resultado deseado:
descomentar la línea
% \resetindents
descomentar las líneas
% \ExplSyntaxOn
y
% \ExplSyntaxOff
por eso esas líneas están ahí en la fuente.
Sin embargo, esto sólo \resetindents
parece resolver realmente el problema ya que el siguiente ejemplo también proporciona el resultado real no deseado.
\begin{document}
\ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
% \resetindents
\kant[6-7]
\ExplSyntaxOff
\end{document}
Aparentemente, la eliminación de líneas en blanco de la fuente impide que el cambio a expl3
la sintaxis evite el problema. Además
\begin{document}
\ExplSyntaxOn
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]\par
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]\par
% \resetindents
\kant[6-7]\par
\ExplSyntaxOff
\end{document}
también demuestra el problema.
Por lo tanto \resetindents
parece necesario, pero yopensarque la filosofía de las galeras sugiere que no debería ser así.
Tengo curiosidad por saber cómo se determina el patrón de cortes. Por ejemplo,
\begin{document}
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5-6]
\kant[7]
\end{document}
no repite el corte hasta el párrafo final
mientras
\begin{document}
\cutleft{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.\par
\kant[4]
\cutright{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
\kant[6]
\kant[7]
\end{document}
repite el corte en los dos últimos párrafos
En ningún caso se repite el corte más reciente, ya que eso produciría un corte por la derecha. Lo que parece crucial es que el corte que se repite abarque más de un solo párrafo.
\begin{document}
\cutright{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
Perhaps we should make it a bit longer just to see what happens to things in that case.\par
\kant[4]
\cutleft{4}{25mm,25mm,25mm,25mm,25mm,25mm}
\kant[5]
\kant[6]
\kant[7]
\end{document}
Sin embargo, al menos el efecto no es acumulativo.
\begin{document}
\cutright{0}{25mm,25mm,25mm,25mm,25mm,25mm,25mm,25mm}
This is an extremely short paragraph.
Perhaps we should make it a bit longer just to see what happens to things in that case.\par
\kant[4]
\cutleft{4}{25mm,25mm,25mm,25mm,25mm,25mm}
This is another extremely short paragraph.
\kant[5]
\kant[6]
\kant[7]
\end{document}
Tenga en cuenta que
Sé perfectamente bien que
l3galley
es experimental y que se espera que se rompa si intentas utilizarlo de todo tipo de formas extrañas y maravillosas. Considere esto como una aventura guiada a través de una pequeña parte de las rarezas y maravillas que resultan.También soy consciente de que la rareza y el asombro dependen en gran medida del ojo de quien mira. Es perfectamente posible que el efecto que considero inesperado sea, de hecho, una característica de diseño muy apreciada por los desarrolladores que pasaron largas horas dedicados a un teclado caliente, tratando desesperadamente de que los recortes se repitieran de acuerdo con un algoritmo preciso, por oscuro que fuera su patrón. podría serlo para mí. TeX es Misterio (¿de qué otra manera describir la invocación de espíritus tipográficos mediante extrañas mezclas de minúsculas y majúsculas?) y me decepcionaría si ese misterio desapareciera por completo en sus descendientes.
Respuesta1
Esto se debió a un error en l3galley
. En la demostración, \parshape
se configura en el nivel superior, luego el recorte se "agota" dentro de un grupo (invisible aquí pero presente según \kant
se aplica \par
dentro de un grupo). Después del grupo, \parshape
no se restableció ya que l3galley
no fue necesario intentar evitarlo (no hay un recorte realmente presente y no se está configurando ningún otro margen o lo que sea).
El código ahora se ha modificado para detectar que el recorte todavía está "activo" y requiere \parshape
configuración si \par
ocurre y no está en el nivel de grupo superior. Esta solución aparecerá en la próxima expl3
actualización, probablemente a finales de esta semana (mediados de junio de 2016).