2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 log, aux и т д. - зачем нужны?
Сообщение19.05.2014, 11:56 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
Большинство пользователей игнорирует всякие файлы, создаваемые LaTeX. Нужны они ему зачем-то, и ладно. На самом деле…

foo.log
Если у нас был foo.tex, то создастся foo.log—независимо какой TeX мы используем. И TeXу этот файл совсем не нужен. Он нужен пользователю. Помимо общей информации о том, какие исполняемые, документкласс и пакеты были использованы и их местоположение (полезно как последний резерв для нахождения причин ошибок при компиляции) он содержит всевозможные предупреждения—о переполненных или неполных боксах, о неопределенных ссылках (\ref и всех подобных \pageref, \footref, \eqref и т.д.)
Код:
LaTeX Warning: Reference `myeq' on page 5 undefined on input line 134

и цитатах (\cite)
Код:
LaTeX Warning: Citation `greatbook' on page 4 undefined on input line 58,

o некоторых объектах с тем же \label и \bibitem (которые LaTeX не различает в этом контексте):
Код:
LaTeX Warning: Label `bar' multiply defined.

Это случается даже если один раз было \label{bar}, а второй раз—\bibitem{bar}

Не все Warning имеет смысл исправлять, но указанные выше—обязательно.

-- 19.05.2014, 04:41 --

foo.aux
Общая информация
aux — сокращение от auxiliaire (вспомогательный)

Когда LaTeX впервые компилирует foo.tex все \ref и иже с ним, и \cite неопределены. Но при этом latex спасает эту информацию в foo.aux в такой форме
Код:
\newlabel{myeq}{{1.2}{4}}
\bibcite{greatbook}{GB}
\@writefile{toc}{\contentsline {section}{\numberline {1.1}Всякая фигня}{5}}

где для уравнений (или теорем—в общем любого environment, на которое можно сослаться дается номер (первое число—1.2), и страница (последнее число—4).

Когда latex компилирует foo.tex в следующий раз, он сразу загружает foo.aux в память и стирает файл, используя информацию в памяти для заполнения всех ссылок и цитирований. Но если foo.aux сильно испорчен, latex зависает и тогда следует прервать компиляцию и удалить foo.aux и начать сначала.

Сколько раз прогонять latex?
Популярное мнение—дважды. Однако при второй компиляции страницы могут измениться, поэтому—трижды. Мне неизвестны естественные примеры, в которых следует компилировать более трех раз (но можно легко написать искусственные, которые каждый раз компилируются по разному). Существует скрипт latexmk который компилирует до тех пор, пока результат не стабилизируется)

Вариации
Если foo.tex содержит \include, (скажем foo1.tex, foo2.tex, foo3.tex), то у нас будет foo1.aux, foo2.aux, foo3.aux и foo.aux, который не дублирует содержание foo1.aux, foo2.aux, foo3.aux, но говорит, что такие файлы имеются и расположены они там-то и там-то. Если мы включаем в преамбулу \includeonly{foo3.tex}, то foo1.aux, foo2.aux используются latex для извлечения информации о номерах уравнений и т.д. в foo1.tex и foo2.tex

Пакет hyperref изменяет foo.aux, дописывает туда информацию об anchor (т.е. то место в pdf на которое можно сослаться), для теорем и секций—информацию об имени (нужна для команды \nameref, введенной в этом пакете).

Другие пакеты, документклассы и даже команды обычно создают свои вспомогательные файлы (toc, idx и т.д. и т.п.)

 Профиль  
                  
 
 Re: log, aux и т д. - зачем нужны?
Сообщение19.05.2014, 13:18 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
А пользователю какой прок?
Есть такие пакеты xr и xr–hyper.

Я опишу xr-hyper, который расширяет xr Допустим у нас есть внешний документ foo.tex, и мы работаем над bar.tex (мы можем работать над обоими документами, и внешних документов может быть более одного). Тогда мы в директорию bar, в которой лежит bar.tex роняем foo.aux, а в преамбулу bar.tex вставляем
Код:
\externaldocument[Foo-]{foo}[http://myserver/.../foo.pdf]

где foo говорит, что имя внешнего документа foo.tex, а в квадратных скобках стоит URL foo.pdf в интернете (если мы поставили или собираемся поставить его туда, в противном случае мы опускаем квадратные скобки и их содержимое.

Теперь если нам нужно сослаться на что-то, что имеет в foo.tex \label{myeq}, в bar.tex мы пишем \ref{Foo-myeq} (аналогично всякие вариации, а также \cite). Тогда появляются правильные ссылки.

Более того, если foo.pdf на интернете, и foo.tex загружал hyperref, то кликание на ссылку открывает веббраузер, который открывает не только внешний http://myserver/.../foo.pdf, но и в нужном месте (если не получается, pdf плугин в веббраузере—"неправильный"). Правда, в последнее время веббраузеры стали параноидами и спрашивают пользователя "Доверяем ли мы этому документу?"

Если foo.tex содержал \include{foo1.tex}, то нам нужен будет не только  foo.aux, но и foo1.aux. При этом если foo.tex содержал \include{foo1/foo1.tex} то foo1.aux должен быть не на верхнем уровне документа bar.tex, а в специальной поддиректории foo1.

 Профиль  
                  
 
 Re: log, aux и т д. - зачем нужны?
Сообщение19.05.2014, 16:52 
Заслуженный участник
Аватара пользователя


31/01/14
11348
Hogtown
Red_Herring в сообщении #865150 писал(а):
Допустим у нас есть внешний документ foo.tex,


Необязательно наш, можно взятый, например, с arXiv

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 3 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group