Назад Вперед

Разметка

Прежде, чем читать этот раздел, прочтите описание разметки TEI Lite.

DTD

Практика показала, что использование немодифицирванного DTD TEI Lite требует лишнего ввода, особенно если вспомнить, что TEItools фактически реализуют конкретное подмножество TEI Lite, делая свои предположения об использовании разметки. Для облегчения жизни пользователям, я создал "TEItools DTD". Он является почти буквальной копией TEI Lite с мелкими изменениями. Если вам не нравится идея использования нестандартного DTD, просто пользуйтесь TEI Lite: TEItools будут и впредь обрабатывать его без проблем. TEItools DTD позволяет сократить требуемую разметку, в частности:

  • <div?> имеют атрибут TYPE по умолчанию фиксированным так, как этого ожидают TEItools;
  • <div?> имеют <head> обязательным первым подэлементом;
  • <fileDesc>, <titleStmt>, <publicationStmt>, <sourceDesc> являются необязательными;
  • <list> имеет в качестве значения атрибута TYPE одно из simple | bullets | bulleted | ordered | alpha | gloss, и simple используется по умолчанию;
  • <divGen> имеет значением атрибута TYPE одно из ToC | LoF | LoT | index;
  • <div> имеет значением атрибута TYPE одно из abstract | appendix | colophon | bibl;
  • <xref> имеет значением атрибута TYPE только URL;
  • <figure> имеет значением атрибута REND одно из left | right | narrow | inline | fixed;
  • включены сокращения для двойных кавычек, то есть, можно писать "слово" и это будет разобрано как <q>слово</q>;
  • Несколько NOTATION включено добавлением к DTD ISOnots.

Формальный идентификатор для TEItools DTD следующий: "-//TEI//DTD TEI Tools 0.1//EN".

Разделы

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

Базирующаяся на имени элемента
В этой иерархии значение имеют используемые элементы: <div1> -- раздел первого уровня, он делится на разделы <div2>, и так далее. Лучше использовать именно эту разметку.

Базирующаяся на типе элемента
В этой иерархии значение имеют атрибуты TYPE, а все разделы размечаются при помощи одного и того же элемента <div>. Распознаются следующие типы разделов: "section", "subsection", "subsubsection", "paragraph", "subparagraph".

Заметьте, что атрибут TYPE является обязательным для элементов <div?>, кроме случая использования TEItools DTD вместо TEI Lite DTD (см. раздел DTD).

Кроме этих значений, любой раздел может иметь атрибут TYPE имеющим значение "abstract" или "appendix", и будет сверстан как аннотация или приложение, соответственно. TYPE=stub сгенерирует раздел, чей заголовок не появится в колонтитулах и в содержании.

Распознаются следующие типы генерируемых разделов (<divGen>):

ToC
генерирует содержание;

LoF
генерирует список иллюстраций;

LoT
генерирует список таблиц.

Атрибут REND

REND должен влиять на любой элемент разметки, так что, если он где-то не работает -- это ошибка. Различный вид одного элемента в разных выходных форматах -- тоже ошибка.

Значением REND является список ключевых слов, разделенных пробелами или запятыми. Распознаются следующие ключевые слова:

Изменения шрифта:
"bold", "italic", "slanted", "typewriter", "sans", "smallcap", "underline", "large", "small", "normal";

Положение в тексте:
"quoted", "inline", "block", "fixed", "continuous";

Положение в строке:
"superscript", "subscript";

Выравнивание текста:
"left", "center", "right", "justify", "flushleft", "flushright";

Ширина иллюстрации при многоколоночном наборе:
"narrow";

Направление текста:
"landscape".

Текст будет обтекать иллюстрацию, если <figure> имеет атрибут REND, указывающий, к какой стороне страницы следует отодвинуть иллюстрацию ("left" или "right").

Абзацы будут последовательно нумероваться, если <div?> имеет атрибут REND со значением "ordered".

Несколько примеров. Центрированный абзац:

 <p rend='Center'>....</p> 

Выделенное жирным слово:

 <hi rend='Bold'>слово</hi>

(Всегда лучше размечать, чем является элемент, чем как он должен выглядеть. Скажем, <kw>функция</kw> всегда лучше, чем <hi rend='bold,typewriter'>функция</kw>.)

Списки

<label> работает только внутри <list type='gloss'>. <list type='alpha'> будет нумеровать элементы списка буквами.

Таблицы

