viernes, 11 de mayo de 2012

Cómo poner al final de cada capítulo, la bibliografía correspondiente a dicho capítulo

Hay veces que queremos añadir la bibliografía correspondiente, al final de cada capítulo. Con LaTeX, esto se puede hacer utilizando el paquete {chapterbib}. Eso sí, la manera de hacerlo es bastante retorcida. En la siguiente entrada, monstraré los pasos que hay que seguir. Lo haré para el editor TeXnicCenter, si utilizas otro programa, supongo que el mecanismo sea parecido.

Para empezar, supongamos que tenemos el siguiente archivo "biblio.bib", con los siguientes artículos:

@ARTICLE{Amy3003,
  author = {Amy Wong},
  title = {Magnetic Fields},
  journal = {Applied Physics},
  year = {3003},
  volume = {54},
  pages = {77-85},
}

@CONFERENCE{Amy3002,
  author = {Amy Wong},
  title = {Unlimited Energy},
  booktitle = {Renewable Energy},
  year = {3002},
}

A continuación, lo mejor es dividir nuestro archivo de LaTeX, por capítulos. Cada capítulo, en un archivo .tex. En este ejemplo, tenemos tres capítulos: introducción, nudo y desenlace. Además, tenemos un cuarto archivo, "texto.tex", que es el principal y el que llama por orden a los demás archivos. Nuestro archivo "texto.tex" será:

\documentclass[a4paper,openright,12pt]{book}
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc}
\usepackage{chapterbib}

\begin{document}

\include{introduccion}
\include{nudo}
\include{desenlace}

\end{document}

Nuestro archivo "introduccion.tex" será:

\chapter{Introducción}
Empecemos con \cite{Amy3002}.

\CitationPrefix{\thechapter.}
\bibliographystyle{acm}
\bibliography{biblio}

Nuestro archivo "nudo.tex" será:

\chapter{Nudo}
Sigamos con \cite{Amy3003}.

\CitationPrefix{\thechapter.}
\bibliographystyle{acm}
\bibliography{biblio}

Y nuestro archivo "desenlace.tex" será:

\chapter{Desenlace}
Terminemos con \cite{Amy3002,Amy3003}.

\CitationPrefix{\thechapter.}
\bibliographystyle{acm}
\bibliography{biblio}

La línea "CitationPrefix{\thechapter.}" se utiliza para que en las numeración de la bibliografía, se añada el número del capítulo. Es decir, que ponga [1.1], [1.2], etc... Es necesaria porque nuestro formato de la bibliografía (acm), es numérico. No sería necesaria si realizáramos la numeración por el nombre del autor.

Ahora, para compilar nuestro documento, seguimos los pasos siguientes:

1) Abrimos todos los archivos .tex. El archivo padre y todos capítulos.


2) Seleccionamos la solapa con el archivo padre ("texto.tex" en este ejemplo), y compilamos.

3) Seleccionamos una por una la solapa de cada uno de los capítulos ("introduccion.tex", "nudo.tex", "desenlace.tex"), y vamos generando cada bibliografía. Para generar la bibliografía, hacemos click en "Build / Current File / BibTeX".


4) Volvemos al archivo padre ("texto.tex"), y volvemos a compilar un par de veces nuestro documento.
 

Y ya está. ¿Funcionó?

8 comentarios:

daviddoji dijo...

Me surge una duda.
Al dividir la tesis en capítulos (Intro.tex, cap1.tex, ...), al escribir cada uno de estos capítulos individuales no tenemos que específicar nada?
A ver si me explico, para el archivo padre (tesis.tex) especificamos documentclass, todos los paquetes que vamos a usar y tal, y luego llamamos a los capítulos dentro de este archivo padre (con \include).
Si es así, entonces como podemos ver como queda cada capitulo por separado?

Luis dijo...

Hola David, ¿qué tal?

Los paquetes se especifican en el capítulo padre. Si quieres compilar un solo capítulo, basta con que comentes los \include de los demás capítulos. Por ejemplo:


\documentclass[...]{book}
\usepackage{...}

