Comment croiser la bibliographie (entière)?

Aug 17 2020

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 \labellà-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 \printbibliographycommande.).

Réponses

3 DavidPurton Aug 17 2020 at 13:28

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 \@currentlabeln'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}

3 moewe Aug 17 2020 at 14:12

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@classtypeest utilisée par biblatexpour détecter certaines classes. De manière pratique, les «classes paires» sont articlecomme et utilisent \refname, les «classes impaires» sont comme report/ booket 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 \labeldirectement 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 subbibnumberedsi 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.

3 rugk Jan 03 2021 at 16:33

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}