我需要创建一个参考书目,其中某一卷和某一期的期刊文章按首页编号排序。我可以用来\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 端,而该命令不可用。这意味着我们需要重新创建\mkfirstpage
Biber 中执行的操作。
在源映射中,我们仅从范围中提取第一页并将其写入临时字段以进行排序。示例使用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 页。