\begin{document}

%\include{intro}
\include{cap1}
%\include{cap2}

\end{document}


Hasta luego

Mauricio dijo...

También desde la terminal (usuarios linux) basta con compilar el texto.tex, y luego los .aux correspondientes a cada capítulo.

Luis dijo...

Genial, gracias por compartirlo, Mauricio.

Domingo dijo...

Tengo que hacer un trabajo y me exigen precisamente esto, que cada capítulo tenga su bibliografía. El problema viene que son muchos capítulos y estar manualmente compilando es muy pesado. Se puede hacer un .bat que lo haga, pero lo normal es trabajar con el editor.

El problema que le veo a este método es que parece que sólo funciona si tienes todos los .tex en la misma carpeta que el principal.tex, si no es así no funciona y tienes que hacer manualmente el paso por bibtex. Curiosamente, si se utiliza editores online como sharelatex puedes tener los .tex en diferentes carpetas y no tienes que configurar nada especial que lo coge y te lo hace bien, así que quizás sea una cuestión de configuración, no lo sé. El caso es que creo que hay otro método mejor y más sencillo que solventa esos problemas y es el uso de biblatex.

Antes de todo, hay que tener el MikTeX o Texlive actualizado a tope, pues las versiones de biber y biblatex han de ser las compatibles, si no te dirá que las versiones de biber y biblatex son incompatibles.

Aquí tenéis un montón de .tex que funcionan todos con un archivo biblatex-example.bib para las citas con el que podréis probar diferentes configuraciones y estilos https://www.ctan.org/tex-archive/macros/latex/contrib/biblatex/doc/examples

Para aprovechar el ejemplo habría que poner en el .tex principal:

\documentclass[a4paper,openright,12pt]{book}
\usepackage[spanish]{babel}
\usepackage[latin1]{inputenc}
\usepackage{csquotes}
\usepackage[backend=biber,refsegment=chapter]{biblatex}

\begin{document}

\include{introduccion}
\include{nudo}
\include{desenlace}

\printbibliography

\end{document}

El paquete csquotes es altamente recomendable utilizar según el pdf de biblatex. El backend es para indicar con qué quieres que trabaje las citas. Se puede poner biber, bibtex o bibtex8. En el pdf de biblatex recomiendan biber. Si estáis utilizan Texstudio hay que cambiar en configuración la bibliografía por defecto a biber para que funcione. En Texmaker, por ejemplo, hay que indicarle en configuración, órdenes, donde aparece Bi(la)tex cambiarlo por biber %.bcf para que funcione. El refsegment sirve para indicarle que vas a poner bibliografías en cada capítulo.

Luego en cada capítulo habría que poner:

\chapter{Introducción}
Empecemos con \cite{Amy3002}.

\printbibliography[segment=\therefsegment]

Y el resto de capítulos igual.

Y en el .tex principal si pones \printbibliography como he hecho en este ejemplo te aparece una bibliografía general de todo el documento. La verdad es que biblatex tiene muchísimas opciones. El pdf donde lo explican tiene 300 páginas así que hay mil cosas que se pueden configurar, pero con esto sería lo básico.

Una vez que tienes todo, sólo tienes que configurar tu editor para que ejecute:
pdflatex
biber
pdflatex
pdflatex

Y no tienes que estar cargando bibliografías en cada .tex de forma individual ni preocuparte de que si los .tex están en carpetas separadas no funcione correctamente.

Luis dijo...

Domingo, ¡genial! Muchas gracias por compartirlo. Sin duda es un método mucho mejor.

Anónimo dijo...

Se generan paginas intermedias entre un capitulo y otro, ¿alguna forma de como solucionarlo?

esteban dijo...

Hola,

He utilizado su forma de referenciar por capítulo y por ahora me ha funcionado bien. Sin embargo, me ocurre que la bibliografia del segundo capitulo no empieza a enumerarse desde 1, sino desde el número de la última citación del primer capitulo. Alguien sabe como reiniciar el conteo usando esta forma de referenciar.

Buen día.