0 votos
354 vistas

¿Hay alguna forma de volver a la cuadrícula una vez que se ha salido de ella? ¿O de tener algún texto fuera de la cuadrícula mientras se lleva un registro secreto de la cuadrícula en segundo plano?

Las primeras páginas de mis libros se disponen de esta manera:

MAIN TITLE
introductory outline (with \io markers)
\s
\p

El problema lo causa la sección \io. Quiero que el texto y el interlineado de esa sección sean más pequeños que lo normal, pero si lo hago, el \s y el \p no quedan alineados con la cuadrícula. Puedo corregirlo usando un \vskip, pero como cada introducción tiene un número diferente de líneas, el \vskip tendría que ser diferente para cada libro. (Ahora que lo escribo, si no hay forma de volver a la cuadrícula, tal vez pueda resolver el problema escribiendo un cambio o un sethook para cada libro.)

Traducción automática desde English
PTXprint por (1,9k puntos) | 354 vistas

2 Respuestas

0 votos

Bueno… está \parlines, que TeX utiliza para indicar cuántas líneas ha habido en un párrafo.
Supongo que el código de fin de párrafo podría hacer algún recuento y algún cálculo…

Traducción automática desde English
por (1,1k puntos)

Argh. Perdón, dos errores bastante graves en mi respuesta anterior.

  1. \@parlines es parte del cálculo que usamos para calcular capítulos omitidos, etc.; probablemente debería haber escrito \prevgraf
  2. \prevgraph te da casi exactamente lo que quieres: multiplica la desviación de la cuadrícula por ese valor y, siempre que no haya otros saltos, espacios antes/después, etc., tendrás una «desviación de X pt» que luego puedes usar para restaurar la cuadrícula, después de asegurarte de que sea positiva y menor que 1 línea de cuadrícula. Todo esto funcionaría en la primera ejecución de TeX. PERO hay una enorme salvedad aquí:
    Eso está bien siempre que el texto anterior fuera de la cuadrícula no se divida nunca entre páginas. En ese punto, todos los cálculos cuidadosos deben descartarse, porque todo el texto en la página comienza en la 1.ª línea base. Y sin el procesamiento tipo @parlines, no se sabe cuántas líneas de ese párrafo, en algún lugar en medio del texto, están en la nueva página.

Así que… tras pensarlo un poco más, no se me ocurre ninguna forma de hacer esto cuando incluye saltos de página sin que el archivo .parlocs se involucre directamente, y en ese punto será más fácil decir «quiero que este párrafo (el cursor está actualmente en X,Y) esté en la cuadrícula» y no molestarse en contar párrafos. Al menos para la primera transición.
Eso requeriría una nueva ejecución de TeX, si está fuera de la cuadrícula. La desventaja es que eso podría cambiar los puntos de salto de página y la colocación de figuras/notas al pie, ¡posiblemente con >= una nueva ejecución por transición! (uy, si estamos hablando de una Biblia entera!)

Traducción automática desde English
0 votos

Pienso que este es un problema lo suficientemente común para MUCHA gente, así que probablemente deberíamos forzar automáticamente que el texto vuelva a la cuadrícula después de que termine la introducción y cuando comience el capítulo 1. (¿Podríamos hacerlo programáticamente para que los usuarios no tengan que preocuparse?)

Traducción automática desde English
por (3,2k puntos)

Mi enorme salvedad se aplica si queremos que esto funcione en todas las situaciones. Dado que la gente podría tener introducciones de varias páginas, creo que necesitaríamos efectivamente (a) numerar cada párrafo con un espaciado no regular, y también cualquier otro que continúe en otra página completa, (b) calcular qué párrafo se corta y en cuántas líneas del párrafo se calculó que estaba el corte. (c) recordar eso para la siguiente ejecución, cuando lleguemos a «restaurar cuadrícula».

La alternativa es lo que hacemos actualmente en una transición de una a dos columnas: la página parcialmente llena se compone, quedando fija, y se añade otro material debajo. Eso causa otros problemas en el modo de 2 columnas, p. ej… con el equilibrio.

Traducción automática desde English

En cualquier momento dado, ¿no sabe TeX dónde está en la página? ¿Solo sabe que es positivo en relación con la línea anterior? No entiendo por qué no hay forma de decir «el número del capítulo ocurre en el valor y de a, la siguiente línea de cuadrícula está en el valor y de b, y por lo tanto necesitamos desplazar la línea base del capítulo hacia abajo por b-a».

