Come incrociare la bibliografia (intera)?
Una semplice domanda, ma non sono riuscito a trovarla su Stackexchange qui o da qualche altra parte.
Voglio fare un riferimento incrociato all'intestazione generata da \printbibliography
, cioè non una voce specifica ma solo il titolo / pagina iniziale.
Come lo posso fare?
Lo uso in questo modo:
\printbibliography[title={Quellenverzeichnis}, heading=subbibnumbered]
Il problema è che il pacchetto genera automaticamente la sua intestazione, quindi non posso semplicemente inserire un \label
e fare riferimento a quello.
Fondamentalmente, io voglio solo fare ciò che è necessario in modo da poter usare il solito \ref
, \hyperref
, \autoref
, \fullrefetc.
E inoltre non ho trovato nulla nella documentazione di biblatex (pagina 88 ss. Aka sec. 3.7.2 inizia a parlare del \printbibliography
comando.).
Risposte
Stranamente, non riesco a trovare un modo ovvio per farlo.
Ecco un'opzione che stampa l'intestazione, quindi inserisce l'etichetta, quindi stampa il resto della bibliografia. Per qualche motivo a me sconosciuto, il \@currentlabel
non viene aggiornato da \printbibheading
, quindi ho bisogno dell'hack per diminuire il contatore della sottosezione, quindi incrementarlo usando \refstepcounter
.
Sono rimasto a pensare che ci debba essere un'opzione migliore.
\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}

Dato che hai già dato esplicitamente il titolo della tua bibliografia, puoi semplicemente entrare di nascosto in un \label
lì.
Con MWE di David Purton e gli ovvi cambiamenti
\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 desideri una soluzione che selezioni automaticamente "Riferimenti" o "Bibliografia" a seconda della classe, puoi provare
\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}
Il comando interno \abx@classtype
viene utilizzato da biblatex
per rilevare determinate classi. Convenientemente, le "classi pari" sono article
simili e usate \refname
, le "classi dispari" sono simili a report
/ book
e usate \bibname
.
Notare che questo non tiene conto delle possibili modifiche del titolo predefinito nelle definizioni dell'intestazione della bibliografia.
Un'alternativa potrebbe essere quella di includere \label
direttamente nella definizione dell'intestazione della bibliografia. In questo caso sarebbe
\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}
(ovviamente potresti sovrascrivere il bibheading subbibnumbered
se vuoi, ma poiché l'etichetta è hardcoded nell'intestazione, potrebbe essere meglio scegliere un nome univoco per evitare di usarlo due volte.) In ogni caso, questo richiede di sapere / copia la definizione originale dell'intestazione della bibliografia utilizzata nel documento.
Dalla v3.16 di biblatex ora puoi usare label
.
Esempio e così via copiati dalla richiesta del problema / funzione , quindi tutti i crediti vanno a @moewew , che ha anche implementato questo.
Ecco un esempio:
\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}