О ПОСТРОЕНИИ ДЕРЕВА ОГЛАВЛЕНИЯ (СТРУКТУРИРОВАНИЕ ТЕКСТА ОГЛАВЛЕНИЯ) В ПРОГРАММЕ DJVUMARK



При структурировании закладок для определения уровня данной закладки найболее часто используется:
а) положение отступа закладки;
б) порядковый номер перед закладкой;
в) информацию шрифта, которым напечата закладка.

В программе DJVUmark опосредованным способом используется метод порядковых номеров б). Конечно, явно номеров никто не расставляет, как это предлагают в некоторых алгоритмах построения дерева, опубликованных на руборде.


ЧТО ТАКОЕ ОГЛАВЛЕНИЕ (СОДЕРЖАНИЕ ) КНИГИ ?



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


Между родовыми названиями существует соотношения соподчиненности. Они определенным образом ранжированы по составу их элементов, т.е.соотношению целое-часть. Здесь можно говорить о степени вложенности родового названия по отношению к другим названиям. Обычно в этом случае говорят о номере уровня вложенности. Заметим, что некоторые рубрики могут быть простыми, т.е. не содержащие  составных элементов, они неделимы. Они играют особую роль в построении дерева структуры оглавления, речь о котором пойдет далее.

Родовое название самого старшего ранга имеет минимальный уровень вложенности 0 ( или первый, если счет
вести с 1).

Типичная соподчиненность родовых названий (обозначений) рубрик следующая:

том(книга), часть, раздел (секция), глава, параграф
 


Для определенности предположим, что заголовок рубрики занимает одну строку текста, тогда, в общем, заголовок рубрики можно представить в виде нотации, подобной нотации Наура-Бэкуса (напомним, что символы :: в этой нотации означают "по определению равно", а | значает "или"), следующим образом:


<идентификатор рубрики>::<Название рубрики><номер страницы>

<Название рубрики> :: < родовое название > < идентификационный номер названия рубрики > | < идентификационный номер названия рубрики |< номер структуры (номер-индекс) >|< Пусто >|<*>

< идентификационный номер названия рубрики > :: <число в арабской системе исчисления>|<число в римской системе исчисления>|<число прописью>|<Литера>

< номер структуры (номер-индекс)> ::<<число><.><число>...<.><число>>|<Литера><.><число>...<.><число>>

.

ПРИМЕР 3. СОПОДЧИНЕННОСТЬ НОМЕРОВ-ИНДЕКСОВ
Вариант А                                       Вариант Б                                                            Вариант В

1.1                                                   1.1.                                                                       А.1.
1.1.1                                                1.1.1.                                                                   А.1.1.
1.1.2                                               1.1.1.1.                                                                 А.1.1.2.
1.2                                                  1.1.1.2.                                                                 А.1.2.
1.2.1                                               1.1.2.                                                                    А.2.
1.2.2                                               1.2.                                                                       А.2.1.
2.1                                                 1.2.1.                                                                     А.2.1.1.
2.1.1                                              1.2.1.1.                                                                  А.2.1.2.


Прежде чем приступить к определению родового названия, необходимо отметить следующее:

1. родовое название зависит от языка, на котором написана книга;
2. нет однозначного определения ранга данного родового названия.

Например, родовое название ЧАСТЬ в большинстве случаем имеет ранг меньший, чем ранг ТОМ и больший чем ранг РАЗДЕЛ. Но в английской литературе встречаются книги, где ранг ЧАСТЬ меньше на одну ступень ранга ГЛАВА.

3. Очень часто < родовое название > рубрики в оглавлении опускают, оставляя только < идентификационный номер названия рубрики >

Например, вместо фрагмента оглавления


PART IV Название части
Chapter 1 Название главы


может быть записано

IV Название части
1 Название главы


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

В порядке убывания ранга, начиная с самого старшего ранга, приведем наиболее часто встречающиеся родовые названия:

