
Eu gostaria de fazer modificações no título do meu bibtex, e isso pode ser feito modificando \bibname. Mas quando se trata de reduzir a quantidade de espaço entre o título “Bibliografia” e as entradas abaixo, quero saber em primeiro lugar quanto espaço é colocado ali.
De forma mais geral, estou curioso para saber como funcionam os componentes internos do bibtex. Não consigo encontrar nenhuma documentação sobre isso. Então minhas perguntas são:
- Onde posso encontrar informações sobre como o bibtex formata a(s) página(s) da bibliografia?
- Mais especificamente, o que determina a quantidade de espaço entre o título e as entradas abaixo?
Responder1
A saída do BibTeX é um .bbl
arquivo contendo um thebibliography
ambiente. É dever da classe do documento definir este ambiente.
Geralmente é algo como
\section*{\refname}
\begin{list}{<code>}
<bib items>
\end{list}
para aulas sem capítulos e
\chapter*{\bibname}
\begin{list}{<code>}
<bib items>
\end{list}
Isto pode variar de acordo com os pacotes carregados; por exemplo, natbib
intervém nisso, mas usa uma \bibsection
macro que é essencialmente equivalente a \section*
ou \chapter*
nos casos acima.
Você pode encontrar a definição usando texdef
a linha de comando. Por exemplo, a linha de comando
texdef -t latex -c article -s thebibliography
produzirá
% 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}
Modificá-lo precisa \makeatletter
e \makeatother
.
Observe que pode ser difícil rastrear a definição real caso natbib
(ou outros pacotes, talvez) sejam usados, porque ela redefine o ambiente no início do documento. No entanto, olhar para o código do pacote 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
}%
Alterar o espaço entre o título e o primeiro item é apenas inserir um \vspace
comando adequado antes \list
, em ambos os casos.