Ich möchte einen Index anlegen, aber nicht die Seitenzahlen zeigen, sondern den jeweiligen Unterabschnitt (also bspsweise 3.1 oder 5.2). Hier ist ein Minimalprogramm, mit dem ich einen Index mit Seitenzahlen anlegen kann. Wie muss ich das anpassen? Ich dachte mir, da müsste es doch eine einfach Lösung geben. Öffne in Overleaf
\documentclass[a4paper,index=totoc]{scrartcl} \usepackage{makeidx} \makeindex \begin{document} \section{Erstes Kapitel} \subsection{Erster Abschnitt} \subsection{Zweiter Abschnitt} Definition Gruppe\index{Gruppe} \section{Zweites Kapitel} \subsection{Erster Abschnitt} Definition Ring\index{Ring} \printindex \end{document} In diesem Beispiel wird derzeit ein Index ausgegeben mit den Begriffen "Gruppe" und "Ring" und beide Male eine "1" dahinter für die Seitenzahl. Ich hätte aber gerne die Ausgabe "Gruppe, 1.2" und "Ring, 2.1" oder alternativ (das wäre perfekt) "Gruppe, Abschnitt 1.2" und "Ring, Abschnitt 2.1". Vielen Dank schon einmal! gefragt 25 Mär '19, 20:00 Annegret |
Das Problem besteht aus zwei Stufen. Zum einen muss man dafür sorgen, dass in die Wie Der zweite Teil des Problems besteht darin, dass MakeIndex normalerweise nicht mit Zahlen wie 1.1, 1.2, 2.3 etc. als Seitenzahlen umgehen kann. Würde man MakeIndex eine Öffne in Overleaf
\indexentry{Gruppe}{1.2} \indexentry{Ring}{2.1} vorsetzen, so erhielte man Fehlermeldungen der Art:
Das liegt daran, dass MakeIndex nicht weiß, wie es mit dem Punkt in der Seitenzahl umgehen soll. Allerdings kann MakeIndex sehr wohl mit zusammengesetzten Seitenzahlen umgehen. In der Voreinstellung erwartet es jedoch, dass als Trennzeichen zwischen den beiden Zahlen ein Minuszeichen Öffne in Overleaf
page_compositor "."
kann als Trennzeichen zwischen den beiden Zahlen der Punkt eingestellt werden (wie man unter dem von Ulrike in einem Kommentar angegebenen Link aber je nach TeX-Distribution auch aus der Manual-Page von MakeIndex erfährt). So erzeugt nun beispielsweise Öffne in Overleaf
\begin{filecontents*}{\jobname.mst} page_compositor "." \end{filecontents*} \documentclass[a4paper,index=totoc]{scrartcl} \usepackage[split,makeindex]{splitidx} \newindex[\indexname]{idx} \AtWriteToIndex{idx}{\let\thepage\thesuborsection} \newcommand*{\thesuborsection}{% \ifnum \value{subsection}=0 \thesection\else\thesubsection\fi } \begin{document} \section{Erster Abschnitt mit Definitionen}\sindex[idx]{Definition} \subsection{Erster Unterabschnitt} \subsection{Zweiter Unterabschnitt} Definition\sindex[idx]{Definition} Gruppe\sindex[idx]{Gruppe} \section{Zweiter Abschnitt} \subsection{Erster Unterabschnitt} Definition\sindex[idx]{Definition} Ring\sindex[idx]{Ring} \printindex[idx] nach dem Aufruf Ich habe hier als Endung des MakeIndex-Stils absichtlich Die Definition von Zu den Optionen Nun stellt sich als drittes Problem die Frage, wie man das „Abschnitt” noch als Präfix für die Nummer bekommt. Dazu kann man die MakeIndex-Möglichkeit nutzen, eine Seitenzahlformatierung für den Indexeintrag anzugeben: Öffne in Overleaf
\begin{filecontents*}{\jobname.mst} page_compositor "." \end{filecontents*} \documentclass[a4paper,index=totoc]{scrartcl} \usepackage[split,makeindex]{splitidx} \newindex[\indexname]{idx} \AtWriteToIndex{idx}{\let\thepage\thesuborsection} \newcommand*{\thesuborsection}{% \ifnum \value{subsection}=0 \thesection\else\thesubsection\fi } \newcommand*{\sectionterm}[1]{Abschnitt~#1} \begin{document} \section{Erster Abschnitt mit Definitionen}\sindex[idx]{Definition|sectionterm} \subsection{Erster Unterabschnitt} \subsection{Zweiter Unterabschnitt} Definition\sindex[idx]{Definition|sectionterm} Gruppe\sindex[idx]{Gruppe|sectionterm} \section{Zweiter Abschnitt} \subsection{Erster Unterabschnitt} Definition\sindex[idx]{Definition|sectionterm} Ring\sindex[idx]{Ring|sectionterm} \printindex[idx] \end{document} Und schon haben wir: Natürlich ist es etwas lästig, für jeden Eintrag derart lange Befehle zu nutzen. Also definieren wir uns eine Abkürzung: Öffne in Overleaf
\begin{filecontents*}{\jobname.mst} page_compositor "." \end{filecontents*} \documentclass[a4paper,index=totoc]{scrartcl} \usepackage[split,makeindex]{splitidx} \newindex[\indexname]{idx} \AtWriteToIndex{idx}{\let\thepage\thesuborsection} \newcommand*{\thesuborsection}{% \ifnum \value{subsection}=0 \thesection\else\thesubsection\fi } \newcommand*{\sectionterm}[1]{Abschnitt~#1} \newcommand*{\idx}[1]{\sindex[idx]{#1|sectionterm}} \begin{document} \section{Erster Abschnitt mit Definitionen}\idx{Definition} \subsection{Erster Unterabschnitt} \subsection{Zweiter Unterabschnitt} Definition\idx{Definition} Gruppe\idx{Gruppe} \section{Zweiter Abschnitt} \subsection{Erster Unterabschnitt} Definition\idx{Definition} Ring\idx{Ring} \printindex[idx] \end{document} Das Ergebnis ist das gleiche wie das zuletzt gezeigte. Man kann das auch noch erweitern, wenn man zusätzlich weiterhin Formatierungsmöglichkeiten für die Seitenzahl nutzen können will: Öffne in Overleaf
\begin{filecontents*}{\jobname.mst} page_compositor "." \end{filecontents*} \documentclass[a4paper,index=totoc]{scrartcl} \usepackage[split,makeindex]{splitidx} \newindex[\indexname]{idx} \AtWriteToIndex{idx}{\let\thepage\thesuborsection} \newcommand*{\thesuborsection}{% \ifnum \value{subsection}=0 \thesection\else\thesubsection\fi } \newcommand*{\sectionterm}[2][]{#1{Abschnitt~#2}} \newcommand*{\idx}[2][]{\sindex[idx]{#2|sectionterm[#1]}} \begin{document} \section{Erster Abschnitt mit Definitionen}\idx[\textbf]{Definition} \subsection{Erster Unterabschnitt} \subsection{Zweiter Unterabschnitt} Definition\idx{Definition} Gruppe\idx{Gruppe} \section{Zweiter Abschnitt} \subsection{Erster Unterabschnitt} Definition\idx{Definition} Ring\idx{Ring} \printindex[idx] \end{document} Dem aufmerksamen Leser mag aufgefallen sein, dass ich immer Seitenzahl geschrieben habe, obwohl es sich doch um eine Abschnittsnummer handelt. Das liegt daran, dass MakeIndex üblicherweise eben Verweise auf Seitenzahlen verarbeitet und in Anleitungen daher in der Regel auch dieser Terminus verwendet wird. Daher habe ich den Begriff auch jeweils kursiv hervorgehoben. beantwortet 26 Mär '19, 09:28 gast3 |
https://tex.stackexchange.com/questions/352759/index-by-section-subsection
In der
splitidx
-Anleitung gibt es in Abschnitt 3.4 Beispielcode dafür.