Это "нулевая версия" --- относитесь к ней достаточно критично.

От автора

Идея написать этот FAQ появилась у меня после того, как большинство писем, которые я стал получать в связи с работой по оцифровке книги "Искусство программирования для ЭВМ", были вопросами типа "как получить читаемую копию?" Чтобы сэкономить свое и ваше время, в этом файле собраны те рекомендации, которые я бы послал в ответ на такие письма.

Отмечу, что имена файлов и командные строки даны в стиле *nix. Не сомневаюсь, пользователям M$-DOG не составит особого труда их понять. (Впрочем, виденные мною TeX'и используют их как есть, поскольку перенесены из Unix.)

К сожалению, реализации системы TeX для различных платформ имеют свои особенности в настройке. Большей частью это касается механизмов поиска файлов. Впрочем, по сравнению с тем, насколько различаются сами платформы, это практически незаметно.

Особо отмечу, что я не ставлю своей целью исчерпывающе изложить здесь все тонкости TeX-мастерства. Прошу признанных Гуру этой науки не ужасаться "чайному" стилю и тем, прямо скажем, упрощенным методам русификации, которые я применял. Во-первых, не все версии TeX достаточно мощны, чтобы все делать "по правилам", а во-вторых (это мое личное мнение) предлагаемый подход достаточно удобен в использовании (по сравнению, к примеру, с теми пакетами, которые требуют явно переключаться с языка на язык).

Пользователей TeX, желающих адаптировать Кнута к своей системе, по-видимому, может заинтересовать раздел "Русификация", где описан быстрый и простой способ русификации, использованный при подготовке электронной версии "Искусства программирования". Детали этого способа могут пригодиться при адаптации текстов к другим макропакетам. Остальное --- пояснения по установке и настройке, предназначеные для новичков. К сожалению, широкий спектр различных реализаций TeX не позволяет свести все к пошаговым инструкциям. Вместо этого предпринята попытка популярно разъяснить цель каждого из действий (сопровождая примерами в конкретной реализации), в надежде на то, что это поможет разыскать нужную информацию в документации на вашу систему.

Также попрошу читателей не начинать со мной дискуссию в письмах на тему, что лучше: TeX или, к примеру Word либо PageMaker. Каждый из нас останется при своем мнении, а утерянного времени не вернешь. Но замечу, что многие, увидев отформатированную TeX страницу, с ужасом понимают, какой ручной доводки потребовал бы Word для получения аналогичного результата.

ПРЕДУПРЕЖДАЮ: как и что пойдет в Вашей системе, я не знаю!!! Поэтому АВТОР ЭТОГО РУКОВОДСТВА НЕ НЕСЕТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ВОЗМОЖНЫЕ СБОИ В РАБОТЕ ВАШЕЙ СИСТЕМЫ (ВОЗМОЖНО, СОПРОВОЖДАЮЩИЕСЯ ПОТЕРЕЙ ИНФОРМАЦИИ) ВЫЗВАННЫЕ ИСПОЛЬЗОВАНИЕМ ИЗЛОЖЕННОГО НИЖЕ.

Обратная связь

Автор этого руководства с благодарностью и вниманием ознакомится с любой конструктивной критикой либо пожеланиями, касающимися его содержания и оформления.

Следует особо отметить, автор оставляет за собой право использовать ваши письма при доработке текста, если только вы ЯВНО не запретили этого. Содержимое письма может как цитироваться, так и подвергаться обработке. Для ссылок на авторов писем будут использованы либо их имена (если таковые однозначно могут быть выяснены из письма) либо имя из email-адреса, сами адреса публиковаться не будут. Если вас не устраивают эти условия, оговаривайте желаемые в ваших письмах.

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

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

Автор выражает свою искреннюю благодарность за конструктивное обсуждение и предоставленную информацию:

1. Что такое TeX

Система TeX (произносится "тех", от слова "технология") была задумана профессором Стэнфордского университета Дональдом Э. Кнутом в процессе подготовки к изданию 3-го тома "Искусства программирования для ЭВМ". Оказалось, что существовавшие тогда средства подготовки к печати математических текстов совершенно непригодны для выполнения столь сложной работы быстро и качественно. Работа по созданию TeX началась в 1978 году и Кнут планировал закончить ее в течение своего годичного отпуска (sabbatical year, полагается университетским профессорам каждые семь лет), но несколько ошибся в сроках [1] --- окончательный вариант программы появился в 1985. С тех пор TeX сделался стандартом de facto для многих серьезных издательских проектов: все книги самого Кнута набираются в TeX, статьи в издания American Mathematical Society, American Physical Society принимаются только в этом формате, он использовался во множестве проектов онлайн-документации.

В России эта система также достаточно популярна. Пожалуй, первая ее русификация (ProTeX), известная автору, появилась в Институте Физики Высоких Энергий (ИФВЭ, Протвино) и случилось это не менее девяти лет тому назад. С тех пор многие издательства взяли TeX на вооружение. Его широко используют в издательстве "Мир" и многих других издательствах, выпускающих физико-математические книги. Автору не раз доводилось встречать книги, набранные в TeX, а еще, судя по внешнему виду журнала "Программирование", он также набирался в этой системе (по крайней мере, его выпуски за 1991--1993гг.)

За что же так полюбился TeX профессионалам?

К сожалению, у системы есть и определенные недостатки.

Краткое описание работы с TeX

Последовательность действий такая:
  1. Установить и заставить TeX работать :-)
  2. Подготовить текстовый файл (по умолчанию расширение .tex), содержащий текст документа, в котором текст содержит команды форматирования.
  3. Пропустить этот файл через TeX, получив версию документа в формате DVI (DeVice Independent). В таком виде он переносим между платформами. (К сожалению, в реальной жизни это случается не всегда, но главная причина --- несоблюдение общепринятых правил хорошего тона, к примеру, шрифты, искалеченные местными умельцами.)
  4. Просмотреть DVI-файл с помощью специальной утилиты просмотра либо вывести его на принтер с помощью программы "драйвер принтера".
  5. Наслаждаться безупречным результатом.

