PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Index mit Makros



Ka55i0peia
12-03-2009, 14:55
Hi Leute,

habe folgende Problem:
Möchte eine Dokumentation zu einem Projekt schreiben (Klassen und deren Methoden dokumentieren) - mit LaTeX.

Damit man sich schnell zurecht findet, soll es einen Index geben mit Sortierung nach Objekten und untergeordnet deren Methoden.

Um Schreibaufwand zu sparen ist meine Vorgehensweise die folgende (siehe Minimalbeispiel):

Für jede beschriebene Klasse wird ein Makro gesetzt:
\setObj{KlasseA}
und in den Index aufgenommen \index{\getObj}

Die Erklärungen der Methoden sollen mit in den Index aufgenommen werden mit
\index{\getObj!methodename()}.


Mein Problem ist das folgende: (Siehe Ausgabe main.ind).
Dieses \getObj wird 1:1 ins das Indexfile (main.ind) übertragen, nicht aber deren Inhalte.

Also auf das Beispiel bezogen:
Inhalt von main.ind

\begin{theindex}
\item \getObj , 1, 2
\subitem add(), 1
\subitem div(), 2
\subitem set(), 1
\subitem sub(), 2
\end{theindex}

gewünschter Inhalt:

\begin{theindex}
\item classA , 1
\subitem add(), 1
\subitem set(), 1
\item classB , 2
\subitem div(), 2
\subitem sub(), 2
\end{theindex}

Ich hoffe ich bin zu verstehen.
Vielen Dank, wenn sich jemand der Sache annimmt.

Liebe Grüße,
derJan

rais
12-03-2009, 15:52
Moin moin,


Um Schreibaufwand zu sparen ist meine Vorgehensweise die folgende (siehe Minimalbeispiel):

ich seh den `geringeren Schreibaufwand' nicht ganz ...


Für jede beschriebene Klasse wird ein Makro gesetzt:
\setObj{KlasseA}
und in den Index aufgenommen \index{\getObj}

Die Erklärungen der Methoden sollen mit in den Index aufgenommen werden mit
\index{\getObj!methodename()}.


Mein Problem ist das folgende: (Siehe Ausgabe main.ind).
Dieses \getObj wird 1:1 ins das Indexfile (main.ind) übertragen, nicht aber deren Inhalte.

versuch es so:


\documentclass[a4paper,12pt]{scrreprt}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{index} %Mehrer Indexe
\newindex{default}{idx}{ind}{Klassenverzeichnis}

\newcommand{\initObj}{ \newcommand{\getObj}{initObj} }
\newcommand{\setObj}[1]{ \renewcommand{\getObj}{#1} }

\newcommand*\Index[1]{%
\expandafter\index\expandafter{#1}}
\begin{document}
\chapter{Die Klassen}
\initObj

\section{Klasse A}\setObj{classA}
\Index{\getObj}

\subsection{Methoden}
\begin{enumerate}
\item Methode add \Index{\getObj!add()} \\Erklärung Erklärung Erklärung
\item Methode set \Index{\getObj!set()} \\Erklärung Erklärung Erklärung
\end{enumerate}

\newpage %damit der Effekt deutlicher wird (im Index 2)

\section{Klasse B}\setObj{classB}
\Index{\getObj}

\subsection{Methoden}
\begin{enumerate}
\item Methode sub \Index{\getObj!sub()} \\Erklärung Erklärung Erklärung
\item Methode div \Index{\getObj!div()} \\Erklärung Erklärung Erklärung
\end{enumerate}
\printindex
\end{document}

MfG

Ka55i0peia
12-03-2009, 18:50
Hat geklappt, VIELEN DANK!

Eine Fragen zum Verständnis:

Was macht \expandafter\index\expandafter{#1}?



ich seh den `geringeren Schreibaufwand' nicht ganz

Schon klar, is auch nen sehr abstraktes Beispiel. Hab viel mit \newcommand für Styles gearbeitet und da werden die \Index gleich mitgesetzt. Wollts Bsp aber simpel halten ;)

:):):):) Nochma danke für die schnelle und präzise Antwort! :):):):)

rais
13-03-2009, 09:53
Moin moin,


Eine Fragen zum Verständnis:

Was macht \expandafter\index\expandafter{#1}?


da hilft vllt erstmal http://www.tug.org/utilities/plain/cseq.html#expandafter-rp

MfG