biblatex 的超链接引用别名

biblatex 的超链接引用别名

前段时间,我(高兴地)从 切换natbibbiblatex。然而,有一件事没有像我预期的那样发挥作用,那就是引用别名,在 natbib 中,它允许我指定我想要显示的针对特定引用的文本。这将

  1. 将该项目添加到参考书目中;

  2. 显示指定的别名而不是项目的引用;

  3. 使打印的别名成为参考书目中相应条目的链接。

  4. backref而且因为这是 biblatex,如果使用该选项,我希望他们也添加适当的 backref 。

我尝试natbib=true在加载时使用该选项biblatex(如文档第 3.7.9 节所述),但这并不能解决问题3

尝试解决3我做了以下 MWE 所体现的尝试:

\documentclass{article}

\usepackage{pgffor}
\usepackage[backend=biber,style=authoryear,backref=true]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{test,
  author = {Author, A.},
  year = {2013},
  title = {Title},
  journal = {Some Journal},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}

\pgfkeys{
  /bibalias/.is family, bibalias,
  text/.store in = \bibaliastext,
}
\newcommand{\defcitealias}[2]{%
  \pgfkeys{
    bibalias,
    #1/.style={text={#2}},
  }
}
\newcommand{\citealias}[1]{%
  \pgfkeys{bibalias, #1}%
  \nocite{#1}%
%   \bibhyperref[#1]{\bibaliastext}%
}
\defcitealias{test}{an alias}

\usepackage{filecontents}

\begin{document}

This is a test for \citealias{test}.

\printbibliography

\end{document}

但它似乎\bibhyperref没有像我预期的那样工作,因为它会因错误而停止Undefined control sequence,在仔细阅读文档后,它似乎仅在引用样式定义期间可用。它还有一个问题\nocite没有向参考书目添加反向引用(4)。

那么,如何在 biblatex 中使用引用别名,以期满足上述所有四个标准?

答案1

有两种方法可以实现这一点,您可以使用字段shorthand,也可以采用natbib兼容模式。这两种方法的区别在于,前者(选项shorthand)别名(shorthand)几乎在整个文档中都用作引用标签,而后者(别名)解决方案允许通过在和(或和)natbib之间进行选择来选择使用别名或标准引用标签。\cite\citealias\citep\citepalias


shorthand为条目定义了一个新标签,用来代替样式通常生成的“标准”标签(请参阅第 22 页第 2.2.2 节biblatex请参阅文档)。

@article{test,
  author  = {Author, A.},
  year    = {2013},
  title   = {Title},
  journal = {Some Journal},
}

如果我们添加字段,则在authoryear样式中可能会引用“作者 2013”shorthand

@article{test,
  author  = {Author, A.},
  year    = {2013},
  title   = {Title},
  journal = {Some Journal},
  shorthand = {alias},
}

引用将是“别名”。

有些样式需要引入简写(例如,样式verbose引用完整条目(第一次),并添加“此后引用为shorthand“消息,后续引用将使用简写)。

如果你在非verbose风格(或没有引入简写)中使用简写,那么最好也\printshorthands参见§3.6.3,第 73 页biblatex

当然,超链接在这里可以按预期工作;backref功能也是如此。


biblatexnatbib兼容模式应该 — — 经过一些修改 — — 就能完全满足您的要求。

1) 和 2) 很容易通过 来满足natbib=true

3)要添加参考书目条目的链接,请将其添加到您的序言中(您可以在中找到原始定义blx-natbib.def)。

\makeatletter
\DeclareCiteCommand{\citetalias}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\@citealias{\thefield{entrykey}}}}%<-- added \printtext[bibhyperref]{...}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citepalias}[\mkbibparens]
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\@citealias{\thefield{entrykey}}}}%<-- added \printtext[bibhyperref]{...}
  {\multicitedelim}
  {\usebibmacro{postnote}}
\makeatother

4) 当然,\nocited 项在参考书目中不会有反向引用,毕竟它在技术上并没有被引用。

平均能量损失

\documentclass{article}

\usepackage[backend=biber,style=authoryear,backref=true,natbib]{biblatex}
\begin{filecontents}{\jobname.bib}
@article{test,
  author = {Author, A.},
  year = {2013},
  title = {Title},
  journal = {Some Journal},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\usepackage{hyperref}

\makeatletter
\DeclareCiteCommand{\citetalias}
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\@citealias{\thefield{entrykey}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\DeclareCiteCommand{\citepalias}[\mkbibparens]
  {\usebibmacro{prenote}}
  {\usebibmacro{citeindex}%
   \printtext[bibhyperref]{\@citealias{\thefield{entrykey}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}
\makeatother

\defcitealias{test}{an alias}

\begin{document}
This is a test for \citetalias{test} and \citepalias{test}; the standard cite commands give \citet{test} and \citep{test}
\printbibliography
\end{document}

给出

在此处输入图片描述

可以很容易地检查一个简单的\citetalias{test}是否足以创建反向引用。

相关内容