2. Где взять

Пользователи GNU/Linux, примите поздравления. Помимо того, что вы работаете с исключительно удобной и мощной системой, у вас не будет хлопот с поисками системы TeX. Все версии GNU/Linux, виденные автором, начиная со Slackware 2.0.1 и заканчивая Red Hat 6.0, имеют TeX в своем составе. Правда, к примеру, в Slackware 3.30 и RedHat 5.1 различается местоположение каталога TeX по отношению к корневому, так что относитесь к приведенным здесь рекомендациям критически.

Остальным придется поискать в Сети. Адреса можно посоветовать такие:

http://www.tug.org/ --- TeX Users' Group.

http://www.cemi.rssi.ru/cyrtug/ --- ассоциация пользователей кириллического TeX.

[Евгений Цымбалюк] пишет:

Очень советую туда сходить. В нее может вступить любой желающий. При этом вы получаете доступ к довольно богатой библиотеке по TeX на разных языках, можете консультироваться по телефону и лично приехать пообщаться в приемные часы (к сожалению, эти возможности физически доступны в основном москвичам, хотя всегда можно узнать про филиалы в своем городе). Также любой желающий может скачать руссифицированный дистрибутив LaTeX для emTeX. Хотя комплект русских шрифтов, разработанных Ольгой Лапко (возможно, лучший из доступных), можно приспособить для любой системы.

http://tug2.cs.umb.edu/ctan --- CTAN --- Comprehensive TeX Archive Network,

последний сайт что-то вроде интерфейса к распределенному ftp-архиву, в котором лежит все, связанное с этой системой. Если раньше не приходилось иметь дела с TeX, очень рекомендую книгу: D.E. Knuth "The TeX book", или, в русском переводе, "Все про TeX", (Протвино, АО RDTeX, 1993, ISBN 5-900614-01-8).

Рекомендации читателей:

С. М. Львовский. "Набор и верстка в пакете LaTeX", 2-е издание (это важно, так как в ней описан LaTeX2e, имеющий принципиальные добавки по сравнению с LaTeX, описанным в первом издании), 1995 г., Москва, Космосинформ.

К.О.Тельников и П.З.Чеботаев. LaTeX. Издательская система для всех. 1994, Новосибирск, Сибирский хронограф. Сейчас вышло и новое издание.

Онлайновый вариант английского издания "The TeX Book" доступен в CTAN по имени

    texbook.tex
полностью:
    systems/knuth/tex/texbook.tex

Основные сайты CTAN, доступные по ftp (и другими способами):

ftp.dante.de (Mainz, Germany)
ftp.tex.ac.uk (Cambridge, UK)
ctan.tug.org (Boston, Massachusetts, USA)

