0 голосов
523 просмотров

Здравствуйте, все,

Хотел бы попросить вашей помощи в создании справочной Библии.
У нас есть текст Библии со ссылками.

По умолчанию порядок ссылок выглядит так:
«ссылка (callee) - номер стиха - ссылки»
например: «a 1 Пс 102:25; Ис 40:21; Ин 1:1,2; Евр 1:10»

Я хочу изменить это так, чтобы сначала шла глава, а затем все ссылки (callees) под одним и тем же стихом были сгруппированы вместе, как в обычных справочных Библиях, например:
«Глава 1
1 a Пс 102:25; Ис 40:21; Ин 1:1,2; Евр 1:10 b Пс 89:11; 90:2; Деян 17:24; Рим 1:20; Евр 11:3 c Иов 38:4…»

Мне кажется, для этого нужны какие-то скрипты. Может ли кто-нибудь помочь?

Переведено машиной с языка English
PTXprint от (102 очков)
снова показан | 523 просмотров

6 Ответов

0 голосов

Хм. Да, почти наверняка это можно сделать только путем предварительной обработки кода. Для первого стиха в главе добавляется текст «Глава» и так далее. Пытаться сделать это в TeX было бы очень сложно.

Если вы будете запускать этот процесс каждый раз, когда используете выдержки из текста, то это должно работать нормально. Текущий код работает, создавая список триггеров для применения внешних списков, который содержит записи такого вида:

\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

Вы можете создать свои собственные файлы триггеров, вместо того чтобы позволять python делать это с помощью любой программы манипуляции текстом, которая вам нравится — perl, python или даже sed — это то, что я бы рассмотрел, исходя из мира unix.
Точно то, что нужно поместить в часть USFM файла, чтобы сгенерировать нужный вам формат, я не уверен на 100%. Не должно быть проблем с наличием нескольких триггеров на один
стих, поэтому вам не нужно объединять ваши строки вместе, но, вероятно, вам понадобятся некоторые пользовательские маркеры для генерации ссылок (callees) в виде верхних индексов.

Но я предполагал, что вы не хотите видеть ссылки (callers) в тексте, я ошибаюсь? В вашем примере они есть… Как читатель связывает ссылку (callee) со словом? Вы действительно хотите объединить свои кросс-ссылки в середине библейского текста? Я предполагаю, что это потребует ручного или, в лучшем случае, полуавтоматического процесса.

Переведено машиной с языка English
от (1,1тыс. очков)

Здравствуйте,

Я думаю, моего объяснения было недостаточно.
В нашем тексте ссылки находятся в середине текста, как

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

Тогда результат выглядит так:
タイトルなし

Таким образом, мой вопрос заключается в изменении порядка и объединении ссылок (callees) под одним и тем же стихом.

Переведено машиной с языка English
0 голосов

Так, если я правильно понял… то, что вы хотите сделать, это обработать данные \xo, выполнив следующее:

  1. Добавить перед текущей заметкой пустую заметку с (аннотированной) главой, если она отличается от последней. (например, \x - \xo Chapter 2\x* \x + \xo 1 \xt ...\*)
  2. Печатать номер стиха только в том случае, если он отличается от последней ссылки.
  3. Полностью удалить запись \xo, если она идентична последней.

Я уверен, что мог бы написать это на perl, но не знаю python достаточно хорошо. Хотели бы вы скрипт на perl или нет, зависит от таких вещей, как какая ОС вы и ваши коллеги используете (perl почти наверняка доступен на linux, но, как я полагаю, обычно не на windows).

Переведено машиной с языка English
от (1,1тыс. очков)

Да, именно так.
Я использую Perl на Windows, поэтому, пожалуйста, напишите скрипт на perl для этого.
Спасибо.

Переведено машиной с языка English

Похоже, это работает. Вам придется заменить первую строку на то, что требуется для 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;
        }
}
Переведено машиной с языка English

Спасибо. Ваш скрипт хорошо работает на Windows без каких-либо проблем.
Результат такой:
タイトルなし
Теперь я хочу изменить порядок. Результат на данный момент
«ссылка (callee) - номер стиха - ссылки», например «а 1 Иох 1:1,2; Евр 1:10»,
я хочу
«номер стиха - ссылка (callee) - ссылки», например «1 а Иох 1:1,2; Евр 1:10», как в моем первом сообщении.
Также, могут ли все ссылки (callees) в одном стихе быть в одной строке?
Есть ли у вас какие-нибудь идеи?

Переведено машиной с языка English
0 голосов

Если вы хотите достичь этого, вам нужно будет немного запрограммировать, чтобы:

  1. Извлечь все кросс-ссылки из стиха в одну кросс-ссылку, либо в SFM, либо в файл триггеров, а затем удалить их из текста
  2. Преобразовать позиции кросс-ссылок в тексте в простые точки меток с подходящей фиксированной меткой (чтобы это выглядело как якорь кросс-ссылки, но самой кросс-ссылки нет)
  3. Извлечь эти же метки в сложную кросс-ссылку, которую вы имеете в начале стиха.
  4. Отключить все ссылки (callees) как в тексте, так и в заметке.
Переведено машиной с языка English
от (656 очков)
0 голосов

