Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 91
Текст из файла (страница 91)
Данное приложение содержит перечень возможныхсообщений об ошибках. Строго говоря, этот перечень не охватывает все возможные кризисные ситуации, поскольку единственная ошибка может запутать компилятор настолько, что он выдаст множество сообщений об ошибках, которых насамом деле нет. Отсюда следует правило № 1: исправлять ошибки следует с самойпервой. Разумеется, всякое правило имеет исключения, но каждое исключениетолько подтверждает правило. Когда компилятор записывает в выходной файлочередную готовую страницу текста, он обычно выходит из нокдауна, вызванногопредыдущими ошибками, так что следующее диагностическое сообщение скореевсего указывает на ошибку, действительно существующую.В особо сложных случаях компилятор может не распознать причину ошибки.
Мы не рассматриваем такие «мистические» ошибки детально, ограничиваясь лишь общими, но эффективными рекомендациями по их устранению. Мытакже не перечисляем сообщения об ошибках, которые могут генерировать многочисленные пакеты, описанные в нашей книге. Наиболее типичные кризисныеситуации, связанные с работой пакетов, рассмотрены в соответствующих главахкниги.B.1.Установка таблицы переносовОдной из проблем, с которой сталкивается пользователь, приступивший к работе с системой LATEX, является видимое отсутствие переносов в текстах на русском языке.
Хотя поддержка русского языка с 1999 года является обязательнойсоставной частью любой версии LATEX, по умолчанию ни русские шрифты, ниалгоритм переноса русских слов не устанавливаются. После завершения стандартной процедуры установки необходимо предпринять ещё ряд шагов, чтобыиметь возможность работать с русскими текстами.1. Если в откомпилированном документе полностью отсутствуют переносыв русских словах, то прежде всего следует проверить, была ли при установкесистемы LATEX подключена таблица переносов русского языка.
В начале компиляции любого документа LATEX выводит на экран монитора и записывает в файлB.1. Установка таблицы переносов429Рис. B.1. Выбор таблицы переносовпротокола список доступных таблиц переносов:Babel <v3.7h> and hyphenation patterns for american, french,german, ngerman, russian, nohyphenation, loaded.Если слово russian присутствует, как в данном примере, с таблицей переносоввсё в порядке. Если же его нет, нужно перегенерировать формат LATEX, предварительно добавив русский язык к списку поддерживаемых языков. На рисункеB.1 показана вкладка Languages мастера настройки MiKTeX Options с отмеченным русским языком. Аналогичные средства настройки имеются в других реализациях системы LATEX.
Для полной уверенности нужно проверить, чтофайл ruhyph.tex с таблицей переносов русского языка физически присутствуетна жёстком диске компьютера. Это можно сделать непосредственно с вкладки430Приложение B. ОшибкиLanguages, изображённой на рисунке B.1, если нажать кнопку Edit. Если файлотсутствует, его надо установить c помощью мастера установки пакетов MiKTeXPackage Manager.
Затем необходимо перегенерировать формат LATEX. В мастере управления MiKTeX Options для этого можно нажать кнопку Update Nowна вкладке General.2. Если с таблицей переносов всё в порядке, а русский текст правильно читается в откомпилированном документе, то алгоритм переносов должен работатьи чётко указать причину, почему он мог бы не действовать, заочно не представляется возможным. Можно порекомендовать проверить наличие декларации\usepackage[russian]{babel}в преамбуле входного файла.3. Если кодировка исходного текста указана неправильно, это может привестик неправильной расстановке переносов.
Кодировка исходного текста указывается в необязательном аргументе пакета inputenc. Однако неправильная кодировка имеет более заметный визуальный эффект: текст становится бессмысленным.Для текста, подготовленного в кодировке русских версий Windows, нужно загружать пакет inputenc с опцией cp1251:\usepackage[cp1251]{inputenc}Внутренняя кодировка русских шрифтов, которые загружает пакет babel с опцией russian, очень близка к кодовой странице cp1251.
Поэтому текст в печатномдокументе будет читаться почти правильно, если пакет inputenc вообще не загружен. Отличие можно зафиксировать по букве ё — она будет отображена другимсимволом.4. Если русские буквы не отображаются вообще или заменены латинскими, всистеме отсутствуют русские шрифты для LATEX’а. В таком случае необходимопрежде всего убедиться, что установлены кириллические шрифты семейства LH. Если установлены и шрифты LH, и шрифты CM-Super, пропускирусских букв в откомпилированном документе обычно означают, что шрифтыCM-Super установлены неправильно. В этом случае следует обратиться к документации, сопровождающей эти шрифты.5. Видимая деградация качества русских шрифтов в документах форматаPDF или PostScript также означает, что шрифты CM-Super не установлены илиустановлены неправильно.B.2.Как искать ошибкиВ сообщениях об ошибках указывается номер строки, где обнаружена ошибка.Например, l.50 в строке индикации ошибки (раздел 1.13) означает, что ошибкаобнаружена, когда обрабатывалась пятидесятая строка от начала файла.
Есливесь исходный текст записан в одном входном файле, тогда информация о номереB.2. Как искать ошибки431строки однозначно указывает место, где, как полагает компилятор, находится источник проблем. Однако если исходный текст разбит на несколько файлов с помощью команд, описанных в разделе 3.8, необходимо ещё установить, в какомфайле обнаружена ошибка. Для этого компилятор выводит на экран (и записывает в файл протокола с расширением log) имена обрабатываемых файлов.Всякий раз, когда начинается обработка нового файла, на экран выводится левая круглая скобка «(», за которой следует имя файла. Дойдя до конца файлаили встретив команду \endinput, компилятор выводит «)».
Предположим, чтокомпилятор вывел следующее сообщение:(C:\My Documents\manual.tex [1] [2] [3] (C:\My Documents\ch1.tex [4][5]) [6]! LaTeX Error: Environment pictre undefined.See the LaTeX manual or LaTeX Companion for explanation.Type H <return> for immediate help....l.321 \begin{pictre}(100,100)?Первой левой круглой скобкой компилятор извещает, что начал обработку файла manual.tex в каталоге My Documents на диске C. После вывода первых трёхстраниц, номера которых заключены в квадратные скобки, он перешёл к обработке файла ch1.tex. Такой переход случается, если корневой файл manual.texсодержит команду \input{ch1} или \include{ch1} (раздел 3.8).
После выводаещё двух страниц с номерами 4 и 5 компилятор успешно закончил обработкуэтого файла и вернулся к файлу manual.tex. А вот после вывода ещё однойстраницы с номером 6 он обнаружил ошибку в строке 321. Она находится в файле manual.tex. Вслед за номером ошибочной строки компилятор печатает наэкране (и записывает в файл протокола) её содержимое в виде двух строк, причём первая строка заканчивается ошибочной командой. В нашем примере строкас ошибкой во входном файле выглядит как\begin{pictre}(100,100)Обнаружив ошибку, компилятор печатает в конце сообщения знак вопроса и приостанавливает работу, ожидая реакции пользователя. В этот момент можно проигнорировать ошибку, нажав клавишу Enter, чтобы попробовать обнаружитьдругие ошибки.
Однако одна действительная ошибка способна вызвать множество других ошибок, так как одна команда LATEX’a состоит из множества командTEX’a. Если ошибок много, можно при очередной остановке ввести с клавиатурыqEnter, чтобы затем изучить все сообщения об ошибках (они будут записаныв файл протокола, но не будут выводиться на экран). Можно также прекратитькомпиляцию, введя xEnter. В нашем примере внимательное изучение сообщения о первой ошибке в строке 321 позволяет легко обнаружить причину ошибки:432Приложение B. Ошибкивместо несуществующей процедуры pictre должно быть picture. Такую ошибкулегко поправить, нажав клавиши iEnter, и на последующее приглашение\insert>ввести исправленную команду\insert>\begin{picture}Это позволит избежать последующих наведённых ошибок, но затем всё равнонеобходимо исправить ошибку во входном файле с помощью текстового редактора.
Если ошибку не удаётся легко локализовать в исходном тексте документа,бывает полезно просмотреть результат компиляции в окне браузера.Все ошибки можно разделить на две группы: ошибки LATEX’а и ошибки TEX’а.В приведённом выше примере зафиксирована ошибка LATEX’а, на что указываютслова «LaTeX error» в сообщении об ошибке. Далее в двух строках следует рекомендация ещё раз почитать данную книгу или нажать клавиши HEnter, чтобыполучить на экране краткую справку об ошибке (но на английском языке). Затемследует строка индикации ошибки.
Она начинается с восклицательного знака исодержит текстовый признак ошибки. По этому признаку следует отыскиватьописание ошибки в перечне, приведённом в следующем разделе.Изменим строку 321 в нашем примере так, чтобы создать ошибку TEX’а:\began{picture}(100,100)В этом случае сообщение об ошибке не будет содержать упоминания о LATEX’е:! Undefined control sequence.l.321 \began{picture}(100,100)?Наконец, в особо тяжёлых случаях компилятор выводит звёздочку*и останавливается без какого-либо сообщения. Такое случается, если пропущенакоманда \end{document}, имеется ошибка в процедурах picture, figure или вообще что-то неладное происходит в файлах, которые компилятор читает или вкоторые что-то записывает.
Если такая ошибка случилась, то можно попытатьсяввести \stopEnter без предварительного iEnter или же абортировать программу стандартным для используемого компьютера способом (часто помогаетодновременное нажатие клавиш Ctrl и c). Поиск ошибки, вызвавшей *, бывает нелёгким делом. Как крайнюю меру можно рекомендовать многократныепопытки обработать «больной» файл по частям, постепенно отсекая его «здоровые» фрагменты. С этой целью можно перемещать команду \end{document} сконца входного файла в подозрительную область.
Часть текста во входном файле после команды \end{document} игнорируется компилятором, как если бы онадействительно была удалена.B.2. Как искать ошибки433Если поиск причины ошибки производит TEXперт (то есть знаток TEX’а),можно заставить LATEX выводить более подробную информацию об ошибке. Дляэтого необходимо назначить счётчикуerrorcontextlinesкакое-нибудь значение, большее чем -1, принятое по умолчанию. Например:\setcounter{errorcontextlines}{99}Можно также отключить реальную компиляцию и перевести LATEX в режим проверки исходного текста, загрузив пакет syntonly.