对于我的学士论文,我希望在括号中使用简单的数字引用,并在文本中用作实际对象的引用中使用作者年份样式。到目前为止,我的解决方案是为后者定义了自定义引用样式;但是,这并没有链接到相应的参考书目条目。
平均能量损失
\documentclass[a4paper,english]{article}
\usepackage[backend=biber, style=numeric]{biblatex}
\addbibresource{refs.bib}
\usepackage{hyperref}
\newcommand\Mycite[1]{%
\citeauthor{#1}~(\citeyear{#1})}
\begin{document}
RAMSES is "a grid-based hydro solver with adaptive mesh refinement" \cite{ramses-web} \\
confer to \Mycite{emilio-paper-2014}
\printbibliography
\end{document}
refs.bib 的内容:
@misc{ramses-web,
title = {Ramses-Website},
howpublished = {\url{https://www.ics.uzh.ch/~teyssier/ramses/Documentation.html}},
note = {2018-08-27}
}
@ARTICLE{emilio-paper-2014,
author = {{Tomassetti}, M. and {Porciani}, C. and {Romano-D{\'{\i}}az}, E. and
{Ludlow}, A.~D.},
title = "{Simulating the H$_{2}$ content of high-redshift galaxies}",
journal = {\mnras},
archivePrefix = "arXiv",
eprint = {1403.7132},
keywords = {methods: numerical, ISM: molecules, galaxies: evolution, galaxies: formation},
year = 2015,
month = feb,
volume = 446,
pages = {3330-3345},
doi = {10.1093/mnras/stu2273},
adsurl = {http://adsabs.harvard.edu/abs/2015MNRAS.446.3330T},
adsnote = {Provided by the SAO/NASA Astrophysics Data System}
我如何才能使自定义引文命令链接到条目?我也同意其他使用不同命令但提供相同输出的建议。
答案1
您无法获得链接的主要原因\Mycite
是,您用来构建它的两个命令(\citeauthor
和\citeyear
)没有链接到参考书目。您可以重新定义这些构建块以链接它们的文本,这可以解决此问题,但我建议采用不同的方法。
\Mycite
在 MWE 中定义为已完成有两个巨大的缺点
它不能处理前后注,即可选参数
\cite
:\autocite[cf.][380]{sigfridsson}
如果一次引用多个条目,则会出现严重错误。请尝试
\Mycite{sigfridsson,worman}
。
可能出现的问题更多,只有使用高级功能(比如引用跟踪和计数)才会变得重要。其中一些缺点可以轻松解决,而另一些解决方法则更加困难。但还有更好的方法。
一般来说新的引用命令应该biblatex
通过以下方式定义\DeclareCiteCommand
而不是通过将几个高级引用命令粘合在一起\newcommand
。
所以你可以尝试类似
\documentclass{article}
\usepackage[style = numeric, labeldateparts, defernumbers = true, backend = biber, autocite=inline]{biblatex}
\usepackage{hyperref}
\newbibmacro*{cite:authoryear}{%
\printtext[bibhyperref]{%
\iffieldundef{shorthand}
{\ifthenelse{\ifnameundef{labelname}\OR\iffieldundef{labelyear}}
{\usebibmacro{cite:label}%
\setunit{\printdelim{nonameyeardelim}}}
{\printnames{labelname}%
\setunit{\printdelim{nameyeardelim}}}%
\usebibmacro{cite:labeldate+extradate}}
{\usebibmacro{cite:shorthand}}}}
\newbibmacro*{cite:shorthand}{%
\printfield{shorthand}}
\newbibmacro*{cite:label}{%
\iffieldundef{label}
{\printfield[citetitle]{labeltitle}}
{\printfield{label}}}
\newbibmacro*{cite:labeldate+extradate}{%
\iffieldundef{labelyear}
{}
{\printtext[parens]{\printlabeldateextra}}}
\DeclareCiteCommand{\aycite}
{\usebibmacro{prenote}}%
{\usebibmacro{citeindex}%
\usebibmacro{cite:authoryear}}
{\multicitedelim}
{\usebibmacro{postnote}}
\addbibresource{biblatex-examples.bib}
\begin{document}
The first two citations \autocite{sigfridsson} and \autocite{worman}.
The others are \aycite{baez/online} and \aycite{ctan,markey}.
\printbibliography
\end{document}
但是,该示例中的输出并不理想。所有条目在参考书目中都会获得一个标签编号,即使那些仅使用作者-年份标签引用的条目也是如此,作者和年份在参考书目中并不那么突出,这使得条目style=authoryear
更难找到。此外,只有引用命令的选择才能决定引用格式:这需要您记住要使用哪个命令引用哪个项目。
如果有一个简单的规则来控制一个条目是否要被引用为数字或作者年份,那么我建议你寻找一个自动解决方案,它只使用一个命令来决定使用哪种格式。这样的引用方案可以在两种不同风格和排序的书目,第 2 卷其中格式由 决定keyword
,但也可以由条目类型或通过临时(依赖于文档)类别分配来决定。
一般来说,我会避免在同一文档中混合使用几种引用样式。混合样式非常不常见,一开始可能会让人感到困惑。大多数样式指南都提倡引用样式的一致性,这是有充分理由的。对于一些非常受限制的用途,我可以看到使用不同样式的好处,但我不确定你的想法是否真的属于这一类。