Как указать необязательный аргумент для \item в драйвере библиографии biblatex

Как указать необязательный аргумент для \item в драйвере библиографии biblatex

Я хочу написать среду библиографии в biblatex на основе списков среды enumitems description(я хочу сделать это, потому что это вписывается в другие части документа, который я создаю). Как и itemize, descriptionиспользует необязательный аргумент itemдля метки описания. Я хочу написать среду библиографии так, чтобы год публикации был установлен в этом необязательном аргументе. Кажется, что это должно работать, но не работает (я использовал itemizeвместо descriptionздесь, чтобы сделать пример как можно более минимальным):

\documentclass{article}
\usepackage[date=year]{biblatex}

\begin{filecontents}{\jobname.bib}
@article{foo,
  title = {SomeTitle},
  author = {Doe, John},
  date = {2024-04-27},
  journaltitle = {Great Works}
}
\end{filecontents}

\addbibresource{\jobname.bib}

\defbibenvironment{description}{\begin{itemize}}{\end{itemize}}{\item}

\DeclareBibliographyDriver{article}{%
  [\printdate{}]%
  \newunit%
  \printfield{title}%
  }

\begin{document}

\nocite{*}
\printbibliography[env=description]

\end{document}

Вместо того, чтобы интерпретировать напечатанную дату в квадратных скобках как необязательный аргумент вызова \item, который ей предшествует, это печатает сами квадратные скобки как часть списка. Т.е. я хочу, чтобы моя библиография была набрана так, как если бы это происходило:

\begin{itemize}
\item[<year>] <other stuff>
\end{itemize}

но вместо этого я получаю это так, как будто происходит следующее:

\begin{itemize}
\item[] [<year>] <other stuff>
\end{itemize}

Как мне получить первое и не получить второе?

решение1

Вы можете добавить необязательный аргумент в \defbibenvironment. В драйвере это сделать слишком поздно (он скрыт под множеством группирующих слоев, поэтому \itemне будет правильно видеть необязательный аргумент).

\documentclass{article}
\usepackage[date=year]{biblatex}

\defbibenvironment{description}
  {\begin{itemize}}
  {\end{itemize}}
  {\item[\printdate]}

\DeclareBibliographyDriver{article}{%
  \printfield{title}%
}

\begin{filecontents}{\jobname.bib}
@article{foo,
  title        = {SomeTitle},
  author       = {Doe, John},
  date         = {2024-04-27},
  journaltitle = {Great Works}
}
\end{filecontents}
\addbibresource{\jobname.bib}

\begin{document}
\nocite{*}
\printbibliography[env=description]
\end{document}

2024 «Некое Название»

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