我的书目有问题。我必须将其分成不同的部分(书籍/文章)。问题是,我有同一作者在同一年出版的文章和书籍。使用 biblatex 和“authoryear”,它们按标题的字母顺序排序。
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{references.bib}
@article{Anonymous:2012b,
Author = {Anonymous, Arthur},
Journal = {Somewhere},
Pages = {46-54},
Title = {Arthur's article},
Volume = {25 (2012)},
Year = {2012}}
@article{Anonymous:2012c,
Author = {Anonymous, Arthur},
Journal = {Somewhere else},
Pages = {6-12},
Title = {Last words},
Volume = {43 (2012)},
Year = {2012}}
@book{Anonymous:2012a,
Address = {Someplace},
Author = {Anonymous, Arthur},
Publisher = {Nobody},
Title = {Book by Arthur},
Year = {2012}}
\end{filecontents}
\bibliography{references.bib}
\begin{document}
\nocite{*}
\printbibliography[title={Books}, type=book]
\printbibliography[title={Articles},type=article]
\end{document}
我不被允许发布结果图片,但主要结果是:“Arthur 的书”获得标签“2012b”。问题是:我需要自动排序,将书籍标记为 2012a(因为它是参考书目中给出的第一个参考资料),将第一篇文章标记为 2012b。
我找不到解决方案。也许有人有办法?
非常感谢!
好的,我正在尝试指定我必须实现的目标,并且我将提供一个没有代码的简单示例(因为我现在不在家;我将尝试稍后添加一个基于代码的示例)。
我的博士论文包含特定时期内两位作者的所有出版物的参考书目。因此,问题不仅仅是局部问题,而是或多或少遍布各处。参考书目可能包含至少 500 种出版物,更有可能包含近 1000 种出版物,涵盖 30 年内各种类型。除了将这些参考书目分成不同的部分(如果解决了主要问题,这将很容易),我需要的一般排序如下:
名称、年份,以及(!)每一年内:先是“书籍”,然后是“收藏”,然后是“文章”
内容如下:
匿名 2001a:文章(标题:“a”)
匿名 2001b:文章(标题:“x”)
Anonymous 2002a:书籍(标题:“e”)
匿名 2002b:书籍(标题:“m”)
Anonymous 2002c:书籍(标题:“z”)
匿名 2002d:文章(标题:“b”)
Anonymous 2003a:书籍(标题:“g”)
匿名 2003b:文章(标题:“d”)
匿名 2003c:文章(标题:“h”)
Anonymous 2004a:书籍(标题:“n”)
匿名 2004b:收藏(标题:“j”)
匿名 2005a:收藏(标题:“y”)
匿名 2005b:文章(标题:“k”)
Anonymous 2012a:书籍(标题:“n”)
匿名 2012b:文章(标题:“l”)
匿名 2012c:文章(标题:“s”)
答案1
使用 biblatex 2.0 和 biber 1.0。您必须重新定义 nyt 排序方案并添加自定义字段,如下例所示。通常,这很容易,只需添加一个自定义字段,该字段具有基于条目的条目类型的排序值,然后在年份之后对其进行排序:
\DeclareSourcemap{
\maps[datatype=bibtex]{
\map{
\pertype{book}
\step[fieldset=usera, fieldvalue=1]
}
\map{
\pertype{article}
\step[fieldset=usera, fieldvalue=2]
}
}
}
\DeclareSortingScheme{nyt}{
\sort{
\field{presort}
}
\sort[final]{
\field{sortkey}
}
\sort{
\name{sortname}
\name{author}
\name{editor}
\name{translator}
\field{sorttitle}
\field{title}
}
\sort{
\field{usera}
}
\sort{
\field{sorttitle}
\field{title}
}
\sort{
\field{sortyear}
\field{year}
}
\sort{
\field[padside=left,padwidth=4,padchar=0]{volume}
\literal{0000}
}
}
答案2
我认为您可以通过在书籍中添加“预排序”字段来实现这一点。例如,将其添加Presort = {1}
到书籍条目中。似乎没有必要将其添加到其他条目中,并且设置了预排序字段的条目将首先进行排序。
如果你使用 Biber,你可以输入你的biber.conf
<?xml version="1.0" encoding="UTF-8"?>
<config>
<sourcemap>
<maps datatype="bibtex">
<map map_overwrite="1">
<per_type>BOOK</per_type>
<map_step map_field_set="presort"
map_field_value="1"/>
</map>
<map map_overwrite="1">
<per_type>INCOLLECTION</per_type>
<map_step map_field_set="presort"
map_field_value="2"/>
</map>
<map map_overwrite="1">
<per_type>ARTICLE</per_type>
<map_step map_field_set="presort"
map_field_value="3"/>
</map>
</maps>
</sourcemap>
</config>
这将自动将预排序字段添加到所有书籍、文章和收藏条目,并赋予其适当的值。当然,这假设您尚未使用预排序字段。
更新
当然,这是基于这样的假设(如原始帖子中所述),即只有两个相关的书目类别:书籍和文章,没有重叠。然后预排序技巧就起作用了,因为所有书籍最终都排在所有文章之前并不重要。如果类别之间没有重叠(即最终打印的每个书目都是独立的),那么在有三个或更多类别的情况下,这个技巧是可扩展的:只需扩展映射,使其根据确定类别的内容进行选择,并添加适当的预排序。
如果类别重叠,那么就无法按现状运作。在这种情况下,我们需要采取更细致入微的方法。我认为应该采用类似这样的方法。
(A) 首先像以前一样,presort
为书籍设置一个字段(假设您希望这些字段排在前面)。由于您有一个层次结构,因此您可以为每个字段设置不同的预排序字段,然后使用biber.conf
(如上所述)或即将发布的版本的新功能,biblatex
您可以从.tex
文件本身执行此操作。
(B) 现在修改排序方案,以便该presort
字段在年份之后但在标题之前使用。现在它仅适用于有多个作品已经通过作者和年份排序的情况。这将需要biber
。
\DeclareSortingScheme{custom}{%
\sort{\name{sortname}
\name{author}
\name{editor}
\name{translator}}
\sort{\field{year}}
\sort{\field{presort}}
\sort{\field{sorttitle}
\field{title}}}
现在加载 biblatex 并选择使用此排序方案[...backend=biber,sorting=custom]
。
当然如果你已经出于某种目的使用了预排序,那么这可能会有问题(尽管不是非常有问题:人们只会使用usera
或诸如此类);但假设你没有这样做,这实际上使你可以更有辨别力地使用它:你不会在所有文章之前获得所有书籍,只会在同一个作者的文章之前获得同一作者的书籍。
答案3
的问题presort
是,它确实是排序时要使用的第一个键。您可能更适合使用sorttitle
bib 条目,这是一个仅用于排序的特殊字段。同样,还有 等等sortyear
。第 3.4 节BibLaTeX 文档详细解释了排序的工作原理以及如何对其进行微调。
例如
\documentclass{article}
\usepackage[style=authoryear]{biblatex}
\usepackage{filecontents}
\begin{filecontents}{references.bib}
@article{Anonymous:2012b,
Author = {Anonymous, Arthur},
Journal = {Somewhere},
Pages = {46-54},
Title = {Arthur's article},
Volume = {25 (2012)},
Year = {2012},
sorttitle = {b}}
@article{Anonymous:2012c,
Author = {Anonymous, Arthur},
Journal = {Somewhere else},
Pages = {6-12},
Title = {Last words},
Volume = {43 (2012)},
Year = {2012},
sorttitle = {c}}
@book{Anonymous:2012a,
Address = {Someplace},
Author = {Anonymous, Arthur},
Publisher = {Nobody},
Title = {Book by Arthur},
Year = {2012},
sorttitle = {a}}
\end{filecontents}
\bibliography{references.bib}
\begin{document}
\nocite{*}
\printbibliography[title={Books}, type=book]
\printbibliography[title={Articles},type=article]
\end{document}
给你这个:
在这种情况下,您最好还是习惯这样presort
。但我认为总体而言,您的实际文档中有超过三个引用。