Котельников И., Чеботаев П. LaTeX2e по-русски (1185906), страница 20
Текст из файла (страница 20)
Печатный документ3.7.2.Пакет xrПакет xr Дэвида Карлайла (Carlisle, David) из коллекции tools предоставляетвозможность делать ссылки на пронумерованные объекты из другого документа. Для этого необходимо загрузить пакет xr и затем (в преамбуле) с помощьюдекларации\externaldocument[prefix]{file}(xr)указать имя корневого файла file внешнего документа, где содержатся ссылки.Например, если этот файл называется third.tex, нужно написать\usepackage{xr}\externaldocument{third}После этого команды \ref и \pageref смогут напечатать ссылки на любой объект, помеченный командой \label как в текущем документе, так и в third.tex.Можно перечислить любое количество внешних документов.Чтобы исключить ситуацию, когда текущий и внешние документы содержаткоманды \label{key} с одинаковым ключом key, можно добавить необязательный аргумент prefix к \externaldocument и такой же префикс prefix к каждойссылке на внешний документ.
Если внести в пример выше следующее изменение\externaldocument[3rd-]{third}то ссылку на раздел в third.tex, помеченный при помощи \label{intr}, будетпечатать команда \ref{3rd-intr} (тогда как внутри third.tex по-прежнемуследует писать \ref{intr}).3.8.Большой документНа обработку большого документа на маломощном компьютере LATEX может затратить значительное время. При редактировании одного-двух разделов неразумно перерабатывать снова и снова весь документ, бо́льшая часть которого ужеуспешно сформатирована. Полезно разделить входной файл на несколько файловменьшего размера.
Вне зависимости от того, сколько используется входных файлов, один из них является корневым; это тот файл, чьё имя получает компиляторв качестве входного параметра.LATEX предлагает два способа разделения входного файла на части. Начнём сболее простого. Команда\input{file}приводит к тому, что содержимое файла file обрабатывается LATEX’ом точно также, как если бы оно было переписано в тот файл, который содержит эту командуи помещено точно в то место, где она стоит.
Имя файла file можно указать вместес расширением или без него; в последнем случае считывается файл file.tex. LATEX3.8. Большой документ87считывает вводимый файл от начала и до конца либо до первой встретившейсякоманды\endinputЕсли файл не найден, LATEX фиксирует ошибку и требует указать имя другогофайла. Команда \input может находиться в любом месте входного файла. Всвою очередь вставляемый файл также может содержать команды \input.Помимо удобства работы с небольшими файлами команда \input позволяетлегко включать один и тот же текст в несколько документов. Например, корневойфайл с текстом нашей книги в момент редактирования данной главы мог быиметь следующий вид\input{preamble}\begin{document}%\input{ch0}% \chapter{Вместо предисловия}%\input{ch1}% \chapter{Пособие для начинающих}%\input{ch2}% \chapter{Команды и процедуры}\input{ch3}% \chapter{Печатный документ}.
. .\end{document}Файл preamble.tex, который считывается первым, начинается с \documentclassи содержит все необходимые декларации. Его можно использовать в тестовых документах для проверки примеров, которые затем будут включены в книгу. Следующие три команды \input «закомментированы», что позволило «отключить»большой фрагмент текста, состоящий из введения и двух первых глав. Оставляя«незакомментированным» какой-либо один файл, можно быстро обработать почастям весь документ.Однако такой способ имеет недостаток, так как сбивает нумерацию страници делает невозможными ссылки на «отключенные» главы. Разумеется, после завершения редактирования всех глав можно убрать знаки комментария % и пропустить через компилятор весь текст целиком.Второй способ дробления входного файла позволяет поддерживать правильную нумерацию страниц и ссылок в ходе всей работы.
В этом случае вместо\input используется команда\include{file}а в преамбулу необходимо вставить декларацию\includeonly{file-list}где file-list содержит список файлов, перечисленных через запятую. Правилоименования файлов теперь иное: расширение имени файла опускается, а считывается файл с расширением tex; однако, если он не найден, компилятор нефиксирует ошибку, а печатает предупреждение.88Глава 3. Печатный документКоманда \include прежде всего вызывает переход на новую страницу (еслитекущая страница не пуста), а затем считывает файл file.
Если файла file нет всписке file-list, то команда \include просто вызывает переход на новую страницу(если текущая страница не пуста).В отличие от \input команда \include не должна стоять ранее команды\begin{document}, так как вызывает переход на новую страницу, а в преамбуле могут находиться только декларации, которые не производят реальных действий. Чтобы «отключить» какой-нибудь файл, теперь не нужно удалять команду \include с его именем; достаточно удалить имя файла из списка file-list.Тогда текст файла не будет считан, но вся информация об установленных в нёмметках, нумерации страниц, рисунков, таблиц и т. д. будет извлечена из файлаfile.aux, поэтому последующая часть входного файла будет обработана так, какесли бы file.tex был действительно считан и обработан. Файл file.aux обновляется всякий раз, когда файл file.tex обрабатывается LATEX’ом, то есть его имяприсутствует в списке файлов в \includeonly.
В следующем разделе рассказано,как вводить список файлов с клавиатуры во время обработки входного файла.Так как фрагмент текста, считываемый командой \include, всегда начинается с новой страницы, эту команду удобно использовать для включения глав,которые, как правило, начинаются с новой страницы.
Если обрабатывать файлы по порядку, в котором они перечислены в командах \include, то текст всегодокумента сохранит сквозную нумерацию страниц, разделов, формул и пр. Приизменении содержания какой-либо главы следует обработать заново все последующие главы, чтобы восстановить правильную нумерацию перекрёстных ссылок,хотя эту операцию можно отложить до окончания всей работы.Имеется два ограничения на содержание файла, указанного в аргументе команды \include. Во-первых, команды \include не могут быть вложены другв друга, поэтому включаемый файл не может содержать команду \include.
Вовторых, внутри включаемого файла нельзя определять новые счётчики при помощи \newcounter. Поскольку декларация \newcounter имеет глобальную областьдействия, наиболее подходящим местом для её размещения является преамбулакорневого входного файла.3.9.Условная компиляцияПри обработке большого входного файла иногда полезно получать сообщения,чем LATEX занят в данный момент времени. Для этого имеется команда\typeout{msg}которая выводит сообщение msg на экран9 и в протокол компиляции name.log.Это может быть простое напоминание о необходимости изменить какой-то фрагДля правильного отображения русских букв на экране в момент компиляции компилятордолжен быть вызван с ключом --termainal=oem, если используется библиотека исполняемыхпрограмм MiKTeX.9893.9.
Условная компиляциямент текста, которое легко пропустить, если записать его в виде обычного комментария во входном файле. Например:\typeout{Проверь уравнение!}Проверь уравнение!Если в msg имеется команда, то она замещается её определением перед тем, какбудет высвечена на экране. Чтобы высветить имя такой команды, необходимозащитить её командой \protect. И вообще, команды LATEX’а, стоящие в msg,как и команда \typeout, помещённая в аргументе другой команды, могут датьнеожиданные результаты.LATEX, как обычно, заменяет кратные пробелы в msg одним и игнорируетпробелы после имени команды.
Команда\spaceпомещённая в msg, вставляет один пробел в текст при выводе на экран.В процессе обработки входного файла можно вводить информацию для компилятора прямо с клавиатуры. По команде\typein[cmd]{msg}EX высвечивает на экране две строки: в первой строке сообщение msg, а вовторой @typein= (или cmd=, если имеется опция [cmd]), после чего ожидаетввода, признаком конца которого является нажатие клавиши Enter.Введённый текст подставляется на место команды \typein, если она не имеетобязательного аргумента. Например:LATМою дочь зовут\typein{Введи имя}.Введи имя\@typein=Если теперь в ответ на приглашение \@typein= ввести Аня, то в печатном документе появится фраза «Мою дочь зовут Аня».При наличии необязательного аргумента cmd он должен быть именем команды и начинаться с обратного слеша (см. раздел 2.1); \typein определяет (илипереопределяет) эту команду в соответствии с вводом с клавиатуры.
В комбинации с \includeonly команда \typein позволяет легко обрабатывать большойпечатный документ без изменения корневого файла. Следующий пример показывает, как это сделать:\typein[\file]{Имя файла, шеф!}\includeonly{\file}Имя файла, шеф!\file=90Глава 3. Печатный документЕсли теперь в ответ на приглашение \file= ввести ch3Enter, то выполнитсякоманда \includeonly{ch3}.Аргумент msg команд \typeout и \typein является подвижным, а сами команды хрупкими.3.10.ОглавлениеРаботу над печатным документом завершает составление оглавления. Иногдатакже составляют список рисунков и таблиц. LATEX полностью автоматизируетэту часть работы. Оглавление, списки рисунков и таблиц печатают соответственно команды\tableofcontents\listoffigures\listoftablesОни считывают необходимую информацию из файлов, имена которых совпадают с именем входного файла (точнее, корневого входного файла), а расширенияопределяются из следующей таблицы:команда:расширение:\tableofcontentstoc\listoffigureslof\listoftableslotНо как нужная информация попадает в перечисленные файлы? Она записывается туда в момент исполнения команды \end{document}, но только в том случае,если исходный текст содержит соответствующую команду \tableofcontents,\listoffigures, \listoftables, а в преамбуле отсутствует декларация\nofilesкоторая запрещает запись любых служебных файлов.