针对不同的条目类型采用不同的排序方案?

针对不同的条目类型采用不同的排序方案?

我正在编写自己的风格,对于大多数条目类型,type必须打印该字段标题,但有些条目必须打印。因此,对于某些条目类型,我需要type将字段排序在title字段之前,而对于某些条目类型,我需要将字段排序在字段之后。有办法吗?


平均能量损失

\begin{filecontents}{\jobname.bib}
@book{abook,
    author = {Alfred A.},
    title = {A Book},
    type = {B Type}}
@book{anotherbook,
    author = {Alfred A.},
    title = {Another Book},
    type = {A Type}}
@article{anarticle,
    author = {Alfred A.},
    title = {An Article},
    type = {C Type}}
\end{filecontents}

\documentclass{article}

\usepackage[backend=biber, bibstyle=standard]{biblatex}
\addbibresource{\jobname.bib}

\DeclareBibliographyDriver{book}{
    \printnames{author}
    \newunit
    \printfield{title}
    \newunit
    \printfield{type}
}

\DeclareBibliographyDriver{article}{
    \printnames{author}
    \newunit
    \printfield{type}
    \newunit
    \printfield{title}
}

\DeclareSortingScheme{nty}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort{
    \field{sortname}
    \field{author}
    \field{editor}
    \field{sorttitle}
    \field{title}
    \field{subtitle}
  }
  \sort{
    %\field{type}
    \field{sorttitle}
    \field{title}
    \field{subtitle}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field[padside=left,padwidth=4,padchar=0]{volume}
    \literal{0000}
  }
}

\begin{document}
  \nocite{*}
  \printbibliography
\end{document}

这是我得到的:

在此处输入图片描述

由于是按titlebefore排序的type,“An Article”排在“Another Book”之前,而它实际上应该排在最后,因为它type以“C”开头。

现在,如果我取消注释该行,\field{type}则会得到以下信息:

在此处输入图片描述

因为它是按typebefore排序的title,所以“另一本书”排在“一本书”之前,而事实应该正好相反。


这个答案建议使用该sortkey字段,但就我而言,这不起作用,因为作者总是放在第一位。

答案1

这是一个奇怪的要求,因为在排序之前你必须以某种方式镜像格式。你可以使用源映射通过以正确的顺序将内容附加到自定义字段来实现。以下是一些让你的 MWE 工作的方法:

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \pertype{book}
      \step[fieldsource=title]
      \step[fieldset=usera, origfieldval]
      \step[fieldsource=type]
      \step[fieldset=usera, origfieldval, append]
    }
    \map{
      \pertype{article}
      \step[fieldsource=type]
      \step[fieldset=usera, origfieldval]
      \step[fieldsource=title]
      \step[fieldset=usera, origfieldval, append]
    }
  }
}

那么你的排序将是:

\DeclareSortingScheme{nty}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort{
    \field{sortname}
    \field{author}
    \field{editor}
    \field{sorttitle}
    \field{title}
    \field{subtitle}
  }
  \sort{
    \field{usera}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field[padside=left,padwidth=4,padchar=0]{volume}
    \literal{0000}
  }
}

尽管它实际上不再nty进行排序并且您可能应该给它起个别的名字。

相关内容