Элементарное введение
Обработка ошибок
В исходных текстах для 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} ": пропажа закрывающей скобки
обнаружилась не там, где мы ее забыли, а там, где ее отсутствие
вошло в противоречие с синтаксическими правилами
TeX'а), после чего трансляция наконец завершится. Кстати, цифра 1 в
квадратных скобках, появляющаяся при этом на экране, означает, что
TeX сверстал страницу номер 1 и записал ее содержимое в
dvi-файл. Теперь можно и просмотреть, как будет выглядеть наш текст
на печати.