ubuntuusers.de

Index-Einträge in Latex automatisieren

Status: Gelöst | Ubuntu-Version: Ubuntu
Antworten |

Fredo Team-Icon

Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hallo!

In Latex kann man ja Indexeinträge definieren, aus denen makeindex dann einen Index erstellt.

Nun würde ich gerne wissen, ob es eine Möglichkeit gibt, das Eintragen der Indexmarkierungen zu automatisieren. Man hat also einen fertigen Text und eine Liste von Indexeinträgen, die dann automatisch im Text ergänzt werden sollen.

Auf CTAN habe ich ein Programm gefunden, dass genau dies tut: addindex. Nur kann man es zur Zeit wohl nur auf Sparc-Prozessoren kompillieren, das steht zumindest in der README. Und bei mir hat es auch nicht geklappt.

Kennt jemand sonst noch ein Programm, dass diese Aufgage erfüllt? Oder ein Skript, das das mit sed o.ä. macht? Oder hat es jemand geschafft, addindex zu kompillieren? (Sowas wird doch sicherlich häufiger gebraucht, vielleicht würde es sich ja auch lohnen, addindex mal für andere Prozessoren anzupassen.)

Liebe Grüße
Fredo

Dee Team-Icon

Avatar von Dee

Anmeldungsdatum:
9. Februar 2006

Beiträge: 20095

Wohnort: Schwabenländle

So, hab mich grad ne Stunde abgemüht... Ich komme (nach einigen Änderungen am Quellcode) soweit, daß mir der Linker entgegen wirft die Funktion "main" nicht zu finden. Wenn Du magst, kann ich gern berichten, wie ich dahin gekommen bin und Du schaust dann selbst einmal. Ich hab leider von lex keine Ahnung, sonst würde ich das ganze Ding neu schreiben. Nur verstehe ich leider nicht so ganz, was da gemacht wird... Und der von flex generierte Code ist um die 2000 Zeilen lang. ☹

Gruß, Dee

Fredo Team-Icon

(Themenstarter)
Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hallo Dee!

Vielen Dank für Deine Mühe! Das ist ja wirklich klasse! Leider kann ich selbst nicht programmieren, sonst hätte ich auch mal ein bisschen im Quelltext gewühlt.

Ich habe nun schon ein zweites Programm gefunden, dass etwas in der Art anbietet: forindex.

Das ist leider in einer Sprache geschrieben, von der ich noch nie was gehört habe: SNOBOL, und braucht einen entsprechenden Interpreter. Aber immerhin soll es unter Linux laufen...

Leider fehlt ihm aber ein Feature von addindex: forindex durchsucht nur anhand eine Liste mit Begriffen, die dann so in den Index kommen. Bei addindex kann man nach einem Begriff suchen (z.B. Kongo), und einen anderen in den Index eintragen lassen (z.B. Dem. Rep. Kongo).

Naja, dann werde ich wohl noch weitersuchen.

Liebe Grüße
Fredo

Qasi

Avatar von Qasi

Anmeldungsdatum:
28. Januar 2006

Beiträge: 414

Wohnort: Paderborn

Hallo Fredo,

ich würde dir davon abraten ein solches Programm zu benutzen. Im Allgemeinen ist es nicht genau das was man will. Entweder will man in einem Index aufzeigen wo ein Begriff in der Arbeit definiert bzw. erklärt wird (dann reicht ein Indexeintrag), oder wo er entscheidend einfliesst (dann reichen 2 bis 3 Einträge). Normalerweise macht es keinen Sinn, jedes Vorkommen eines wichtigen Begriffes in den Index aufzunehmen.

Wenn du dies aber für EINZELNE Begriffe wirklich willst, ist es doch einfach mit dem Editor zu erledigen (z.B. jedit):

replace all: toter Wald
with : toter Wald \index{toter Wald}

Zu beachten sind dabei natürlich unterschiedliche Schreibweisen

replace all: tote Wälder
with : tote Wälder \index{toter Wald}

Dieses Problem werden auch die von dir genannten Programme haben. Du sollstest dir also gut überlegen, ob und was für einen Index du haben willst. Wenn du es gut machen willst, wird das IMHO viel (Hand-)Arbeit bedeuten. Das weiß ich aus eigener Erfahrung.... by the way: Gedankt hat es mir keiner 😉

Fredo Team-Icon

(Themenstarter)
Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hallo Qasi!

Dass auch so ein Programm nicht einwandfrei arbeitet, ist mir schon klar. Nur ist eine gewisse Vorarbeit ja schon eine entscheidende Erleichterung gegenüber der alles-von-Hand-Methode.

