wie in alten Reclamheftchen...

Erstellen von Index, Glossar, Symbolverzeichnis, einer Nomenklatur etc. mit MakeIndex oder Xindy


czil
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Di 15. Jan 2019, 22:17

wie in alten Reclamheftchen...

Beitrag von czil »

Hallo, bin komplett neu hier und auch fast komplett neu mit LaTex beschäftigt.
Will einen Roman mit LaTex setzen und der hat ein "Glossar", in dem ich Begriffe und manche Übersetzungen aufführe.

Jetzt habe ich die Vorstellung von den alten Reclamheftchen wo die zu erklärenden Sachen hinten drin stehen in etwa so:

Seite 102:
…Gretchen weinte… -Goethe hatte hierbei ziemliches Magendrücken, deshalb ist sein Faust so grimmig zum Gretchen.

Es wurde ihm kalt und heiß...- Hier hatte der Teufel die Hand im Spiel

Das Ganze also im Prinzip wie Endnoten, nur nicht jeder Eintrag extra mit der Seite sondern halt nur dann wenn die Seite eine andere ist. Und die Seite oben drüber.

Alles was ich bisher gegooglet hab, liefert mir das anders. Eintrag, dann Seite.
Ist eigentlich alles bislang zu einer Bachelor- oder sonstigen wissenschaftlichen Arbeit.

Jetzt meine Frage: Wonach könnte ich suchen? Wahrschenlich habe ich ja nur den falschen Suchbegriff?
Oder: Kennt jemand eine Seite/Buch/etc, wo so was in der Art beschrieben wird?

Danke.
theo

Gast

Beitrag von Gast »

Ich kenne das so nicht. Man könnte so etwas vermutlich per Makeindex realisieren, beispielsweise:
\documentclass{article}

\begin{filecontents*}{\jobname.ist}
  delim_0 ""
  delim_1 ""
  delim_2 ""
\end{filecontents*}

\usepackage{imakeidx}
\usepackage[ngerman]{babel}

\makeindex[columns=1,options=-s \jobname.ist]
\newcommand*{\ignorepages}[1]{}
\begin{document}
\section{Test}
Goethe\index{Seite~\thepage!Gretchen weinte -- Goethe hatte hier ziemliches
  Magendrücken, deshalb ist sein Faust so grimmig zum Getchen|ignorepages}

Gretchen\index{Seite~\thepage!Gretchen weinte -- Gretchen ist eine starke
  Frau, dass Goethe sie hier weinen lässt \dots|ignorepages}

\printindex
\end{document}
Natürlich ist es sinnvoll, den \index-Befehl hinter einem selbst definierten Befehl zu verstecken. Eventuell ist es sogar sinnvoll, den Teil hinter dem Bindestrich als weitere Ebene zu definieren oder einen Befehl mit zwei Argumenten – eines für das "Stichwort" und eines für die Erklärung – zu definieren. Siehe unbedingt auch eine LaTeX-Einführung, die Makeindex behandelt. Auch die Manual-Page zum Programm Makeindex kann nützlich sein.

Durch Verwendung von xindy an Stelle von makeindex können eventuell weitere Konfigurationsmöglichkeiten gewonnen werden.

Alternativ kann man sicher auch glossaries dazu bringen, ein entsprechendes Glossar auszugeben.

Das ganze funktioniert so natürlich nur, solange man nicht etwas wie "Seite 1, 5, 27" haben will, sondern nur "Seite 1", dann getrennt "Seite 5", dann getrennt "Seite 27". Und natürlich muss man die Erklärungen bei dieser Form ggf. auf jeder Seite setzen, auf die sie zutreffen. Aber anders war es in der Frage ja auch nicht beschrieben (und ein möglicherweise erhellendes Minimalbeispiel gibt es leider auch nicht).

Gast

Beitrag von Gast »

PS: Auf komascript.de gibt es offenbar die gleiche Frage. Dort stellt sie sich allerdings etwas anders dar und es fragt sich dann schon, ob es den Eintrag "Würmtalhof" für mehrere Seiten geben kann. Dann ist obiges nicht wirklich eine Lösung, sondern man müsste deutlich mehr Aufwand treiben.

PS2: Nächstes Mal bitte direkt einen Link setzen und bei Änderungen in der Fragestellung diese auch nachführen.

czil
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Di 15. Jan 2019, 22:17

Beitrag von czil »

