按条目类型对参考书目进行排序

按条目类型对参考书目进行排序

我正在使用 BibTeX。对于整体配置,我使用一个.cls文件。我正在寻找一种方法来按以下顺序对参考书目进行排序:书籍、文章和杂项。目前,所有类型的材料都根据作者姓名进行排序。由于我没有使用 author 参数misc,因此所有misc类别都会首先出现,而我不希望发生这种情况。

答案1

使用方法如下biblatexdefernumbers包选项确保根据书目中的条目顺序分配数字标签。)

\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弹出布尔值和两个代码块并根据布尔值执行其中一个。所以,你可以在一段时间后解密它,但我认为它永远不会变得真正可读。(实际上,在我看来,写起来比读起来容易)。

相关内容