
Me gustaría hacer modificaciones a mi título bibtex, y esto se puede hacer modificando \bibname. Pero cuando se trata de reducir la cantidad de espacio entre el título "Bibliografía" y las entradas siguientes, primero quiero saber cuánto espacio se coloca allí.
En términos más generales, tengo curiosidad por saber cómo funcionan las partes internas de Bibtex. Parece que no puedo encontrar ninguna documentación sobre esto. Entonces mis preguntas son:
- ¿Dónde puedo encontrar información sobre cómo bibtex da formato a las páginas de bibliografía?
- Más específicamente, ¿qué determina la cantidad de espacio entre el título y las entradas siguientes?
Respuesta1
La salida de BibTeX es un .bbl
archivo que contiene un thebibliography
entorno. Es deber de la clase de documento definir este entorno.
Generalmente es algo como
\section*{\refname}
\begin{list}{<code>}
<bib items>
\end{list}
para clases sin capítulos y
\chapter*{\bibname}
\begin{list}{<code>}
<bib items>
\end{list}
Esto puede variar según los paquetes cargados; por ejemplo, natbib
interviene en esto, pero utiliza una \bibsection
macro que es esencialmente equivalente a los casos anteriores \section*
o en ellos.\chapter*
Puede encontrar la definición usando texdef
desde la línea de comando. Por ejemplo, la línea de comando
texdef -t latex -c article -s thebibliography
saldrá
% article.cls, line 570:
\newenvironment{thebibliography}[1]
{\section*{\refname}%
\@mkboth{\MakeUppercase\refname}{\MakeUppercase\refname}%
\list{\@biblabel{\@arabic\c@enumiv}}%
{\settowidth\labelwidth{\@biblabel{#1}}%
\leftmargin\labelwidth
\advance\leftmargin\labelsep
\@openbib@code
\usecounter{enumiv}%
\let\p@enumiv\@empty
\renewcommand\theenumiv{\@arabic\c@enumiv}}%
\sloppy
\clubpenalty4000
\@clubpenalty \clubpenalty
\widowpenalty4000%
\sfcode`\.\@m}
{\def\@noitemerr
{\@latex@warning{Empty `thebibliography' environment}}%
\endlist}
Modificarlo necesita \makeatletter
y \makeatother
.
Tenga en cuenta que podría ser difícil rastrear la definición real en caso de que natbib
se utilice (u otros paquetes, tal vez), porque redefine el entorno al inicio del documento. Sin embargo, mirar el código del paquete revela
\renewenvironment{thebibliography}[1]{%
\bibsection
\parindent\z@
\bibpreamble
\bibfont
\list{\@biblabel{\the\c@NAT@ctr}}{\@bibsetup{#1}\global\c@NAT@ctr\z@}%
\ifNAT@openbib
\renewcommand\newblock{\par}%
\else
\renewcommand\newblock{\hskip .11em \@plus.33em \@minus.07em}%
\fi
\sloppy\clubpenalty4000\widowpenalty4000
\sfcode`\.\@m
\let\NAT@bibitem@first@sw\@firstoftwo
\let\citeN\cite \let\shortcite\cite
\let\citeasnoun\cite
}{%
\bibitem@fin
\bibpostamble
\def\@noitemerr{%
\PackageWarning{natbib}{Empty `thebibliography' environment}%
}%
\endlist
\bibcleanup
}%
Cambiar el espacio entre el título y el primer elemento es simplemente insertar un \vspace
comando adecuado antes \list
, en ambos casos.