Dort stellt sie sich allerdings etwas anders dar und es fragt sich dann schon, ob es den Eintrag "Würmtalhof" für mehrere Seiten geben kann. Dann ist obiges nicht wirklich eine Lösung, sondern man müsste deutlich mehr Aufwand treiben.
Hallo und erst mal Danke für deine Antwort.
Es kann sein, dass sich das in dem Forum hier anders darstellt, weil hier die Zeilenumbrüche fehlen und der Begriff selbst nicht Fett.

Sonst ist die Fragestellung schon die gleiche.

Zuerst die Seitenangabe und dann die einzelnen Punkte, die auch nur jeweils auf dieser Seite und genau einmal vorkommen.
(Kenne das z.B. aus den Metamorphosen von Ovid)
Daher werde ich dein Beispiel in jedem Fall testen.

Prinzipiell könnte ich das Ergebnis, das ich in Word mit einem Makro und Endnoten gemacht habe ja als starren Text übernehmen. Das sieht genau so aus, wie ich es haben will, aber - und das ist die Krux, wenn der Text sich dann in LaTeX nicht mehr auf die Seiten bezieht, stimmt ja alles nicht mehr, wenn ich den Satz überarbeite.
Dann hab ich einen schönen Satz aber falsche Seitenzahlen. (es sind viele!)

Hatte im Paket Glossaries gesucht, aber diese Option das so zu machen ist mir hier nicht untergekommen. Oder ich war einfach zu blöd dazu.
Da es ja für die ganzen TeX-Dinge unzählige Pakete gibt, hatte ich den Rat befolgt, das auf Komascript zu versuchen. Da ich dort nach einem Paket gefragt hatte, war mir das auch nicht bewußt, dass das ein X-Post ist. Zudem hatte ich nicht damit gerechnet, dass mir hier noch jemand antwortet.
Umso mehr freue ich mich darüber, dass du es dennoch getan hast.
Melde mich wieder, wenn das so klappt.[/i]
theo

czil
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Di 15. Jan 2019, 22:17

Beitrag von czil »

beinahe.
Also die Darstellung habe ich mit deinem Beispiel schon mal so hingebracht, dass mir die Erklärungen angezeigt werden.
Aber, ich bekomme als Überschrift immer die Seite 8. und die Reihenfolge ist leider auch nicht so, wie ich das in den Text eingebaut hab.
Ich glaube, ich muss mir das Beispiel noch mal studieren, irgendwas mache ich da noch verkehrt.
Ich studiere das morgen noch mal intensiver, dann lege ich die Anleitung daneben.
Danke für den Tipp jedenfalls.
theo

Gast

Beitrag von Gast »

Das Problem ist, dass bei obiger Lösung \thepage nicht expandiert in die Index-Datei geschrieben wird. Daher funktioniert das nicht. Jetzt könnte man natürlich auf die Idee kommen, das \thepage im Argument von \index erst zu expandieren, bevor man es an \index übergibt. Das wird aber wegen der asynchronen Ausgabe nicht funktionieren. Stattdessen müsste man entweder \@wrindex so umdefinieren, dass \theindex nicht mehr (nur) als letztes Argument von \indexentry geschrieben wird, sondern mit dem gewünschten Präfix "Seite" und gefolgt von "@" dem ersten Argument vorangestellt wird.

