当我引用同一作者在同一年出版的两部作品时,biblatex
我会根据它们的标题对参考书目进行排序。但在某些情况下,我知道排在第二位的作品实际上是最早出版的。我该如何重新排序?
\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear,sorting=nyt]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1972a,
AUTHOR = "John Lennon",
TITLE = "My music",
YEAR = "1972"}
@BOOK{lennon1972b,
AUTHOR = "John Lennon",
TITLE = "More of my music",
YEAR = "1972"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cites{lennon1972a}{lennon1972b}
\printbibliography
\end{document}
答案1
灵感来自恩里克的回答,最好的方法似乎是使用选项sorttitle
,如第 3.5 条所述biblatex
文档。根据该描述,biblatex
按以下顺序排序:
presort
2.sortkey
3.author
4.year
5.sorttitle
如果定义了,则 ,否则title
。
1 和 2 通常不定义。若要覆盖 5 中按标题排序,请定义sorttitle
:
\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear,sorting=nyt]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1972a,
AUTHOR = "John Lennon",
TITLE = "My music",
YEAR = "1972",
SORTTITLE = "a"}
@BOOK{lennon1972b,
AUTHOR = "John Lennon",
TITLE = "More of my music",
YEAR = "1972",
SORTTITLE = "b"}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cites{lennon1972a}{lennon1972b}
\printbibliography
\end{document}
答案2
请参阅 biblatex 手册中的排序选项。默认为“nty”(名称,然后是标题,然后是年份),但可以更改,或者您可以定义自己的自定义排序方案(请参阅\DeclareSortingScheme
)。看起来您可能想要sorting=nyt
。
或者,您可能想让您的 .bib 知道哪一个先出现(仅仅让您知道没有多大意义……)。在您的 .bib 中放入一个 MONTH 字段以区分同一 YEAR 内的条目,然后使用自定义排序规范:
\DeclareSortingScheme{nymt}{
\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}
}
\sort{
\field{month}
}
\sort{
\field{sorttitle}
\field{title}
}
\sort{
\field[padside=left,padwidth=4,padchar=0]{volume}
\literal{0000}
}
}
然后使用选项sorting=nymt
如果您不想在参考书目中看到月份,请也将其放入序言中:
\AtEveryBibitem{\clearfield{month}\clearfield{labelmonth}}
答案3
你正在寻找的是类似于sortkey
字段(或可能是presort
)的内容。检查§3.5(或§4.5.5 以获得更复杂的排序方案 - 检查这个答案是一个很好的例子)biblatex
文档
恕我直言,你应该将书目视为引文索引;它旨在“解码”引文标签,并为读者提供有关该主题的优秀文献汇编。无论看起来多么奇怪,中途更改排序方案都可能使你的书目混乱。
以下是 MWE:
\documentclass{article}
\usepackage{filecontents}
\usepackage[style=authoryear,sorting=nyt]{biblatex}
\begin{filecontents}{\jobname.bib}
@BOOK{lennon1972a,
AUTHOR = "John Lennon",
TITLE = "My music",
YEAR = "1972",
SORTKEY = {a}
}
@BOOK{lennon1972b,
AUTHOR = "John Lennon",
TITLE = "More of my music",
YEAR = "1972",
SORTKEY = {b}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\cites{lennon1972a}{lennon1972b}
\printbibliography
\end{document}
答案4
最简单的方法是在参考书目文件中设置月份,因为它是排序的默认后备,例如:
month = jan
(如果作者多产,你也可以瞄准出版当天)
如果您不知道,并且不想人为地放置一个,或者如果您想要另一种解决方案,您也可以在编译后编辑 .bbl 文件,手动重新排序这两个文章(并更改其名称)并再次编译。来自:
\bibitem[Lennon 1972a]{lennon1972b}
John Lennon.
\newblock More of my music. 1972
\bibitem[Lennon 1972b]{lennon1972a}
John Lennon.
\newblock My music. 1972
到
\bibitem[Lennon 1972a]{lennon1972a}
John Lennon.
\newblock My music. 1972
\bibitem[Lennon 1972b]{lennon1972b}
John Lennon.
\newblock More of my music. 1972
(只要本案中冲突的论文数量较少,此解决方案即可有效)