With biblatex, you can use \DeclareIndexNameFormat
for that purpose. As is stated in biblatex.def, the following arguments are passed to indexing directives for name lists:
- #1 = last name
- #2 = last name (initials)
- #3 = first name
- #4 = first name (initials)
- #5 = name prefix, a.k.a 'von part'
- #6 = name prefix (initials)
- #7 = name affix, a.k.a 'junior part'
- #8 = name affix (initials)
The biblatex option indexing=true
enables indexing globally. With indexing=cite
and indexing=bib
you can limit the indexing to the citations or bibliography, respectively.
Here is a minimal working example:
\documentclass[english]{scrartcl}
\listfiles
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@ARTICLE{article,
author = {Nachname, Vorname},
title = {Titel des Zeitschriftenartikels},
journal = {Zeitschrift},
year = {2006},
volume = {6},
pages = {19--75}
}
@BOOK{book,
author = {Buchautor, Hans-Wilhelm},
title = {Irgendein Buch},
address = {Buch am Wald},
year = {2000}
}
\end{filecontents}
\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage{babel,csquotes}
\usepackage[makeindex,protected]{splitidx}
\newindex[Index of people]{person}
\newcommand{\person}[2]{\sindex[person]{#2, #1}#2}
\newcommand{\Person}[2]{\sindex[person]{#2, #1}#1 #2}
\usepackage[
style=authortitle,
indexing=true
]{biblatex}
\bibliography{\jobname}
\DeclareIndexNameFormat{default}{%
\usebibmacro{index:name}{\sindex[person]}{#1}{#3}{#5}{#7}}
\begin{document}
\person{Given}{Surname}
\clearpage
\cite{article}
\clearpage
\cite{book}
\clearpage
\Person{Given}{Surname}
\clearpage
\printbibliography
\printindex*
\end{document}
Edit:
I forgot the different style of the page numbers referring to names of cited authors. For this, you will first of all need a command to print the pages in the index differently, e.g.
\newcommand*{\ii}[1]{\textit{#1}}
If you are using hyperref, this should be
\newcommand*{\ii}[1]{\textit{\hyperpage{#1}}}
Now you have to give this information to the \DeclareIndexNameFormat
command. In a normal index entry, this would be simple: \index{Name|ii}
(or, with splitindex, \sindex[person]{Name|ii}
. But with DeclareIndexNameFormat
this is not possible in a direct way, since biblatex splits up the name given in the bib file and passes it on to the given index command. Thus, the easiest solution is to define a new command which then can be used by \DeclareIndexNameFormat
:
\newcommand{\xindex}[1]{\sindex[person]{#1|ii}}
\DeclareIndexNameFormat{default}{%
\usebibmacro{index:name}{\xindex}{#1}{#3}{#5}{#7}}