BibTeX

El número de versión de BibTeX sigue siendo 0.99d. Es el que distribuye TeX Live 2024, y la documentación oficial btxdoc.tex conserva la fecha del 8 de febrero de 1988 y sigue prometiendo ampliarse «cuando salga la versión 1.00 de BibTeX». La versión 1.00 nunca salió. Aun así, BibTeX continúa siendo la referencia para gestionar una bibliografía en LaTeX, por un motivo sencillo: desde el principio separó qué es una obra (la base .bib) de cómo se imprime (el estilo .bst). Esta página cubre cómo escribir un archivo .bib, qué hace cada uno de \cite, \bibliographystyle y \bibliography, la compilación en cuatro pasadas latex → bibtex → latex → latex, y por qué LaTeX Warning: Citation ... undefined a veces se niega a desaparecer.

Por qué BibTeX es un programa aparte de LaTeX

BibTeX no forma parte de LaTeX: es un ejecutable independiente. Es más, nunca llega a leer el archivo .tex. Solo lee el .aux que produjo LaTeX, extrae de él tres datos —qué claves se citaron, qué estilo se pidió y qué .bib abrir— y devuelve su respuesta escribiendo un .bbl. Esa división del trabajo tan estricta es justamente lo que obliga a las cuatro pasadas de compilación que veremos después. La línea de copyright que sigue encabezando los estilos estándar dice «Copyright (C) 1984, 1985, 1988 Howard Trickey and Oren Patashnik», años en los que el propio LaTeX aún estaba tomando forma. BibTeX no fue un añadido posterior: se diseñó como un compañero casi de la misma edad.

El mecanismo tiene tres piezas: el archivo .bib con los datos brutos de las referencias; las llamadas \cite más dos comandos en el documento (\bibliographystyle y \bibliography); y el archivo .bst que fija la apariencia. Enumerar las referencias a mano al final del documento con el entorno thebibliography basta para un texto breve, pero en cuanto las mismas obras se reutilizan en varios artículos deja de saberse cuál versión es la correcta. Ese es el problema que resolvió BibTeX: con los datos en un solo sitio, cambiar de revista cuesta una palabra de estilo y no una tarde entera. La idea de «separar estructura y apariencia» que recorre todo LaTeX se aplica aquí tal cual a la bibliografía.

Cómo escribir una entrada .bib: tipo, clave de cita y campos

Un archivo .bib es texto plano que enumera entradas. Cada entrada declara un tipo de entrada como @article y luego, entre llaves, da primero la clave de cita y después los campos, escritos fieldname = {value} y separados por comas. La clave de cita es un identificador que debe coincidir carácter por carácter con \cite{...} en el documento; el nombre lo eliges tú. La convención habitual, apellido más año como en knuth1984, casi nunca choca y resulta memorable en un artículo firmado por varios. El orden de los campos no altera el resultado: ordenar y dar forma es tarea del estilo.

references.bib
@string{bstj = "Bell System Technical Journal"}

@book{knuth1984,
  author    = {Donald E. Knuth},
  title     = {The {TeX}book},
  publisher = {Addison-Wesley},
  year      = {1984}
}

@article{shannon1948,
  author  = {Claude E. Shannon},
  title   = {A Mathematical Theory of Communication},
  journal = bstj,          % @string abbreviation, no braces
  volume  = {27},
  number  = {3},
  pages   = {379--423},
  year    = {1948}
}

@inproceedings{lamport1987,
  author    = {Leslie Lamport},
  title     = {Document Production: Visual or Logical?},
  booktitle = {Proceedings of TUG},
  year      = {1987},
  pages     = {19--24}
}

Qué cuenta como campo obligatorio lo decide el estilo, no BibTeX. Con el estilo estándar plain, cada hueco queda señalado por su nombre: Warning--empty journal in shannon1948. Son advertencias, no errores, así que el proceso continúa: el dato simplemente desaparece de la salida sin aviso, y por eso conviene leerlas. Una abreviatura definida con @string{bstj = "..."} se referencia después como un nombre desnudo, sin llaves. Y el campo crossref permite que una comunicación herede de una entrada @proceedings padre, de modo que el nombre del congreso y la editorial no se reescriben para cada trabajo del volumen.

Tipo de entradaQué abarcaExigido por plain
@articleArtículo aparecido en una revistaauthor, title, journal, year
@bookLibro publicado por una editorialauthor o editor, title, publisher, year
@inproceedingsComunicación en actas de congresoauthor, title, booktitle, year
@incollectionCapítulo de libro con título propioauthor, title, booktitle, publisher, year
@phdthesisTesis doctoral (@mastersthesis para un máster)author, title, school, year
@techreportInforme emitido por una instituciónauthor, title, institution, year
@unpublishedBorrador inédito o comunicación privadaauthor, title, note
@miscLo que no encaja en ningún otro sitio, como una página webNinguno; howpublished y note hacen el trabajo

