Doppelte Vorkommen von Namen im Index mit Biblatex

Doppelte Vorkommen von Namen im Index mit Biblatex

Ich verwende die Option biblatexmit 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.idxlese 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 biblatexein Befehl der Form

\index{Strawson, Peter@Strawson, Peter}

wie Sie sehen können, indem Sie die .idxDatei 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 .idxerhalte 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:

Bildbeschreibung hier eingeben

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=falsebeim 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 \indexentryauf 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 .idxDatei 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).

verwandte Informationen