Come incrociare la bibliografia (intera)?

Aug 17 2020

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 \labele 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 \printbibliographycomando.).

Risposte

3 DavidPurton Aug 17 2020 at 13:28

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

3 moewe Aug 17 2020 at 14:12

Dato che hai già dato esplicitamente il titolo della tua bibliografia, puoi semplicemente entrare di nascosto in un \labellì.

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@classtypeviene utilizzato da biblatexper rilevare determinate classi. Convenientemente, le "classi pari" sono articlesimili e usate \refname, le "classi dispari" sono simili a report/ booke 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 \labeldirettamente 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 subbibnumberedse 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.

3 rugk Jan 03 2021 at 16:33

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}