一个简单的问题,但我无法在 Stackexchange 或其他地方找到它。
我想交叉引用生成的标题\printbibliography
,即不是特定条目而只是标题/起始页。
我怎样才能做到这一点?
我是这样使用它的:
\printbibliography[title={Quellenverzeichnis}, heading=subbibnumbered]
问题是包会自动生成其标题,所以我不能只将其放在\label
那里并引用它。
基本上,我只想做需要做的事情,这样我就可以使用通常的\ref
,,,\hyperref
\autoref
\fullref
ETC。
我也没有发现任何东西biblatex 文档(第 88 页及后续页面,即第 3.7.2 节开始讨论该\printbibliography
命令。)
答案1
自 biblatex v3.16 版本起您现在就可以使用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}
答案2
奇怪的是,我找不到明显的方法来做到这一点。
这是一个选项,先打印标题,然后插入标签,然后打印参考书目其余部分。由于某些我不知道的原因,没有\@currentlabel
通过 更新\printbibheading
,所以我需要使用 hack 来减少子部分计数器,然后使用 增加它\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}
答案3
由于您已经明确给出了参考书目的标题,因此您可以直接将其偷偷放在那里\label
。
David Purton 的 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
-like 并使用\refname
,“奇数类别”是report
/ book
-like 并使用\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
如果您愿意,您可以覆盖书目标题,但由于标签在标题中是硬编码的,因此最好选择一个唯一的名称以避免重复使用。)无论如何,这要求您知道/复制文档中使用的参考书目标题的原始定义。