Por qué plain convierte TeX en tex: proteger mayúsculas con llaves

Los estilos plain y abbrv pasan a minúscula el título de un artículo salvo la primera letra. Así, un @article cuyo título sea title = {A Note on TeX and NASA Systems} sale como «A note on tex and nasa systems». Nombres propios y siglas quedan aplanados sin contemplaciones. Solo hay una defensa: envolver en otro par de llaves la parte que se quiere conservar. Escritas {TeX} y {NASA}, esas porciones quedan intactas. Conviene saber que ese paso a minúscula afecta a los títulos de artículo (title), no a los de libro ni a booktitle: poner {TeX} dentro de un @book no hace daño, pero tampoco hace nada.

references.bib
% unprotected: plain.bst prints "A note on tex and nasa systems"
@article{bad,
  author  = {A. One},
  title   = {A Note on TeX and NASA Systems},
  journal = {J. Test},
  year    = {2000}
}

% protected: prints "A note on {TeX} and {NASA} systems"
@article{good,
  author  = {B. Two},
  title   = {A Note on {TeX} and {NASA} Systems},
  journal = {J. Test},
  year    = {2000}
}

% names: separate with "and"; brace a corporate author whole
@misc{org,
  author = {{World Health Organization}},
  title  = {Annual Report},
  year   = {2024}
}

Los nombres de autor siguen la misma lógica. Varios autores se separan con and (author = {A. Smith and B. Jones}); la coma queda reservada para separar apellido y nombre, de modo que author = {Smith, Alice} significa apellido Smith, nombre Alice. Si la lista termina en and others, el estilo lo sustituye por «et al.». El caso incómodo son los autores corporativos: sin otro par de llaves alrededor del nombre completo, como en {World Health Organization}, BibTeX lo despieza en apellido e iniciales. Analiza los nombres como sintaxis, así que lo que se quiera dejar fuera de ese análisis se silencia con llaves: la misma herramienta única de siempre.

Qué hacen realmente \bibliographystyle y \bibliography

Ambos comandos consisten menos en imprimir que en dejar un recado en el .aux. \bibliographystyle{plain} escribe allí \bibstyle{plain} y \bibliography{references} escribe \bibdata{references}; BibTeX los lee y actúa en consecuencia. \bibliography tiene además una segunda función: imprime la lista de referencias en el punto donde se coloca, de ahí que suela ir al final del cuerpo, justo antes de \end{document}. Su argumento no lleva extensión —aunque el archivo se llame references.bib, se escribe references— y varias bases se indican separadas por comas, \bibliography{books,papers}.

document.tex
\documentclass{article}
\begin{document}

TeX was created by Knuth~\cite{knuth1984}, building on
Shannon's information theory~\cite{shannon1948,lamport1987}.

% \nocite{*}            % force every entry of the database into the list
\bibliographystyle{plain}
\bibliography{references}

\end{document}

En el cuerpo, \cite{knuth1984} apunta directamente a la clave de cita del .bib. Solo las obras citadas llegan a la lista: una entrada que está en el .bib pero nunca se cita queda ignorada. Para forzar toda la base se añade \nocite{*}; \nocite registra una obra como citada sin imprimir marca alguna en el texto. Varias claves se combinan en una sola llamada, \cite{shannon1948,lamport1987}. Las variantes del propio \cite —un localizador de página con \cite[p.~42]{knuth1984}, o las formas autor-año \citet y \citep de natbib— corresponden a la página de citas.

Por qué la compilación va latex → bibtex → latex → latex

Hacen falta cuatro pasadas porque la información solo circula en un sentido cada vez. Sin el .aux, BibTeX no sabe qué se citó; sin el .bbl, LaTeX no sabe qué imprimir. Y los números «[1]», «[2]» solo quedan fijados una vez compuesta realmente la lista, de modo que devolverlos a las marcas \cite del cuerpo cuesta otra vuelta. La propia documentación oficial btxdoc.tex describe esta receta y añade que, en circunstancias muy raras, puede hacer falta una ejecución adicional de BibTeX y de LaTeX.

  • 1.ª pasada de latex — procesa el cuerpo y escribe en el .aux las claves citadas como \citation{...}, más el estilo y la base como \bibstyle{...} y \bibdata{...}. Todavía no existe ninguna lista de referencias.
  • bibtex — lee únicamente el .aux, averigua qué claves, qué estilo y qué .bib; extrae las entradas correspondientes de la base; les da forma según las reglas del .bst; y escribe un entorno thebibliography completo como archivo .bbl.
  • 2.ª pasada de latex — lee el .bbl y compone la lista. Las marcas \cite del cuerpo, sin embargo, siguen trabajando con el .aux antiguo, de modo que las advertencias Citation ... undefined no desaparecen en esta pasada.
  • 3.ª pasada de latex — los números quedan fijados y las citas del texto por fin coinciden con la lista. Solo entonces cesan las advertencias.
