1
1

Dies ist eine Folgefrage zu meiner Frage zu Trennzeichen nach Index-Stichwörtern, kompetent beantwortet von Ijon Tichy (danke!), aber ich habe trotzdem noch etwas nicht verstanden.

Ijon Tichys Beispiel geht so, und es funktioniert wie gewünscht:

Öffne in Overleaf
\begin{filecontents*}{\jobname.ist}
delim_0 " "
\end{filecontents*}
\documentclass[ngerman]{scrartcl}
\usepackage{imakeidx}
\makeindex[intoc,options={-s \jobname.ist},name=Indexkuerzel,title=Indextitel,columns=2]

\begin{document}
Stichwort\index[Indexkuerzel]{Stichwort}
\printindex[Indexkuerzel]
\end{document}

Ich habe es so verstanden: In der makeindex-Stildatei gibt der Parameter "delim" das Zeichen an, das im Index zwischen Stichwort und erster Seitenzahl steht (s. a. diese Anleitung, S. 9). Im obigen Beispiel: nichts (Standard wäre ein Komma). Dabei bedeutet delim 0 die erste Ebene, delim 1 die zweite etc. Ich verstehe es so, dass damit Einträge und Untereinträge gemeint sind, wie sie in diesem Beispiel vorkommen:

Öffne in Overleaf
\begin{filecontents*}{\jobname.ist}
delim_0 " "
delim_1 " "
\end{filecontents*}
\documentclass[ngerman]{scrartcl}
\usepackage{imakeidx}
\makeindex[intoc,options={-s \jobname.ist},name=geo,title=Geografischer Index,columns=2]

\begin{document}
Ort-A\index[geo]{Ort-A}\\
Ortsteil-a\index[geo]{Ort-A!Ortsteil-a}\\
Ortsteil-b\index[geo]{Ort-A!Ortsteil-b}\\
Ort-B\index[geo]{Ort-B}\\
Ort-C\index[geo]{Ort-C}\\
\printindex[geo]
\end{document}

Während auf der ersten Ebene tatsächlich kein Komma erscheint, erscheint es auf der zweiten Ebene nach wie vor -- delim 1 hat keinen Effekt. Auch wenn ich bei delim 0 zwischen die Anführungszeichen einen Doppelpunkt setze, hat das in diesem Beispiel keinen Effekt. Warum funktioniert das eine und das andere nicht?

NACHTRAG: Oh! Wenn ich das zweite Beispiel in Overleaf öffne, sieht es aus, wie ich es will (nach keinem Stichwort ein Komma). Der identische Code in TeXStudio macht das aber nicht. Wenn ich in Overleaf ein Detail ändere, schlägt sich das auch nicht mehr im neuen Preview nieder. (Ich hoffe, zumindest Letzteres ist für euch reproduzierbar.) Das hat wohl mit der .ist-Datei zu tun? Ich glaube, mir fehlt da ein grundlegendes Stück Verständnis, was diese Datei tut. Ich bin dankbar für Hilfe!

gefragt 31 Okt '17, 22:00

Portokali's gravatar image

Portokali
9659
Akzeptiert-Rate: 0%

bearbeitet 01 Nov '17, 10:00

saputello's gravatar image

saputello
11.1k174365

1

Lösch mal die vom Dokument erzeugte .ist-Datei und setze das Dokument erneut.

