Что именно представляет собой «протокол» между LaTeX и BibTeX?
То есть, если я запускаю latex foo
, bibtex foo
, и latex foo
, как именно информация перетекает из LaTeX в BibTeX и обратно?
Мой нынешнийпредполагатьзаключается в том, что потоки данных выглядят следующим образом:
- LaTeX генерирует файл
foo.aux
. - BibTeX читает файл
foo.aux
. Он обращает внимание только на строки вида\citation{...}
,\bibstyle{...}
, и\bibdata{...}
. - BibTeX генерирует файл
foo.bbl
. - Когда LaTeX замечает, что
foo.bbl
существует,\bibliography
команда ведет себя как\input{foo.bbl}
.
Это точно или есть что-то большее? Например, \citation{...}
всегда ли это ровно одна строка текста?
Есть ли какие-то часто используемые классы документов и пакеты, которые как-то влияют на протокол? Очевидно, что с biblatex
вещами все будет по-другому, но есть ли что-то менее очевидное, о чем следует знать?
Предыстория: Мне интересно написать скрипт, который я мог бы использовать в качестве полной замены BibTeX (в том смысле, что со стороны LaTeX ничего не изменится, но генерация файла foo.bbl
будет другой).
решение1
Ваша догадка более или менее верна, включая тот факт, что это biblatex
немного меняет подход (другие пакеты тоже его модифицируют, но не в такой же степени). Возьмем простейший случай одного файла .tex
без необходимости в нескольких библиографиях или чем-то подобном:
\bibliographystyle
записывает\bibstyle{...}
строку в.aux
файл: поэтому ее можно указать в преамбуле\bibliography
записывает\bibdata{...}
строку в.aux
файл, а также вводит.bbl
файл, если он доступен.\cite
записывает\citation{...}
строку в.aux
файл, а также создает ссылку в документе LaTeX\nocite
записывает\citations{...}
строку в.aux
файл, но ничего не делает в документе LaTeX.
Когда BibTeX читает .aux
файл, он ищет одну \bibstyle
строку и одну \bibdata
строку вместе с несколькими \citation
строками. Затем он записывает файл .bbl
, но то, что туда попадает, зависит от инструкций в .bst
файле. Обычно принято, что .bbl
файл будет содержать только bibliography
среду, которая содержит отформатированные цитаты, хотя это не всегда так.
Есть много дополнений, которые можно сделать в этом рабочем процессе. Например, biblatex
определяет\bibliography
, которые будут использоваться в преамбуле, как это делаетсянетработать с .bbl
файлом, содержащим данные для прямой печати. Несколько библиографий могут быть созданы с использованием более одного .aux
файла для создания набора .bbl
файлов. Я также видел реализацию, в которой XML-версия библиографии записана как «комментарий» LaTeX внутри файла .bbl
. Эти подходы по-прежнему используют тот же базовый интерфейс, в том смысле, что BibTeX по-прежнему ищет те же команды в файле .aux
и записывает .bbl
файл.
Если взять пример multibib
, то в конце LaTeX определяется набор команд для каждого нового типа библиографии, например
\newcites{sec}{Secondary Literature}
создает новую команду цитирования
\citesec{...}
Эти новые команды записывают в отдельный .aux
файл из основного, что означает, что BibTeX должен быть запущен дважды, один раз для файла \jobname.aux
и один раз для sec.aux
файла. Это сгенерируетдва .bbl
файлы, \jobname.bbl
и sec.bbl
, которые затем считываются как обычно \bibliography
и \bibliographysec
, соответственно. Таким образом, общий процесс почти не отличается от стандартного случая, но просто задействовано больше файлов.
решение2
да, для случая по умолчанию с одним aux-файлом. Но может быть 2 или более aux-файлов, например, с использованием multibib
или chapterbib
или ... С multibib
вам нужно запустить основной aux-файл и тот, который определен пользователем; он также имеет расширение .aux Для chapterbib
вас есть один aux-файл на главу. оба случая легко обработать: bibtex *.aux
. То же самое для пакета bibunits
.