0 votes
355 vues

Y a-t-il un moyen de revenir sur la grille une fois qu'on en est sorti ? Ou de laisser certains textes hors grille tout en gardant secrètement un œil sur la grille en arrière-plan ?

Les premières pages de mes livres sont disposées comme ceci :

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

Le problème est causé par la section \io. Je veux que la taille du texte et l'interligne de cette section soient plus petits que la normale, mais si je fais cela, alors \s et \p ne sont plus sur la grille. Je peux corriger en utilisant un \vskip, mais comme chaque introduction a un nombre de lignes différent, le \vskip devrait être différent pour chaque livre. (Maintenant que j'écris cela, s'il n'y a pas de moyen de revenir sur la grille, peut-être que je peux résoudre le problème en écrivant un change ou un sethook pour chaque livre.)

Traduit automatiquement depuis English
PTXprint par (1,9k points) | 355 vues

2 Réponses

0 votes

Eh bien… il y a \parlines, que TeX utilise pour vous indiquer combien de lignes il y a eu dans un paragraphe.
Je suppose que le code de fin de paragraphe pourrait faire un peu de comptage et de calculs…

Traduit automatiquement depuis English
par (1,1k points)

Argh. Désolé, deux problèmes assez majeurs dans ma réponse précédente.

  1. \@parlines fait partie du calcul que nous utilisons pour les chapitres sautés, etc., j'aurais probablement dû écrire \prevgraf
  2. \prevgraph vous donne presque exactement ce que vous voulez - multipliez le décalage par ce nombre et, tant qu'il n'y a pas d'autres sauts, d'espaces avant/après, etc., vous avez un « décalage de X pt » que vous pouvez ensuite utiliser pour revenir sur la grille, après vous être assuré qu'il est positif et inférieur à 1 ligne de grille. Tout cela fonctionnerait lors de la première exécution de TeX. MAIS il y a une énorme réserve ici :
    Tout cela va bien tant que votre texte précédent hors grille ne se scinde jamais sur une page. À ce moment-là, tous les calculs minutieux doivent être abandonnés, car tout le texte sur la page commence sur la 1re ligne de base. Et sans le traitement de type @parlines, vous ne savez pas combien de lignes de ce paragraphe, quelque part au milieu du texte, se trouvent sur la nouvelle page.

