
В одной секции моего документа ссылки сгруппированы в категории по их ключевым словам. Теперь я хочу распечатать библиографию для каждого раздела на основе категории цитирования, например, одну библиографию для статей с ключевым словом in
и одну библиографию с ключевым словом out
. Для эстетики я хочу, чтобы библиографии были пронумерованы непрерывно, как в этом текстовом макете
**In**
[1-1] a. “a”. In: a (a).
[1-2] c. “c”. In: c (c).
[1-3] e. “e”. In: e (e).
**Out**
[1-4] b. “b”. In: b (b).
[1-5] d. “d”. In: d (d).
Поэтому я использую defernumbers
of biblatex
для непрерывной нумерации записей. Проблема в том, что это приводит к тому, что нумерация снова начинается с 1 для каждого \printbibliography
.
Я хотел бы включить функцию defernumbers
для \printbibliography
всех \refsection
.
МВЭ
\documentclass{article}
\pagestyle{empty}
\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@article{a,
title = {a},
author = {a},
journal = {a},
year = {a},
keywords = {in}
}
@article{b,
title = {b},
author = {b},
journal = {b},
year = {b},
keywords = {out}
}
@article{c,
title = {c},
author = {c},
journal = {c},
year = {c},
keywords = {in}
}
@article{d,
title = {d},
author = {d},
journal = {d},
year = {d},
keywords = {out}
}
@article{e,
title = {e},
author = {e},
journal = {e},
year = {e},
keywords = {in}
}
\end{filecontents*}
\usepackage[
defernumbers=true,
citestyle=numeric,
]{biblatex}
\defbibheading{subbibliography}[\bibname]{%
\subsubsection*{#1}
}
\addbibresource{test.bib}
\begin{document}
\section{Testing biblatex}
\refsection
\cite{a,b,c,d,e}
\printbibliography[
title={In},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=in
]
\printbibliography[
title={Out},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=out
]
\endrefsection
\section{Testing biblatex}
\refsection
\cite{a,b,c,d,e}
\printbibliography[
title={In},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=in
]
\printbibliography[
title={Out},
prefixnumbers={\thesection-},
heading=subbibliography,
keyword=out
]
\endrefsection
\end{document}
Выход
Конечно, будет предложено вознаграждение!
решение1
Эта проблема возникает из-за неотъемлемой функциональности biblatex
. Как видно издругие вопросы, biblatex
имеет неявный resetnumbers=true
, который применяется, когда вы используете prefixnumbers
для добавления префикса к метке. Это можно решить разными способами, но только с помощью хаков, которые действительно либо немного изменяют проблему, либо изменяют способ обработки/применения префикса.
Поскольку цель этого вопроса — подразделить каждую библиографию по разделам (или главам и т. д.), можно применить настройку prefixnumber
глобально по-другому, исключив неявное, resetnumbers=true
которое применяется в каждом \printbibliography
. Для этого мы переопределяем способ печати метки, включив \thesection
в формат:
\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}
Каждая метка хранится как 1, 2, 3..., но форматируется с использованием номера раздела, в котором она появляется при печати. (Примечание*: поскольку мы добавляем префикс таким образом, команда \printbibliography
должна отображаться в том же section
/ refsection
, что и ссылки. В частности, это означает, что вы не можете использовать этот метод для печати совокупной библиографии в конце с несколькими refsection
s, разделенными с помощью \printbibliography[section=1...]
).
На этом этапе остается только восстановить нумерацию в нужном месте (первая библиография каждого источника refsection
) с помощью \printbibliography[...resetnumbers=true]
.
Результат
Результат выглядит так:
МВЭ
Я внес несколько изменений, чтобы сделать решение более эффективным, чем в оригинальном MWE.
refsection=section
(также может быть ...=part
, ...=chapter
, и т.д.) передается глобально для biblatex
сбора ссылок только в каждом разделе. Это можно заменить на \newrefsection
/ \endrefsection
по мере необходимости, чтобы вручную разбить элементы библиографии.
defernumbers=true
сохраняется для последовательной сортировки каждой суббиблиографии.
Я также прокомментировал несколько цитат, чтобы подчеркнуть эффект нумерации и refsection
с.
Модифицированный MWE, демонстрирующий это решение:
\documentclass{article}
\pagestyle{empty}
\usepackage{filecontents}
\begin{filecontents*}{test.bib}
@article{a,
title = {a},
author = {a},
journal = {a},
year = {a},
keywords = {in}
}
@article{b,
title = {b},
author = {b},
journal = {b},
year = {b},
keywords = {out}
}
@article{c,
title = {c},
author = {c},
journal = {c},
year = {c},
keywords = {in}
}
@article{d,
title = {d},
author = {d},
journal = {d},
year = {d},
keywords = {out}
}
@article{e,
title = {e},
author = {e},
journal = {e},
year = {e},
keywords = {in}
}
\end{filecontents*}
\usepackage[
defernumbers=true,
citestyle=numeric,
refsection=section % Each \section{...} starts a new refsection environment
]{biblatex}
% Format the labelnumber with \thesection prefix
\DeclareFieldFormat{labelnumber}{\mkbibsecnum{#1}}
\newrobustcmd{\mkbibsecnum}[1]{\thesection-#1\relax}
\defbibheading{subbibliography}[\bibname]{%
\subsubsection*{#1}
}
\addbibresource{test.bib}
\begin{document}
\section{Testing biblatex} % New refsection, too!
Cite a \cite{a};
Cite b \cite{b};
Cite c \cite{c};
\printbibliography[
title={In},
heading=subbibliography,
keyword=in,
resetnumbers=true % The first bibliography in each refsection needs its numbers manually reset
]
\printbibliography[
title={Out},
heading=subbibliography,
keyword=out
]
\section{Testing biblatex} % New refsection, too!
Cite b \cite{b};
Cite d \cite{d};
Cite e \cite{e}.
\printbibliography[
title={In},
heading=subbibliography,
keyword=in,
resetnumbers=true % The first bibliography in each refsection needs its numbers manually reset
]
\printbibliography[
title={Out},
heading=subbibliography,
keyword=out
]
\end{document}
*Решение @Guidoпереопределяет всю среду библиографии и использует счетчик серий перечисления для продолжения подсчета определенных меток, но не других. Это может сработать для этой проблемы (и исправит проблему кумулятивной библиографии), но мне не удалось скомпилировать код с нумерацией разделов, как просил OP.