Основные сайты CTAN очень загружены, поэтому рекомендуется соблюдать правила хорошего тона и пользоваться их зеркалами. Список зеркал можно найти на одном из вышеупомянутых сайтов, он расположен непосредственно в начальном (не корневом!) каталоге архива и называется CTAN.sites.

Пользователи TeX в России очень рекомендуют зеркало ftp://ftp.radio-msu.net/tex-archive/, но к сожалению, за ее пределами оно недоступно.

Интересная страничка, посвященная TeX, может быть найдена у Бориса Тоботраса: http://xtalk.price.ru/tex/.

http://www-cs-faculty.stanford.edu/~knuth/index.html --- автор TeX, профессор Дональд Кнут.

Искать надо следующее:

Вместо программ работы с dvi-файлами можно искать транслятор dvips, который очень аккуратно перегоняет все в PostScript. Этот формат известен шире, и средства работы с ним можно найти во многих издательских системах. В *nix PS --- вообще стандарт "де факто". Отметим также, что программа dvips сохраняет в PS-файле начертания всех использованных шрифтов. Особенно это важно при обмене документами между платформами, которые локализованы по-разному или не локализованы вообще.

Помимо этого, существуют конверторы в другие популярные форматы. Например, автору известно о таком, как latex2html. Никогда этих конверторов не пробовал, но видел результаты их деятельности --- ужасно, но читать можно. Еще подозреваю, что для их работы требуется все же установить TeX --- если это так, то зачем они вообще нужны?

[Евгений Цымбалюк] советует начинать с самого простого из них, доступного по адресу: http://hutchinson.belmont.ma.us/tth/tth-noncom/download.html. Он пишет, что на CTAN есть и другие пакеты, но они сложнее в настройке.

Пользователям Micro$oft Widows :-) можно использовать версию TeX для M$-DOG. Автору довелось воспользоваться двумя версиями, одна из которых работает под расширителем DOS4GW и называется texas (вторая --- sbtex, пользуется только стандартной DOS-памятью, но ее можно полноценнее настроить на русский язык). Хорошим выбором будет texas (или другие, которые используют расширенную память), так как русификация обычно требует много памяти. [Замечание: когда texas был опробован под Windows NT 4.0, он частенько "сыпался" (правда, неизвестно, виноват ли в этом сам TeX, DOS-расширитель или же виндовый VDM), так что в настоящий момент, увы, нельзя рекомендовать его безоговорочно.]

Лучшая из виденных смотрелка dvi-файлов называется DVIWIN v.2.7, автор Hippocrates Sendoukas, версия от June 15, 1993. Она же и печатает на любом принтере через виндовый драйвер.

Помимо вышеупомянутых DOS-версий TeX, которые довелось опробовать лично, читатели посоветовали упомянуть еще такие:

emtex

[Алексей Абрамычев] на том же CTANe лежит emTeX в директории systems/dos.

[Евгений Цымбалюк] самый мощный и серьезный пакет под DOS --- emtex. Когда-то я имел две дискетки 1.2 МB где была вся система, незапакованная.

MiKTeX

[Алексей Абрамычев] в директории CTAN systems/win32/MikTeX --- полный комплект для Вынь-95-98 (или скока там их еще будет...). MiKTeX содержит в себе инсталлятор, так что проблем с установкой не будет --- все установится само, он же устанавливает свою смотрелку YAP, по свойствам аналогичную dviWin, только вроде не умеющую крутить таблицы...

В свое время я перешел от EmTeX к MikTeX по следующим причинам:

Там же лежит шароварная оболочка WinEdit, заточенная как раз под МиКТеХ, из нее можно как компилировать, так и смотреть (правда, работает только 30 дней). WinEdit --- ну, это от лени, пишу документы я все равно в MultiEdite, поскольку клавиатурные комбинации давно забиты, и многие из них под Вин просто не работают. А WinEdit использую только для отладки и спеллинга (там сразу красненьким плохие слова подчеркиваются).

Ссылочка непосредственно на автора МикТеХа: www.snafu.de/~cschenk/miktex

В составе GNU/Linux стандартным является пакет teTeX, в последних версиях русификация не требует дополнительных усилий.

Существуют системы, где сама работа идет по принципу WYSIWYG (What You See Is What You Get, что вижу на экране, то будет напечатано принтером), как в MS Word или Word Perfect, но результат записывается в формате LaTeX. Для Windows популярен Scientific Word, а в GNU/Linux используют LyX.

