0 votos
523 vistas

Hola a todos,

Me gustaría pedir ayuda para crear una Biblia de Referencia.
Tenemos un texto bíblico con referencias cruzadas.

Por defecto, el orden de la referencia cruzada es
«calle - número de versículo - referencias»
como «a 1 Sal 102:25; Is 40:21; Jn 1:1,2; He 1:10»

Quiero cambiarlo para poner el capítulo primero y luego agrupar todas las llamadas (callees) bajo el mismo versículo, como en las Biblias de referencia ordinarias, como
«Capítulo 1
1 a Sal 102:25; Is 40:21; Jn 1:1,2; He 1:10 b Sal 89:11; 90:2; Hch 17:24; Ro 1:20; He 11:3 c Job 38:4…»

Pienso que se necesitan algunos scripts. ¿Alguien puede ayudar?

Traducción automática desde English
PTXprint por (102 puntos)
mostrada de nuevo | 523 vistas

6 Respuestas

0 votos

Hmm. Sí, casi con seguridad esto solo se puede haciendo un preprocesamiento del código. El primero del capítulo recibe el texto adicional «Capítulo» y así sucesivamente. Intentar hacer esto en TeX sería muy difícil.

Suponiendo que volverás a ejecutar el proceso cada vez que uses selecciones del texto, entonces debería funcionar bien. El código actual funciona construyendo una lista de disparadores (triggers) para aplicar las listas externas, que contiene entradas como esta:

\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

Puedes crear tus propios archivos de disparadores en lugar de dejar que Python lo haga, con cualquier programa de manipulación de texto que te guste: perl, python o incluso sed serían cosas que consideraría, desde el mundo de Unix.
No estoy 100% seguro de lo que pondrías en la parte USFM del archivo para generar el formato que deseas. No debería haber problema en tener múltiples disparadores en un
versículo, por lo que no necesitas fusionar tus líneas, pero supongo que necesitarás algunos marcadores personalizados para generar las llamadas (callees) en superíndice.

Pero he estado suponiendo que no quieres llamadas (callers) en el texto, ¿me equivoco? Tu ejemplo las tiene… ¿Cómo conecta el lector la llamada (callee) con la palabra? ¿Realmente quieres fusionar tus referencias cruzadas en el medio del texto bíblico? Supongo que eso necesitaría ser un proceso manual o, como mucho, semiautomático.

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

Hola,

Pienso que mi explicación no fue suficiente.
Nuestro texto tiene referencias cruzadas en medio del texto, como

\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Бурхан тэнгэр ба газрыг бүтээжээ.

Entonces, el resultado es así:
タイトルなし

Así que, mi pregunta es cambiar el orden y fusionar las llamadas (callees) fuera del mismo versículo.

Traducción automática desde English
0 votos

Entonces, si puedo reformular lo que entiendo ahora… lo que quieres hacer es procesar los datos de \xo haciendo lo siguiente:

  1. Anteponer a la nota actual una nota nula con el (anotado) capítulo si este es diferente al último. (p. ej. \x - \xo Chapter 2\x* \x + \xo 1 \xt ...\*)
  2. Solo imprimir el número de versículo si este es diferente a la última referencia.
  3. Eliminar por completo la entrada \xo si es idéntica a la última.

Estoy seguro de que podría escribir esto en perl, pero no conozco Python lo suficiente. Si quieres un script en perl o no dependería de cosas como el sistema operativo que tú y tus colegas están usando (perl casi con seguridad está disponible en linux, pero no, creo, normalmente en windows).

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

Sí, exactamente.
Uso Perl en Windows, así que haz un script en perl para eso, por favor.
Gracias.

Traducción automática desde English

Esto parece funcionar. Tendrás que reemplazar la primera línea con lo que sea necesario en 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;
        }
}
Traducción automática desde English

Gracias. Tu script funciona bien en Windows sin ningún problema.
El resultado es este:
タイトルなし
Ahora, quiero cambiar el orden. El resultado hasta ahora es
«callee - número de versículo - referencias» como «а 1 Иох 1:1,2; Евр 1:10»,
Quiero
«número de versículo - callee - referencias» como «1 а Иох 1:1,2; Евр 1:10» como en mi primera publicación.
Además, ¿pueden estar todas las callees en un mismo versículo en una sola línea?
¿Tienes alguna idea?

Traducción automática desde English
0 votos

Si quieres lograr esto, necesitarás hacer un poco de programación, para:

  1. Extraer todas las referencias cruzadas de un versículo en una sola referencia cruzada, ya sea en el SFM o en un archivo de disparadores y luego eliminarlas del interior del texto
  2. Convertir las posiciones de referencia cruzada en el texto en simples puntos de etiqueta con una etiqueta fija adecuada (para que parezca una ancla de referencia cruzada, pero no hay referencia cruzada)
  3. Extraer esas mismas etiquetas en la referencia cruzada compleja que tienes al inicio del versículo.
  4. Desactivar cualquier callee tanto en el texto como en la nota.
