Usando BibLaTeX, me gustaría crear un \textcite
comando basado en el estilo de compilación numérica que en lugar de mostrar [1-3, 5] muestre Refs. 1-3 y 5, y en lugar de mostrar [1-3, 5-7] da las Refs. 1-3 y 5-7.
Pude lograr lo primero, pero no lo segundo con el siguiente MWE:
\documentclass{article}
\usepackage{filecontents}
\usepackage[style=numeric-comp]{biblatex}
% Cite without square brackets - with Ref./Refs.
\NewBibliographyString{refname}
\NewBibliographyString{refsname}
\DefineBibliographyStrings{english}{%
refname = {Ref\adddot},
refsname = {Refs\adddot}
}
\DeclareCiteCommand{\textcite}
{%
\ifnum\thecitetotal=1
\bibstring{refname}%
\else%
\bibstring{refsname}%
\fi%
\addnbspace%
\usebibmacro{cite:init}%
\usebibmacro{prenote}%
\renewcommand*{\multicitedelim}{\iflastcitekey{\addspace\bibstring{and}\addspace}{\addcomma\addspace}}%
}
{\usebibmacro{citeindex}\usebibmacro{cite:comp}}
{}
{\usebibmacro{cite:dump}\usebibmacro{postnote}}
\begin{filecontents*}{\jobname.bib}
@book{A,
title = {A Bla},
author = {A Foo}
}
@book{B,
title = {B Bla},
author = {B Foo}
}
@book{C,
title = {C Bla},
author = {C Foo}
}
@book{D,
title = {D Bla},
author = {D Foo}
}
@book{E,
title = {E Bla},
author = {E Foo}
}
@book{F,
title = {F Bla},
author = {F Foo}
}
@book{G,
title = {G Bla},
author = {G Foo}
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
\nocite{*}
Cite commands should stay like this (i.e. no and): \cite{A,B,C,E,F,G}
These textcites work: \textcite{A,C,E,G} ; \textcite{A,B,C,E}
This textcite misses the final and: \textcite{A,C,E,F,G}
This textcite has two ands: \textcite{A,C,D,F}
\printbibliography
\end{document}
Salida del MWE:
Creo que el problema es que cuando se comprimen las citas, la última clave de cita está dentro de un intervalo comprimido y, por lo tanto, no se imprime ningún delimitador de lista de citas. ¿Existe alguna prueba que pueda utilizar para comprobar cuál es el último delimitador realmente impreso, incluso si no es antes de la última clave de cita? Además, tenga en cuenta que en el último ejemplo hay de alguna manera dos 'y'. Creo que el problema nuevamente es que \iflastcitekey
realmente no funciona como se esperaba.