Я хочу иметь смешанный индекс лиц и индекс авторов цитируемых работ. Авторы, которые появляютсятольков цитатах должны быть выделены курсивом в индексе. Другие лица (и авторы, которые также появляются в основном тексте) являются обычными.
\documentclass{article}
\usepackage[backend=biber,natbib=true,indexing=cite]{biblatex} %for digital version
\bibliography{\jobname}
\usepackage[truexindy,splitindex]{imakeidx}
\makeindex[name=persons,program=truexindy,options=-M texindy]
\usepackage{filecontents}
\begin{filecontents}{\jobname.bib}
@book{book1,
author = "Greenwild, Dirk",
title = "Yellow pages",
year = "1998",
}
@book{book2,
author = "Jordan, Peter",
title = "Math in the world",
year = "1996",
}
\end{filecontents}
\DeclareIndexNameFormat{default}{%
\nameparts{#1}
\usebibmacro{index:name}
{\index[persons]}
{\itshape\namepartfamily\normalfont}
{\namepartgiven}
{\namepartprefix}
{\namepartsuffix}%
}
\begin{document}
Foo\index[persons]{Smith, Joe}. Foo\cite{book1}. Jordan\index[persons]{Jordan, Peter} foo\cite{book2}.
\printindex[persons]
\end{document}
Есть некоторые проблемы. Во-первых, я не могу выделить курсивом имя.
{\itshape\namepartfamily\normalfont}
выделяет курсивом фамилию, но {\itshape\namepartgiven\normalfont}
приводит к ошибкам. Единственный способ выделить курсивом оба слова —
{\itshape\namepartfamily}
{\namepartgiven}
{\normalfont\namepartprefix}
Но теперь автор, который не только цитируется, но и индексируется вручную из текста в индексе, появляется дважды (Джордан Питер).
Как мне объединить их и сделать имя и фамилию курсивом?
Решение (?):
Наконец, мне удалось это сделать, переопределив \mkbibindexname
команду:
\makeatletter
\renewcommand*{\mkbibindexname}[4]{%
\ifuseprefix
{\ifdefvoid{#3}{}{#3 }%
\@firstofone #1% remove spurious braces
\ifdefvoid{#4}{}{ #4}%
\ifdefvoid{#2}{}{, #2}%
\actualoperator
\ifdefvoid{#3}{}{\MakeCapital{#3} }%
#1%
\ifdefvoid{#4}{}{ #4}%
\ifdefvoid{#2}{}{, #2}}
{\@firstofone \textit{#1}% here added \textit
\ifdefvoid{#4}{}{ #4}%
\ifboolexpe{%
test {\ifdefvoid{#2}}
and
test {\ifdefvoid{#3}}}
{}
{\ }%removes comma between first and last name
\ifdefvoid{#2}{}{ \textit{#2}}% here added \textit
\ifdefvoid{#3}{}{ #3}}}
\makeatother
Результат:
Это решение работает (Greenwild Dirk выделен курсивом, потому что он появляется только в цитате, Smith Joe не выделен курсивом, потому что он появляется только в основном тексте, Jordan Peter не выделен курсивом, потому что он появляется и в тексте, и в цитате). Возможно, есть более элегантное решение?