Как сделать перекрестную ссылку на (всю) библиографию?
Простой вопрос, но мне не удалось найти его на Stackexchange здесь или где-то еще.
Я хочу сделать перекрестную ссылку на заголовок, созданный \printbibliography
, т.е. не на конкретную запись, а только на заголовок / начальную страницу.
Как я могу это сделать?
Я использую это так:
\printbibliography[title={Quellenverzeichnis}, heading=subbibnumbered]
Проблема в том, что пакет генерирует заголовок автоматически, поэтому я не могу просто поместить \label
туда и сослаться на него.
В принципе, я просто хочу делать то , что нужно , чтобы я мог использовать обычный \ref
, \hyperref
, \autoref
, и \fullrefт.д.
И я также ничего не нашел в документах biblatex (стр. 88 и далее, также известный как раздел 3.7.2, он начинает говорить о \printbibliography
команде).
Ответы
Как ни странно, я не могу найти очевидного способа сделать это.
Вот вариант, который печатает заголовок, затем вставляет этикетку, а затем распечатывает остальную библиографию. По какой-то неизвестной мне причине, \@currentlabel
не обновляется \printbibheading
, поэтому мне нужен хак, чтобы уменьшить счетчик подразделов, а затем увеличить его, используя \refstepcounter
.
Я думаю, что должен быть лучший вариант.
\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}

Поскольку вы уже явно указали название своей библиографии, вы можете просто прокрасться \label
туда.
С MWE Дэвида Пертона и очевидными изменениями
\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}

Если вам нужно решение, которое автоматически выбирает «Ссылки» или «Библиография» в зависимости от класса, вы можете попробовать
\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}
Внутренняя команда \abx@classtype
используется biblatex
для обнаружения определенных классов. Удобно, что «даже классы» являются article
-как и использование \refname
, в «нечетные классы» являются report
/ book
-как и использование \bibname
.
Обратите внимание, что это не учитывает возможные изменения заголовка по умолчанию в определениях заголовков библиографии.
Альтернативой было бы включение \label
непосредственно в определение заголовка библиографии. В этом случае это было бы
\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}
(конечно, вы можете перезаписать заголовок, subbibnumbered
если хотите, но поскольку метка жестко закодирована в заголовке, может быть лучше выбрать уникальное имя, чтобы избежать его повторного использования). В любом случае для этого необходимо знать / скопируйте исходное определение заголовка библиографии, используемого в вашем документе.
Начиная с версии 3.16 biblatex теперь вы можете использовать label
.
Пример и т. Д. Скопированы из запроса на выпуск / функцию , поэтому все кредиты достаются @moewew , который также это реализовал.
Вот пример:
\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}