3. Установка

В основном, здесь приводятся пояснения по испробованным DOG-версиям, поскольку в GNU/Linux (да и в более новых версиях для Windows) все уже вообще-то говоря сделано автоматически, хотя и тем, кто сидит в GNU/Linux, стоит прочитать этот раздел, так как в нем будет разъясняться назначение форматов файлов и пр.

Виденные автором версии TeX для M$-DOG распространялись в архиве с уже заданной структурой каталогов, так что их установка сводится к распаковке архива. Например, получается такая структура подкаталогов:

\TeX+
    |
    +FONTTFMS
    |
    +FORMATS.BIG
    |
    +INPUTS
Для программы sbtex нужно запустить sb38set.exe, которому требуется указать, на каком логическом диске установлена программа и в каком каталоге искать некоторые файлы. Эта информация прописывается прямо в исполняемый файл (туповато, но уж так сделали).

Подкаталоги следующие:

FONTTFMS --- хранит описания шрифтов *.tfm (TeX Font Metrics). Эти файлы имеют имена вида cmr10.tfm, что значит шрифт начертания "Computer Modern Roman", размером 10 pt. Для каждого размера шрифта в TeX, вообще говоря, свой .tfm: cmr5.tfm, cmr7.tfm и т.п. В отличие от виндовых True Type, шрифты TeX масштабировать в несколько раз не принято (хотя и возможно чисто технически). Это сделано потому, что для одного и того же начертания в размерах 5 pt и 10 pt полагается для улучшения читаемости изменять пропорции элементов букв, т.е. это вообще говоря, разные шрифты (небольшие коэффициенты масштабирования, тем не менее, применяются широко, скажем 1.2 и 1.44). Кроме того, графическое изображение символов в .tfm-файлах не сохраняется, для этого служат файлы GF и PK (см. ниже).

FORMATS.BIG ("BIG" он потому, что "big TeX for i386", т.е. с расширенной памятью) --- хранит "форматные" файлы. Что такое форматный файл? Дело в том, что в TeX принято создавать "стили" документов --- наборы макроопределений, которые могут иметь большой объем. Например, пакет PiCTeX, позволяющий рисовать простенькие картинки, весит аж 120K текста. Так вот, чтобы при обработке очередного документа не приходилось каждый раз транслировать макросы во внутреннее представление, делается "форматный файл". По сути, это просто дамп памяти TeX после того, как были проглочены определенные файлы. (И поэтому ОН НЕ ПЕРЕНОСИМ.)

ВАЖНО: при генерации форматного файла в него записывается информация о некоторых используемых шрифтах (так называемые preloaded fonts), Поэтому при повторной генерации шрифтов нужно обновить и форматы, использующие эти шрифты. (Если изменился только тип выводного устройства, например, со 180dpi на 600dpi (см. ниже), но не содержимое шрифта, то этого делать не надо, поскольку в форматный файл пишутся только "метрики шрифта", а при смене разрешения они остаются прежними).

При запуске TeX ему можно сказать, какой формат загрузить:

tex '&plain' ...

INPUTS --- в этом каталоге хранятся стандартные файлы .tex, такие, как, к примеру, стили (самый первый из них --- plain.tex).

Имена каталогов не фиксированы и могут задаваться в переменных окружения: ниже просто приводится кусок .bat-файла, который доводит конфигурацию "до ума" в момент запуска программы:

set TEXFORMATS=d:\tex\formats.big
set TEXPOOL=d:\tex\formats.big
set TEXFONTS=d:\tex\fonttfms
set TEXINPUTS=d:\tex\inputs
кроме того, позаботьтесь о том, чтобы расширитель dos4gw (или другой, если он вообще используется) был доступен через PATH. Переменная TEXPOOL указывает каталог, в котором расположен файл tex.pool (tex.poo в M$-DOG). В этом файле находятся символьные строки сообщений об ошибках.

В GNU/Linux все гораздо проще и сложнее. С одной стороны, установка происходит автоматически, а структура каталогов стандартизована (стандарт TDS, TeX Directory Structure, детали ищите в CTAN), но с другой --- когда что-то идет не так, гораздо сложнее найти причину. В настоящий момент у автора отсутствует достаточно продолжительный опыт в конфигурировании TeX под GNU/Linux, поэтому вам придется почитать документацию (сделана она там очень хорошо).

Генерация формата plain

