¿Cuál es la interfaz entre LaTeX y BibTeX?

¿Cuál es la interfaz entre LaTeX y BibTeX?

¿Cuál es exactamente el "protocolo" entre LaTeX y BibTeX?

Es decir, si ejecuto latex foo, bibtex fooy latex foo, ¿exactamente cómo fluye la información de LaTeX a BibTeX y viceversa?


Mi actualadivinares que los flujos de datos son los siguientes:

  1. LaTeX genera el archivo foo.aux.
  2. BibTeX lee el archivo foo.aux. Sólo presta atención a las líneas de la forma \citation{...}, \bibstyle{...}y \bibdata{...}.
  3. BibTeX genera el archivo foo.bbl.
  4. Cuando LaTeX detecta que foo.bblexiste, el \bibliographycomando se comporta como \input{foo.bbl}.

¿Es esto exacto o hay más? Por ejemplo, ¿hay \citation{...}siempre exactamente una línea de texto?

¿Existen algunas clases de documentos y paquetes de uso común que afecten al protocolo de alguna manera? Obviamente las biblatexcosas serán diferentes, pero ¿hay algo menos obvio de lo que debemos estar conscientes?


Antecedentes: estoy interesado en escribir un script que pueda usar como reemplazo directo de BibTeX (en el sentido de que desde el lado de LaTeX, nada cambiaría, pero la generación del foo.bblarchivo sería diferente).

Respuesta1

Su suposición es más o menos correcta, incluido el hecho de que biblatexaltera un poco el enfoque (otros paquetes también lo modifican, pero no en el mismo grado). Tomando el caso más simple de un único .texarchivo sin necesidad de múltiples bibliografías o similares:

  • \bibliographystyleescribe la \bibstyle{...}línea en el .auxarchivo: por lo tanto, esto se puede dar en el preámbulo
  • \bibliographyescribe la \bibdata{...}línea en el .auxarchivo y también ingresa el .bblarchivo, si está disponible.
  • \citeescribe una \citation{...}línea en el .auxarchivo y también crea la cita en el documento LaTeX
  • \nociteescribe una \citations{...}línea en el .auxarchivo, pero no hace nada en el documento LaTeX.

Cuando BibTeX lee el .auxarchivo, busca una \bibstylelínea y una \bibdatalínea junto con varias \citationlíneas. Luego escribirá un .bblarchivo, pero lo que ingrese allí dependerá de las instrucciones del .bstarchivo. La convención habitual es que el .bblarchivo contendrá sólo el bibliographyentorno que contiene citas formateadas, aunque no siempre es así.

Hay muchas adiciones que se pueden hacer a este flujo de trabajo. Por ejemplo, biblatexdefine\bibliography que se utilizará en el preámbulo, como lo hacenotrabajar con un .bblarchivo que contenga datos para imprimir directamente. Se pueden crear múltiples bibliografías utilizando más de un .auxarchivo para crear un conjunto de .bblarchivos. También he visto una implementación en la que se escribe una versión XML de la bibliografía como un 'comentario' de LaTeX dentro del .bblarchivo. Estos enfoques todavía usan la misma interfaz subyacente, en el sentido de que BibTeX todavía busca los mismos comandos en el .auxarchivo y escribe un .bblarchivo.


Tomando el ejemplo de multibib, al final de LaTeX define un conjunto de comandos para cada nuevo tipo de bibliografía, por ejemplo

\newcites{sec}{Secondary Literature}

crea un nuevo comando de cita

\citesec{...}

Estos nuevos comandos escriben en un .auxarchivo separado del principal, lo que significa que BibTeX debe ejecutarse dos veces, una en el \jobname.auxarchivo y otra en el archivo.sec.aux archivo. Esto generarádos .bblarchivos, \jobname.bbly sec.bbl, que luego son leídos normalmente por \bibliographyy \bibliographysec, respectivamente. Por lo tanto, el proceso general casi no cambia con respecto al caso estándar, pero simplemente hay más archivos involucrados.

Respuesta2

sí, para el caso predeterminado con un archivo auxiliar. Pero puede haber 2 o más archivos auxiliares, por ejemplo usando multibibo chapterbibo... Con multibibtienes que ejecutar el archivo auxiliar principal y el que está definido por el usuario; también tiene la extensión .aux. chapterbibTienes un archivo auxiliar por capítulo. Ambos casos son fáciles de manejar: bibtex *.aux. Lo mismo para el paquete bibunits.

información relacionada