Làm thế nào để tham khảo chéo (toàn bộ) thư mục?

Aug 17 2020

Một câu hỏi đơn giản, nhưng tôi không thể tìm thấy nó trên Stackexchange ở đây hoặc ở nơi khác.

Tôi muốn tham chiếu chéo tiêu đề được tạo bởi \printbibliography, tức là không phải mục nhập cụ thể mà chỉ là tiêu đề / trang bắt đầu.

Làm thế nào tôi có thể làm điều đó?

Tôi sử dụng nó như thế này:

\printbibliography[title={Quellenverzeichnis}, heading=subbibnumbered]

Vấn đề là gói tự động tạo tiêu đề của nó, vì vậy tôi không thể chỉ đặt một \labelở đó và tham chiếu đến nó.

Về cơ bản, tôi chỉ muốn làm những gì cần thiết để tôi có thể sử dụng thông thường \ref, \hyperref, \autoref, \fullref, vv

Và tôi cũng không tìm thấy bất cứ điều gì trong tài liệu biblatex (trang 88 ff. Aka giây 3.7.2 nó bắt đầu nói về \printbibliographylệnh.).

Trả lời

3 DavidPurton Aug 17 2020 at 13:28

Thật kỳ lạ, tôi không thể tìm thấy một cách rõ ràng để làm điều này.

Đây là một tùy chọn in tiêu đề, sau đó chèn nhãn, sau đó in phần còn lại của thư mục. Vì lý do nào đó mà tôi không biết, \@currentlabelnó không được cập nhật bởi \printbibheading, vì vậy tôi cần hack để giảm bộ đếm tiểu mục, sau đó tăng nó lên bằng cách sử dụng \refstepcounter.

Tôi nghĩ rằng phải có một lựa chọn tốt hơn.

\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

Vì bạn đã đưa ra tiêu đề thư mục của mình một cách rõ ràng, bạn chỉ cần lẻn vào \labelđó.

Với MWE của David Purton và những thay đổi rõ ràng

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

Nếu bạn muốn một giải pháp tự động chọn 'Tài liệu tham khảo' hoặc 'Thư mục tài liệu tham khảo' tùy thuộc vào lớp học, bạn có thể thử

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

Lệnh nội bộ \abx@classtypeđược sử dụng biblatexđể phát hiện các lớp nhất định. Một cách thuận tiện, 'các lớp chẵn' là article-like và sử dụng \refname, các 'lớp lẻ' là report/ book-like và sử dụng \bibname.

Lưu ý rằng điều này không tính đến những thay đổi có thể có của tiêu đề mặc định trong định nghĩa tiêu đề thư mục.


Một giải pháp thay thế là đưa \labeltrực tiếp vào định nghĩa tiêu đề thư mục. Trong trường hợp này, đó sẽ là

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

(tất nhiên bạn có thể ghi đè lên tiêu đề subbibnumberednếu bạn muốn, nhưng vì nhãn được mã hóa cứng trong tiêu đề, tốt hơn là bạn nên chọn một tên duy nhất để tránh sử dụng nó hai lần.) Trong mọi trường hợp, điều này yêu cầu bạn phải biết / sao chép định nghĩa gốc của tiêu đề thư mục được sử dụng trong tài liệu của bạn.

3 rugk Jan 03 2021 at 16:33

Kể từ v3.16 của biblatex, bạn hiện có thể sử dụng label.

Ví dụ, v.v. được sao chép từ yêu cầu vấn đề / tính năng , vì vậy tất cả các khoản tín dụng sẽ được chuyển đến @moewew , người cũng đã triển khai điều này.

Đây là một ví dụ:

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