По умолчанию TeX при старте должен загрузить какой-нибудь форматный файл. Если он его не находит, выдается сообщение об ошибке
I can't find the default format file!
Это значит, что TeX не может отыскать файл формата (он зовется plain.fmt в двух из трех опробованных версий). Поищите его. Например, под GNU/Linux он лежит здесь:
/usr/lib/texmf/texmf/web2c/plain.fmt
Вообще-то структура каталогов TeX стандартизована, но именно место для форматных файлов определено как системно-зависимое. Посмотрите manpage--- там оно может указываться, а еще у TeX'а должны быть переменные окружения и если формат не находится, нужно задать путь к нему в TEXFORMATS. Кстати, в этой же manpage сказано, что теперь по умолчанию загружается не plain.fmt, а формат с таким именем, по которому программа была вызвана (т.е. argv[0]), так что искать надо уже не plain.fmt, а к примеру, tex.fmt. Более старые системы (к примеру, обе упомянутые DOS-версии) этого не делают.

Если же форматов вообще нет, можно попробовать его изготовить:

если есть

/TeX/INPUTS/plain.tex (/usr/lib/texmf/texmf/tex/plain/base/plain.tex)
то это делается так (sbtex):
initex '\input plain.tex \dump \end'

в другой версии нет initex (texas):

tex -i '\input plain.tex \dump \end'
после этого появится два файла: plain.fmt и plain.log. Если в логе нет ошибок, а только сообщения о загруженных шрифтах и т.д., то формат готов. В опробованных версиях он создается в текущем каталоге и его руками можно переложить по назначению. Может случиться, что не будет найден файл tex.pool --- есть переменная TEXPOOL.

В дальнейшем можно явно указать, какой формат загрузить при вызове TeX:

tex '&plain' ...

Настройка METAFONT и генерация шрифтов

Как уже было упомянуто, шрифты TeX хранят размеры литер и их начертания порознь. Файлы начертаний символов шрифта имеют формат GF и PK, т.е. "Generic Font" и "PacKed font". По умолчанию, GF-файлы имеют имена, совпадающие с именем tfm-файла, и расширение, указывающее разрешающую способность устройства, для которого сгенерирован шрифт. Да, именно так! Шрифты TeX генерируются для конкретного разрешения на конкретном устройстве. Выглядит это, конечно, странновато, но подумайте, что различные устройства вывода имеют свои особенности, к примеру, у одних точка (пиксел) квадратная, у других --- нет (да еще и aspect ratio различается) и т.п. Все эти особенности и учитываются при генерации шрифта. Честно говоря, на мой взгляд, это единственный "недостаток" TeX, который досаждает при активной работе с различными размерами шрифтов. Но! Лично мне пришлось столкнуться с проблемой масштабирования шрифтов один раз в течение двух лет постоянной работы в TeX, а в GNU/Linux генерация нужного шрифта уже делается автоматически.

На странице Бориса Тоботраса рассматривается способ использования в TeX шрифтов PostScript.

Система генерации шрифтов называется METAFONT. В M$-DOG версии (из дистрибутива sbtex) при установке получается такая структура каталогов:

MF-+
   |
   +-MFBASES
   |
   +-MFINPUTS
Назначение этих каталогов сходно с аналогами TeX. Настройка системы сводится к запуску программы sbmfset.exe, установка переменных окружения не обязательна (список переменных см. прилагаемую документацию).

У программы mf (основная утилита системы) также существуют загружаемые дампы памяти, называемые "базами" (например, у TeX --- plain.fmt, у METAFONT --- plain.base), среди которых особо выделим cm.base --- основу генерации шрифтов Computer Modern.

Создание базы делается так:

inimf plain input local dump
Команда "input local" по-видимому, специфична именно для sbmf. (Не то, чтобы ее нельзя было реализовать в другой системе, просто там нет по умолчанию исходника local.mf.)

Полученный "plain.bas" ("plain.base") переносится в MFBASES, лог можно удалить.

Сгенерировать шрифт, к примеру, cmr10, можно следующей командой:

