0 votes
523 vues

Bonjour à tous,

J'aimerais solliciter votre aide pour créer une Bible de référence.
Nous disposons d'un texte biblique avec des références croisées.

Par défaut, l'ordre des références croisées est
« appelant - numéro de verset - références »
tel que « a 1 Ps 102:25; Is 40:21; Jn 1:1,2; He 1:10 »

Je souhaite le modifier pour placer le chapitre en premier, puis regrouper tous les appelants sous le même verset, comme dans les Bibles de référence classiques, par exemple
« Chapitre 1
1 a Ps 102:25; Is 40:21; Jn 1:1,2; He 1:10 b Ps 89:11; 90:2; Ac 17:24; Rm 1:20; He 11:3 c Job 38:4… »

Je pense que des scripts sont nécessaires. Quelqu'un peut-il m'aider ?

Traduit automatiquement depuis English
PTXprint par (102 points)
réaffiché | 523 vues

6 Réponses

0 votes

Hum. Oui, cela ne peut presque certainement être fait qu'en prétraitant le code. Le premier élément du chapitre reçoit un texte supplémentaire « Chapitre » et ainsi de suite. Essayer de le faire dans le TeX serait très difficile.

En supposant que vous relancerez le processus chaque fois que vous utiliserez des extraits du texte, cela devrait fonctionner correctement. Le code actuel fonctionne en construisant une liste de déclencheurs pour appliquer les listes externes, qui contient des entrées comme celle-ci :

\AddTrigger MAT28.15
\x - \xo 28:15 \xt Mt 9:31; 27:8\x*
\EndTrigger

\AddTrigger MAT28.19
\x - \xo 28:19 \xt Mt 13:52; 24:14; Mk 16:15-16; Lk 24:47; Acts 1:8; 2:38; 8:16; 14:21; Rom 6:3; 1 Cor 1:13; 2 Cor 13:14; Gal 3:27\x*
\EndTrigger

Vous pouvez créer vos propres fichiers de déclencheurs au lieu de laisser Python le faire, avec n'importe quel programme de manipulation de texte que vous préférez - Perl, Python, ou même sed seraient des options que je considérerais, venant du monde Unix.
Je ne suis pas à 100 % certain de ce que vous devriez mettre dans la partie USFM du fichier pour générer le format souhaité. Il ne devrait pas y avoir de problème à avoir plusieurs déclencheurs sur un
seul verset, donc vous n'avez pas besoin de fusionner vos lignes, mais je suppose que vous aurez besoin de certains marqueurs personnalisés pour générer les appelants en exposant.

Mais j'ai supposé que vous ne vouliez pas d'appelants dans le texte, me trompé-je ? Votre exemple en contient… Comment le lecteur associe-t-il l'appelant au mot ? Voulez-vous vraiment fusionner vos références croisées au milieu du texte biblique ? Je suppose que cela nécessiterait un processus manuel ou, au mieux, semi-manuel.

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

Bonjour,

Je pense que mon explication n'était pas suffisante.
Notre texte contient des références croisées au milieu du texte, comme

\v 1 \x + \xo 1:1 \xt Иох 1:1,2; Евр 1:10\xЭхэнд \x + \xo 1:1 \xt Дуу 8:3; 33:6; 89:11,12; 102:25; 136:5; 146:6; Иса 44:24; Иер 10:12; 51:15; Зех 12:1; Үйл 14:15; 17:24; Кол 1:16,17; Евр 11:3; Илч 4:11; 10:6\xБурхан тэнгэр ба газрыг бүтээжээ.

Ensuite, le résultat est comme ceci :
Sans titre

Ainsi, ma question porte sur le changement d'ordre et la fusion des appelants sous le même verset.

Traduit automatiquement depuis English
0 votes

Ainsi, si je peux reformuler ce que je comprends maintenant… ce que vous voulez faire, c'est traiter les données \xo en effectuant les opérations suivantes :

  1. Ajouter avant la note actuelle une note nulle avec le chapitre (annoté) si celui-ci est différent du dernier. (par ex. \x - \xo Chapter 2\x* \x + \xo 1 \xt ...\*)
  2. Afficher le numéro du verset uniquement s'il est différent de la dernière référence.
  3. Supprimer entièrement l'entrée \xo si elle est identique à la précédente.