La alternativa es lo que hacemos actualmente en una transición de una a dos columnas: la página parcialmente llena se compone, quedando fija, y se añade otro material debajo.

De hecho, en el proyecto que motivó esta pregunta, tanto la introducción como el texto principal son de una sola columna. ¿Es algo que puedo hacer manualmente: cerrar la página y comenzar una nueva debajo?

Traducción automática desde English

TeX tiene la «galley» (columna ininterrumpida de párrafos y espaciado) toda preparada antes de decidir cómo la cortará en páginas. Siempre termina un párrafo antes de probar si todo en la galley suma para formar una página, y mientras intenta hacer una suposición razonable sobre cuándo activar el corte de página, esas suposiciones no son totalmente precisas: para obtener el equilibrio de columnas, notas al pie, referencias cruzadas, figuras y barras laterales y finales de página consistentes, a menudo tenemos que intentar longitudes de corte más cortas de la galley. Así, una nueva página podría tener bastante texto, figuras y notas al pie esperando en su galley al comenzar.

Cuando se inicia un párrafo (el punto en el que habría que añadir espacio extra), se conocen \pagegoal y \pagetotal, pero, en realidad, son solo suposiciones, y el programa no sabe, p. ej., qué imágenes podrían añadirse sobre la página, o si habrá alguna llamada para estirar algo flexible.

Sí, debería ser posible hacer que cierre la página parcial, pero probablemente no manualmente. También hay algunos efectos secundarios que podrían ser un dolor de cabeza total.
Acabo de ocurrírseme que otra opción sería usar espaciado estirable, un poco así:

Stretch to page height{
  {figures}
  Stretch to 35 normal lines{
    {Intro paragraph (13.4 normal lines)}
    {stretchy bit}
    {main text (21 lines)}
  }
  {stretchy bit}
  {footnotes}
}

(La parte nueva sería «Stretch to 35 lines» para la sección intermedia, y por supuesto las «35 lines» tendrían que calcularse en función de la longitud no estirada de la secuencia de texto.)
@Martin_Hosken podría querer comentar por qué esta es una idea absurda, aunque.

Traducción automática desde English

Offline David sugirió \par\layoutstylebreak. Eso no funcionó, pero al ver cómo se usaba en otros documentos, terminé probando \singlecolumn, ¡y funciona!!! Aunque estoy cambiando de una columna a una columna, eso parece ser suficiente para restablecer la cuadrícula.


Esa solución planteó otra pregunta:

Mi documento .sfm ahora se ve así:

\io a bunch of introductory outline rows
\\p ~
\zgetbackongrid\*
\s The first section title

y mi archivo *mods.text tiene esto:

\sethook{end}{zgetbackongrid}{\singlecolumn}

Pero no consigo que funcione sin esa línea \\p ~, que luego añade una línea en blanco extra que no quiero. Supongo que el problema es que mi hito zgetbackongrid sigue dentro del párrafo \io, pero no logro averiguar cómo salir de ese párrafo sin añadir la línea extra. El \par que David sugirió originalmente junto con layoutstylebreak parece no estar permitido dentro de un sethook.

Traducción automática desde English

Si \zgetbackongrid\* es un hito vacío en otro sentido, podrías ir a lo grande e intentar hacer que se expanda para hacer cosas dentro (sin garantías, no lo he probado):

\expandafter\def\csname MS:zgetbackongrid\endcsname{\par\singlecolumn}

Puede que no funcione. El código del hito espera generar (como máximo) algún texto a nivel de carácter, y tiene varias partes complicadas para asegurarse de que las configuraciones de estilo, etc., no escapen.

Traducción automática desde English

Usar tu código no causó un error desde el \par, pero tampoco pareció restablecer la cuadrícula como lo hacía usar un \p en el archivo .sfm.

Sin embargo, lo siguiente terminó funcionando y por lo tanto creo que puedo restablecer la cuadrícula sin tener un espacio extra:
Poner \p ~ en el archivo sfm.
En el archivo *mods.tex, usar esto:
\sethook{end}{zgetbackongrid}{\vskip-1\baselineskip\singlecolumn}

Gracias por toda su ayuda.

Traducción automática desde English

No se encontraron preguntas relacionadas

Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
How good and pleasant it is when God’s people live together in unity!
Psalm 133:1
3,046 preguntas
6,006 respuestas
5,671 comentarios
2,027 usuarios