< родовое название ранга ТОМ >:: "Том ", "ТОМ ", "Book ", "BOOK " "Книга ", "КНИГА ", "Volume ", "VOLUME ", "Словарь ", "СЛОВАРЬ "
< родовое название ранга ЧАСТЬ >:: "Часть", "ЧАСТЬ", "Part ", "PART ",
< родовое название ранга СЕКЦИЯ >:: "Раздел", "РАЗДЕЛ", "Section", "SECTION", "Секция", "СЕКЦИЯ"
< родовое название ранга ГЛАВА > "Глава", "ГЛАВА", "Chapter", "CHAPTER", "Сегмент", "СЕГМЕНТ", "Дополнение", "ДОПОЛНЕНИЕ", "Supplement",
"SUPPLEMENT", "Лекция", "ЛЕКЦИЯ", "List", "LIST", "Список", "СПИСОК", "Lecture", "LECTURE" ,
"APPENDIX", "Appendix", "ПРИЛОЖЕНИЕ", "Приложение"
< родовое название ранга ПАРАГРАФ > § (сложный параграф).

Родовое название ранга ПАРАГРАФ по сути подглава (блок внутри родового названия ранга ГЛАВА), и иногда не имеет родового имени, а имеет родовой идентификатор в виде номера в римской системе исчисления или вместо номера литерное обозначение

Программа DJVUmark понимает номер-индекс с 10 точками. Если точек больше, то такую строку относит типу "десятиточечной"

В программе DJVUmark для структурирования оглавлений документа какой-либо предметной области, ГДЕ КНИЖНЫЕ НАЗВАНИЯ НЕУМЕСТНЫ, можно воспользоваться номерами-индексами, но их надо пометить символом "*", чтобы он не отображался в bookmarks. Например, *5.1 любое название рубрики 45

Эквивалентами ключевых слов (том, часть, секция, глава, параграф) являются скобки открытия структуры
"{_Т", "{_Ч", "{_С", "{_Г", "{_П" .

Для закрытия структуры можно использовать скобки "}_Т", "}_Ч", "}_С", "}_Г", "}_П" .



В ранних версиях программы вместо скобки открывающейся { использовался набор символов БЛОК_ , вместо скобки закрывающейся } - набор БЛОК_Е , т.е. перечисленные ниже пары эквивалентны. Они перечислены в порядке убывания ранга названия или увеличения уровня вложенности.

Открывющиеся скобки:

"БЛОК_Т" ,"{_Т" ; --- уровень 1

"БЛОК_Ч" ,"{_Ч" ; --- уровень 2

"БЛОК_С" "{_С" ; --- уровень 3

"БЛОК_Г" ,"{_Г" ; --- уровень 4

"БЛОК_П" ,"{_П" ; --- уровень 5

Закрывющиеся скобки:


"БЛОК_ЕТ" ,}_Т" ;--- уровень 1

"БЛОК_ЕЧ" ,"}_Ч" ;--- уровень 2

"БЛОК_ЕС" "}_С" ;--- уровень 3

"БЛОК_ЕГ" ,"}_Г" ;--- уровень 4

"БЛОК_ЕП" ,}_П" .--- уровень 5.

Таким образом, это означает, что для программы DJVUmark тексты "ТОМ" и "БЛОК_Т" или "{_Т" являются эквивалентными.

В последних версия программы добавлены еще один вариант открывающихся    '{_1',  '{_2',  '{_3',  '{_4',  '{_5'  и закрывающихся  скобок   '}_1',     '}_2',    '}_3',    '}_4',    '}_5'  .  Они эквивалентны предыдущим обозначениям.  Соответствие очевидно и не требует комментариев.




