¿Cómo hacer una referencia cruzada de la bibliografía (completa)?

Aug 17 2020

Una pregunta simple, pero no pude encontrarla en Stackexchange aquí o en otro lugar.

Quiero hacer una referencia cruzada al encabezado generado por \printbibliography, es decir, no a una entrada específica, sino solo al título / página de inicio.

¿Cómo puedo hacer eso?

Lo uso así:

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

El problema es que el paquete genera su título automáticamente, por lo que no puedo simplemente colocar un \labelallí y referirme a eso.

Básicamente, sólo quiero hacer lo que se necesita para que pueda utilizar el habitual \ref, \hyperref, \autoref, \fullrefetc.

Y tampoco he encontrado nada en los documentos de biblatex (página 88 y siguientes, también conocida como sec. 3.7.2, comienza a hablar sobre el \printbibliographycomando).

Respuestas

3 DavidPurton Aug 17 2020 at 13:28

Extrañamente, no puedo encontrar una forma obvia de hacer esto.

Aquí hay una opción que imprime el encabezado, luego inserta la etiqueta y luego imprime el resto de la bibliografía. Por alguna razón que desconozco, \@currentlabelno se actualiza por \printbibheading, así que necesito el truco para disminuir el contador de subsección y luego incrementarlo usando \refstepcounter.

Me quedo pensando que debe haber una mejor opción.

\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

Dado que ya ha dado explícitamente el título de su bibliografía, puede escabullirse \labelallí.

Con MWE de David Purton y los cambios obvios

\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}

Si desea una solución que seleccione automáticamente 'Referencias' o 'Bibliografía' según la clase, puede probar

\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}

El comando interno \abx@classtypees utilizado por biblatexpara detectar ciertas clases. Convenientemente, las 'clases pares' son articlesimilares y se usan \refname, las 'clases impares' son similares a report/ booky se usan \bibname.

Tenga en cuenta que esto no tiene en cuenta los posibles cambios del título predeterminado en las definiciones de los encabezados de la bibliografía.


Una alternativa sería incluir \labeldirectamente en la definición del encabezado de la bibliografía. En este caso eso sería

\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}

(por supuesto, puede sobrescribir el encabezado subbibnumberedsi lo desea, pero dado que la etiqueta está codificada en el encabezado, puede ser mejor elegir un nombre único para evitar usarlo dos veces). En cualquier caso, esto requiere que sepa / Copie la definición original del encabezado de la bibliografía utilizado en su documento.

3 rugk Jan 03 2021 at 16:33

Desde v3.16 de biblatex ahora puede usar label.

Ejemplo, etc. copiado de la solicitud de problema / función , por lo que todos los créditos van a @moewew , quien también implementó esto.

Aquí un ejemplo:

\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}