使用正确的标签对参考书目(书籍/文章)中的参考文献进行排序

使用正确的标签对参考书目(书籍/文章)中的参考文献进行排序

我的书目有问题。我必须将其分成不同的部分(书籍/文章)。问题是,我有同一作者在同一年出版的文章和书籍。使用 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是,它确实是排序时要使用的第一个键。您可能更适合使用sorttitlebib 条目,这是一个仅用于排序的特殊字段。同样,还有 等等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。但我认为总体而言,您的实际文档中有超过三个引用。

相关内容