Je suis sûr que je pourrais écrire cela en Perl, mais je ne connais pas assez bien Python. Si vous voulez un script Perl ou non dépendra de choses comme le système d'exploitation que vous et vos collègues utilisez (Perl est presque certainement disponible sur Linux, mais pas, je crois, normalement sur Windows).

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

Oui, exactement.
J'utilise Perl sur Windows, donc veuillez créer un script Perl pour cela.
Merci.

Traduit automatiquement depuis English

Cela semble fonctionner. Vous devrez remplacer la première ligne par ce qui est nécessaire sur Windows.

#!/usr/bin/perl -w
# This little script answers a request https://community.scripture.software.sil.org/t/cross-references-in-reference-bible/3470/2 "
# * Prepend to the current note a null note with the (annontated) chapter if that is different to the last one. (e.g. \x - \xo Chapter 2\x* \x + \xo 1 \xt ...\*)
# * Only print the verse number if that is different to the last reference.
# * Entirely delete the \xo entry if it is identical to the last one.
#
# It assumes that all xo entries are in the format chapter:verse, and that verses in xref \xo entries are only numeric. 

use strict;
my $chapter='';
my $verse='';

$\=''; # Swallow whole file as one chunk
$/='';
sub beautify {
        my ($c,$v)=@_;
        if ($c ne $chapter) {
                $chapter=$c;
                $verse='';
                print "\\x - \\xo Chapter $c\\x*";
        }
        if ($v ne $verse) {
                $verse=$v;
                "\\xo $v";
        }
}

while(my $file=(<>)) {
        foreach my $chunk (split(/(\\x.*?\\x\*)/, $file)) {
                $chunk=~s/\\xo (\d+):(\d+)/beautify($1,$2)/e;
                print $chunk;
        }
}
Traduit automatiquement depuis English

Merci. Votre script fonctionne bien sur Windows sans aucun problème.
Le résultat est le suivant :
Sans titre
Maintenant, je veux changer l'ordre. Le résultat jusqu'à présent est
« appelant - numéro de verset - références » comme « а 1 Иох 1:1,2; Евр 1:10 »,
je veux
« numéro de verset - appelant - références » comme « 1 а Иох 1:1,2; Евр 1:10 » comme dans mon premier message.
Aussi, est-il possible que tous les appelants d'un même verset soient sur une seule ligne ?
Avez-vous des idées ?

Traduit automatiquement depuis English
0 votes

Si vous voulez y parvenir, vous devrez faire un peu de programmation, pour :

  1. Extraire toutes les références croisées d'un verset et les regrouper en une seule référence croisée, soit dans le SFM, soit dans un fichier de déclencheurs, puis les supprimer du texte
  2. Convertir les positions des références croisées dans le texte en simples points d'étiquette avec une étiquette fixe appropriée (pour qu'il ressemble à une ancre de référence croisée, mais sans référence croisée)
  3. Extraire ces mêmes étiquettes dans la référence croisée complexe que vous avez au début du verset.
  4. Désactiver les appelants, tant dans le texte que dans la note.
Traduit automatiquement depuis English
par (656 points)
0 votes

Pour contredire Martin (légèrement), le script peut probablement être modifié pour vous donner quelque chose de proche. Je ne suis pas sûr de l'aspect exact de l'affichage, cependant. Si vous le faites dire :

     if ($v ne $verse) {
                $verse=$v;
                print "\\x - \\xo $v\\*";
        }

Alors, de manière similaire à la façon dont vous obtenez une note de bas de page vide disant Chapitre X, vous obtiendrez ensuite une note de bas de page vide disant Y (à la première note de bas de page du verset Y) et ensuite le reste de la 1re note de bas de page de ce verset. Les autres notes de bas de page n'auront ni chapitre ni numéro de verset. MAIS vous devrez activer les notes en paragraphes et probablement modifier certaines choses comme l'espacement entre les notes de bas de page (je ne me souviens plus de son nom, mais je pense qu'il est maintenant dans l'interface utilisateur). Une fois que vous avez activé les notes en paragraphes, vous n'aurez pas le verset Y sur sa propre ligne, à moins d'inclure certaines commandes TeX brutes dans ce que le script Perl génère. (préfixer le contenu de la note de bas de page pour le verset Y avec \penalty -10000\space pourrait suffire).

