如何获取 \citeyear 中的文字?

如何获取 \citeyear 中的文字?

我有以下文件

\documentclass[12pt,a4paper]{report}
\usepackage{fontspec}
\usepackage{xunicode}
\usepackage{polyglossia}
\usepackage[maxlevel=3]{csquotes}
\usepackage{graphicx}
\usepackage[style=authoryear, language=french]{biblatex}
\setmainfont[Ligatures=TeX]{FreeSerif}
\setmainlanguage{french}
\setotherlanguage{english}
\usepackage{placeins}

\usepackage{setspace}
\onehalfspacing

例如,当我使用以下代码时:

\parencite{Boin2000} and \parencite{Boin2000b} 

我得到以下结果:

Boin,2000a 和 Boin,2000b

但是当我使用代码时:

\citeyear{Boin2000} and \citeyear{boin2000b}

我只得到:

2000 年和 2000 年

Boin2000 和 Boin2000b 与以下 .bib 文档相关:

@Book{Boin2000,
Title                    = {The Politics of Environment},
Author                   = {Boin, Mathis},
Publisher                = {Cambridge University Press},
Year                     = {2000},}

 @Book{Boin2000b,
 Title                    = {What is Environment},
 Author                   = {Boin, Mathis},
 Publisher                = {Environment Policies Review},
 Year                     = {2000},}

我应该怎么做才能获得用于区分 \citeyear 两个不同参考文献的字母“a”和“b”?

答案1

如果您考虑该命令的应用,那么\citeyear不打印附加字母(字段)是有意义的:它用于写诸如“2000 年,Foo 终于成功发表了证明。”之类的内容,而不是用于识别引用;这就是其他引用命令(如)的用武之地。extrayear\citeyear\cite\textcite

\citeyear有一个带星号的变体\citeyear*,它还会打印extrayear。从代码来看,如果labeldate不是从date而是从 中取出origdate(例如),则这可能会导致复杂情况,然后extrayear属于origdate,而不是date,但字母附加在 上origdate

但是,前两个解决方案默认并未启用超链接。

authoryear您可以使用以下方式隐藏和authortitle样式中的作者提及\cite*。当使用authoryear样式时,这实际上相当于只打印年份(labelyear实际年份)以及extryear必要时。

如果由于某种原因\cite*不起作用(或未在自定义样式中实现),并且您担心\citeyear*我上面提到的极端情况,我们可以自己定义它

\DeclareCiteCommand{\citelabelyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\printtext[bibhyperlink]{\iffieldundef{labelyear}
   {\printfield{year}}
   {\printfield{labelyear}%
    \iffieldundef{extrayear}
      {}
      {\printfield{extrayear}}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

平均能量损失

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage[style=authoryear,backend=biber]{biblatex}
\usepackage{hyperref}
\addbibresource{biblatex-examples.bib}

\DeclareCiteCommand{\citelabelyear}
  {\boolfalse{citetracker}%
   \boolfalse{pagetracker}%
   \usebibmacro{prenote}}
  {\printtext[bibhyperlink]{\iffieldundef{labelyear}
   {\printfield{year}}
   {\printfield{labelyear}%
    \iffieldundef{extrayear}
      {}
      {\printfield{extrayear}}}}}
  {\multicitedelim}
  {\usebibmacro{postnote}}

\begin{document}
  \citeyear{knuth:ct:b} and \citeyear{knuth:ct:c}

  \citeyear*{knuth:ct:b} and \citeyear*{knuth:ct:c}

  \cite*{knuth:ct:b} and \cite*{knuth:ct:c}

  \citelabelyear{knuth:ct:b} and \citelabelyear{knuth:ct:c}
\end{document}

在此处输入图片描述

答案2

这实际上不是一个答案,但我认为对于评论来说它太长了......

我真的需要一个像知道这是否是重复的问题。您是否使用 biblatex,如果是,是什么版本?您的问题可能已经得到解答这里,描述了更新可能修复的错误。

如果您不使用 biblatex 或者该问题不适用于您的情况,我们至少需要查看您的 .bib 内容boin2000boin2000b外观。这些是用户定义的标签,因此我认为它们本身并不能告诉我们太多信息。

编辑:

我使用以下 MWE 重现了 biblatex v2.9a 的问题

\documentclass{article}

\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@Book{Boin2000,
Title                    = {The Politics of Environment},
Author                   = {Boin, Mathis},
Publisher                = {Cambridge University Press},
Year                     = {2000},}
@Book{Boin2000b,
Title                    = {What is Environment},
Author                   = {Boin, Mathis},
Publisher                = {Environment Policies Review},
Year                     = {2000},}
@Book{Anderson2003,
author      = {Anderson, John D.},
title       = {Modern Compressible Flow},
publisher   = {McGraw-Hill},
year        = {2003},
}
\end{filecontents*}

\usepackage[backend=bibtex,style=authoryear]{biblatex}
\addbibresource{test}

\begin{document}
    My first citation should be \citeyear{Boin2000}, my second \citeyear{Boin2000b}, and my third \citeyear{Anderson2003}.
    \printbibliography
\end{document}

结果是

引文示例

并重现了您的问题。四处询问,看看这是否仍然是 2.9a 版本中的错误……

相关内容