Man könnte auch auf die Idee kommen, definiert sich einen Makeindex-Stil (vgl. \jobname.ist im Beispiel), der aus dem normalen
\indexentry{Gretchen weinte -- Goethe hatte hier ziemliches   Magendr\IeC {\"u}cken, deshalb ist sein Faust so grimmig zum Getchen}{1}
wie man es nach
\index{Seite~\thepage!Gretchen weinte -- Goethe hatte hier ziemliches
  Magendrücken, deshalb ist sein Faust so grimmig zum Getchen|ignorepages}
im Text in der idx-Datei erhalten würde, dann etwas wie:
\myindexitem{Gretchen weinte -- Goethe hatte hier ziemliches   Magendr\IeC {\"u}cken, deshalb ist sein Faust so grimmig zum Getchen}{1}
in der ind-Datei erzeugt. Dann kann man \myindexitem leicht so definieren, dass es zu etwas wie
\item Seite 1
\subitem Gretchen weinte -- Goethe hatte hier ziemliches   Magendr\IeC {\"u}cken, deshalb ist sein Faust so grimmig zum Getchen
expandiert.

Allerdings ergibt sich hier ein größeres Problem: Makeindex sortiert nicht nach Seitenzahlen, sondern nach Eintragstext. Deshalb würde man mit diesem Ansatz nicht das gewünschte Ergebnis erhalten.

Da das ganze IMHO ohnehin nicht sortiert werden muss, sondern die Einträge einfach in der Reihenfolge ausgegeben werden können, wie sie gespeichert werden, dürfte der Weg über MakeIndex (und damit über \index) aber eher nicht erforderlich sein. Stattdessen würde ich eher eine neue Hilfsdatei schreiben. Das könnte man vermutlich recht einfach gestalten. Teilweise kann dabei vermutlich sogar tocbasic behilflich sein. Es geht aber auch ohne Zusatzpaket. Leider fehlt noch immer ein Minimalbeispiel und ich bin langsam aber sicher zu faul, alles selbst auf gut Glück einzutippen. Daher auch das nur grob skizziert und ohne Verwendung der tocbasic-Möglichkeit das über echte Verzeichniseinträge und einen eigenen Verzeichnisstil zu realisieren:
\documentclass{article}

\usepackage[ngerman]{babel}
\usepackage{tocbasic}

\makeatletter
\addtotoclist[Notes]{notes}
\newcommand*{\ext@notes}{notes}
\newcommand*{\listofnotesname}{Glossar}
\newcommand*{\MakeNote}[2]{%
  \addtocontents{\ext@notes}{\string\DoNote{\thepage}\detokenize{{#1}{#2}}}%
}
\newcommand*{\DoNote}[3]{%
  \def\reserved@a{#1}\ifx\reserved@a\@LastNotePage\else
    \addvspace{\baselineskip}%
    Seite #1:\par\nobreak
    \let\@LastNotePage\reserved@a
  \fi
  \@hangfrom{\hspace*{2em}}\textbf{#2} -- #3\par
  \addvspace{.5\baselineskip}%
}
\newcommand*{\printNotes}{\listoftoc{notes}}
\BeforeStartingTOC[notes]{\let\@LastNotePage\@empty}
\makeatother

\begin{document}
\section{Test}
Goethe\MakeNote{Gretchen weinte}{Goethe hatte hier ziemliches
  Magendrücken, deshalb ist sein Faust so grimmig zum Getchen}

\newpage
Gretchen\MakeNote{Gretchen weinte}{Gretchen ist eine starke
  Frau, dass Goethe sie hier weinen lässt \dots}

\printNotes
\end{document}
Der Umweg über \addtocontents ist mehr oder weniger zwingend, wenn es möglich sein soll, das Glossar nicht auf einer neuen Seite zu beginnen bzw. noch nach dem Glossar Eintrage erstellt werden können sollen.

Kleiner Nebeneffekt des Ganzen: Theoretisch kann man die Hilfsdatei (Endung notes) natürlich auch in einem eigenen Dokument laden, wie man das von Lektüreschlüsseln kennt.

czil
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Di 15. Jan 2019, 22:17

Beitrag von czil »

UFF.
Was soll ich sagen?
Du verlangst nach einem "Minimaldokument", und lieferst mir, noch bevor ich überhaupt in der Lage bin, mein Problem in überhaupt irgendwas zu bringen, die MAXIMALLÖSUNG!!!
Musste das jetzt erst mal soweit nachvollziehen, dass ich dein Beispiel ausgegeben bekam, doch siehe da: Das ist genau das, was ich gesucht hab!
FREUDE!!!
Vielen Dank.
Nach meinem Experiment sieht das dann mit Blindtext so aus:
\documentclass{article}

\usepackage[ngerman]{babel}
\usepackage{tocbasic}

\makeatletter
\addtotoclist[Notes]{notes}
\newcommand*{\ext@notes}{notes}
\newcommand*{\listofnotesname}{Glossar}
\newcommand*{\MakeNote}[2]{%
  \addtocontents{\ext@notes}{\string\DoNote{\thepage}\detokenize{{#1}{#2}}}%
}
\newcommand*{\DoNote}[3]{%
  \def\reserved@a{#1}\ifx\reserved@a\@LastNotePage\else
    \addvspace{\baselineskip}%
    Seite #1:\par\nobreak
    \let\@LastNotePage\reserved@a
  \fi
  \@hangfrom{\hspace*{2em}}\textbf{#2} -- #3\par
  \addvspace{.5\baselineskip}%
}
\newcommand*{\printNotes}{\listoftoc{notes}}
\BeforeStartingTOC[notes]{\let\@LastNotePage\@empty}
\makeatother

\begin{document}
\section{Kapitel I}

Goethe\MakeNote{Goethe}{Goethe ist ein alter Stinkstiefel}
 hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. Wer würde ihm schon folgen, spät in der Nacht und dazu noch in dieser engen Gasse mitten im übel beleumundeten Hafenviertel? Gerade jetzt, wo er das Ding seines Lebens gedreht hatte und mit der Beute verschwinden wollte! Hatte einer seiner zahllosen Kollegen dieselbe Idee gehabt, ihn beobachtet und abgewartet, um ihn nun um die Früchte seiner Arbeit zu erleichtern? Oder gehörten die Schritte hinter ihm zu einem der unzähligen Gesetzeshüter dieser Stadt, und die stählerne Acht um seine Handgelenke würde gleich zuschnappen? Er konnte die Aufforderung stehen zu bleiben schon hören. Gehetzt sah er sich um. Plötzlich erblickte er den schmalen Durchgang. Blitzartig\MakeNote{Blitz}{Leuchterscheinung, die in dieserm Zusammenhang nicht ganz passt} drehte er sich nach rechts und verschwand zwischen den beiden Gebäuden. Beinahe wäre er dabei über den umgestürzten Mülleimer gefallen, der mitten im Weg lag. Er versuchte, sich in der Dunkelheit seinen Weg zu ertasten und erstarrte: Anscheinend gab es keinen anderen Ausweg aus diesem kleinen Hof als den Durchgang, durch den er gekommen war. Die Schritte wurden lauter und lauter, er sah eine dunkle Gestalt um die Ecke\MakeNote{Ecke, um diese krumme…}{Auch eine Ecke ist manchmal spannend, vor allem wenn sie der richtge Verein bekommt und in ein Tor verwandelt das dann zum Sieg der Mannschaft führt, welche das schon lange verdient hat.} biegen. Fieberhaft irrten seine Augen durch die nächtliche Dunkelheit und suchten einen Ausweg. War jetzt wirklich alles vorbei, waren alle Mühe und alle Vorbereitungen umsonst? Er presste sich ganz eng an die Wand hinter ihm und hoffte, der Verfolger würde ihn übersehen, als plötzlich neben ihm mit kaum wahrnehmbarem Quietschen eine Tür im nächtlichen Wind hin und her schwang. Könnte dieses der flehentlich herbeigesehnte Ausweg aus seinem Dilemma sein? Langsam bewegte er sich auf die offene Tür zu, immer dicht an die Mauer gepresst. Würde diese Tür seine Rettung werden?
\newpage
\section{Kapitel II}
Er hörte leise Schritte hinter sich. Das bedeutete nichts Gutes. Wer würde ihm schon folgen, spät in der Nacht und dazu noch in dieser engen Gasse mitten im übel beleumundeten Hafenviertel? Gerade jetzt, wo Goethe\MakeNote{Goethe}{Goethe hatte hier ziemliches
  Magendrücken, deshalb ist sein Faust so grimmig zum Getchen} das Ding seines Lebens gedreht hatte und mit der Beute verschwinden wollte! Hatte einer seiner zahllosen Kollegen dieselbe Idee gehabt, ihn beobachtet und abgewartet, um ihn nun um die Früchte seiner Arbeit zu erleichtern? Oder gehörten die Schritte hinter ihm zu einem der unzähligen Gesetzeshüter dieser Stadt, und die stählerne Acht um seine Handgelenke würde gleich zuschnappen? Er konnte die Aufforderung stehen zu bleiben schon hören. Gehetzt sah er sich um. Plötzlich erblickte er den schmalen Durchgang. Blitzartig drehte er sich nach rechts und verschwand zwischen den beiden Gebäuden. Beinahe wäre er dabei über den umgestürzten Mülleimer gefallen, der mitten im Weg lag. Er versuchte, sich in der Dunkelheit seinen Weg zu ertasten und erstarrte: Anscheinend gab es keinen anderen Ausweg aus diesem kleinen Hof als den Durchgang, durch den er gekommen war. Die Schritte wurden lauter und lauter, er sah eine dunkle Gestalt um die Ecke biegen. Fieberhaft irrten seine Augen durch die nächtliche Dunkelheit und suchten einen Ausweg. War jetzt wirklich alles vorbei, waren alle Mühe und alle Vorbereitungen umsonst? Er presste sich ganz eng an die Wand hinter ihm und hoffte, der Verfolger würde ihn übersehen, als plötzlich neben ihm mit kaum wahrnehmbarem Quietschen eine Tür im nächtlichen Wind hin und her schwang. Könnte dieses der flehentlich herbeigesehnte Ausweg aus seinem Dilemma sein? Langsam bewegte er sich auf die offene Tür zu, immer dicht an die Mauer gepresst. Würde diese Tür seine Rettung werden? Doch, da stand plötzlich Gretchen\MakeNote{Gretchen}{Gretchen ist eine starke
  Frau, dass Goethe sie hier weinen lässt  ist keinem so recht verständlich\dots} vor ihm

\newpage


\printNotes
\end{document}
Ich hab zwar noch nicht alles kapiert, aber ich bin, glaube ich, in der Lage, das in mein Buch mit einzubauen.
Vielen herzlichen Dank!
PS: Wenn du mir einen Namen gibst, kommst du in die Dankeswidmung mit rein!
theo

Gast

Beitrag von Gast »

Bedank dich einfach beim Autor von tocbasic für das schöne Paket. :wink:

czil
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Di 15. Jan 2019, 22:17

Beitrag von czil »

Na, vielen Dank auch für den Tipp, ich werde mich bei dir und dem Erschaffer dieses Pakets bedanken!
theo

czil
Forum-Anfänger
Forum-Anfänger
Beiträge: 34
Registriert: Di 15. Jan 2019, 22:17

Beitrag von czil »

Also, ich habe den Code sogar inzwischen in dem Skript »SPBuchsatz« untergebracht.
Falls das mal jemanden interessiert, so hab ich das gemacht.
Eine Datei angelegt, die man dann im Hauptdokument aufruft an der STelle:
%  Name der ebenfalls optionalen, LOKALEN Präambel-Zusatz-Datei:
%  
\def \spOptionaleLokalePraeambelZusatzDatei {../tex/PZusatz.tex}
in diese Datei hab ich das von oben reinkopiert:
%%%das habe ich hier eingefügt:++++++++++++++++++++++++
%%%%\begin{document}
\usepackage[ngerman]{babel}
\usepackage{tocbasic}

\makeatletter
\addtotoclist[Notes]{notes}
\newcommand*{\ext@notes}{notes}
\newcommand*{\listofnotesname}{Erkl{\"a}rungen und Erl{\"a}uterungen}
\newcommand*{\MakeNote}[2]{%
  \addtocontents{\ext@notes}{\string\DoNote{\thepage}\detokenize{{#1}{#2}}}%
}
\newcommand*{\DoNote}[3]{%
  \def\reserved@a{#1}\ifx\reserved@a\@LastNotePage\else
    \addvspace{\baselineskip}%
    Seite #1:\par\nobreak
    \let\@LastNotePage\reserved@a
  \fi
  \@hangfrom{\hspace*{2em}}\textbf{#2} -- #3\par
  \addvspace{.5\baselineskip}%
}
\newcommand*{\printNotes}{\listoftoc{notes}}
\BeforeStartingTOC[notes]{\let\@LastNotePage\@empty}
\makeatother


%%%''''''''''''''''''''''''''' bis hierher'''''''''''''
Im »Haupttext.tex« dann die Anmerkungen so eingefügt wie ich das in dem obigen Beispiel schon mal gemacht hab:
…er sei arm dran\MakeNote{Arm}{ist, wer arm dran ist nicht, der, der keinen Arm hat} …
in den »Schlussseiten.tex« dann den letzten Befehl
\printNotes
Dann kommen die Erläuterungen ans Ende des Buches.
(aber erst beim 2. Durchgang...)

Jetzt muss ich nur noch rausfinden, wie ich dem Skript abgewöhnen kann, dass es die erste Zeile eines Absatzes generell nicht einzieht und dann kommt die eigentliche Arbeit. :o)
(Umlaute ersetzen, unnötige Absätze und dann die ganzen Anmerkungen die ich momentan in dem Word-Dok drin hab als die makenote-Befehle umschreiben)
Danke noch mal für die Unterstützung.
theo

Antworten