前段时间,我(高兴地)从 切换natbib
到biblatex
。然而,有一件事没有像我预期的那样发挥作用,那就是引用别名,在 natbib 中,它允许我指定我想要显示的针对特定引用的文本。这将
将该项目添加到参考书目中;
显示指定的别名而不是项目的引用;
使打印的别名成为参考书目中相应条目的链接。
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
功能也是如此。
biblatex
的natbib
兼容模式应该 — — 经过一些修改 — — 就能完全满足您的要求。
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) 当然,\nocite
d 项在参考书目中不会有反向引用,毕竟它在技术上并没有被引用。
平均能量损失
\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}
是否足以创建反向引用。