Internos Bibtex

Internos Bibtex

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:

  1. Onde posso encontrar informações sobre como o bibtex formata a(s) página(s) da bibliografia?
  2. 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 .bblarquivo contendo um thebibliographyambiente. É 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, natbibintervém nisso, mas usa uma \bibsectionmacro que é essencialmente equivalente a \section*ou \chapter*nos casos acima.

Você pode encontrar a definição usando texdefa 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 \makeatlettere \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 \vspacecomando adequado antes \list, em ambos os casos.

informação relacionada