
Ich verwende die Option biblatex
mit indexing
; außerdem habe ich im Text einige Namen, die ich mit dem üblichen \index{}
Befehl indizieren möchte. Da ich in der Bibliographie und im Text dieselben Autoren habe, finde ich im Index zwei Vorkommen desselben Namens, das erste kommt aus dem Text, das zweite aus der Bibliographie, zum Beispiel:
Homer, 27, 45, 79
Homer, 107
Aber es ist falsch und verwirrend. Wie kann ich die Namensvorkommen vereinheitlichen?
Ein Minimalbeispiel:
\documentclass{article}
\usepackage{fontspec}
\usepackage[style=philosophy-verbose,scauthors=true,classical=true,%
volumeformat=romansc,indexing]{biblatex}
\usepackage{filecontents}
\usepackage{imakeidx}
\indexsetup{othercode=\footnotesize}
\makeindex[intoc=true]
\begin{filecontents*}{\jobname.bib}
@book{strawson:1966,
author = {Peter Strawson},
title = {The Bounds of Sense},
publisher = {Routledge},
location = {London},
year = {1966},
}
\end{filecontents*}
\addbibresource{\jobname.bib}
\begin{document}
De nobis ipsis silemus\footcite{strawson:1966}: De re autem, quae agitur,
petimus, as Strawson\index{Strawson, Peter} told
\newpage
De nobis ipsis silemus: De re autem, quae agitur,
petimus, as Strawson\index{Strawson, Peter} told
\newpage
De nobis ipsis silemus\footcite{strawson:1966}: De re autem, quae agitur,
petimus, as Strawson told
\newpage
De nobis ipsis silemus
De nobis ipsis silemus: De re autem, quae agitur,
petimus, as Strawson\index{Strawson, Peter} told
\newpage
De nobis ipsis silemus\footcite{strawson:1966}: De re autem, quae agitur,
petimus, as Strawson told
\printbibliography
\printindex
\end{document}
wo Sie das doppelte Vorkommen von Strawson bemerken werden. In example.idx
lese ich
\indexentry{Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter}{2}
\indexentry{Strawson, Peter@Strawson, Peter}{3}
\indexentry{Strawson, Peter}{4}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
Antwort1
Aus Gründen, die ich nicht wirklich verstehe, wird bei der Indizierung biblatex
ein Befehl der Form
\index{Strawson, Peter@Strawson, Peter}
wie Sie sehen können, indem Sie die .idx
Datei untersuchen
\indexentry{Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter}{2}
\indexentry{Strawson, Peter@Strawson, Peter}{3}
\indexentry{Strawson, Peter}{4}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
Sie können dieses Verhalten umgehen, indem Sie definieren
\newcommand{\nindex}[1]{\index{#1@#1}}
\nindex{Strawson, Peter}
und im Text verwenden . Nach der Änderung .idx
erhalte ich folgende Datei:
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{1}
\indexentry{Strawson, Peter@Strawson, Peter}{2}
\indexentry{Strawson, Peter@Strawson, Peter}{3}
\indexentry{Strawson, Peter@Strawson, Peter}{4}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
\indexentry{Strawson, Peter@Strawson, Peter}{5}
und hier ist der Index mit einem einzelnen Eintrag:
Vielleicht gibt es auch seitlich einen Workaround biblatex
, aber ich kenne ihn nicht.
Antwort2
Das angezeigte Ergebnis wurde von egreg korrekt diagnostiziert. Aber es gibt vielleicht einen einfacheren Workaround. Es liegt eigentlich nicht an \indexname
, wie ich fälschlicherweise vermutet habe, sondern an der Behandlung der Präfixe „van“, „von“, „de la“ usw.
Wenn biblatex
„Präfixe verwendet werden“ (was bedeutet, dass Ludwig van Beethoven immer als Van Beethoven, Ludwig, mit einem Großbuchstaben gedruckt wird), dann fügt es sowohl einen „Druck-“ als auch einen „Sortierungs“-Eintrag in den Index ein, getrennt durch @. Dies geschieht, damit esmakeindex
Sortierenmit "van Beethoven, Ludwig", aberdrucken„Van Beethoven, Ludwig“. Letzteres erfordert das Hinzufügen eines LaTeX-Befehls ( \MakeCapital {van}
) in der Datei, der bei bloßer Aufnahme in den Indexeintrag zu Sortierschwierigkeiten führen würde.
Einfache Lösung
Sie können dies vermeiden, indem Sie die Option useprefixes=false
beim Laden setzen biblatex
. Das könnte Ihr Problem lösen, es sei denn, Sie benötigen „useprefixes“, d. h. Sie haben Einträge wie „van Beethoven“, die Sie als „Van Beethoven“ drucken und unter V sortieren möchten. Zumindest in den meisten Fällen ist dies bei englischen Sortierkonventionen eine gute Lösung und wahrscheinlich das, was Sie wollen.
Keine so einfache Lösung
Wenn Sie alternativ die Option "useprefixes" beibehalten möchten, versucht der folgende Code sicherzustellen, dass die zusätzliche Benennung ( van Beethoven, Ludwig@\MakeCapital{van} Beethoven Ludwig
)nurwird verwendet, wenn der Name tatsächlichhatein Präfix und löst daher das Problem in Ihrem Fall (Sie müssten dann aber den Ansatz von egreg verwenden, wenn Sie mit einem Namen arbeiten, der ein Präfix hat, d. h. Sie müssten sicherstellen, dass Ihre Indexeinträge für Namen mit einem Präfix die oben angegebene Form haben).
\makeatletter
\renewcommand*{\mkbibindexname}[4]{%
\ifuseprefix
{\ifblank{#3}% no PREFIX
{\@firstofone #1% remove spurious braces
\ifblank{#4}{}{ #4}%
\ifblank{#2#3}{}{,}%
\ifblank{#2}{}{ #2}}%
{#3 % PREFIX
\@firstofone #1%removespuriousbraces
\ifblank{#4}{}{ #4}%
\ifblank{#2}{}{, #2}%
\actualoperator
\ifblank{#3}{}{\MakeCapital{#3} %
#1%
\ifblank{#4}{}{ #4}%
\ifblank{#2}{}{, #2}}}}
{\@firstofone #1% NOT "using prefix" remove spurious braces
\ifblank{#4}{}{ #4}%
\ifblank{#2#3}{}{,}%
\ifblank{#2}{}{ #2}%
\ifblank{#3}{}{ #3}}}
\makeatother
Antwort3
Ich verwende eine andere Lösung: Ich definiere falsche Zitatbefehle, die nichts drucken, aber den Autor der „zitierten“ Referenz zum Index hinzufügen.
Das Problem besteht, wie bereits erwähnt, darin, dass biblatex Autorennamen auf verschiedene Weise transformieren kann, bevor sie zum Index hinzugefügt werden; das in der Frage erwähnte @-Problem ist nur eines davon. Ich hatte beispielsweise ein lästiges Problem mit Sonderzeichen wie Akzenten: Um den Namen „Châtelet, Émilie du“ zu indizieren, rief biblatex tatsächlich \indexentry
auf Ch\IeC {\^a}telet, \IeC {\'E}milie du
, und ein manueller Aufruf von \index{Châtelet, Émilie du}
würde daher einen doppelten Eintrag erstellen. Wenn ich also einen Eintrag manuell zum Index hinzufügen wollte, musste ich in der .idx
Datei nachsehen, was biblatex getan hatte, und es dann kopieren, wie Barbara Beeton und Paul Stanley vorgeschlagen hatten. Es funktionierte, aber abgesehen davon, dass es ziemlich unleserlich war, fand ich es für mein (großes) Dokument nicht sehr robust, da jede Änderung in den internen Abläufen von biblatex oder in meinen Optionen (z. B. in Bezug auf Präfixe) alle meine manuellen Einträge beschädigen konnte.
Wenn ich nun definiere:
\newbibmacro*{idxauthor}{%
\ifciteindex
{\indexnames{author}}
{}}
\DeclareCiteCommand{\idxauthor}
{}%
{\usebibmacro{idxauthor}}
{}
{}
\newbibmacro*{idxeditor}{%
\ifciteindex
{\indexnames{editor}}
{}}
\DeclareCiteCommand{\idxeditor}
{}%
{\usebibmacro{idxeditor}}
{}
{}
\newbibmacro*{idxtransl}{%
\ifciteindex
{\indexnames{translator}}
{}}
\DeclareCiteCommand{\idxtransl}
{}%
{\usebibmacro{idxtransl}}
{}
{}
dann kann ich aufrufen, \idxauthor{strawson:1966}
um einen manuellen Indexeintrag für Strawson hinzuzufügen, der auf den internen Vorgängen von Biblatex basiert und genau denselben Indexierungsbefehl wie ein ausgibt, \cite{strawson:1966}
aber sonst nichts tut (und insbesondere nicht Strawson (1966) oder was auch immer druckt).