BibLaTeX - 按首页对参考书目进行排序

BibLaTeX - 按首页对参考书目进行排序

我需要创建一个参考书目,其中某一卷和某一期的期刊文章按首页编号排序。我可以用来\mkfirstpage{pages}打印页面范围的第一页,但无法按首页对列表进行排序。以下是 MWE:

\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage{filecontents}

\begin{filecontents}{library.bib}
@article{articleB,
    author  = {AuthorBLast, AuthorBFirst},
    title   = {TitleB},
    journal = {Journal},
    volume  = {1},
    issue   = {1},
    pages   = {1-6}
}
@article{articleA,
    author  = {AuthorAlast, AuthorAFirst},
    title   = {TitleA},
    journal = {Journal},
    volume  = {1},
    issue   = {1},
    pages   = {13-25}
}
@article{articleC,
    author  = {AuthorCLast, AuthorCFirst},
    title   = {TitleC},
    journal = {Journal},
    volume  = {1},
    issue   = {1},
    pages   = {7-12}
}
\end{filecontents}

\usepackage[%
    backend=biber,
    sorting=nty,
]{biblatex}
\addbibresource{library.bib}

\begin{document}
\nocite{*}

\printbibliography[title=Bibliography]
\end{document}

这将产生以下内容:

我得到了什么

我想得到

我需要的

我花了很多时间却\DeclareSortingTemplate一无所获。在此先感谢您的帮助、指导和指点。

答案1

\mkfirstpage是一个biblatex-side 命令,但排序发生在 Biber 端,而该命令不可用。这意味着我们需要重新创建\mkfirstpageBiber 中执行的操作。

在源映射中,我们仅从范围中提取第一页并将其写入临时字段以进行排序。示例使用usera,但也可以在新的数据模型中定义专用字段。

然后,排序模板使用usera并填充其值,以便数字按预期排序。

\documentclass{article}
\usepackage[utf8]{inputenc}

\usepackage[%
  backend=biber,
]{biblatex}

\DeclareSourcemap{
  \maps[datatype=bibtex]{
    \map{
      \step[fieldsource=pages, final]
      \step[fieldset=usera, origfieldval]
      \step[fieldsource=usera,
        match=\regexp{\A\s*(\p{Nd}+)\s*(\p{Pd}+)\s*(\p{Nd}+)\s*\z},
        replace=\regexp{$1}]
    }
  }
}

\DeclareSortingTemplate{jyvnp}{
  \sort{
    \field{presort}
  }
  \sort[final]{
    \field{sortkey}
  }
  \sort{
    \field{journaltitle}
  }
  \sort{
    \field{sortyear}
    \field{year}
  }
  \sort{
    \field{volume}
    \literal{0}
  }
  \sort{
    \field{number}
    \literal{0}
  }
  \sort{
    \field[padwidth=9]{usera}
    \literal{0}
  }
  \sort{
    \field{sorttitle}
    \field{title}
  }
}

\ExecuteBibliographyOptions{sorting=jyvnp}

\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@article{articleB,
  author  = {AuthorBLast, AuthorBFirst},
  title   = {TitleB},
  journal = {Journal},
  year    = {2001},
  volume  = {1},
  number  = {1},
  pages   = {1-6},
}
@article{articleA,
  author  = {AuthorAlast, AuthorAFirst},
  title   = {TitleA},
  journal = {Journal},
  year    = {2001},
  volume  = {1},
  number  = {1},
  pages   = {13-25},
}
@article{articleC,
  author  = {AuthorCLast, AuthorCFirst},
  title   = {TitleC},
  journal = {Journal},
  year    = {2001},
  volume  = {1},
  number  = {1},
  pages   = {7-12},
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}

\printbibliography[title=\bibname]
\end{document}

作者B第一作者B最后。“标题B”。在:期刊 1.1(2001 年),第 1-6 页。

作者 C 第一作者 C 最后。“标题 C”。在:期刊 1.1(2001 年),第 7-12 页。

作者 A 第一作者 A 最后。“标题 A”。在:期刊 1.1(2001 年),第 13-25 页。

相关内容