0 votos
524 visualizações

Olá a todos,

Gostaria de pedir ajuda para criar uma Bíblia de Referência.
Temos um texto bíblico com referências cruzadas.

Por padrão, a ordem das referências cruzadas é
“chamado - número do versículo - referências”
como “a 1 Sl 102:25; Is 40:21; Jo 1:1,2; Hb 1:10”

Quero alterá-la para colocar o capítulo primeiro, reunindo todos os chamados sob o mesmo versículo, como nas Bíblias de referência comuns, como
“Capítulo 1
1 a Sl 102:25; Is 40:21; Jo 1:1,2; Hb 1:10 b Sl 89:11; 90:2; At 17:24; Rm 1:20; Hb 11:3 c Jó 38:4…”

Acho que alguns scripts são necessários. Alguém pode ajudar?

Tradução automática de English
PTXprint por (102 pontos)
reexibida | 524 visualizações

6 Respostas

0 votos

Hmm. Sim, isso quase certamente só pode ser feito pré-processando o código. O primeiro do capítulo recebe o texto adicional de ‘Capítulo’ e assim por diante. Tentar fazer isso no TeX seria muito difícil.

Assumindo que você reexecutará o processo sempre que usar seleções do texto, então deve funcionar bem. O código atual funciona construindo uma lista de gatilhos para aplicar as listas externas, que contém 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

Você pode criar seus próprios arquivos de gatilho em vez de deixar o python fazer isso com qualquer programa de manipulação de texto que você gostar - perl, python ou até sed seriam coisas que eu consideraria, do mundo unix.
O que exatamente você colocaria na parte USFM do arquivo para gerar o formato que deseja, não tenho 100% de certeza. Não deve haver problema em ter múltiplos gatilhos em um
versículo, então você não precisa mesclar suas linhas, mas espero que você precise de alguns marcadores personalizados para gerar os chamados em sobrescrito.

Mas tenho assumido que você não quer chamadores no texto, estou errado nisso? Seu exemplo os tem… Como o leitor conecta o chamado com a palavra? Você realmente quer mesclar suas referências cruzadas no meio do texto bíblico? Espero que isso precise ser um processo manual ou, no máximo, semiautomático.

Tradução automática de English
por (1,1k pontos)

Olá,

Acho que minha explicação não foi suficiente.
Nosso texto tem referências cruzadas no meio do 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Бурхан тэнгэр ба газрыг бүтээжээ.

Então, o resultado é assim:
タイトルなし

Portanto, minha pergunta é sobre a mudança de ordem e a mesclagem dos chamados sob o mesmo versículo.

Tradução automática de English
0 votos

Então, se eu puder reformular o que entendo agora… o que você quer fazer é processar os dados \xo fazendo o seguinte:

  1. Anteceder à nota atual uma nota nula com o capítulo (anotado), se for diferente do último. (ex.: \x - \xo Chapter 2\x* \x + \xo 1 \xt ...\*)
  2. Imprimir o número do versículo apenas se for diferente da última referência.
  3. Excluir completamente a entrada \xo se for idêntica à última.

Estou certo de que poderia escrever isso em perl, mas não conheço python bem o suficiente. Se você quer um script em perl ou não dependeria de coisas como o sistema operacional que você e seus colegas estão usando (perl está quase certamente disponível no linux, mas não, acredito eu, normalmente no windows).

Tradução automática de English
por (1,1k pontos)

Sim, exatamente.
Eu uso Perl no Windows, então faça um script em perl para isso, por favor.
Obrigado.

Tradução automática de English

Isso parece funcionar. Você terá que substituir a primeira linha pelo que for necessário no 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;
        }
}
Tradução automática de English

Obrigado. Seu script funciona bem no Windows sem nenhum problema.
O resultado é este:
タイトルなし
Agora, quero mudar a ordem. O resultado até agora é
“chamado - número do versículo - referências” como “а 1 Иох 1:1,2; Евр 1:10”,
Eu quero
“número do versículo - chamado - referências” como “1 а Иох 1:1,2; Евр 1:10” como no meu primeiro post.
Além disso, todos os chamados em um mesmo versículo podem estar em uma única linha?
Você tem alguma ideia?

Tradução automática de English
0 votos

Se você quiser alcançar isso, precisará fazer um pouco de programação, para:

  1. Extrair todas as referências cruzadas de um versículo para uma única referência cruzada, seja no SFM ou em um arquivo de gatilho e, em seguida, removê-las do texto
  2. Converter as posições de referência cruzada no texto em pontos de rótulo simples com um rótulo fixo adequado (para que pareça uma âncora de referência cruzada, mas não há referência cruzada)
  3. Extrair esses mesmos rótulos para a referência cruzada complexa que você tem no início do versículo.
  4. Desativar os chamados tanto no texto quanto na nota.
Tradução automática de English
por (656 pontos)
0 votos

