¿Cómo hacer una referencia cruzada de la bibliografía (completa)?
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 \label
allí 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 \printbibliography
comando).
Respuestas
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, \@currentlabel
no 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}

Dado que ya ha dado explícitamente el título de su bibliografía, puede escabullirse \label
allí.
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@classtype
es utilizado por biblatex
para detectar ciertas clases. Convenientemente, las 'clases pares' son article
similares y se usan \refname
, las 'clases impares' son similares a report
/ book
y 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 \label
directamente 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 subbibnumbered
si 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.
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}