使用 hyperref 和 biblatex 以及高度定制的引用使脚注引用链接到正确的参考书目项目

使用 hyperref 和 biblatex 以及高度定制的引用使脚注引用链接到正确的参考书目项目

我正在写一本参考文献风格非常独特的书。我使用一个名为 的特殊宏,\fcite它可以创建一个脚注,其中包含作者姓名、作品标题和日期。参考书目也是风格化的。我们的一些参考书目条目中有随机的 Unicode。因此我们使用:

  • 赛莱特
  • bibtex(biber 出现错误并且运行速度太慢)
  • 比布拉特克斯
  • 超链接

我无法让脚注正确链接到参考书目项目。

这是 mwe.tex 的 mwe:

\documentclass[12pt,english,twoside]{report}
\usepackage{xspace}
\usepackage[backend=bibtex,language=american,style=authoryear]{biblatex}
\usepackage[hidelinks,breaklinks,hyperindex=true]{hyperref}
\newcommand{\fcite}[2][]{\footnote{\citeauthor{#2}, \emph{\citetitle{#2}} (\citeyear{#2})\xspace#1\xspace}}
\addbibresource{mwe}
\begin{document}
This isn't Knuth,\fcite{knuth} you know.
\printbibliography
\end{document}

这是 mwe.bib:

@book{knuth,
author = {Knuth, Donald E.},
title = {The TeXbook},
year = {1986},
isbn = {0201134470},
publisher = {Addison-Wesley Professional}
}

下面是 Makefile:

mwe.pdf: mwe.tex mwe.bib
    xelatex mwe
    bibtex mwe
    xelatex mwe
    xelatex mwe

结果看起来不错,但我没有得到链接。我尝试更改:

\newcommand{\fcite}[2][]{\footnote{\citeauthor{#2}, \emph{\citetitle{#2}} 

到:

\newcommand{\fcite}[2][]{\footnote{\hyperlink{cite.#2}{\citeauthor{#2}, \emph{\citetitle{#2}}}

但这也不起作用。

如何使脚注链接到参考书目项目?

另外,有没有更简单的方法来实现这一切?目前,一切看起来都有点混乱。

答案1

在 中定义\...cite-like 命令的最佳方式biblatex是使用\DeclareCiteCommand。在 中放入几个不同的\...cite命令\newcommand通常会产生较差的结果(需要花费精力才能正确处理前后注,引用跟踪器可能会被丢弃,链接可能无法按预期工作,...)。

通常,用 定义的引用命令所做的主要工作\DeclareCiteCommand由相应的书目宏处理。以下我们的 bibmacrofcite基于cite来自的标准 bibmacroauthoryear.cbx(v3.15a 中第 10-18 行)。我们只需添加代码来始终打印labeltitle并确保链接始终适用于整个引用输出。

\documentclass[american]{article}
\usepackage[T1]{fontenc}
\usepackage{babel}
\usepackage{csquotes}

\usepackage[backend=bibtex, style=authoryear]{biblatex}
\usepackage[colorlinks,citecolor=blue,hyperindex=true]{hyperref}

\newbibmacro*{fcite}{%
  \printtext[bibhyperref]{%
    \iffieldundef{shorthand}
      {\ifnameundef{labelname}
         {\iffieldundef{label}
            {}
            {\printfield{label}%
             \setunit{\printdelim{nametitledelim}}}}
         {\printnames{labelname}%
          \setunit{\printdelim{nametitledelim}}}%
       \printfield[citetitle]{labeltitle}%
       \setunit{\addspace}%
       \DeclareFieldFormat{labeldate}{\mkbibparens{##1}}%
       \printlabeldateextra}
      {\printfield{shorthand}}}}

\DeclareCiteCommand{\fcite}[\mkbibfootnote]
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \usebibmacro{fcite}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareMultiCiteCommand{\fcites}[\mkbibfootnote]{\fcite}{\multicitedelim}

\DeclareAutoCiteCommand{fcite}[l]{\fcite}{\fcites}
\ExecuteBibliographyOptions{autocite=fcite}

\addbibresource{biblatex-examples.bib}

\begin{document}
Lorem \autocite{sigfridsson}
ipsum \autocite{nussbaum}
dolor \autocite{geer}

\printbibliography
\end{document}

将脚注与作者、标题和年份相链接。


如果需要在同一篇文档中为不同的条目添加不同的脚注\fcite,可以使用以下稍作修改的定义

\DeclareCiteCommand{\fcite}
  {}
  {\mkbibfootnote{%
     \ifnumequal{\value{citecount}}{1}
       {\usebibmacro{prenote}}
       {}%
     \usebibmacro{citeindex}%
     \usebibmacro{fcite}
     \ifnumequal{\value{citecount}}{\value{citetotal}}
       {\usebibmacro{postnote}}
       {}}}
  {}
  {}

\DeclareMultiCiteCommand{\fcites}{\fcite}{}

当然,这也会带来一系列问题(两个连续的脚注通常看起来很奇怪,甚至可能与具有不同编号的单个脚注混淆)。


在问题中,您提到了参考书目中的随机 Unicode 字符。我不太确定我是否理解这是什么意思,但请记住,BibTeX 根本不理解 Unicode。非 ASCII 字符需要使用其 LaTeX 宏转义:如何在参考书目中书写“ä”及其他变音符号和重音字母?。在大多数情况下,Unicode 字符会按原样传递,但在某些情况下(例如排序或当 BibTeX 需要计算字符时,例如姓名首字母),Unicode 字符可能会导致严重(或轻微)的麻烦。biblatex只有 Biber 才提供完整的 Unicode 支持。(这是 Biber 速度较慢的原因之一:它需要处理所有 Unicode,而不仅仅是 ASCII。这也是 Biber 有时对某些文件更挑剔的原因之一。BibTeX 不关心您的文件编码,它只会将其读取为 ASCII,但 Biber 需要知道正确的文件编码。)

相关内容