我在 (1) nodate 方面有问题,因此 (2) 使用 biblatex 2.9a、Biber 1.8、pdfTeX、版本 3.14159265-2.6-1.40.15 (TeX Live 2014) (预加载格式=pdflatex) 进行日期排序时遇到问题
(1) nodate 我无法让书目字符串 nodate 出现。我得到的是空白。由于日期字段为空白,因此它会将项目放在排序顺序的第一位,而不是最后一位。
原始投诉人在以下链接的早期版本中提供了有关此问题的最低限度工作示例: Biblatex 和没有日期的条目
我尝试了那里说可以成功使用的最小工作示例,但是使用 biber 1.6 时,我得到了:
Lennon, John. Peace on earth.
—. 1972. More peace on earth.
(1)-(2) 我希望首先显示日期版本,然后在未显示日期的版本中显示“nd”。我尝试使用 sortdate = {2099} 来更正排序顺序,但没有任何效果。在 bib 文件中设置 year = {nd} 有效,但这是一种黑客行为。
答案1
为了让 nodate 字符串也出现在参考书目中,请date+extrayear
像这样重新定义
\renewbibmacro*{date+extrayear}{%
\printtext[parens]{%
\iffieldsequal{year}{\thefield{datelabelsource}year}
{\printdateextralabel}%
{\printfield{labelyear}%
\printfield{extrayear}}}}%
此解决方案适用于mergedate=compact
(默认)authoryear
(和authoryear
类似的 bib 样式)mergedate
。对于其他设置,您必须应用不同的修改,但模式始终相同:删除检查\iffieldundef{\thefield{datelabelsource}year}
并确保执行代码的第二部分(“else”语句)(这通常可以通过简单地注释掉该\iffieldundef{\thefield{datelabelsource}year}
行来实现,因为代码的“if”部分通常是一个空组并且不执行任何操作)。
对于排序,我建议
\DeclareSortingScheme{nyt}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkey}
}
\sort{
\field{sortname}
\field{author}
\field{editor}
\field{translator}
\field{sorttitle}
\field{title}
}
\sort{
\field{sortyear}
\field{year}
\literal{9999}
}
\sort{
\field{sorttitle}
\field{title}
}
\sort{
\field[padside=left,padwidth=4,padchar=0]{volume}
\literal{0000}
}
}
这只是标准定义\literal{9999}
“年份”排序块末尾添加的标准定义。因此,我们将年份作为9999
排序项,如果不存在,当然这也可以应用于其他排序方案。
平均能量损失
\documentclass{article}
\usepackage{csquotes,filecontents}
\usepackage[style=authoryear,dashed=false]{biblatex}
\begin{filecontents*}{\jobname.bib}
@BOOK{lennon,
AUTHOR = "John Lennon",
TITLE = "Peace on earth"}
@BOOK{lennon1972,
AUTHOR = "John Lennon",
TITLE = "More peace on earth",
YEAR = "1972"}
\end{filecontents*}
\addbibresource{\jobname.bib}
\DeclareSortingScheme{nyt}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkey}
}
\sort{
\field{sortname}
\field{author}
\field{editor}
\field{translator}
\field{sorttitle}
\field{title}
}
\sort{
\field{sortyear}
\field{year}
\literal{9999}
}
\sort{
\field{sorttitle}
\field{title}
}
\sort{
\field[padside=left,padwidth=4,padchar=0]{volume}
\literal{0000}
}
}
\renewbibmacro*{date+extrayear}{%
\printtext[parens]{%
\iffieldsequal{year}{\thefield{datelabelsource}year}
{\printdateextralabel}%
{\printfield{labelyear}%
\printfield{extrayear}}}}%
\begin{document}
\textcites{lennon}{lennon1972}.
\printbibliography
\end{document}
答案2
您可以使用sortkey
字段来实现这一点,请参阅 biblatex 手册中的 3.5。例如,添加一个
SORTKEY = "Z",
或类似于您的 .bib 文件的相应条目。