Элемент <table> должен иметь атрибут REND. Его значение задает формат колонок таблицы. Поддерживаются два формата REND: "в стиле LaTeX" и "в стиле CALS".

в стиле LaTeX
Каждый символ в значении REND соответствует колонке. Число символов должно строго соответствовать числу столбцов таблицы. Символы и их значения перечислены в таблице Команды форматирования таблицы.
Команды форматирования таблицы
Символы и форматы
l Отжат влево
c Центрирован
r Отжат вправо
j Выровнен. Заметьте, что только выровненные ячейки могут включать текст на несколько строчек, остальные будут всегда располагаться в одну строку.

в стиле CALS
Значением REND является последовательность форматов колонок, разделенных пробелами или запятыми. Каждый формат состоит из спецификаций ширины и выравнивания, без пробелов между ними. Число спецификаций должно строго соответствовать числу столбцов таблицы. Спецификация ширины задает пропорциональную ширину колонок, то есть, две колонки со значениями "1" и "2" будут иметь отношение ширин равным 1:2. Спецификация выравнивания -- один символ, смотрите таблицу Команды форматирования таблицы. Например:

<table rend='1l,2j'>

Вот, в качестве примера, SGML текст таблицы Команды форматирования таблицы:

 <table rend='cj' id='alignment'>
                  <head/Команды форматирования таблицы/
                  <row role=label>
                    <cell cols='2'/Символы и форматы/
                  <row>
                    <cell role=label/ l /
                    <cell/Отжат влево/
                  <row>
                    <cell role=label/ c /
                    <cell rend='center'/Центрирован/
                  <row>
                    <cell role=label/ r /
                    <cell rend='right'/Отжат вправо/
                  <row>
                    <cell role=label/ j /
                    <cell rend='justified'> Выровнен. Заметьте, что
                    только выровненные ячейки могут включать текст на
                    несколько строчек, остальные будут всегда
                    располагаться в одну строку.
                </table> 

<cell ROWS=N> работает не во всех выходных форматах, к сожалению. COLS=N, однако, работает во всех.

На самом деле атрибут REND у <table> задает формат колонок по умолчанию. Каждая ячейка может, в свою очередь, определить ее собственный REND, являющийся одним символом. Его значение будет иметь приоритет перед форматом по умолчанию.

Каждый элемент <row> и <cell> может иметь атрибут ROLE. Единственное используемое его значение -- "label".

Внимание: если содержимое ячейки состоит более, чем из простого текста, например, включает в себя списки, вам нужно использовать выровненные ("justified") ячейки.

Таблицу можно развернуть вдоль листа, указав у элемента <table> атрибут N со значением landscape. Для вывода в TeX это потребует использования dvips, потому что xdvi не сможет показать такую таблицу, так что пользуйтесь ghostview, gv или другими средствами просмотра PostScript'а. Такая таблица будет всегда занимать целый лист. То же самое верно и для элемента <figure>, но при помощи атрибута REND вместо N.

Атрибут N может также иметь значение "notlined". В этом случае таблица будет не линованной.

Иллюстрации

TEItools использует по умолчанию графику в следующих форматах:

filename.gif
для формата HTML;

filename.eps
для формата TeX;

filename.png или filename.pdf
для формата TeX со стилем pdf;

filename.rtfdata или filename.bmp
для формата RTF.

где filename -- это то, что указано в объявлении внешнего объекта. Исторически TEItools добавлял соответствующий суффикс автоматически. Это и сейчас так, из соображений совместимости, однако более правильно объявлять реальные имена и форматы в объявлениях объектов. Поскольку они зависят от используемых выходных форматов и даже от стилей, объявления нужно заключать в маркированные секции. TEItools определяет параметрические объекты с именами, соответствующими именам форматов и стилей. Пример:

<!doctype tei.2 public '-//TEI//DTD TEI Tools 0.1//EN' [
<!ENTITY % html "IGNORE">
<!ENTITY % tex "IGNORE">
<!ENTITY % rtf "IGNORE">
<!ENTITY % pdf "IGNORE">
<!ENTITY % externalfigs "IGNORE">
<![ %pdf; [
<!ENTITY logo SYSTEM "image.pdf" NDATA PDF>
]]>
<![ %tex; [
<!ENTITY logo SYSTEM "image.eps" NDATA EPS>
]]>
<![ %html; [
<!ENTITY logo SYSTEM "image.jpeg" NDATA JPEG>
]]>
<![ %externalfigs; [
<!ENTITY logo SYSTEM "image.wmf" NDATA WMF>
]]>
<![ %rtf; [
<!ENTITY logo SYSTEM "image.rtfdata" NDATA RTFDATA>
]]>
]>

