Hallo, noch mal, ich habe noch eine Index-Frage. Es ist kein gravierendes Problem, sondern die Frage, ob meine Lösung die beste Lösung ist oder unnötig kompliziert. Wenn in meinem Text von einer Sache oder Person verschiedene Schreibweisen oder Namensvarianten vorkommen, möchte ich beide in den Index aufnehmen, aber dabei die eine Varinte als Hauptstichwort betrachten und von dem Nebenstichwort auf das Hauptstichwort verweisen. Also so: Öffne in Overleaf
\documentclass[ngerman]{scrartcl} \usepackage{imakeidx} \makeindex[intoc,name=pers,title=Index der Personennamen,columns=1] \renewcommand{\seename}{siehe} \begin{document} George H. W. Bush\index[pers]{George H. W. Bush}\\ George W. Bush\index[pers]{George W. Bush}\\ \newpage George Bush senior\index[pers]{George Bush senior|see{George H. W. Bush}}\\ George Bush junior\index[pers]{George Bush junior|see{George W. Bush}} \printindex[pers] \end{document} Problem: Unter dem Hauptstichwort stehen dann nur die Seitenzahlen der Fundstellen des Hauptstichworts. Ich möchte, dass auch die Fundstellen des Nebenstichworts dort aufgeführt werden, denn sonst scheint mir der Verweis irreführend. Ich habe diese Lösung gefunden: Öffne in Overleaf
\documentclass[ngerman]{scrartcl} \usepackage{imakeidx} \makeindex[intoc,name=pers,title=Index der Personennamen,columns=1] \renewcommand{\seename}{siehe} \begin{document} George H. W. Bush\index[pers]{George H. W. Bush}\\ George W. Bush\index[pers]{George W. Bush}\\ \newpage George Bush senior\index[pers]{George Bush senior|see{George H. W. Bush}}\index[pers]{George H. W. Bush}\\ George Bush junior\index[pers]{George Bush junior|see{George W. Bush}}\index[pers]{George W. Bush}\\ \printindex[pers] \end{document} Das bringt das gewünschte Ergebnis, aber ich finde den Code für einen kleinen Indexeintrag auffallend kompliziert. Lässt sich das einfacher und eleganter lösen oder muss ich damit leben? Vielen Dank für eure Aufmerksamkeit! gefragt 31 Okt '17, 23:01 Portokali |
Wie von saputello in seinem Kommentar bereits erwähnt, bietet es sich an, hierfür eine eigene Anweisung zu definieren, beispielsweise: Öffne in Overleaf
\documentclass[ngerman]{scrartcl} \usepackage{imakeidx} \makeindex[intoc,name=pers,title=Index der Personennamen,columns=1] \renewcommand{\seename}{siehe} \newcommand*{\seeindex}[2]{% \index[pers]{#1|see{#2}}\index[pers]{#2}% } \begin{document} George H. W. Bush\index[pers]{George H. W. Bush}\\ George W. Bush\index[pers]{George W. Bush}\\ \newpage George Bush senior\seeindex{George Bush senior}{George H. W. Bush}\\ George Bush junior\seeindex{George Bush junior}{George W. Bush}\\ \printindex[pers] \end{document} Es wird also ein Befehl mit zwei Argumenten definiert. Das erste Argument ist der Name, der einen siehe-Eintrag auf den Namen des zweiten Arguments erhalten soll. Gleichzeitig wird für das zweite Argument ein normaler Indexeintrag erzeugt. Natürlich kann man das noch einen Schritt weiter treiben und auch gleich den Namen ausgeben lassen: Öffne in Overleaf
\documentclass[ngerman]{scrartcl} \usepackage{imakeidx} \makeindex[intoc,name=pers,title=Index der Personennamen,columns=1] \renewcommand{\seename}{siehe} \newcommand*{\AliasPerson}[2]{% #1\index[pers]{#1|see{#2}}\index[pers]{#2}% } \begin{document} George H. W. Bush\index[pers]{George H. W. Bush}\\ George W. Bush\index[pers]{George W. Bush}\\ \newpage \AliasPerson{George Bush senior}{George H. W. Bush}\\ \AliasPerson{George Bush junior}{George W. Bush}\\ \printindex[pers] \end{document} Man könnte jetzt an dieser Stelle auch noch im Text selbst einen entsprechenden Hinweis ausgeben, beispielsweise als Randnotiz: Öffne in Overleaf
\documentclass[ngerman]{scrartcl} \usepackage{imakeidx} \makeindex[intoc,name=pers,title=Index der Personennamen,columns=1] \renewcommand{\seename}{siehe} \newcommand*{\AliasPerson}[2]{% #1\marginline{$\rightarrow$ #2}\index[pers]{#1|see{#2}}\index[pers]{#2}% } \begin{document} George H. W. Bush\index[pers]{George H. W. Bush}\\ George W. Bush\index[pers]{George W. Bush}\\ \newpage \AliasPerson{George Bush senior}{George H. W. Bush}\\ \AliasPerson{George Bush junior}{George W. Bush}\\ \printindex[pers] \end{document} Wenn man an der Stelle ist, stellt sich natürlich die Frage, ob man nicht auch gleich generell für Personen eine Anweisung verwenden sollte. Dann könnte man auch zusätzlich einen Mechanismus implementieren, um Aliase halbautomatisch zu erfassen: Öffne in Overleaf
\documentclass[ngerman]{scrartcl} \usepackage{imakeidx} \makeindex[intoc,name=pers,title=Index der Personennamen,columns=1] \renewcommand{\seename}{siehe} \makeatletter \newcommand*{\defAliasPerson}[2]{% \@namedef{AliasPerson@\detokenize{#1}}{#2}% \expandafter\expandafter\expandafter\show\@nameuse{AliasPerson@\detokenize{#1}}% } \newcommand*{\Person}[1]{% #1% \scr@ifundefinedorrelax{AliasPerson@\detokenize{#1}}{% \index[pers]{#1}% }{% \marginline{$\rightarrow$ \@nameuse{AliasPerson@\detokenize{#1}}}% \index[pers]{#1|see{\@nameuse{AliasPerson@\detokenize{#1}}}}% \index[pers]{\@nameuse{AliasPerson@\detokenize{#1}}}% }% } \makeatother \newcommand*{\AliasPerson}[2]{% \defAliasPerson{#1}{#2}\Person{#1}% } \defAliasPerson{George Bush senior}{George H. W. Bush} \begin{document} \Person{George H. W. Bush}\\ \Person{George W. Bush}\\ \newpage \Person{George Bush senior}\\ \AliasPerson{George Bush junior}{George W. Bush}\\ \printindex[pers] \end{document} Bei dieser Version werden mit Zusätzlich habe ich wieder die Anweisung Das beantwortet 02 Nov '17, 14:01 gast3 Danke vielmals für diese ausführliche und rundum großartige Antwort!
(02 Nov '17, 23:48)
Portokali
|
Wer hindert Dich daran, per
\newcommand
einen passenden Befehl zu definieren, der beide Indexeinträge auf einmal erstellt?