Donc… après avoir un peu réfléchi, je ne vois pas de moyen de faire cela lorsqu'il y a des sauts de page sans que le fichier .parlocs ne soit directement impliqué, et à ce stade, il sera plus facile de dire « je veux que ce paragraphe (le curseur est actuellement à X,Y) soit sur la grille » et de ne pas se soucier de compter les paragraphes du tout. Au moins pour la première transition.
Cela nécessiterait alors une réexécution de TeX, s'il est hors grille. L'inconvénient est que cela pourrait changer les points de saut de page et les placements des figures/note de bas de page, potentiellement avec >= une réexécution par transition ! (eek, si vous parlez d'une Bible entière !)

Traduit automatiquement depuis English
0 votes

Je pense que c'est un problème assez courant pour beaucoup de gens, donc nous devrions probablement forcer automatiquement le texte à revenir sur la grille après la fin de l'introduction et lorsque le 1er chapitre commence. (Pourrions-nous le faire de manière programmatique pour que les utilisateurs n'aient pas à se soucier de cela ?)

Traduit automatiquement depuis English
par (3,2k points)

Ma grande réserve s'applique si nous voulons que cela fonctionne dans toutes les situations. Étant donné que les gens peuvent avoir des introductions sur plusieurs pages, je pense que nous devrions effectivement (a) numéroter chaque paragraphe avec un espacement non régulier, ainsi que tout ce qui suit pour une page complète, (b) calculer quel paragraphe est coupé et combien de lignes dans le paragraphe le saut a été calculé pour être. (c) s'en souvenir pour la prochaine exécution, lorsque nous arrivons à « restaurer la grille ».

L'alternative est ce que nous faisons actuellement lors d'une transition d'une colonne à deux colonnes : la page partiellement pleine est mise en page, devenant fixe, et d'autres éléments sont ajoutés en dessous. Cela cause des problèmes différents en mode 2 colonnes, par exemple… avec l'équilibrage.

Traduit automatiquement depuis English

À un moment donné, TeX ne sait-il pas où il se trouve sur la page ? Ne sait-il que c'est positif par rapport à la ligne au-dessus ? Je ne comprends pas pourquoi il n'y a pas de moyen de dire « le numéro du chapitre se trouve à la valeur y de a, la ligne de grille suivante est à la valeur y de b, et nous devons donc déplacer la ligne de base du chapitre vers le bas de b-a ».

L'alternative est ce que nous faisons actuellement lors d'une transition d'une colonne à deux colonnes : la page partiellement pleine est mise en page, devenant fixe, et d'autres éléments sont ajoutés en dessous.

En fait, dans le projet qui a motivé cette question, à la fois l'introduction et le texte principal sont en une seule colonne. Est-ce quelque chose que je peux faire manuellement – fermer la page et en commencer une nouvelle en dessous ?

Traduit automatiquement depuis English

TeX a la « galley » (colonne ininterrompue de paragraphes et d'espacements) entièrement préparée avant de décider comment il va la découper en pages. Il termine toujours un paragraphe avant de tester si tout dans la galley s'additionne pour former une page, et bien qu'il essaie de faire une estimation raisonnable de quand déclencher la découpage de la page, ces estimations ne sont pas entièrement précises : pour obtenir l'équilibrage des colonnes, les notes de bas de page, les renvois, les figures et les encadrés et des fins de pages cohérentes, nous devons souvent essayer des longueurs de coupe plus courtes de la galley. Ainsi, une nouvelle page peut avoir un tas de texte, de figures et de notes de bas de page en attente dans sa galley au moment où elle commence.

Lorsqu'un paragraphe est commencé (le point auquel vous devriez ajouter de l'espace supplémentaire), \pagegoal et \pagetotal sont connus, mais en réalité, ce ne sont que des estimations, et le programme ne sait pas, par exemple, quelles images pourraient être ajoutées en haut de la page, ou s'il y aura un appel à étirer quelque chose de flexible.

Oui, il devrait être possible de le faire fermer la page partielle, mais probablement pas manuellement. Il y a aussi certains effets secondaires qui pourraient être un vrai cauchemar.
Il vient de me venir à l'esprit qu'une autre option serait d'utiliser un espacement extensible, un peu comme ceci :

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 nouvelle partie étant « Stretch to 35 lines » pour la section du milieu, et bien sûr, « 35 lines » devrait être calculé en fonction de la longueur non étirée de la séquence de texte.)
@Martin_Hosken pourrait vouloir commenter pourquoi c'est une idée stupide, cependant.

Traduit automatiquement depuis English

Hors ligne, David a suggéré \par\layoutstylebreak. Cela n'a pas fonctionné, mais en regardant comment il était utilisé dans d'autres documents, j'ai fini par essayer \singlecolumn, et ça marche !!! Même si je passe d'une colonne à une colonne, cela semble suffisant pour réinitialiser la grille.


Cette solution a soulevé une autre question :

Mon document .sfm ressemble maintenant à ceci :

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

et mon fichier *mods.text a ceci :

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

Mais je n'arrive pas à le faire fonctionner sans cette ligne \\p ~, qui ajoute alors une ligne vide supplémentaire dont je ne veux pas. Je suppose que le problème est que mon jalon zgetbackongrid est toujours dans le paragraphe \io, mais je n'arrive pas à trouver comment sortir de ce paragraphe sans ajouter la ligne supplémentaire. Le \par que David a initialement suggéré en conjonction avec layoutstylebreak semble ne pas être autorisé dans un sethook.

Traduit automatiquement depuis English

Si \zgetbackongrid\* est un jalon autrement vide, vous pourriez aller jusqu'au bout et essayer de le faire s'étendre pour faire des choses à l'intérieur (aucune garantie, je n'ai pas testé ceci) :

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

Cela pourrait ne pas fonctionner. Le code du jalon s'attend à générer (au maximum) du texte au niveau des caractères, et a diverses parties compliquées pour s'assurer que les paramètres de style, etc. ne s'échappent pas.

Traduit automatiquement depuis English

L'utilisation de votre code n'a pas provoqué d'erreur de la part de \par, mais cela ne semblait pas non plus réinitialiser la grille comme l'utilisation d'un \p dans le fichier .sfm le faisait.

Cependant, ce qui suit a fini par fonctionner et je pense donc que je peux réinitialiser la grille sans avoir d'espace supplémentaire :
Mettre \p ~ dans le fichier sfm.
Dans le fichier *mods.tex, utilisez ceci :
\sethook{end}{zgetbackongrid}{\vskip-1\baselineskip\singlecolumn}

Merci pour toute votre aide.

Traduit automatiquement depuis English

Aucune question liée trouvée

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 questions
6,006 réponses
5,671 commentaires
2,027 utilisateurs