Скобки открытия можно использовать для изменения ранга структурного блока.
Например, в строке "{_П PART I Detectors 78" метка {_П используется для изменения ранга структуры PART. Это нужно сделать, если PART размещен внутри структуры CHAPTER. Так как по умолчанию в программе принято, что ранг PART старше ранга CHAPTER, поэтому мы ранг структуры PART приравниваем к рангу структуры ПАРАГРАФ.


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

Это означает, что по ключевым словам в начале строки оглавления ( ТОМ, ЧАСТЬ, СЕКЦИЯ, ГЛАВА и т.п. или их эквивалентам {_x ; здесь и далее в тексте х может принимать
одно из значений из списка [Т, Ч, С, Г, П]) программа может определить места, где нужно вставить все открывающие скобки и практически все закрывающие скобки.

ОСТАЕТСЯ НЕ РЕШЕННОЙ ТОЛЬКО ВСТАВКА ЗАКРЫВАЮЩЕЙ СКОБКИ, ЕСЛИ ПОСЛЕ КОНЦА ДАННОГО БЛОКА ДАЛЕЕ СЛЕДУЕТ ПРОСТОЙ ЭЛЕМЕНТ СПИСКА, КОТОРЫЙ ПРИНАДЛЕЖИТ, БЛОКУ БОЛЕЕ  СТАРШЕГО РАНГА, ЧЕМ РАНГ БЛОКА, ПОСЛЕ КОТОРОГО ОН СТОИТ.

Такая ситуация встречается практически всегда в корневом блоке оглавления. Затруднения вызывают строки оглавления Библиография, Литература, Предметный
указатель и тому подобное. Эти строки могут относится как к описанию всей книги, так и только к последнему структурному блоку книги ( к последней главе, части и т.п.).
К сожалению, решить этот вопрос правильно программно трудно.

Поэтому в конце оглавления книги пользователю программы DJVUmark предлагается отмечать место окончания последней структуры блока.

Если упомянутая ситуация с подряд идущими простыми строками, принадлежащим блокам разного ранга, встречается в середине книги, то предлагается такие строки пометить закрывающими скобками "}_x" соответствующих рангов.

К сожалению, мы не можем привести реального примера. На практике нам такие ситуации пока в оглавлениях книг не встречались. Например, в электронной библиотеке по теме ОПТИКА, которая содержит более 2, 5 тысяч книг, при обработке текста оглавлений ситуация с подряд идущими простыми строками, принадлежащим блокам разного ранга,  в середине книги не встречалась.

Реально такая ситуация может возникнуть в книгах разделенных на части, если в пределах части приведена литература, относящаяся ко всему содержимому (ко всем главам) части. Пусть для определенности предположим, что часть разделена  на главы и последней строкой последнй главы является строка "Выводы". За этой строкой следует строка "Литература к части ...".

Если не предпринимать никаких действий, строка "Литература к части ..." будет программой ошибочно включена в состав последней главы.

Чтобы избежать такой ошибки, необходимо разграничить эти две строки, указав соответствующими закрывающими скобками, к каким структурным блокам относятся
эти строки ,а именно:
"}_Г Выоды 25
"}_Ч Литература к части ... 30

Кстати, подобная ситуация смоделирована Andrew Zhezherun в примере к программам Bookmark_Tools2 или EmbedBookmarks-1 .

Link to page 1
Link to page 2
Chapter 1
Link to page 4
Link to page 5
Chapter 2, no link here
Subsection
Link to page 7
Link to page 8
Link to page 9
Link to page 10 in book.djvu
Web link href="http://windjview.sourceforge.net"

К сожалению, мы не можем привести реального примера. В электронной библиотеке по теме ОПТИКА, которая содержит более 2, 5 тысяч книг, при обработке текста оглавлений

В этом примере даже 3 строки, идущие подряд и принадлежащие к структурам разного ранга. Здесь нет никаких формальных признаков, чтобы автоматически классифицировать эти строки оглавления. Но это не реальная жизненная ситуация, а модельный пример.
Чтобы DjVUmark правильно сформировала структуру приведенного примера необходимо концовку примера переписать следующим образом:
.................
}_П Link to page 8
}_Г Link to page 9
// @
Link to page 10 in book.djvu
Web link href="http://windjview.sourceforge.net"


Еще раз подчеркнем, что на практике возникает необходимость только во вставке строки "// @ ".


 