Чтобы поспорить с Мартином (немного), скрипт, вероятно, можно изменить, чтобы получить что-то близкое. Я не уверен, как именно это будет отображаться, однако. Если вы заставите его говорить:

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

Тогда, аналогично тому, как вы получаете пустую сноску, говорящую «Глава X», вы затем получите пустую сноску, говорящую Y (в первой сноске на стих Y), а затем остальную часть 1-й сноски в этом стихе. Другие сноски не будут иметь ни главы, ни номера стиха. НО вам нужно будет включить заметки с абзацами и, вероятно, потребуется изменить некоторые вещи, такие как расстояние между сносками (я не помню, как это называется, но, думаю, это теперь в пользовательском интерфейсе). После того, как вы включите заметки с абзацами, вы не будете получать стих Y на отдельной строке, если не включите некоторые необработанные команды TeX в то, что выдает perl. (префиксирование содержимого сноски для стиха Y командой \penalty -10000\space может быть достаточно).

Вероятно, в какой-то момент в этом упражнении такая подгонка достигнет своих пределов, и либо ответ Мартина станет правильным способом сделать это, либо потребуются очень значительные изменения в коде TeX (которые, вероятно, сломают проекты других людей).

Со стороны TeX вам нужно будет «захватить» макрос \xo и заставить его интерпретировать параметры глава:стих как значения, прежде чем они попадут в поток вывода, а затем выполнить сравнение и переопределение вывода в TeX. Опасность в том, что если у кого-то был \xo, который не всегда следовал за главой:стих, а вместо этого был глава.стих или подобное, код выдавал бы странные и неожиданные ошибки.
Определение надежных макросов в TeX сложно, и нет стандарта, определяющего, что люди будут помещать в \xo (и нет гарантии, что они используют его только в кросс-ссылках!).
Подумав об этом еще немного, на самом деле было бы гораздо лучше определить свой собственный макрос с определенным терминатором, который, в свою очередь, разрешался бы в \xo, а не захватывать \xo.
например, \def\zmyxrefstyle#1:#2\*{comparisonde} для установки любых префиксов к ссылке (callee).
Конечно, вам все равно пришлось бы заставить код генератора ссылок (callers) в сносках помещать номер главы и/или номер стиха перед ссылкой (callee). Я предполагаю, что это займет как минимум полнедели программирования и отладки, но могут быть вещи, которые я забыл, что могут растянуть это до недели или трех.

Без очень четкого запроса от нескольких пользователей маловероятно, что мы найдем время, чтобы сделать это в течение следующего года.

Переведено машиной с языка English
от (1,1тыс. очков)
0 голосов

Вот способ, который я придумал сегодня утром. Нам нужно будет написать новый маркер, например \zcaller*, который можно было бы вставить в перекрёстную ссылку / сноску, чтобы ptxprint вставил вызывающий элемент (caller) в этой точке. Тогда \x - \xo 1\xt Gen 1:1\x* станет \x - \xo 1\xt \zcaller*Gen 1:1\x*, а затем нужно отключить вывод вызывающих элементов сносок. Это потребует некоторой работы от команды разработки, но это гораздо менее сложно, чем страницы размышлений до сих пор!

Переведено машиной с языка English
от (656 очков)
0 голосов

Это всё ещё не уберёт несколько «1», если в стихе есть несколько перекрёстных ссылок. Но это просто вопрос удаления \xo из последующих перекрёстных ссылок в стихе.

Переведено машиной с языка English
от (656 очков)

Похожие вопросы

+1 голос
1 ответ 179 просмотров
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 задал вопрос фев 10, 2021
0 голосов
9 ответов 628 просмотров
При печати модуля для языка, использующего арабское письмо, я заметил, что ссылки на стихи печатаются неправильно. Вот ... я вижу ту же ошибку в заголовках параллельных мест.
Jim_Smith 131 задал вопрос окт 3, 2023
0 голосов
4 ответов 282 просмотров
Я использую PTXprint 1.9. В USFM-файле, с которым я работаю, есть сноски, но маркер \fr не включен. Похоже, что ... ссылок \fr из сносок в области примечаний. Я что-то упустил?
da4396 126 задал вопрос июл 22, 2021
0 голосов
1 ответ 38 просмотров
Я работаю над изданием отдельной книги. Раньше для отдельных книг я мог(ла) добавить заголовок с диапазоном ссылок, но ... это. Что еще я могу сделать для устранения неполадки?
Rebecca Peak 102 задал вопрос июн 25
0 голосов
1 ответ 151 просмотров
Всем привет! Я печатаю отрывки из Писания с Диапазоном ссылок (Reference Range) в колонтитуле. На некоторых страницах ... посреди стихов 12-15. Спасибо за помощь! Андре
Andre_Tousch 116 задал вопрос апр 15, 2021
Welcome to Support Bible, where you can ask questions and receive answers from other members of the community.
Every day they continued to meet together in the temple courts. They broke bread in their homes and ate together with glad and sincere hearts, praising God and enjoying the favor of all the people. And the Lord added to their number daily those who were being saved.
Acts 2:46-47
3,044 вопросов
6,004 ответов
5,671 комментариев
2,026 пользователей