Traducción automática desde English
por (656 puntos)
0 votos

Para contradecir a Martin (ligeramente), el script probablemente se pueda modificar para darte algo cercano. No estoy seguro de exactamente cómo se mostrará, sin embargo. Si lo haces decir:

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

Entonces, de manera similar a cómo obtienes una nota al pie vacía que dice Capítulo X, obtendrás una nota al pie vacía que dice Y (en la primera nota al pie del versículo Y) y luego el resto de la 1.ª nota al pie en ese versículo. Otras notas al pie no tendrán un capítulo ni un número de versículo. PERO necesitarás activar las notas con párrafos y probablemente necesitarás alterar algunas cosas como el espaciado entre notas al pie (no recuerdo cómo se llama, pero creo que ahora está en la interfaz de usuario). Una vez que hayas activado las notas con párrafos, no obtendrás el versículo Y en su propia línea, a menos que incluyas algunos comandos TeX crudos en lo que el perl está generando. (prefijar el contenido de la nota al pie para el versículo Y con \penalty -10000\space podría ser suficiente).

Probablemente, en algún punto de este ejercicio, hacer trampa de esta manera alcanzará sus límites, y la respuesta de Martin se convertirá en la forma correcta de hacerlo, o se necesitarán cambios muy significativos en el código TeX (que probablemente romperían los proyectos de otras personas).

En el lado de TeX, necesitarías «secuestrar» la macro \xo y hacer que interprete los parámetros de capítulo:versículo como valores, antes de que entren en el flujo de salida, y luego hacer la comparación y la redefinición de salida en TeX. El peligro es que si alguien tuviera un \xo que no siempre fuera seguido por capítulo:versículo, y en cambio tuviera capítulo.versículo o similar, el código daría errores extraños e inesperados.
Definir macros robustas en TeX es difícil, y no hay ningún estándar que defina lo que la gente pondrá en \xo (¡ni una garantía de que solo lo usen en referencias cruzadas!).
Pensándolo un poco más, en realidad sería mucho mejor definir tu propia macro con un terminador definido, que a su vez se resolviera en \xo, en lugar de secuestrar \xo.
p. ej. \def\zmyxrefstyle#1:#2\*{comparisonde} para establecer cualquier prefijo para la callee.
Por supuesto, todavía tendrías que hacer que el código generador de la nota al pie de la llamada (caller) ponga el número de capítulo y/o el número de versículo antes de la callee. Supongo que tomaría al menos medio día de programación y depuración, pero puede haber cosas que haya olvidado que lo empujen a una semana o tres.

Sin una llamada muy clara de múltiples usuarios, es poco probable que encontremos el tiempo para hacer esto en algún momento del próximo año.

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

Esta es una forma que se me ocurrió esta mañana. Necesitaríamos escribir un nuevo hito, digamos \zcaller*, que alguien pudiera insertar en una referencia cruzada / nota al pie para que ptxprint inserte el llamador en ese punto. Entonces \x - \xo 1\xt Gen 1:1\x* se convierte en \x - \xo 1\xt \zcaller*Gen 1:1\x* y luego se desactiva la salida de los llamadores de las notas. Implica que el equipo de desarrollo realice cierto trabajo, ¡pero es mucho menos complicado que las páginas de ideas hasta ahora!

Traducción automática desde English
por (656 puntos)
0 votos

Aun así, no eliminará los múltiples 1 cuando haya varias referencias cruzadas en un versículo. Pero eso es solo cuestión de eliminar el \xo de las referencias cruzadas posteriores en un versículo.

Traducción automática desde English
por (656 puntos)

Preguntas relacionadas

+1 voto
1 respuesta 179 vistas
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 preguntada feb 10, 2021
0 votos
9 respuestas 628 vistas
Al imprimir un módulo para un idioma basado en escritura árabe, noté que las referencias de versículos se imprimen ... veo el mismo error en los encabezados de pasajes paralelos.
Jim_Smith 131 preguntada oct 3, 2023
0 votos
4 respuestas 282 vistas
Estoy usando PTXprint 1.9. El archivo USFM con el que estoy trabajando tiene notas al pie, pero no incluye el ... notas. He pasado por alto esa configuración en algún lugar?
da4396 126 preguntada jul 22, 2021
0 votos
1 respuesta 38 vistas
Estoy trabajando en una publicación de un solo libro. En el pasado, para libros individuales, he podido colocar un ... esto. Qué más puedo hacer para diagnosticar el problema?
Rebecca Peak 102 preguntada jun 25
0 votos
1 respuesta 151 vistas
Hola a todos: Estoy imprimiendo porciones de Escritura con un rango de referencia en el encabezado. En algunas páginas se ... de los versículos 12-15. Gracias por su ayuda. André
Andre_Tousch 116 preguntada abr 15, 2021
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
And over all these virtues put on love, which binds them all together in perfect unity.
Colossians 3:14
3,044 preguntas
6,004 respuestas
5,671 comentarios
2,026 usuarios