Como cruzar a referência da bibliografia (completa)?

Aug 17 2020

Uma pergunta simples, mas não consegui encontrar no Stackexchange aqui ou em outro lugar.

Quero fazer uma referência cruzada do cabeçalho gerado por \printbibliography, ou seja, não uma entrada específica, mas apenas o título / página inicial.

Como eu posso fazer isso?

Eu uso assim:

\printbibliography[title={Quellenverzeichnis}, heading=subbibnumbered]

O problema é que o pacote gera seu cabeçalho automaticamente, então não posso simplesmente colocar um \labellá e fazer referência a ele.

Basicamente, eu só quero fazer o que é necessário para que eu possa usar o habitual \ref, \hyperref, \autoref, \fullrefetc.

E também não encontrei nada na documentação biblatex (página 88 ff. Aka sec. 3.7.2 começa a falar sobre o \printbibliographycomando.).

Respostas

3 DavidPurton Aug 17 2020 at 13:28

Estranhamente, não consigo encontrar uma maneira óbvia de fazer isso.

Esta é uma opção que imprime o título, insere a etiqueta e imprime o restante da bibliografia. Por algum motivo desconhecido para mim, o \@currentlabelnão é atualizado pelo \printbibheading, então preciso do hack para diminuir o contador da subseção e, em seguida, incrementá-lo usando \refstepcounter.

Eu fico pensando que deve haver uma opção melhor.

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage[colorlinks]{hyperref}
\begin{document}
\section{Here}
\subsection{There}
Page \pageref{bib}. Section \ref{bib}.
\nocite{westfahl:space,aksin}
\printbibheading[title=Quellenverzeichnis, heading=subbibnumbered]
\addtocounter{subsection}{-1}
\refstepcounter{subsection}
\label{bib}
\printbibliography[heading=none]
\end{document}

3 moewe Aug 17 2020 at 14:12

Uma vez que você já forneceu explicitamente o título de sua bibliografia, pode simplesmente inserir um \labellá.

Com o MWE de David Purton e as mudanças óbvias

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage[colorlinks]{hyperref}
\begin{document}
\section{Here}
\subsection{There}
Page \pageref{bib}. Section \ref{bib}.
\nocite{sigfridsson,worman}

\printbibliography[title={Quellenverzeichnis\label{bib}}, heading=subbibnumbered]
\end{document}

Se desejar uma solução que selecione automaticamente 'Referências' ou 'Bibliografia' dependendo da classe, você pode tentar

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage[colorlinks]{hyperref}

\makeatletter
\newcommand*{\reforbibname}{%
  \ifodd\abx@classtype\relax
    \bibname
  \else
    \refname
  \fi
}
\makeatother

\begin{document}
\section{Here}
\subsection{There}
Page \pageref{bib}. Section \ref{bib}.
\nocite{sigfridsson,worman}

\printbibliography[title={\reforbibname\label{bib}}, heading=subbibnumbered]
\end{document}

O comando interno \abx@classtypeé usado pelo biblatexpara detectar certas classes. Convenientemente, as 'classes pares' são articlesemelhantes a e usam \refname, as 'classes ímpares' são semelhantes a report/ booke usam \bibname.

Observe que isso não leva em consideração possíveis alterações do título padrão nas definições dos cabeçalhos da bibliografia.


Uma alternativa seria incluir o \labeldiretamente na definição do cabeçalho da bibliografia. Neste caso, seria

\documentclass{article}
\usepackage{biblatex}
\addbibresource{biblatex-examples.bib}
\usepackage[colorlinks]{hyperref}

\defbibheading{subbibnumbered:link}[\refname]{%
  \subsection{#1}%
  \label{bib}}

\begin{document}
\section{Here}
\subsection{There}
Page \pageref{bib}. Section \ref{bib}.
\nocite{sigfridsson,worman}

\printbibliography[heading=subbibnumbered:link]
\end{document}

(claro que você pode sobrescrever o bibheading subbibnumberedse quiser, mas como o rótulo está codificado no cabeçalho, pode ser melhor escolher um nome exclusivo para evitar usá-lo duas vezes.) Em qualquer caso, isso requer que você saiba / copie a definição original do cabeçalho da bibliografia usada em seu documento.

3 rugk Jan 03 2021 at 16:33

Desde a v3.16 do biblatex agora você pode usar label.

Exemplo e assim por diante copiados da edição / solicitação de recurso , então todos os créditos vão para @moewew , que também implementou isso.

Aqui está um exemplo:

\documentclass[british]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[style=authoryear, backend=biber]{biblatex}
\usepackage{cleveref}

\addbibresource{biblatex-examples.bib}


\begin{document}
\autocite{sigfridsson}

\Cref{biblabel}

\printbibliography[heading=bibnumbered, label=biblabel]
\end{document}