Comment croiser la bibliographie (entière)?
Une question simple, mais je n'ai pas pu la trouver sur Stackexchange ici ou ailleurs.
Je veux faire un renvoi à l'en-tête généré par \printbibliography
, c'est-à-dire pas une entrée spécifique mais juste le titre / la page de départ.
Comment puis je faire ça?
Je l'utilise comme ceci:
\printbibliography[title={Quellenverzeichnis}, heading=subbibnumbered]
Le problème est que le package génère automatiquement son en-tête, je ne peux donc pas simplement placer un \label
là-bas et y faire référence.
Au fond, je veux juste faire ce qui est nécessaire pour que je puisse utiliser l'habituel \ref
, \hyperref
, \autoref
, \fullrefetc.
Et je n'ai rien trouvé non plus dans la documentation biblatex (page 88 et suiv. Aka sec. 3.7.2 il commence à parler de la \printbibliography
commande.).
Réponses
Bizarrement, je ne trouve pas de moyen évident de faire cela.
Voici une option qui imprime l'en-tête, puis insère l'étiquette, puis imprime le reste de la bibliographie. Pour une raison inconnue de moi, le \@currentlabel
n'est pas mis à jour par \printbibheading
, donc j'ai besoin du hack pour décrémenter le compteur de sous-sections, puis l'incrémenter en utilisant \refstepcounter
.
Je pense qu'il doit y avoir une meilleure option.
\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}
Puisque vous donnez déjà explicitement le titre de votre bibliographie, vous pouvez simplement vous y glisser \label
.
Avec le MWE de David Purton et les changements évidents
\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 vous souhaitez une solution qui sélectionne automatiquement «Références» ou «Bibliographie» en fonction de la classe, vous pouvez essayer
\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}
La commande interne \abx@classtype
est utilisée par biblatex
pour détecter certaines classes. De manière pratique, les «classes paires» sont article
comme et utilisent \refname
, les «classes impaires» sont comme report
/ book
et utilisent \bibname
.
Notez que cela ne prend pas en compte les changements possibles du titre par défaut dans les définitions des en-têtes de bibliographie.
Une alternative serait d'inclure le \label
directement dans la définition de l'en-tête de la bibliographie. Dans ce cas, ce serait
\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}
(bien sûr, vous pouvez écraser le bibheading subbibnumbered
si vous le souhaitez, mais comme l'étiquette est codée en dur dans l'en-tête, il peut être préférable de choisir un nom unique pour éviter de l'utiliser deux fois.) Dans tous les cas, cela nécessite que vous sachiez / copiez la définition originale de l'en-tête de la bibliographie utilisée dans votre document.
Depuis la v3.16 de biblatex, vous pouvez désormais utiliser label
.
Exemple et ainsi de suite copié à partir de la demande de problème / fonctionnalité , donc tous les crédits vont à @moewew , qui a également mis en œuvre cela.
Voici un exemple:
\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}