BibLaTeX を使用して、[1-3, 5] を表示する代わりに Ref. 1-3 と 5 を表示し、[1-3, 5-7] を表示する代わりに Ref. 1-3 と 5-7 を表示する numeric-comp スタイルに基づくコマンド\textcite
を作成したいと思います。
次の 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}
MWE の出力:
問題は、引用が圧縮されているときに、最後の citekey が圧縮された間隔内にあるため、引用リストの区切り文字がまったく印刷されないことだと思います。最後の citekey の前でなくても、実際に印刷される最後の区切り文字がどれであるかを確認するために使用できるテストはありますか? また、最後の例にはどういうわけか 2 つの「and」があることに留意してください。問題は、これが\iflastcitekey
実際には期待どおりに機能しないことだと思います。