mf '&cm' 'mode:=cdvi; mag:=magstep(0);input cmr10'
Расшифруем написанное. Первый параметр имеет то же назначение, что и для TeX --- имя базы. Далее идет "имя устройства". Как уже было сказано, METAFONT учитывает в своей работе особенности конкретных физических устройств, для чего в файле modes.mf хранится множество их описаний. Устройство cdvi, по-видимому, нестандартно, оно определяется дополнительно в файле local.mf. В GNU/Linux его нет. Скорее всего, наиболее безопасно сказать "mode:=localfont", устройство "localfont" имеется как в DOG, так и в GNU/Linux, но его истинное значение может быть различно. Например, в DOG (sbmf) это imagen, в GNU/Linux --- ljfour. Следующий параметр определяет масштабирование шрифта (в TeX и METAFONT определены стандартные коэффициенты масштабирования, называемые magstep(0)--magstep(6), образующие геометрическую прогрессию: 1, 1.2, 1.44 и т.д., естественно, также имеется способ задания произвольного масштаба.). Наконец, последнее определяет имя генерируемого шрифта.

Если программа отработает без ошибок, то она выведет на экран поочередно все символы шрифта (если найдет поддержку графики), а в log-файл --- текстовые сообщения об этом же. Для шрифта создается два файла: метрическая информация о шрифте (.tfm) и графический образ символов --- GF-файл, который имеет имя вида: cmr10.180, если ваше устройство вывода поддерживает 180 точек на дюйм. С помощью стандартной программы GFtoPK можно упаковать его:

gftopk cmr10.180
и получить из него cmr10.180pk в GNU/Linux либо cmr10.pk в M$-DOG.

Следует отметить такую деталь. При генерации dvi-файла TeX записывает в него контрольную сумму используемых шрифтов, а средства вывода dvi (программы просмотра и печати) сравнивают ее со шрифтами, доступными в момент вывода. Таким образом гарантируется полное сходство результатов работы. Поэтому, если на вас обрушивается поток сообщений о несоответствии шрифтов, либо игнорируйте их (если вы ТОЧНО знаете, что ваши шрифты являются надмножеством использованных в dvi-файле), либо замените шрифты, либо отформатируйте проблемный документ на своей машине (при этом будьте готовы, что результат может существенно отличаться от исходного).

Настройка DVI viewer'а

DVIWIN также устанавливается распаковкой архива в каталог, допустим, DVIEW. Далее нужно ее настроить. Основной пункт настройки --- указание пути к файлам шрифтов. В M$-DOG принято распределять шрифты по каталогам. Например, пусть они лежат в каталоге "DVIEW\PXL\". Значит, шрифты под разрешение 180 нужно собрать в "DVIEW\PXL\180\", и т.д. Настройка DVIWIN сводится к тому, что нужно определить в "Options/Custom Resolutions" разрешение вашего принтера, если его нет среди стандартных, и монитора (лучше будет не вычислять его точно, поскольку получите очень мелкий шрифт, а взять "с запасом", так, автор использует 132dpi при истинном разрешении монитора 96dpi). После этого нужно задать "Options/Font Directory" (к примеру, "d:\dview\pxl\$r"). Эта строка при поиске шрифта используется так: вместо $r подставляется разрешение и файл шрифта ищется в этом каталоге. (Имя каталогов не обязательно должно быть исключительно числовым, можно и так: "d:\dview\pxl\dpi$r" для имен вида "dpi180").

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

4. Запуск

Проверку корректности установки будем делать на английском тексте, чтобы не зависеть от деталей неизвестно какой русификации (если она вообще есть в вашей системе).

Попробуйте просто запустить TeX:

tex
при этом должно появиться сообщение типа:
This is TeX, C Version 3.14t3
и приглашение ко вводу:
**
это говорит о том, что система готова исполнять команды. Например, команду "пустая операция":
**\relax
все команды обычно начинаются символом '\' (в некоторых форматах это не так), поэтому в именах файлов, даже в M$-DOG, принято использовать как разделитель каталогов '/'. Приглашение при этом изменится:
*
Когда приглашение имеет вид '**', это значит, что строка, начинающаяся '\' будет интерпретирована как команда, в противном случае считается, что введено имя файла, из которого нужно считать текст документа. То есть, можно ввести
** file
и TeX попытается найти файл file.tex. Вместо этого можно задать
**\input file.txt
и будет предпринята попытка загрузить file.txt (расширение указано явно). Отмечу для *nix'истов: можно указывать путь, но не используя символ '~' (он имеет специальное значение в формате plain TeX, хотя, вообще говоря, в других форматах его применение в имени файла может быть вполне допустимым).