Para contradizer Martin (ligeiramente), o script provavelmente pode ser modificado para lhe dar algo próximo. Não tenho certeza exata de como será exibido, no entanto. Se você fizer com que ele diga:

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

Então, de forma semelhante a como você obtém uma nota de rodapé vazia dizendo Capítulo X, você obterá uma nota de rodapé vazia dizendo Y (na primeira nota de rodapé do versículo Y) e, em seguida, o resto da 1ª nota de rodapé naquele versículo. Outras notas de rodapé não terão um capítulo ou um número de versículo. MAS você precisará ativar notas paragrafadas e provavelmente precisará alterar algumas coisas, como o espaçamento entre notas de rodapé (não me lembro do nome, mas acho que está na interface do usuário agora). Depois de ativar as notas paragrafadas, você não terá o versículo Y em sua própria linha, a menos que inclua alguns comandos TeX crus no que o perl está emitindo. (prefixar o conteúdo da nota de rodapé para o versículo Y com \penalty -10000\space pode ser suficiente).

Provavelmente, em algum momento neste exercício, essa abordagem improvisada atingirá seus limites, e a resposta de Martin se tornará a maneira certa de fazer isso, ou mudanças muito significativas no código TeX (que provavelmente quebrariam os projetos de outras pessoas) serão necessárias.

No lado do TeX, você precisaria ‘sequestrar’ a macro \xo e fazê-la interpretar os parâmetros capítulo:versículo como valores, antes de entrarem no fluxo de saída, e, em seguida, fazer a comparação e a redefinição da saída no TeX. O perigo é que, se alguém tivesse um \xo que não fosse sempre seguido por capítulo:versículo, e em vez disso tivesse capítulo.versículo ou similar, o código daria erros estranhos e inesperados.
Definir macros robustas no TeX é difícil, e não há nenhum padrão que defina o que as pessoas colocarão em \xo (nem uma garantia de que o usem apenas em referências cruzadas!).
Pensando um pouco mais, na verdade seria muito melhor definir sua própria macro com um terminador definido, que por sua vez se resolveria para \xo, em vez de sequestrar \xo.
ex.: \def\zmyxrefstyle#1:#2\*{comparação} para definir quaisquer prefixos para o chamado.
Claro, você ainda teria que fazer o código gerador do chamador da nota de rodapé colocar o número do capítulo e/ou o número do versículo antes do chamado. Estou adivinhando que levaria pelo menos meio dia de programação e depuração, mas pode haver coisas que eu esqueci que o empurrariam para uma semana ou três.

Sem uma chamada muito clara de vários usuários, é improvável que encontraremos tempo para fazer isso a qualquer momento no próximo ano.

Tradução automática de English
por (1,1k pontos)
0 votos

Aqui está uma maneira que pensei nesta manhã. Precisaremos escrever um novo marco, digamos \zcaller*, que alguém possa inserir em uma referência cruzada / nota de rodapé para que o ptxprint insira o chamador naquele ponto. Então \x - \xo 1\xt Gen 1:1\x* se torna \x - \xo 1\xt \zcaller*Gen 1:1\x* e depois desativamos a saída dos chamadores de notas. Isso envolve a equipe de desenvolvimento em algum trabalho, mas é muito menos complicado do que as páginas de pensamentos até agora!

Tradução automática de English
por (656 pontos)
0 votos

Ainda assim, não eliminará múltiplos 1 quando houver múltiplas referências cruzadas em um versículo. Mas isso é apenas uma questão de excluir o \xo das referências cruzadas subsequentes em um versículo.

Tradução automática de English
por (656 pontos)

Perguntas relacionadas

+1 voto
1 resposta 179 visualizações
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 perguntada Fev 10, 2021
0 votos
9 respostas 628 visualizações
Ao imprimir um módulo para um idioma baseado em escrita árabe, notei que as referências de versículos são impressas ... , vejo o mesmo erro nos títulos de passagens paralelas.
Jim_Smith 131 perguntada Out 3, 2023
0 votos
4 respostas 282 visualizações
Estou usando o PTXprint 1.9. O arquivo USFM com o qual estou trabalhando tem notas de rodapé, mas não inclui o ... na área de notas. Eu perdi essa configuração em algum lugar?
da4396 126 perguntada Jul 22, 2021
0 votos
1 resposta 38 visualizações
Estou trabalhando em uma publicação de um único livro. No passado, para livros únicos, consegui colocar um cabeçalho com ... . O que mais posso fazer para diagnosticar o problema?
Rebecca Peak 102 perguntada Jun 25
0 votos
1 resposta 151 visualizações
Olá a todos! Estou imprimindo porções das Escrituras com uma Faixa de Referência (Reference Range) no cabeçalho. Em ... meio dos versículos 12-15. Obrigado pela ajuda! André
Andre_Tousch 116 perguntada Abr 15, 2021
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
Finally, all of you, be like-minded, be sympathetic, love one another, be compassionate and humble.
1 Peter 3:8
3,044 perguntas
6,004 respostas
5,671 comentários
2,026 usuários