Probablement, à un certain point de cet exercice, tricher de cette façon atteindra ses limites, et soit la réponse de Martin deviendra la bonne façon de le faire, soit des modifications très importantes du code TeX (qui cassera probablement les projets d'autres personnes) seront nécessaires.

Côté TeX, vous devrez « détourner » la macro \xo et la faire interpréter les paramètres chapitre:verset comme des valeurs, avant qu'ils n'entrent dans le flux de sortie, puis effectuer la comparaison et la rédefinition de la sortie dans TeX. Le danger est que si quelqu'un avait un \xo qui n'était pas toujours suivi de chapitre:verset, et avait plutôt chapitre.verset ou similaire, le code donnerait des erreurs étranges et inattendues.
Définir des macros robustes dans TeX est difficile, et il n'y a aucun standard qui définit ce que les gens mettront dans \xo (ni de garantie qu'ils ne l'utilisent que dans les références croisées !).
En y réfléchissant un peu plus, il serait en fait bien mieux de définir votre propre macro avec un terminateur défini, qui se résoudrait ensuite en \xo, plutôt que de détourner \xo.
par ex. \def\zmyxrefstyle#1:#2\*{comparaison} pour définir les préfixes de l'appelant.
Bien sûr, vous devrez toujours faire en sorte que le code générateur d'appelants de notes de bas de page place le numéro du chapitre et/ou le numéro du verset avant l'appelant. Je suppose que cela prendrait au moins une demi-journée de programmation et de débogage, mais il y a peut-être des choses que j'ai oubliées qui pourraient le pousser à une semaine ou trois.

Sans un appel très clair de la part de plusieurs utilisateurs, il est peu probable que nous trouvions le temps de le faire dans les prochains mois.

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

Voici une idée qui m’est venue ce matin. Nous devrions écrire un nouveau jalon, disons \zcaller* que quelqu’un pourrait insérer dans une référence croisée / une note de bas de page pour que ptxprint insère l’appelant à cet endroit. Ensuite, \x - \xo 1\xt Gen 1:1\x* devient \x - \xo 1\xt \zcaller*Gen 1:1\x* et nous désactivons l’affichage des appelants de notes. Cela implique un certain travail de l’équipe de développement, mais c’est beaucoup moins compliqué que les pages de réflexions jusqu’à présent !

Traduit automatiquement depuis English
par (656 points)
0 votes

Cela n’éliminera toujours pas les multiples 1 lorsqu’il y a plusieurs références croisées dans un verset. Mais il suffit de supprimer le \xo des références croisées suivantes dans un verset.

Traduit automatiquement depuis English
par (656 points)

Questions connexes

+1 vote
1 réponse 179 vues
I'm not sure if this is a bug or not, but since I just spent a while trying to solve a problem that I knew ... \toc1, even though I was several chapters and verses into the book.
anon297911 424 posée févr. 10, 2021
0 votes
9 réponses 628 vues
Lors de l'impression d'un module pour une langue basée sur l'écriture arabe, j'ai remarqué que les références de ... vois la même erreur dans les en-têtes des passages parallèles.
Jim_Smith 131 posée oct. 3, 2023
0 votes
4 réponses 282 vues
J'utilise PTXprint 1.9. Le fichier USFM sur lequel je travaille contient des notes de bas de page, mais n'inclut pas ... la zone des notes. Ai-je manqué ce paramètre quelque part ?
da4396 126 posée juil. 22, 2021
0 votes
1 réponse 38 vues
Je travaille sur une publication monographique. Par le passé, pour les livres uniques, j'ai pu mettre un en-tête avec ... cette option. Que puis-je faire d'autre pour dépanner ?
Rebecca Peak 102 posée juin 25
0 votes
1 réponse 151 vues
Bonjour à tous ! J'imprime des portions d'Écriture avec une plage de référence (Reference Range) dans l'en-tête. Sur ... au milieu des versets 12-15. Merci pour votre aide ! André
Andre_Tousch 116 posée avr. 15, 2021
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
There is neither Jew nor Gentile, neither slave nor free, nor is there male and female, for you are all one in Christ Jesus.
Galatians 3:28
3,044 questions
6,004 réponses
5,671 commentaires
2,026 utilisateurs