(01 Nov '17, 00:57) Henri

Danke, Henri, genau das war der Punkt!

(01 Nov '17, 21:29) Portokali

Dein Hauptproblem ist nicht, delim_0, delim_1 etc. zu verstehen. Wobei diese übrigens in den von Ijon in seiner Antwort verlinkten Dokumenten, insbesondere dem Manual eigentlich erklärt sind:

Screenshot aus dem Manual

Auf Deutsch also:

Screenshot Übersetzung

Es gibt weitere solche Einstellungen, die bitte einschließlich ihrer Bedeutung dem Manual entnommen werden. Ebene 0 ist in der Zählweise von makeindex quasi ein Hauptstichwort, wie man es normalerweise mit \index{Stichwort} erzeugt. Ebene 1 ist die erste Unterebene, wie man es in der Voreinstellung von makeindex mit \index{Stichwort!Unterstichwort} erzeugt. Ebene 2 entsprechend die Unterunterebene, wie man sie in der Voreinstellung mit \index{Stichwort!Unterstichwort!Unterunterstichwort} erzeugt.

Zu beachten ist übrigens auch, dass für die Strings C-printf-Syntax gilt. Um also beispielsweise einen Backslash in die Ausgabe zu bekommen, muss man zwei verwenden. Einen Zeilenumbruch erreicht man dagegen mit \n. Man kann das bereits sehr gut bei den Angaben für die Voreinstellungen diverser Parameter, beispielsweise preamble sehen.


Aber wie gesagt, das ist nicht Dein Problem. Dein Problem ist, dass Du offenbar die Verwendung von filecontents nicht verstanden hast. Ohne das gleichnamige Paket schreibt diese Umgebung ihren Inhalt in die angegebene Datei nur, wenn diese Datei noch nicht existiert. Gleichzeitig schreibt LaTeX den Hinweis in die .log-Datei: »Writing file `…'«, wobei statt der Pünktchen natürlich der Dateinamen ausgegeben wird. Existiert die Datei bereits, wo wird sie hingegen nicht neu geschrieben. In der .log-Datei heißt es dann auch: »File `…' already exists on the system. Not generating it from this source.« Wie man sieht, lohnt es sich manchmal wirklich, sich bei Problemen auch einmal die .log-Datei genauer anzuschauen.

Willst Du per filecontents-Umgebung eine existierende Datei überschreiben, so musst Du zusätzlich das gleichnamige Paket filecontents laden und zwar noch vor der filecontents-Umgebung. Um ein Paket noch vor \documentclass zu laden, muss man \RequirePackage statt \usepackage verwenden:

Öffne in Overleaf
\RequirePackage{filecontents}
\begin{filecontents*}{\jobname.ist}
delim_0 " "
delim_1 " "
\end{filecontents*}
\documentclass[ngerman]{scrartcl}
\usepackage{imakeidx}
\makeindex[intoc,options={-s \jobname.ist},name=geo,title=Geografischer Index,columns=2]

\begin{document}
Ort-A\index[geo]{Ort-A}\\
Ortsteil-a\index[geo]{Ort-A!Ortsteil-a}\\
Ortsteil-b\index[geo]{Ort-A!Ortsteil-b}\\
Ort-B\index[geo]{Ort-B}\\
Ort-C\index[geo]{Ort-C}\\
\printindex[geo]
\end{document}

Hier erhältst Du dann ab dem zweiten LaTeX-Lauf in der .log-Datei: »Overwriting file `…'«. Die existierende Datei wird also überschrieben. Natürlich muss man dann selbst gut aufpassen, dass man nicht versehentlich eine wichtige Datei überschreibt. So würde nun beispielsweise \begin{filcontents}{\jobname} auch ohne die Endung .tex bei den meisten TeX-Implementierungen in Wirklichkeit die TeX-Datei selbst überschreiben. Dabei wird auch kein Backup erzeugt. Das Hauptdokument wäre damit unwiederbringlich verloren!

Als Alternative kannst Du natürlich nach einer Änderung einer filecontents-Umgebung und vor dem nächsten LaTeX-Lauf auch einfach die entsprechende Datei direkt im Dateisystem löschen.

Die Verwendung von filecontents-Umgebungen in Minimalbeispielen geschieht übrigens meist nur aus zwei Gründen:

  1. Es ist sichergestellt, dass der Empfänger des Minimalbeispiels nicht durch versehentliches Speichern von Dateien unter einem falschen Namen oder in einem falschen Verzeichnis ein Problem bekommt.
  2. Das Beispiel funktioniert ohne Upload zusätzlicher Dateien in Online-Editoren wie Overleaf.

Überträgt man ein solches Beispiel – nachdem man es unverändert getestet hat – ins wahre Leben, also auf sein eigenes Dokument, so spricht absolut nichts dagegen die im Minimalbeispiel per filecontents angelegte Datei nicht mehr per filecontents anzulegen und zu ändern, sondern als eigenständige Datei mit Hilfe eines Editors anzulegen und zu bei Bedarf zu verändern. Dabei muss man dann natürlich darauf achten, nicht in die Falle aus obigem Punkt 1 zu laufen. Sollte man später wieder ein Minimalbeispiel aus seinem Dokument machen müssen, sollte man natürlich erneut zu filecontents greifen.

Permanenter link

beantwortet 01 Nov '17, 09:50

saputello's gravatar image

saputello
11.1k174365
Akzeptiert-Rate: 51%

bearbeitet 02 Nov '17, 10:01

Danke für die ausführliche Antwort! Ich hatte ja selbst schon geschrieben, dass ich die einzelnen Einstellungen bereits im Manual nachgelesen und ihren Zweck verstanden hatte. Die entscheidende Info war für mich, dass die Datei ".ist" nicht überschrieben wird. Jetzt funktioniert in der Tat alles wie gewünscht.

Deine erste vorgeschlagene Lösung ist natürlich die eleganteste, aber ich werde mich fürs erste mit deinem zweiten Vorschlag begnügen. Die Datei von Hand zu löschen, scheint mir sicherer, zumal man das ja nicht oft machen muss.

Danke vielmals!

(01 Nov '17, 21:28) Portokali
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×16
×2

gestellte Frage: 31 Okt '17, 22:00

Frage wurde gesehen: 5,644 Mal

zuletzt geändert: 02 Nov '17, 10:01