terminal
$ pdflatex document.tex   # writes document.aux (\citation, \bibstyle, \bibdata)
$ bibtex   document       # note: job name, not document.tex -> writes .bbl and .blg
$ pdflatex document.tex   # pulls in .bbl; citations still undefined here
$ pdflatex document.tex   # numbers settle; warnings clear

La única trampa de escritura es que bibtex espera el nombre del trabajo, sin extensión, no el .tex. Teclear bibtex document.tex lo manda a buscar document.tex.aux y falla. Además de su salida, BibTeX escribe un registro llamado .blg: ahí se relee el texto completo de una advertencia. Y en la práctica nadie teclea los cuatro comandos: latexmk inspecciona el .aux, decide si BibTeX debe ejecutarse y cuántas pasadas hacen falta, de modo que latexmk -pdf document.tex es toda la receta.

Citation ... undefined y una bibliografía que sale vacía

Aparecen LaTeX Warning: Citation ... undefined y LaTeX Warning: There were undefined references., las citas del texto salen como [?] y la bibliografía ha desaparecido junto con su título. Nueve de cada diez veces la causa es simplemente que no se han hecho suficientes pasadas. Sin .bbl, LaTeX no imprime ni una línea de la lista, y el título falta porque el propio entorno thebibliography vive dentro del .bbl. Así que primero, con calma, ejecute latex → bibtex → latex → latex de principio a fin. Si la advertencia sobrevive, BibTeX habrá mostrado por su parte otro mensaje distinto.

MensajeDónde apareceCausa y solución
Citation ... undefinedLaTeXAún no hay .bbl, o está obsoleto. Ejecutar entero latex → bibtex → latex → latex
There were undefined references.LaTeXAlgún \cite o \ref sigue sin resolver; ejecutar latex otra vez
I found no \citation commandsBibTeXNo hay ni \cite ni \nocite; citar algo o añadir \nocite{*}
I found no \bibstyle commandBibTeXFalta \bibliographystyle{...} en el documento
I found no database filesBibTeXFalta \bibliography{...}, o no se encuentra el .bib indicado
I found no style fileBibTeXNo existe ningún .bst con ese nombre; revisar la ortografía o instalar el .bst de la revista
Warning--I didn't find a database entryBibTeXUna clave citada no está en el .bib: errata, o entrada nunca añadida

Si aun así no se arregla, sospeche de los archivos auxiliares obsoletos. Tras renombrar una clave, mover el .bib a otro directorio o cambiar de estilo, el .aux, el .bbl y el .blg pueden seguir arrastrando la información de la pasada anterior. latexmk -C borra de una vez los archivos generados, y reconstruir después desde cero es el camino más corto. Recuerde además que las claves de cita distinguen mayúsculas: para BibTeX, Knuth1984 y knuth1984 son dos obras distintas.

Diferencias entre plain, unsrt, alpha y abbrv

Los cuatro estilos estándar difieren solo en tres aspectos —orden de clasificación, forma de la etiqueta y hasta dónde se abrevian nombres y títulos de revistas—, mientras que los campos que recogen son idénticos. No es casualidad: plain.bst, unsrt.bst, alpha.bst y abbrv.bst salen todos de un único archivo. Una plantilla llamada btxbst.doc se pasa al preprocesador de C con -DPLAIN, -DUNSRT, -DALPHA o -DABBRV, tal como explica el propio archivo en su encabezado. Los cuatro parecen sutilmente distintos porque son compilaciones condicionales de un mismo texto.

EstiloOrdenEtiqueta y carácter
plainAlfabético por autorNumeración correlativa [1]; el valor por defecto más seguro
unsrtOrden de primera cita en el textoNumeración correlativa [1]; formato idéntico a plain
alphaPor etiqueta, es decir, autor y añoEtiquetas alfanuméricas como [Knu84]; legibles en campos con mucha fórmula
abbrvAlfabético por autorMisma numeración que plain, pero abrevia nombres de pila, meses y títulos de revistas para ahorrar espacio

La distribución de BibTeX incluye además cuatro estilos que su propio README llama «semiestándar»: acm (ACM Transactions), apalike (autor-año al estilo APA, para usar junto con apalike.sty), ieeetr (IEEE Transactions, numerado por orden de cita) y siam (SIAM). La ingeniería suele partir de ieeetr, la informática de acm, y la psicología o las ciencias sociales de apalike cuando se exige autor-año. Más allá de eso, sociedades y editoriales distribuyen archivos .bst acordes con sus normas de envío: si la revista ya está decidida, conviene buscar el suyo primero. Sea cual sea el estilo al que se pase, ni una línea del .bib ni de las llamadas \cite necesita cambiar.