Dabei geht es mir auch in erster Linie gar nicht um kleinere Arbeiten. Aber wenn man z.B. ein Buch von 300 Seiten nachträglich mit einem Personenregister versehen soll, dass über 100 Personen umfasst, dann ist search-and-replace sicherlich auch etwas mühsam.

Vor kurzem hat mir ein Freund gezeigt, wie man solche automatischen Indexeinträge mit Word anlegen kann. Und da ich gerade diesem Freund mal einen Einblick in Latex geben soll, wäre es natürlich schon, wenn es diese Funktion auch für Latex gäbe.

Liebe Grüße
Fredo

Qasi

Avatar von Qasi

Anmeldungsdatum:
28. Januar 2006

Beiträge: 414

Wohnort: Paderborn

Hallo Fredo,

wenn du es so machen willst ist es ja auch kein Problem. Da es kein Latex-spezifisches Problem ist, wirst du viele Programme in vielen Programmiersprachen finden, die dein Problem lösen. Nach ein wenig googlen bin ich auf folgendes C-Programm gestossen:

Dort kannst du in einer Token-Datei token.dat:

toter Wald=toter Wald \index{toter Wald}
tote Wälder=tote Wälder \index{toter Wald}
etc....

schreiben und das Programm erstellt dir nach dem Aufruf (nachdem du das C-Programm nach z.B. repindex.o kompiliert hast):

repindex.o eingabe.tex ausgabe.tex token.dat

alle Indexeinträge. Im ZIP-File waren leider nur Windows-Executables, aber man wird den vorhandenen C-Code (von gr.c) bestimmt auch unter Ubuntu kompilieren können. Ansonsten wird es wie gesagt bestimmt noch viele andere Programme geben, die dies leisten.

Ich hoffe das hat geholfen.

Ciao Qasi

Fredo Team-Icon

(Themenstarter)
Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hi Quasi!

Ja, das hilft schon mal. Ich habe es zwar nicht kompilliert bekommen, aber die Exes lassen sich auch mit Wine betreiben. Danke für den Tipp!

Nichts desto trotz haben spezifischere Programme wie addindex Vorteile. Z.B. lassen sich damit bereits indizierte Dateien bearbeiten, ohne dass die Indexeinträge verdoppelt werden.

Es gibt natürlich immer auch andere Wege, so etwas zu machen. Trotzdem wird sich ja auch der Autor von addindex etwas dabei gedacht haben, als er sein Programm geschrieben hat. Zumindest für ihn war es wohl praktischer so. Nur schade, dass er sich auf SPARCs beschränkt hat...

Liebe Grüße
Fredo

Qasi

Avatar von Qasi

Anmeldungsdatum:
28. Januar 2006

Beiträge: 414

Wohnort: Paderborn

Weil du es bist Fredo, hab ich extra noch ein wenig gegoogelt.... Dieses Perl Skript könnte besser sein!

Fredo Team-Icon

(Themenstarter)
Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Qasi hat geschrieben:

Weil du es bist Fredo, hab ich extra noch ein wenig gegoogelt.... Dieses Perl Skript könnte besser sein!

Sehr lieb! Das sieht toll aus! Und mit Perl kann man ja auch mal was anfangen, nicht noch so ein Exot... 😉

Eigentlich komisch, dass das nicht so bekannt zu sein scheint. Ich habe mir echt die Finger wund gegoogelt, bevor ich hier gefragt habe, aber dabei habe ich es nicht gefunden.

Also, vielen Dank noch mal!

Liebe Grüße
Fredo

Nachtrag: Das Programm funktioniert tatsächlich sehr gut. Es gibt nur eine Schwachstelle: Vorhandene Indexeinträge werden nicht berücksichtigt, so dass es Probleme geben kann, wenn schon Einträge vorhanden sind. Also dann lieber ganz auf Indexeinträge verzichten, bis man ixgen angewendet hat. Das Problem steht aber wohl schon auf der Todo-Liste.

Qasi

Avatar von Qasi

Anmeldungsdatum:
28. Januar 2006

Beiträge: 414

Wohnort: Paderborn

Da du ja sehr gerne Tools für Latex suchst hier noch eine Seite die ich gerade gefunden habe:
Vielleicht löst diese auch dein Bibtex Problem:

http://dmoz.org/Computers/Software/Typesetting/TeX/

Ciao Qasi

