¿Cuál es exactamente el "protocolo" entre LaTeX y BibTeX?
Es decir, si ejecuto latex foo
, bibtex foo
y 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:
- LaTeX genera el archivo
foo.aux
. - BibTeX lee el archivo
foo.aux
. Sólo presta atención a las líneas de la forma\citation{...}
,\bibstyle{...}
y\bibdata{...}
. - BibTeX genera el archivo
foo.bbl
. - Cuando LaTeX detecta que
foo.bbl
existe, el\bibliography
comando 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 biblatex
cosas 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.bbl
archivo sería diferente).
Respuesta1
Su suposición es más o menos correcta, incluido el hecho de que biblatex
altera 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 .tex
archivo sin necesidad de múltiples bibliografías o similares:
\bibliographystyle
escribe la\bibstyle{...}
línea en el.aux
archivo: por lo tanto, esto se puede dar en el preámbulo\bibliography
escribe la\bibdata{...}
línea en el.aux
archivo y también ingresa el.bbl
archivo, si está disponible.\cite
escribe una\citation{...}
línea en el.aux
archivo y también crea la cita en el documento LaTeX\nocite
escribe una\citations{...}
línea en el.aux
archivo, pero no hace nada en el documento LaTeX.
Cuando BibTeX lee el .aux
archivo, busca una \bibstyle
línea y una \bibdata
línea junto con varias \citation
líneas. Luego escribirá un .bbl
archivo, pero lo que ingrese allí dependerá de las instrucciones del .bst
archivo. La convención habitual es que el .bbl
archivo contendrá sólo el bibliography
entorno que contiene citas formateadas, aunque no siempre es así.
Hay muchas adiciones que se pueden hacer a este flujo de trabajo. Por ejemplo, biblatex
define\bibliography
que se utilizará en el preámbulo, como lo hacenotrabajar con un .bbl
archivo que contenga datos para imprimir directamente. Se pueden crear múltiples bibliografías utilizando más de un .aux
archivo para crear un conjunto de .bbl
archivos. 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 .bbl
archivo. Estos enfoques todavía usan la misma interfaz subyacente, en el sentido de que BibTeX todavía busca los mismos comandos en el .aux
archivo y escribe un .bbl
archivo.
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 .aux
archivo separado del principal, lo que significa que BibTeX debe ejecutarse dos veces, una en el \jobname.aux
archivo y otra en el archivo.sec.aux
archivo. Esto generarádos .bbl
archivos, \jobname.bbl
y sec.bbl
, que luego son leídos normalmente por \bibliography
y \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 multibib
o chapterbib
o... Con multibib
tienes que ejecutar el archivo auxiliar principal y el que está definido por el usuario; también tiene la extensión .aux. chapterbib
Tienes un archivo auxiliar por capítulo. Ambos casos son fáciles de manejar: bibtex *.aux
. Lo mismo para el paquete bibunits
.