Загруженный файл интерпретируется, как если бы он был введен с клавиатуры, а по его окончании TeX вновь переходит в командный режим и выдает приглашение и мы можем продолжать ввод. Но не будем пока рассматривать этого, а просто введем текст с клавиатуры:

This is TeX, C Version 3.14t3
**\relax

*Hello, \TeX.

*This is the first paragraph.

*
(Please type a command or say `\end')
*This is the second.

*
(Please type a command or say `\end')
*\bye

Из этого примера видно, что простой текст вводится без лишних трудностей: он набирается абзац за абзацем, разделенными пустой строкой. Конец ввода обозначается командным словом '\bye' (можно использовать '\end', но '\bye' предпочтительнее, так как автоматически делает некоторые завершающие операции). Командное слово \TeX выводит логотип TeX'а.

Теперь то же самое со вводом из файла:

first.tex:
Hello, \TeX.
This is the first paragraph.

This is the second.

\bye
Командная строка может быть такой:
tex first.tex
или такой:
tex "\batchmode\input first.tex"
Команда "\batchmode" приводит к тому, что TeX не будет останавливаться на каждой встреченной ошибке, ожидая ваших команд по ее исправлению. Вообще говоря, содержимое командной строки просто интерпретируется TeX'ом как будто оно было введено с клавиатуры, и там могло бы быть все, что угодно, например:
tex "Hello, \TeX. This is the 1st paragraph.\par This is the 2nd.\bye"

Если все прошло, как надо, мы получим два выходных файла: texput.dvi и texput.log. В первом содержится отформатированный текст, а во втором---протокол, в котором фиксируются наши действия и реакция TeX'а. В случае, когда введенный текст содержит ошибки, они будут выведены сюда же. Если ваша система не поддерживает русской символьной таблицы, то в логе для каждого русского символа :-( появится отдельное сообщение, что шрифт "..." не содержит символа "..." Кроме сообщений об ошибках, протоколируются самые различные факты из жизни TeX'а: например, имена вводимых файлов (немаловажно, если документ составной), номера страниц, а также сообщения о переполненных и недополненных боксах (overfull and underfull [hv]boxes), где hbox и vbox соответственно "горизонтальный" и "вертикальный боксы". Эти сообщения нефатальны, их смысл в том, что не удается отыскать удачное разбиение текста на строки/страницы. В TeX принято правило, что если не удается сделать это удачно (например, TeX никогда, если не приказать ему это явно, не пытается растянуть промежутки между словами слишком сильно), то конфликтное слово не разделяется и попросту вылазит на правое поле листа. Сообщение об этом записывается в протокол, а на полях, рядом с местом аварии, ставится черный прямоугольник, отмечающий его. (Английское название --- "slug"). Имеется возможность как гибко управлять автоматическими правилами разбиения, так и задавать свои точки разрыва строки, переноса слова и т.п. Очень существенным для получения красивого вывода является хорошая таблица переносов. Следует с сожалением отметить, что использованная автором зачастую не действует, поэтому при форматировании Кнута, в частности, вы получите множество переполнений. Они не исправлялись вручную, поскольку возможно, что ваша таблица окажется более полной. На всякий случай, вот вкратце способ лечения неправильного переноса: найти в тексте проблемное слово и прямо в нем поставить в нужном месте точку(и) переноса:

обо\-роноспособ\-ность
(Это возможные точки переноса).

Существует и другой способ, который более предпочтителен. С его помощью можно как задать переносы в словах, которые не определяются по имеющейся таблице автоматически, так и задать слова-исключения, если стандартный метод дает неправильное разбиение. (Самые известные случаи становятся анекдотами: Дональд Кнут упоминает в [2], что одна из систем автоматического форматирования текстов умудрилась перенести слово "God", а другая --- "weeknights", но совсем не там, где нужно :).

Вот как это делается. В начале текста задается словарь исключений:

\hyphenation{frame-work ef-fi-ciency Lo-mo-no-sov}
Далее TeX будет использовать этот словарь для поиска точек разрыва слов до того, как обратится к общей таблице. Регистр букв роли не играет. Слова при сопоставлении должны точно совпасть, поэтому придется вводить несколько требуемых форм. (Общая таблица работает не со словами целиком, а с их фрагментами, так что однокоренные слова она переносит "автоматически", в отличие от словаря исключений.)

"Родным" языком TeX является, конечно, английский, но автор спроектировал его с учетом нужд и других языков. Как писал Дональд Кнут в предисловии к русскому переводу "The TeX book", он всегда помнил о том, что "тех"---важное русское слово. Чтобы научить TeX символам кириллицы и правилам переноса, принятым у нас, существуют различные макропакеты "локализации". В качестве примера популярных локализаций можно назвать babel и LaTeX2e. Эти пакеты поддерживают множество различных языков и допускают настройку на новые.

К сожалению, идеального по всем параметрам выбора сделать не удается. Правила ввода текста существенно меняются от пакета к пакету. Например, вместо русских букв в AmSTeX употребляются командные слова, другие требуют явного переключения между языками и т.п. Лучшие позволяют вводить русский текст без каких-либо ухищрений. Вот пример набора текста [Алексей Абрамычев]:

\documentclass[12pt,a4paper]{article}
% "Раскомментируйте" свою кодировку.
% \usepackage[cp1251]{inputenc}
% \usepackage[koi8-r]{inputenc}
\usepackage[russian]{babel}
\begin{document}
Папа у Васи силен в математике, учится папа у Васи весь год.
Навуходоносор.
\end{document}
Этот пример пользователи GNU/Linux могут опробовать в своей системе, выдав команду:
latex example.tex
(конечно, если файл с текстом примера называется example.tex.)

По историческим причинам, для оцифровки Кнута использовался иной пакет русификации, описанный в следующем разделе.

5. Русификация

Русификация, используемая при оцифровке "Искусства программирования", может быть имитирована самым простым способом:

  1. Берется обычный формат plain.tex и в нем все стандартные шрифты заменяются на другие, аналогичные по начертанию, но с русскими символами. Т.е. для шрифта cmr10 нужно подыскать некий романский шрифт размером 10pt, в котором будут русские литеры. (Ясно, что лучше всего такой, верхняя половина кодовой таблицы которого точно совпадает по начертанию со шрифтом cmr10, чтобы английские тексты воспроизводились правильно.) Какие именно --- что найдете. Были использованы русские шрифты N.Glonti, имеющиеся в поставке Slackware 2.0.1. Модифицированный формат сохраняется под другим именем, скажем, rplain.tex.
  2. Генерируется форматный файл:
    tex -i "rplain \input rus \input ruhyph \dump \end"
    
  3. Далее он используется:
    tex '&rplain' ...
    

Первый из дополнительных файлов, rus.tex, содержит нечто вроде

\catcode`\^^80=11 \lccode`\^^80="A0 % А
\catcode`\^^81=11 \lccode`\^^81="A1 % Б
...
\catcode`\^^9f=11 \lccode`\^^9f="EF % Я
\catcode`\^^a0=11 \lccode`\^^a0="A0 \uccode`\^^a0="80 % а
\catcode`\^^a1=11 \lccode`\^^a1="A1 \uccode`\^^a1="81 % б
...
\catcode`\^^ef=11 \lccode`\^^ef="EF \uccode`\^^ef="9F % я
т.е., просто указывает TeX'у, что есть русские буквы с такими кодами (catcode), и для каждой задается соответствующая строчная (lccode) либо прописная (uccode) буква. Обязательным является задание catcode, прочее можно опустить, но при этом командные слова \uppercase и \lowercase работать не будут, а также возникнут проблемы с переносами. Набор текста ведется без какого-либо переключения языков, русские буквы допустимо использовать в именах командных слов. Эта русификация пользуется кодировкой 866, как в использованных шрифтах, вы можете сделать, как вам нужно.

Второй файл, ruhyph.tex, был взят из поставки Русский Linux "Красная Шапочка", 5.0. В нем заданы таблицы переноса для русских слов. К сожалению, многие слова не переносятся. Для облегчения поисков приведем размер и дату файла: 32345 байт, датирован 16-м ноября 1997.

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

Следует также отметить, что буквам присваивается "естественная" лексическая категория "11" (буква), а не "13" (активный символ), что положительно влияет на быстродействие, а также позволяет определять русские имена командных слов, чего не умеют некоторые другие локализации.

Литература

  1. The Hacker's Dictionary, rev. 2.9.11 ed. by Eric Raymond.
  2. Д. Кнут. "Все про TeX."

Любая конструктивная критика будет с благодарностью рассмотрена.

© 1999 Сергей Короп, <svk@lib.ru>

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

Verbatim copying and distribution of this entire article is permitted in any medium, provided this notice is preserved.


Популярность: 24, Last-modified: Tue, 09 Nov 1999 18:24:49 GMT