我一直在寻找并注意到没有找到这个问题的答案,这让我很惊讶,因为这种风格很常见。
我刚刚切换到 biblatex,因为我所在领域的一些期刊使用脚注而不是内联引文,并且它可以轻松地在两者之间切换。我的问题是,我似乎无法获得任何 biblatex 命令组合来生成带有内联作者姓名和脚注年份的引文。(我使用 authoryear-icomp 作为 biblatex 样式。)
我想要的示例:
In my article I reference the recent work of Authorname^1, which is important.
^1: <this is a footnote containing only> Year.
就 natbib 而言,我想要一个 \citet{} 命令,将名称放在文本中,但将年份放在脚注中。我可以轻松使用 \footcite 将作者和年份放入脚注中,但似乎无法弄清楚如何将作者的姓名保留在文本中,以便某些句子保持流畅。
我显然可以通过写出作者姓名、标注年份并使用 \nocite 将其放入参考书目中来解决这个问题。然而,这将违背在期刊要求之间轻松切换的整个目的。
我认为有一个简单的解决方案,而我只是一个工具。帮忙吗?
答案1
第二种解决方案
再次编辑,以便大多数多引用命令都可以工作。
已编辑,\footcite
现在可工作。
biblatex
一个合理有效的解决方案是调整引用中打印年份的方式,从而保留 的许多功能。这可以通过重新定义与cite:year
和相关的命令来实现cite:extrayear
。这样做的好处是保留了 ibidem 功能。
下面的代码包括一个示例书目,然后是带有重新定义的引用代码的主文件。
\begin{filecontents}{test.bib}
@Article{Test,
author = {Author, A. N.},
title = {Article title},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
@Article{Test2,
author = {Author, A. N.},
title = {Second article},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
@Article{Test3,
author = {Author, A. B.},
title = {Third article},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
@Article{Test4,
author = {Author, A. N.},
title = {Fourth article},
year = 2007,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear-icomp,autocite=plain]{biblatex}
\addbibresource{test.bib}
\renewbibmacro*{cite:labelyear+extrayear}{%
\iffieldundef{labelyear}
{}
{\iftoggle{blx@footnote}
{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}
{\footnote{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}}}}
\renewbibmacro*{cite:extrayear}{%
\iffieldundef{extrayear}
{}
{\iftoggle{blx@footnote}
{\printtext[bibhyperref]{\printfield{extrayear}}}%
{\footnote{\printtext[bibhyperref]{%
\printfield{labelyear}%
\printfield{extrayear}}}}}}
\renewcommand{\compcitedelim}{\space}
\begin{document}
\thispagestyle{empty}
\autocite{Test} and
\autocite[page 3]{Test}.
Some text \parencite{Test2}.
Here is a footnote citation\footcite{Test}.
\autocite{Test,Test4,Test3}.
\printbibliography
\end{document}
如上所示,它与 一起使用\autocite
,\parencite
并接受它们的可选参数。这种风格\autocite
与 相同\cite
。
我没有演示过\textcite
,尽管它的输出有时可能会有用;\footcite
也已经设置为工作,这要归功于biblatex
可以blx@footnote
检测我们是否在脚注中的切换。
代码还处理了大多数多重引用\cite{ref1,ref2}
。但是,如果ref1
和ref2
是同一作者在同一年出版的两本出版物,则会出现一个虚假的逗号。修复此问题需要对引用样式文件进行更大量的重写:中的每条命令\cite
、\textcite
等都author-icomp.cbx
包含一个显式逗号\setunit{\addcomma}
,需要将其删除。
原始解决方案
这里是原始解决方案的重新发布,因为这显然对 OP 最有帮助。它只是定义了一个新命令\citepfy
(plain-foot-year),该命令调用\citeauthor
后跟一个\footcite
仅产生年份的修改后的命令。它不接受 cite 命令通常使用的任何可选参数biblatex
。
\begin{filecontents}{b.bib}
@Article{Test,
author = {Author, A. N.},
title = {Article title},
year = 2005,
pages = {10-20},
journal = {Jour.},
vol = {100}
}
\end{filecontents}
\documentclass{article}
\usepackage[style=authoryear-icomp]{biblatex}
\addbibresource{b.bib}
\newcommand{\citepfy}[1]{\citeauthor{#1}\footyearcite{#1}}
\DeclareCiteCommand{\footyearcite}[\mkbibfootnote]
{\usebibmacro{cite:init}%
\usebibmacro{prenote}}
{\usebibmacro{citeindex}%
\usebibmacro{citeyear}}
{}
{\usebibmacro{cite:postnote}}
\begin{document}
\citepfy{Test}
\printbibliography
\end{document}