Por qué nadie escribe un .bst a mano: makebst y custom-bib

Los archivos .bst se evitan porque están escritos en un lenguaje de pila en notación postfija. La guía oficial para diseñadores de estilos, btxhak.tex (Oren Patashnik, 8 de febrero de 1988), lo dice sin rodeos en sus primeras líneas: los estilos bibliográficos se escriben en un lenguaje de pila postfijo, y el archivo de estilo es un programa escrito en un lenguaje sin nombre. Ese lenguaje ni siquiera tiene nombre. Solo cuenta con diez comandos, pero todo valor se apila y se desapila, de modo que dar formato a un simple campo author se alarga en una tirada de notación polaca inversa. Tomar un .bst existente y adaptarlo es viable; diseñar uno desde cero rara vez compensa.

terminal
$ latex makebst      # answer the questions; choose "merlin" as the master file
                     # -> writes a .dbj batch job
$ latex mystyle.dbj  # runs docstrip -> mystyle.bst

Lo que se usa de verdad es el paquete custom-bib, cuya puerta de entrada es makebst. Al teclear latex makebst arranca un cuestionario interactivo: si el apellido va primero, si el año va entre paréntesis, si los títulos van en cursiva; se responde y por el otro extremo sale un .bst. Su autor es Patrick W. Daly, el mismo que escribió natbib y llevó las citas autor-año al lado de LaTeX; los estilos que produce makebst están pensados para funcionar junto con natbib. Cuando las normas de una revista rozan un estilo existente sin coincidir del todo, esta es la salida más realista.

Manejar referencias en japonés: pbibtex y upbibtex

El bibtex básico presupone texto occidental, así que un .bib con nombres de autor o títulos en japonés rompe tanto su ordenación como su tratamiento de cadenas. Por eso TeX Live incluye pbibtex (para pLaTeX, ordenando por puntos de código EUC-JP) y upbibtex (para upLaTeX, ordenando por puntos de código Unicode). Lo importante es que no se limitan a cambiar la codificación: el propio lenguaje de estilos está ampliado. Una nueva función interna, is.kanji.str$, indica si una cadena contiene algún carácter no ASCII; substring$ se modificó para no partir nunca un carácter multibyte; y a add.period$ se le enseñó a no añadir punto tras signos japoneses como 。 o ?. El linaje se remonta al JBibTeX de Shouichi Matsui, y la distribución todavía conserva esa historia en su documentación.

terminal
$ uplatex   document.tex   # 1st pass: writes .aux
$ upbibtex  document       # Japanese-aware: writes .bbl
$ uplatex   document.tex   # pulls in .bbl
$ uplatex   document.tex   # resolves references
$ dvipdfmx  document.dvi   # DVI -> PDF

También se distribuyen equivalentes japoneses de los estilos: jplain para plain, junsrt para unsrt, jalpha para alpha, jabbrv para abbrv, y jname, que antepone el apellido. Para sociedades existen jipsj (Information Processing Society of Japan), tipsj, tieice (IEICE) y jorsj, y también estos se recortan con el preprocesador de C a partir de una única plantilla, jbtxbst.doc, igual que en el lado occidental. La compilación solo cambia de nombres: latex pasa a platex o uplatex, y bibtex a pbibtex o upbibtex. Como el camino pasa por DVI, se termina convirtiendo con dvipdfmx. A latexmk se le puede indicar en su archivo de configuración que llame a estos programas, de modo que el japonés se automatiza igual de bien.

¿Seguir con BibTeX o pasar a biblatex y biber?

La línea divisoria es nítida. Si la revista impone un .bst, use BibTeX; si el formato lo controla usted, use biblatex y biber. El diseño de BibTeX presupone codificaciones de 8 bits, así que los nombres de autor multilingües y los caracteres acentuados exigen parches, y las reglas de ordenación quedan fuera de alcance. Cambiar el formato en detalle acaba llevando al .bst, ese lenguaje de pila sin nombre de la sección anterior. En resumen, todas las debilidades de BibTeX se remontan a una sola cosa: un diseño congelado en 1988.

Al otro lado esperan biblatex (un paquete de LaTeX) y su backend por defecto, biber. Aceptan Unicode tal cual, exponen la ordenación y el formato como opciones del lado de LaTeX y ahorran escribir una sola línea de .bst. También cambian los comandos —\cite cede el paso a \autocite y \printbibliography— y la compilación llama a biber en lugar de bibtex. El archivo .bib en sí, en cambio, es común a ambos, de modo que migrar cuesta menos de lo que parece. Ahí es donde más rinde la decisión tomada hace cuarenta años: separar qué es una obra de cómo se imprime.