Заметьте, что символ подчеркивания в именах выходных форматов и стилей опускается.

Графика вставляется с ее "родным" размером, то есть, пиксельными размерами для RTF и HTML или bounding box для TeX (Encapsulated PostScript).

Ссылки на иллюстрации на самом деле ссылаются на их заголовки. Поэтому только на иллюстрации с <head> внутри <figure> можно ссылаться при помощи <ptr>.

Если у <figure> есть атрибут N, он становится атрибутом ALT элемента <img> в HTML.

URL

На URL можно ссылаться при помощи <xref> с атрибутом TYPE. Пользоваться этим так:

 <xref type='URL' n='Интересное место'>http://some.where</xref>

SUBDOC

Начата поддержка SUBDOC. Они должны работать, как минимум, на уровне разделов со спецификацией tei2tex. Вот один пример. Главный документ:

<!doctype tei.2 public '-//TEI//DTD TEI Tools 0.1//EN' [
  <!entity chap1 system "chap1.tei" subdoc>
]>
<tei.2><text>
   <body>&chap1;</body>
</text></tei.2>

А вот -- содержимое файла chap1.tei:

<!doctype div1 public '-//TEI//DTD TEI Tools 0.1//EN'>
<div1><head/The section/
   <p>Something</p>
</div1>

Теперь можно пропустить через tei2tex и главный файл, и chap1.tei, и получить идентичные результаты. Можно использовать свойство SUBDOC, например, для того, чтобы несколько авторов независимо работали над разными разделами документа.

Замечания

Замечания (<note>) могут иметь следующие значения атрибута PLACE:

foot
сноски;

inline
включаются в основной текст в круглых скобках;

interlinear
вставляются между строк текста;

end
выносятся в отдельный раздел в конце документа;

side
выносятся на поля.

Прочее

Формулы

Формулы поддерживаются только в нотации TeX. Пользуйтесь этим так:

 <formula
              notation='TeX'>E=mc^2</formula>

что будет выглядеть так: .

Примеры

Примеры оформляются в виде элемента <eg>. Внутри его содержимого пробелы и форматирование сохраняются. При этом, однако, в нем распознается разметка SGML. Если Вы хотите полностью защитить текст от интерпретации процессором, пользуйтесь отмеченной секцией CDATA, например, так:

<eg><![CDATA[ текст, включающийся без изменений ]]></eg>
            

Заметьте, что сохраняются именно пробелы: символы табуляции не раскрываются в наборы пробелов. Так что прежде, чем включать программный код в <eg>, замените в нем табуляции на пробелы.

Эпиграфы

Автор эпиграфа кодируется элементом <bibl>.

Инструкции обработки

useStyle

Эта инструкция используется для подключения стилей. Например:

<?TEItools useStyle skip=1.5>

эквивалентно использованию -style skip=1.5.

nextDivision

Используется для смены нумерации разделов. Следующий раздел (<div1>) будет иметь указанный номер. Например:

<?TEItools nextDivision 77>
<div1><head/Раздел номер семьдесят семь/

pageNo

Меняет нумерацию страниц так, что текущая страница будет иметь указанный номер.

nextDivName

Устанавливает имя файла, в который попадет следующий раздел при использовании tei2html -style split.

Благодарности

Хочется поблагодарить:

  • James Clark, за замечательный свободный анализатор SGML sp;
  • Joe English, за замечательный свободный SGML процессор CoST; за замечательную и свободную библиотеку генерации RTF RATFINK; за время, потраченное на ответы на мои (глупые) вопросы и за изменения своих программ по моим просьбам;
  • Lennart Staflin, за замечательный свободный SGML редактор psgml;
  • Tom Gordon, Ulrich Windl, Matt Welsh, Greg Hankins, Cees de Groot и всю прочую команду linuxdoc-SGML/SGMLtools за SGMLtools. Замечательный и свободный :)
  • Алексея Выскубова, за советы и исправления в спецификации для самого для меня сложного выходного формата, RTF (мне даже не приходилось запускать Word, чтобы исправлять некоторые ошибки, не это ли счастье? :-)


Назад Вперед

Последние изменения: Пн 14 Окт 2002 17:42:34
Сгенерировано TEItools

Наш баннер
Вы можете установить наш баннер на своем сайте или блоге, скопировав этот код:
RSS новости