我正在写一本参考文献风格非常独特的书。我使用一个名为 的特殊宏,\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 需要知道正确的文件编码。)