![更改 biblatex 中两个条目的顺序](https://linux22.com/image/382018/%E6%9B%B4%E6%94%B9%20biblatex%20%E4%B8%AD%E4%B8%A4%E4%B8%AA%E6%9D%A1%E7%9B%AE%E7%9A%84%E9%A1%BA%E5%BA%8F.png)
我在一个凌乱的 .bib 文件中列出了相当长的参考文献列表。除了同一作者在 19xx 年和 20xx 年出版的出版物顺序不同之外,其他一切都正常。以下是 MWE:
\documentclass{article}
\usepackage[backend=biber,
sortlocale=auto,
natbib,
hyperref,
style=alphabetic,
citestyle=authoryear]{biblatex}
\addbibresource{testbib.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
.bib 文件:
@article{article1,
title={The First Title},
author={Author, A.},
journal={Journal},
volume={42},
pages={1--100},
year={1994}
}
@article{article2,
title={The Second Title},
author={Author, A.},
journal={Journal},
volume={42},
pages={1--100},
year={1996}
}
@article{article3,
title={The Third Title},
author={Author, A.},
journal={Journal},
volume={42},
pages={1--100},
year={2009}
}
显然,biblatex 仅按最后两位数字对条目进行排序,这是错误的顺序。我该如何解决这个问题?如果这个问题没有“好”的解决方案,我该如何改变这三个条目的顺序而不改变其余条目的顺序?正如我所说,我的参考资料真的很乱,而且还在不断增加,所以我不想自己对它们进行排序。
顺便问一下,我怎样才能用斜体打印标题,用普通字体打印日记?我试过了
\DeclareFieldFormat{title}{\textit{#1}}
\DeclareFieldFormat{journal}{#1}
但它不起作用。
答案1
Withstyle=alphabetic
biblatex
按字母标签对引用进行排序,并且仅按字母标签排序。此排序是简单的字符串排序,因此自然而然地,“Aut09”排在“Aut94”之前,而“Aut94”又排在“Aut96”之前。没有使用其他信息来确定顺序。
从读者的角度来看,这是有道理的(读者通常在查阅参考书目之前不知道参考文献的全部书目数据),而不是从你的角度来看(你自然知道一篇文章的发表时间,可能更喜欢按时间顺序排列)。在正常style=alphabetic
情况下(稍后会详细介绍),读者有仅有的字母标签。因此,当她在参考书目中查找引文时,她自然应该能够找到按标签排序的参考文献。想象一下,如果你引用了一位多产作家的许多作品,这位作家不仅活了很长时间,而且其中一些作品在他去世多年后才出版。在这种情况下,有些作品是 1900 年至 1960 年的作品,让我们再说一遍 1990 年至 2010 年的作品。当你的读者现在看到“[Aut09]”时,她不知道“09”是 1909 年还是 2009 年,所以在按年份排序的长列表中,她不知道该从哪里查找。但是,如果列表仅按标签排序,你的读者将很容易找到信息。仅根据引用标签中明确指明的数据对参考文献进行排序。现在,您可能会认为这个例子是人为的,没有人能活得足够久,以至于在两个世纪内出版作品,以至于标签的两个字母部分变得模棱两可,您可能是对的,但我仍然想争论为什么我认为默认设置毕竟没有那么错误。您可能还会认为,在简短的书目列表中,任何轻微的排序“不一致”可能都不是大问题,因为您的读者迟早会在他们认为应该找到参考的地方附近找到正确的项目。
顺便说一句:整个字母标签的胡说八道让我认为字母样式通常并不是很好。它们既不在这里(numeric
),也不在那里(authoryear
)。如果您喜欢简短而简洁的标签,请选择numeric
。如果您喜欢更长且可能更具信息量的标签,请选择authoryear
。虽然alphabetic
样式可能结合了两者的优点(“简短而信息量”),但这并不能保证:它们不需要具有信息量,也不需要简短,并且会带来自己的问题。
你的情况实际上更复杂,因为你使用了citestyle=authoryear
。这意味着参考书目中的字母标签实际上没有任何用处。毕竟,文本中的引用实际上使用了完整的作者年份格式。在这种情况下,我只需放弃字母标签,然后使用
style=authoryear,
如果您这样做,您的引用将按作者和年份(按时间顺序)排序,并且信息也将在引用标签中提供。
如果您必须保留字母标签和混合,style=alphabetic, citestyle=authoryear,
我可能会添加sorting=nyt
按作者和年份排序。
\documentclass{article}
\usepackage[backend=biber,
natbib,
style=alphabetic,
citestyle=authoryear,
sorting=nyt]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{article1,
title={The First Title},
author={Author, A.},
journal={Journal},
volume={42},
pages={1--100},
year={1994}
}
@article{article2,
title={The Second Title},
author={Author, A.},
journal={Journal},
volume={42},
pages={1--100},
year={1996}
}
@article{article3,
title={The Third Title},
author={Author, A.},
journal={Journal},
volume={42},
pages={1--100},
year={2009}
}
\end{filecontents}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
\printbibliography
\end{document}
对于您的其他问题,请尝试
\DeclareFieldFormat*{title}{\mkbibemph{#1}}
\DeclareFieldFormat{journaltitle}{#1}
(或者\DeclareFieldFormat[article]{title}{\mkbibemph{#1}}
不是\DeclareFieldFormat*{title}{\mkbibemph{#1}}
将变化限制在@article
s 上。)