我正在使用 BibTeX。对于整体配置,我使用一个.cls
文件。我正在寻找一种方法来按以下顺序对参考书目进行排序:书籍、文章和杂项。目前,所有类型的材料都根据作者姓名进行排序。由于我没有使用 author 参数misc
,因此所有misc
类别都会首先出现,而我不希望发生这种情况。
答案1
使用方法如下biblatex
(defernumbers
包选项确保根据书目中的条目顺序分配数字标签。)
\documentclass{article}
\usepackage[defernumbers=true]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@misc{A01,
author = {Author, A.},
year = {2001},
title = {Alpha},
}
@book{B02,
author = {Buthor, B.},
year = {2002},
title = {Bravo},
location = {Location},
publisher = {Publisher},
}
@article{C03,
author = {Cuthor, C.},
year = {2003},
title = {Charlie},
journaltitle = {Journal title},
volume = {1},
}
\end{filecontents}
\addbibresource{\jobname.bib}
\nocite{*}
\begin{document}
\printbibliography[type=book,title={Books}]
\printbibliography[type=article,title={Articles}]
\printbibliography[nottype=book,nottype=article,title={Miscellaneous}]
\end{document}
(filecontents 环境仅用于将一些外部文件直接包含到示例中,以便进行编译。对于解决方案来说,它不是必需的。)
答案2
您需要更改 bst 文件中的排序键才能实现此目的。假设您使用书目样式 alpha。然后将alpha.bst
(您可以通过 在您的系统上找到它kpsewhich alpha.bst
)复制到您的 tex 目录中,并将其重命名为 之类的名称myalpha.bst
。在该文件中查找该函数presort
,并在该函数的最末尾(就在 之前}
)插入以下代码:
type$ "book" =
{
"01-" sort.key$ *
'sort.key$ :=
}
{
type$ "article" =
{
"02-" sort.key$ *
'sort.key$ :=
}
{
"99-" sort.key$ *
'sort.key$ :=
}
if$
}
if$
这段相当奇怪的代码将书籍的排序键前缀为 01-,将文章的排序键前缀为 02-,将其余的排序键前缀为 99-。
注意:如果您想知道所有这些意味着什么:bibtex 在 bst 文件中使用基于堆栈的语言,因此您首先推送参数,然后推送运算符或函数,该运算符或函数从堆栈顶部弹出其参数,计算其结果,然后将结果推送到堆栈上。例如,将type$ "book" =
类型字段的内容推送到堆栈上,然后将字符串“book”推送到堆栈上,最后推送比较运算符“=”。如果两者相等,“=”将在堆栈上推送 true,否则推送 false。然后将{}
两个代码块推送到堆栈上,然后$if
弹出布尔值和两个代码块并根据布尔值执行其中一个。所以,你可以在一段时间后解密它,但我认为它永远不会变得真正可读。(实际上,在我看来,写起来比读起来容易)。