Опубликован: 07.02.2007 | Доступ: свободный | Студентов: 4012 / 1340 | Оценка: 4.56 / 3.95 | Длительность: 23:09:00
Специальности: Художник
Лекция 1:

Элементарное введение

Обработка ошибок

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

Все сообщения, которые TeX выдает на экран в процессе трансляции исходного текста, все ваши ответы на эти сообщения, вообще все, что в процессе трансляции появляется на экране, записывается в специальный файл — протокол трансляции. Обычно файл-протокол имеет то же имя, что обрабатываемый TeX'ом файл, и расширение .log, поэтому он называется .log-файлом. Когда трансляция будет завершена, вы можете в спокойной обстановке просмотреть . log - файл и проанализировать, что произошло.

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

Чтобы понять, что делать с этими сообщениями, проведем эксперимент. Наберите следующий файл test.tex из 14 строк, в котором умышленно допущено несколько ошибок (только не сделайте лишних ошибок при наборе):

\documentclass{article}
\begin{document}
По-английски специалист по \TeX'у называется \TeXpert.
Следующая строка будет центрирована:
\begin{center}
Строка в центре.
\end{center}
А теперь попробуем формулы, например, такие,
как $(2x+1)^3=5x$. И еще выключную формулу:
$$\frac{25}{36}=\lrft(\frac{1}
   {1+\frac{1}{5}}\right)^2.
$$
И последняя формула: $\sqrt{4 = 2$.
\end{document}

Теперь обработайте наш файл test.tex с помощью LaTeX'а. Вскоре вы увидите на экране вот что:

! Undefined control sequence.
l.3 ...алист по TeX'у называется TeXpert
                                          .
?

Первая строка TeX'овского сообщения об ошибке всегда начинается с восклицательного знака, после которого идет краткое указание на характер ошибки (в нашем случае речь идет о том, что обнаружена несуществующая команда). Второй обязательный элемент сообщения об ошибке - строка, начинающаяся с l., после которой идет номер строки исходного текста с ошибкой (в нашем случае 3). После номера на экран выдается сама эта строка или та ее часть, которую TeX успел прочесть к моменту обнаружения ошибки. В нашем случае текст был прочитан до несуществующей команды "TeXpert" включительно (эта "команда" получилась потому, что мы забыли оставить пробел, ограничивающий имя команды \TeX, на которой TeX и прервал чтение файла. Наконец, третий основной элемент сообщения об ошибке — строка, состоящая из одного вопросительного знака. Этот вопросительный знак представляет собой "приглашение" пользователю: вам теперь предстоит на сообщение об ошибке отреагировать. Рассмотрим возможные реакции.

Во-первых, всегда можно нажать клавишу x или X (латинскую) и после этого "ввод" ("Enter"): тогда трансляция немедленно завершится. Может быть, именно так стоит поступать начинающему TeXнику, чтобы разбираться с ошибками по очереди. Но можно и просто нажать клавишу "ввод": при этом TeX исправит обнаруженную ошибку "по своему разумению" и продолжит трансляцию. Догадаться о том, что ошибка произошла именно из-за забытого пробела, программа, естественно, не может: исправление будет заключаться попросту в том, что будет проигнорирована несуществующая команда "TeXpert" (так что из печатного текста будет неясно, как по-английски называют специалиста по TeX'у). Нажимать "ввод" в ответ на сообщения об ошибках — довольно распространенная на практике реакция. Если вы твердо намерены нажимать на "ввод" в ответ на все сообщения об ошибках, то можно в ответ на первое же из этих сообщений нажать на "S" или "s", а затем на " ввод"; при обнаружении дальнейших ошибок трансляция прерываться не будет (TeX будет обрабатывать ошибки так, как если бы вы все время нажимали на "ввод"), по экрану пронесутся сообщения об ошибках, а затем вы сможете их изучить, просмотрев log-файл.

Итак, трансляция продолжается. Следующая остановка будет с таким сообщением:

! LaTeX Error: \begin{centrr} on input line 5
                                       ended by \end{centrr}.
See the LaTeX manual or LaTeX Companion for explanation.
Type  H   for immediate help.
 ...
l.7 \end{centrr}

?

Это сообщение об ошибке начинается со слов LaTeX Error. Такого рода сообщения не встроены в TeX, а создаются LaTeX'ом. В них также присутствуют строка, начинающаяся с !, строка, начинающаяся с l., и приглашение - вопросительный знак. Есть на экране и объяснение ошибки: из-за опечатки ( centrr вместо center) получилось, что команда \begin, открывающая окружение, не соответствует команде \end, закрывающей его : имена окружений при открывающем \begin и закрывающем \end должны совпадать). Так или иначе, давайте снова нажмем на "ввод"; тут же мы увидим вот что:

! Missing inserted.

                   ^
l.9 как (2x+1)^
               3=5x . И еще выключную формулу:

На сей раз мы забыли знак доллара, открывающий формулу; TeX , однако, понял это не сразу, а лишь наткнувшись на символ "^", который вне формул таким образом использовать нельзя. Нажмем "ввод": TeX исправит положение, вставив знак доллара непосредственно перед знаком "^", и пойдет дальше (все такие исправления не вносятся в ваш файл, а происходят только в оперативной памяти компьютера). На печати формула будет иметь странный вид, поскольку "(2x+1)" будет набрано прямым шрифтом, а "5x" - курсивным, но TeX сможет продолжить трансляцию (и искать дальнейшие ошибки).

Следующая ошибка будет уже знакомого нам типа, только на сей раз несуществующая команда получается не из-за забытого пробела, а из-за опечатки ( "\lrft" вместо \left ):

! Undefined control sequence.
l.10 $$\frac{25}{36}=\lrft
                          (\frac{1}
?

Нажав очередной раз на "ввод", мы немедленно увидим сообщение еще об одной ошибке:

! Extra \right.
l.11    {1+\frac{1}{5}}\right)
                              ^2
?

Откуда это, ведь в строке 11 у нас все правильно?! Оказывается, эта ошибка была наведена предыдущей. В самом деле, перед этим TeX проигнорировал " команду" "\lrft", набранную вместо \left (именно так TeX и делает, если в ответ на ошибку "несуществующая команда" нажать на клавишу " ввод"), так что команду \left TeX вообще не видел; теперь выходит так, что в тексте, который видит TeX , присутствует \right без \left, что запрещено . Ввиду возможности появления таких " наведенных" ошибок, исправлять ошибки надо, начиная с самой первой; не исключено, что при ее исправлении часть последующих пропадет сама собой.

Нажмем на "ввод" и на этот раз; TeX опять по-свойски исправит ошибку, и вскоре вы увидите такое сообщение:

! Missing } inserted.
l.13 И последняя формула:$\sqrt{4 = 2$.
?

На сей раз ошибка в том, что мы забыли закрывающую фигурную скобку. Нажмем на "ввод"; TeX вставит недостающую скобку (в результате чего на печати получится забавная формула \sqrt{4=2}, соответствующая тексту " \sqrt{4=2} ": пропажа закрывающей скобки обнаружилась не там, где мы ее забыли, а там, где ее отсутствие вошло в противоречие с синтаксическими правилами TeX'а), после чего трансляция наконец завершится. Кстати, цифра 1 в квадратных скобках, появляющаяся при этом на экране, означает, что TeX сверстал страницу номер 1 и записал ее содержимое в dvi-файл. Теперь можно и просмотреть, как будет выглядеть наш текст на печати.

Нина Казачек
Нина Казачек
Василий Майоров
Василий Майоров