P.S.: Vielleicht ist das mit dem Index nicht so bekannt, weil es eben doch nur selten sinnvoll ist 😉 *duck und weg*

Fredo Team-Icon

(Themenstarter)
Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Qasi hat geschrieben:

Da du ja sehr gerne Tools für Latex suchst hier noch eine Seite die ich gerade gefunden habe:
Vielleicht löst diese auch dein Bibtex Problem:

Danke, sehe ich mir mal an!

Qasi hat geschrieben:

P.S.: Vielleicht ist das mit dem Index nicht so bekannt, weil es eben doch nur selten sinnvoll ist 😉 *duck und weg*

Nur zur Belustigung eine kleine Diskussion auf de.comp.text.tex 😉 Anscheined stört sich tatsächlich niemand daran, das per Hand zu machen...

Gruß
Fredo

Qasi

Avatar von Qasi

Anmeldungsdatum:
28. Januar 2006

Beiträge: 414

Wohnort: Paderborn

Fredo hat geschrieben:

Qasi hat geschrieben:

Da du ja sehr gerne Tools für Latex suchst hier noch eine Seite die ich gerade gefunden habe:
Vielleicht löst diese auch dein Bibtex Problem:

Danke, sehe ich mir mal an!

Qasi hat geschrieben:

P.S.: Vielleicht ist das mit dem Index nicht so bekannt, weil es eben doch nur selten sinnvoll ist 😉 *duck und weg*

Nur zur Belustigung eine kleine Diskussion auf de.comp.text.tex 😉 Anscheined stört sich tatsächlich niemand daran, das per Hand zu machen...

Gruß
Fredo

Ja ich denke viele werden auch mit \newcommand arbeiten, z.B.:

\newcommand{\toterwald}{toter Wald \index{toter Wald}}

ob man dann "toter Wald" oder "\toterwald" schreibt ist dann ja egal...

mawe

Anmeldungsdatum:
18. November 2004

Beiträge: 172

Hi!

Scheint ja schon gelöst zu sein, aber sollte nicht so etwas ähnliches funktionieren:

#!/usr/bin/env python

import sys
import re

texfile, indexfile = sys.argv[1:3]

tokens = file(indexfile, "r").readlines()
tex = file(texfile, "r").read()
output = file("%s.ind" % texfile, "w")

for token in tokens:
    token = token.strip()
    pattern = re.compile(r"%s(?!(}|\s?\\index))" % token)
    tex = pattern.sub("%s \index{%s} " % (token, token), tex)

output.write(tex)


Usage: scriptname texfile.tex indexfile.txt
Output steht dann in texfile.tex.ind
Berücksichtigt auch Fälle, bei denen schon ein "\index{...}" danach steht (hoffe ich jedenfalls ☺)

Gruß, mawe

Fredo Team-Icon

(Themenstarter)
Avatar von Fredo

Anmeldungsdatum:
27. Juni 2005

Beiträge: 5244

Wohnort: Bochum

Hi mawe!

Ja, das sieht im Prinzip schon mal ganz gut aus. Aber wenn ich das richtig verstehe, wird auch nur nach einem Begriff gesucht, der dann auch so indiziert wird, man kann also nicht Suchbegriffe und Indexbegriffe getrennt angeben (s.o.). ixgen hat da schon einige Vorteile, z.B. werden auch mit include eingebundene tex-Dateien indiziert, man kann Querverweise definieren, etc.

Dass aber keine Indexeinträge doppelt vorgenommen werden ist schon mal ziemlich cool! Wäre nett, wenn das bei ixgen auch mal kommen würde.

(Dort ist übrigens die Version im Download-Archiv älter als die neueste, die man einzeln runterladen kann. Aber die doppelten Indexeinträge sind wohl trotzdem noch nicht berücksichtigt.)

Liebe Grüße
Fredo

mawe

Anmeldungsdatum:
18. November 2004

Beiträge: 172

Hi Fredo!

Das mit den verschiedenen Such- und Indexbegriffen sollte (wenn ich Dich richtig verstanden habe) einfach so gehen:

for token in tokens:
    token, index_token = token.strip().split("=")
    pattern = re.compile(r"%s(?!(}|\s?\\index))" % token)
    tex = pattern.sub("%s \index{%s} " % (token, index_token), tex)


wobei die Index-Datei so aussehen müsste

eins=erstes Wort
lala=sinnloses lala


Die anderen Dinge sind wohl etwas kniffliger. Mal sehen, vielleicht setz' ich mich am Wochenende mal dran ☺

Gruß, mawe

Antworten |