Quero escrever um ambiente bibliográfico no biblatex baseado nas description
listas de ambientes dos enumitems (quero fazer isso porque se encaixa em outras partes do documento que estou construindo). Assim como itemize
, description
usa um argumento opcional item
para o rótulo de descrição. Quero escrever meu ambiente bibliográfico de forma que o ano de publicação seja definido neste argumento opcional. Parece que deveria funcionar, mas não funciona (usei itemize
em vez de description
aqui para tornar o exemplo o mais mínimo possível):
\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}
Em vez de interpretar a data impressa entre colchetes como um argumento opcional para a \item
chamada que a precede, isso imprime os próprios colchetes como parte da lista. Ou seja, quero meu conjunto de bibliografia como se isso estivesse acontecendo:
\begin{itemize}
\item[<year>] <other stuff>
\end{itemize}
mas em vez disso estou entendendo como se isso estivesse acontecendo:
\begin{itemize}
\item[] [<year>] <other stuff>
\end{itemize}
Como posso obter o primeiro e não o último?
Responder1
Você pode adicionar o argumento opcional em \defbibenvironment
. É tarde demais no driver (escondido sob muitas camadas de agrupamento, de modo que \item
não será possível ver o argumento opcional corretamente).
\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}