反时间顺序书目,使用 sorting=ydnt 和 sortyear

反时间顺序书目,使用 sorting=ydnt 和 sortyear

我正在尝试获取反时间顺序的书目,这意味着我只想将最新的项目显示在顶部。阅读了这个问题我假设,使用排序方案 ydnt 和 sortyear(格式为 2012-1、2012-2 等,其中 2012-1 早于 2012-2)应该可以做到这一点。

但事实并非如此,似乎只使用了 sortyear 的前四位数字或 year 中的条目(实际上是相同的)。

那么,为什么呢?我怎样才能在不声明新的排序方案的情况下获得从新到旧的排序书目?(这样做我会得到想要的结果。)

\documentclass{article}
\usepackage{filecontents}
\usepackage[english]{babel}
\usepackage[backend=biber,sorting=ydnt]{biblatex}

\begin{filecontents}{refs.bib}
@MISC{2012_1,
  author = {Me},
  title = {A Oldest, should be below},
  year = {2012},
  sortyear = {2012-1},
}
@MISC{2012_2,
  author = {Me},
  title = {C Second oldest, should be in middle},
  year = {2012},
  sortyear = {2012-2},
}

@MISC{2012_3,
  author = {Me},
  title = {B Newest, should be above},
  year = {2012},
  sortyear = {2012-3},
}
}\end{filecontents}

\addbibresource{refs.bib}

\begin{document}
\nocite{*}
\printbibliography
\end{document}

在此处输入图片描述

答案1

首先,请注意“2012-1”不是 biblatex 期望字段中有效的 ISO 8601 日期格式。出于显而易见的原因,date它也不是有效字段。这就是我们仍然保留该字段的原因。因此,要使其工作,这相当容易。将 .bib 条目的格式更改为例如:yearmonth

@MISC{2012_1,
  author = {Me},
  title = {A Oldest, should be below},
  year = {2012},
  month = {1}
}
@MISC{2012_2,
  author = {Me},
  title = {C Second oldest, should be in middle},
  year = {2012},
  month = {2}
}

@MISC{2012_3,
  author = {Me},
  title = {B Newest, should be above},
  year = {2012},
  month = {3}
}

然后在序言中定义一个新的“年份月份降序”排序规范。名称可以任意,但可以称之为“ymdnt”:

\DeclareSortingScheme{ymdnt}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort[direction=descending]{
    \field[strside=left,strwidth=4]{sortyear}
    \field[strside=left,strwidth=4]{year}
    \literal{9999}
  }
  \sort[direction=descending]{
    \field{month}
    \literal{9999}
  }
  \sort{
    \field{sortname}
    \field{author}
    \field{editor}
    \field{translator}
    \field{sorttitle}
    \field{title}
  }
  \sort{
    \field{sorttitle}
    \field{title}
  }
}

这只是“ydnt”方案的副本,并在年份后添加了biblatex.def字段排序month。然后加载 biblatex,sorting=ymdnt一切运行正常。

相关内容