Я хочу написать среду библиографии в 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}