О ПОДГОТОВКЕ ТЕКСТА ОГЛАВЛЕНИЯ ( TABLE OF CONTENTS).

В последних версиях программы, если в конце оглавления нет неоднозначности, строку "// @ " можно не вставлять. Программа автоматически вставляет эту строку в конце оглавления или перед строкой Index или Предметный указать, предпологая, что эти строки относятся ко всей книге.

Таким образом, в плане задания структуры оглавленияе правки текста минимальные. Номера страниц в конце строк оглавления никак не меняем, исключая пару строк в начале книги с номерами в римской системе исчисления.

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

На практике, иногда я удаляю список авторов глав ( для лучшей читабельности текста) или удаляю переносы.

В последних версиях программы можно оставлять
а) попавшую в текст оглавления информацию из колонтитула страниц оглавления, помещенную в книге, при копирования текста из OCR-слоя.
б) отточия в строках оглавления.
в) переносы в строках оглавления, как отдельных слов так фрагментов строки.
Кроме автоматического структурирования текста оглавления, в программе предусмотрена возможность "вручную" осуществить это структурирование с помощью расстановки скобок открытия "// [" и закрытия "// ]" структурного блока. Для этого предварительно в файле параметров нужно раскомментировать команду блокировки автоматического структурирования текста оглавления.

Есть другая возможность - смешанный вариант. Сначала в автоматическом режиме осуществить построение дерева оглавления. Затем скопировать текст оглавления, помещенный в папке TEMP,в этом тексте скорректировать нужным образом расстановку структурных скобок и еще раз запусить программу DJVUmark с этим новым текстом оглавления при отключенной функции автоматического структурирования текста.

Упомянутые возможности в последних версиях программы использовать нет необходимости. Они оставлены для совместимости с  более  ранними   версиями программы.

Использовать структурные скобки для пометки строк оглавления  только тогда,  когда понятия часть, глава, параграф  и т.п. не используются,  а используются типографские приемы обозначения структурных блоков через размер шрифта и его свойств. Это иногда встречается при обработке трудов конференций.

Иногда в в оглавлениях книг структура оглавления представлена печатью строк с отступами :

Ниже дан пример фрагмента оглавления, где его  структура  представлена печатью строк с отступами :

Hydrogen-Like Ion: An Atom (Ion) With One Electron 3
     Bohr Model of the Atom 4
    Hydrogen-Like Ions, Quantum Approach: Bound States 7
           Angular Wavefunctions 7
         Radial Wavefunction and Energy States 10


Чтобы программа
DJVUmark создала такую структуру оглавления, надо воспользоваться индексными номерами, а чтобы они не печатались в оглавлении, перед  номерами необходимо поставить символ "*".

В этом случае текст оглавления для DJVUmark будет выглядеть следующим образом

*1 Hydrogen-Like Ion: An Atom (Ion) With One Electron 3
*1.1 Bohr Model of the Atom 4
*1.2 Hydrogen-Like Ions, Quantum Approach: Bound States 7
*1.2.1 Angular Wavefunctions 7
*1.2.2 Radial Wavefunction and Energy States 10

 



О ПОДГОТОВКЕ ТЕКСТА ПРЕДМЕТНОГО УКАЗАТЕЛЯ ( SUBJECT INDEX).



В принципе можно брать книжную копию текста без любого редактирования. Но если в тексте указателя нет его деления на алфавитные секции, то желательно вставить соответствующие БУКВЫ между различными секциями. Это существенно повышает читабельность текста. В книжном бумажном варианте, если буквы между секциями отсутствуют, алфавитные секции выделены типографскими средствами, что теряется в электронном варианте.

И еще. Желательно просмотреть текст указателя на предмет наличия ЦЕЛОЧИСЛЕННЫХ КОНСТАТ, отличных от номеров страниц. Должны блокировать рассмотрения этих констант как ссылок. Для этого рядом с константой надо вставить какой-либо ограничитель из числа текстовых ограничителей, исключая пробел,
запятую и точку с запятой.