Я пишу диссертацию, в которой есть несколько ссылок на газеты/периодические издания с одинаковым названием, выпущенные в разные даты в течение многих лет. Я пытаюсь сгруппировать эти ссылки по названию периодического издания, чтобы библиографические записи для одного и того же периодического издания были близко друг к другу и отделены от других записей для других периодических изданий.
Я тщательно просмотрел документацию biblatex, и единственной релевантной информацией, которую я смог найти, были регистры bibnamesep
и bibitemsep
длины. Кажется, они делают именно то, что мне нужно — bibitems для периодических изданий с одинаковым названием должны быть ближе друг к другу, чем bibitems, которые таковыми не являются. Единственная проблема здесь в том, что bibnamesep, похоже, использует части имени и шаблон уникальности для группировки работ по имени автора (а не по названию).
Это мой MWE:
\documentclass[12pt]{article}
\usepackage{lipsum}
\usepackage[T1]{fontenc} % Specify font encoding
\usepackage[utf8]{inputenc} % Specify encoding (for example, UTF-8)
\usepackage[dashed=false,sorting=nyt,style=verbose,labeldateparts=true,uniquelist=true,uniquename=true,singletitle=true]{biblatex}
% Preamble - Here you can load packages and define settings
\usepackage[english]{babel}
\begin{filecontents*}[overwrite]{mwe.bib}
@periodical{TheSun:20220101,
title = {The Sun},
date = {2022-01-01}
}
@periodical{TheTimes:20220601,
title = {The Sun},
date = {2022-06-01}
}
@periodical{TheTimes:20220901,
title = {The Sun},
date = {2022-09-01}
}
@periodical{TheGuardian:20210217,
title = {The Guardian},
date = {2021-02-17}
}
@periodical{TheGuardian:20210311,
title = {The Guardian},
date = {2021-03-11}
}
@periodical{TheGuardian:20210410,
title = {The Guardian},
date = {2021-04-10}
}
@periodical{TheAlmanac:202302,
title = {The Almanac},
date = {2023-02}
}
@periodical{TheAlmanac:202303,
title = {The Almanac},
date = {2023-03}
}
@periodical{TheAlmanac:202304,
title = {The Almanac},
date = {2023-04}
}
\end{filecontents*}
\addbibresource{mwe.bib}
\DeclareSortingTemplate{TitleYear}{
\sort{
\field{title}
}
\sort{
\field{sortyear}
\field{year}
\literal{9999}
}
\sort{
\field{month}
}
\sort{
\field{day}
}
}
\begin{document}
\bibitemsep=1pt
\bibnamesep=30pt
\nocite{*}
\begin{refcontext}[sorting=TitleYear]
\printbibliography
\end{refcontext}
\end{document}
Он содержит 9 @periodical
записей - 3 для The Sun, 3 для The Guardian и 3 для The Almanac. Он сортирует записи по названию периодического издания с помощью Шаблона сортировки и устанавливает \bibitemsep
и \bibnamesep
на 1 и 30 пунктов соответственно.Это та часть, которую я не могу заставить работать.:
Как вы можете видеть на изображении выше, все ссылки имеют интервал в 30 пунктов между собой, в то время как я бы хотел, чтобы интервал между ссылками на «Альманах» составлял 1 пункт, но при этом 30 пунктов разделяли бы «Альманах» и «Гардиан».
решение1
\bibnamesep
применяется только между записями с другим именем, закодированным в fullhash
. Если вы хотите изменить это на title
, вы можете попробовать (локально) переопределить соответствующий внутренний макрос, который устанавливает разделитель.
\documentclass[12pt]{article}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage[
style=verbose,
sorting=nyt,
dashed=false,
labeldateparts=true,
uniquelist=true,uniquename=true,
singletitle=true,
]{biblatex}
\makeatletter
\def\blx@namesep@title{%
\ifnum\c@instcount>\@ne
\blx@imc@iffieldequals{title}\blx@prevtitle
{}
{\addvspace{\bibnamesep}}%
\fi
\global\let\blx@prevtitle\abx@field@title}
\newcommand*{\NamesepByTitle}{\let\blx@namesep\blx@namesep@title}
\makeatother
\DeclareSortingTemplate{TitleYear}{
\sort{
\field{title}
}
\sort{
\field{sortyear}
\field{year}
\literal{9999}
}
\sort{
\field{month}
}
\sort{
\field{day}
}
}
\begin{filecontents*}[overwrite]{\jobname.bib}
@periodical{TheSun:20220101,
title = {The Sun},
date = {2022-01-01}
}
@periodical{TheTimes:20220601,
title = {The Sun},
date = {2022-06-01}
}
@periodical{TheTimes:20220901,
title = {The Sun},
date = {2022-09-01}
}
@periodical{TheGuardian:20210217,
title = {The Guardian},
date = {2021-02-17}
}
@periodical{TheGuardian:20210311,
title = {The Guardian},
date = {2021-03-11}
}
@periodical{TheGuardian:20210410,
title = {The Guardian},
date = {2021-04-10}
}
@periodical{TheAlmanac:202302,
title = {The Almanac},
date = {2023-02}
}
@periodical{TheAlmanac:202303,
title = {The Almanac},
date = {2023-03}
}
@periodical{TheAlmanac:202304,
title = {The Almanac},
date = {2023-04}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\bibitemsep=1pt
\bibnamesep=30pt
\nocite{*}
\begin{refcontext}[sorting=TitleYear]
\NamesepByTitle
\printbibliography
\end{refcontext}
\end{document}