МВЭ

МВЭ

В одной секции моего документа ссылки сгруппированы в категории по их ключевым словам. Теперь я хочу распечатать библиографию для каждого раздела на основе категории цитирования, например, одну библиографию для статей с ключевым словом 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).

Поэтому я использую defernumbersof 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, что и ссылки. В частности, это означает, что вы не можете использовать этот метод для печати совокупной библиографии в конце с несколькими refsections, разделенными с помощью \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.

Связанный контент