Каков интерфейс между LaTeX и BibTeX?

Каков интерфейс между LaTeX и BibTeX?

Что именно представляет собой «протокол» между LaTeX и BibTeX?

То есть, если я запускаю latex foo, bibtex foo, и latex foo, как именно информация перетекает из LaTeX в BibTeX и обратно?


Мой нынешнийпредполагатьзаключается в том, что потоки данных выглядят следующим образом:

  1. LaTeX генерирует файл foo.aux.
  2. BibTeX читает файл foo.aux. Он обращает внимание только на строки вида \citation{...}, \bibstyle{...}, и \bibdata{...}.
  3. BibTeX генерирует файл foo.bbl.
  4. Когда 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.

Связанный контент