diff options
Diffstat (limited to 'indexing/texindex')
-rw-r--r-- | indexing/texindex/ix.collapse | 28 | ||||
-rw-r--r-- | indexing/texindex/ix.extract | 7 | ||||
-rw-r--r-- | indexing/texindex/ix.format | 33 | ||||
-rw-r--r-- | indexing/texindex/ix.genkey | 20 | ||||
-rw-r--r-- | indexing/texindex/ix.polish | 16 | ||||
-rw-r--r-- | indexing/texindex/ix.rotate | 19 | ||||
-rw-r--r-- | indexing/texindex/test.idx | 14 | ||||
-rw-r--r-- | indexing/texindex/test.ind | 44 | ||||
-rw-r--r-- | indexing/texindex/texindex | 9 | ||||
-rw-r--r-- | indexing/texindex/texindex.pdf | bin | 0 -> 22933 bytes | |||
-rw-r--r-- | indexing/texindex/texindex.tex | 61 |
11 files changed, 251 insertions, 0 deletions
diff --git a/indexing/texindex/ix.collapse b/indexing/texindex/ix.collapse new file mode 100644 index 0000000000..cedcd045ab --- /dev/null +++ b/indexing/texindex/ix.collapse @@ -0,0 +1,28 @@ +# ix.collapse : awk - script +# kollabiere Zahlenlisten bei identische Begriffe +# Eingabeformat : +# string1 \t num +# string2 \t num +# string2 \t num +# ... +# Ausgabeformat: +# string1 \t num +# string2 \t num, num +BEGIN { + altwort = "ASDF!@#$*&%$IU11@" + FS = OFS = "\t" + } +$1 != altwort { + if (NR > 1) + printf "\n" + altwort = $1 + printf "%s\t%s", $1, $2 + next + } + { + printf " %s",$2 + } +END { + if (NR > 1) + printf "\n" + } diff --git a/indexing/texindex/ix.extract b/indexing/texindex/ix.extract new file mode 100644 index 0000000000..65d0ed5751 --- /dev/null +++ b/indexing/texindex/ix.extract @@ -0,0 +1,7 @@ +# ix.extract : sed - script, um die Daten aus einem LaTeX - *.idx - File +# rauszuholen. +# Eingabeformat: +# \indexentry{Begriff}{Seitenzahl} +# Ausgabeformat: +# Begriff \t Seitenzahl +s/\\indexentry{\(.*\)}{\(.*\)}/\1 \2/ diff --git a/indexing/texindex/ix.format b/indexing/texindex/ix.format new file mode 100644 index 0000000000..eb2b389ad5 --- /dev/null +++ b/indexing/texindex/ix.format @@ -0,0 +1,33 @@ +# ix.format : awk - script +# entfernt Sortierschluessel, fuegt \item etc. ein +BEGIN { + FS = OFS = "\t" + printf "\\begin{theindex}" + } + { + n = split($2,feld,", ") + if (n > 3) + { + for (i=4; i <=n; i++) + feld[3] = feld[3] ", " feld[i] + n = 3 + } + for (i = 1; feld[i]==altfeld[i] && i<=n ; i++) + ; + for (k=i; k <=n; k++) + { + printf "\n\\" + for (j=1; j<k; j++) + printf "sub" + printf "item %s ",feld[k] + } + nzahl = split($3,zahlfeld," ") + for (j=1; j<nzahl; j++) + printf"%s, ",zahlfeld[j] + printf "%s",zahlfeld[nzahl] + for (j=1; j<=i; j++) + altfeld[i] = feld[i] + } +END { + printf "\n\\end{theindex}\n" + } diff --git a/indexing/texindex/ix.genkey b/indexing/texindex/ix.genkey new file mode 100644 index 0000000000..b1ffba45fa --- /dev/null +++ b/indexing/texindex/ix.genkey @@ -0,0 +1,20 @@ +# ix.genkey : Generierung eines Sortierschluessels ohne Sonderzeichen +# Eingabe: string1 string2 ... \t num num ... +# Ausgabe: string1 string2 ... (ohne S.Z.) \t string1 string2 ... \t num num .. +# +# Ersetze global die Tilde durch Spaces +s/~/ /g +# kopiere die Zeile in den Zwischenpuffer +h +# alles hinter \t loeschen +s/ .*$// +# zum Sortieren loesche alle nicht - alphanumerischen Zeichen +s/[^a-zA-Z0-9 ]//g +# falls dabei eine leere Zeile rauskommt, setze ein Space rein +s/^$/ / +# kopiere die urspruengliche Zeile aus dem Puffer hinter den Speicher +G +# ersetze newline zwischen den Zeilen durch \t +s/\n/ / +# Falls ein Komma am Ende des Strings steht, loesche es +s/, / / diff --git a/indexing/texindex/ix.polish b/indexing/texindex/ix.polish new file mode 100644 index 0000000000..1c4d110977 --- /dev/null +++ b/indexing/texindex/ix.polish @@ -0,0 +1,16 @@ +# ix.polish : sed - script zum letzten Nachpolieren der Eintraege +# \item etc. einruecken, eckige Klammern in \verb - Anweisungen abaendern +# +# Packe vor jedes \item ein \indexspace +/\\item/i\ + \\indexspace +# ruecke \items ein +/^\\item/s/^/ / +# ruecke \subitems etwas mehr ein +/^\\subitem/s/^/ / +# ruecke \subsubitems noch etwas mehr ein +/^\\subsubitem/s/^/ / +# aendere [ in \verb+ +s/\[/\\verb+/g +# aendere ] in + +s/\]/+/g diff --git a/indexing/texindex/ix.rotate b/indexing/texindex/ix.rotate new file mode 100644 index 0000000000..ab3b785291 --- /dev/null +++ b/indexing/texindex/ix.rotate @@ -0,0 +1,19 @@ +# ix.rotate: awk - script zur Rotation von Index - Begriffen +# Eingabe: +# string1 string2 string3 ... \t num num ... +# Ausgabe: +# string1 string2 string3 ... \t num num ... +# string2 string3 ... , string1 \t num num ... +# string3 ..., string1 string2 \t num num ... +# +BEGIN { + FS = OFS = "\t" + } + { + print $1, $2 # Drucke die unrotierte Form + for (i=1; (j=index(substr($1, i+1)," "))> 0;) + { + i += j # Finde jeden Blank und rotiere um ihn + printf "%s, %s\t%s\n",substr($1,i+1),substr($1,1,i-1),$2 + } + } diff --git a/indexing/texindex/test.idx b/indexing/texindex/test.idx new file mode 100644 index 0000000000..e27fba9481 --- /dev/null +++ b/indexing/texindex/test.idx @@ -0,0 +1,14 @@ +\indexentry{FORTRAN}{1} +\indexentry{Programmiersprache FORTRAN}{1} +\indexentry{gro"se Gnus}{1} +\indexentry{Suche~nach Syntax~f"ur FORTRAN}{2} +\indexentry{Befehl [WRITE]}{5} +\indexentry{FORTRAN}{5} +\indexentry{fiese, kleine Gnus}{5} +\indexentry{[@#$%!@]spiel!}{6} +\indexentry{Testeintrag~doppelt}{6} +\indexentry{Testeintrag~doppelt}{7} +\indexentry{Testeintrag~doppelt}{7} +\indexentry{Gnus}{7} +\indexentry{b"ose gro"se Gnus}{8} +\indexentry{letzter Eintrag}{9} diff --git a/indexing/texindex/test.ind b/indexing/texindex/test.ind new file mode 100644 index 0000000000..e074ecbc12 --- /dev/null +++ b/indexing/texindex/test.ind @@ -0,0 +1,44 @@ +\begin{theindex} + \indexspace + \item Befehl \verb+WRITE+ 5 + \indexspace + \item b"ose gro"se Gnus 8 + \indexspace + \item Eintrag + \subitem letzter 9 + \indexspace + \item fiese + \subitem kleine Gnus 5 + \indexspace + \item FORTRAN 1, 5 + \subitem Programmiersprache 1 + \subitem Suche nach Syntax f"ur 2 + \indexspace + \item Gnus 7 + \subitem b"ose gro"se 8 + \subitem fiese + \subsubitem kleine 5 + \subitem gro"se 1 + \indexspace + \item gro"se Gnus 1 + \subitem b"ose 8 + \indexspace + \item kleine Gnus + \subitem fiese 5 + \indexspace + \item letzter Eintrag 9 + \indexspace + \item Programmiersprache FORTRAN 1 + \indexspace + \item \verb+@#$%!@+spiel! 6 + \indexspace + \item Suche nach Syntax f"ur FORTRAN 2 + \indexspace + \item Syntax f"ur FORTRAN + \subitem Suche nach 2 + \indexspace + \item Testeintrag doppelt 6, 7 + \indexspace + \item \verb+WRITE+ + \subitem Befehl 5 +\end{theindex} diff --git a/indexing/texindex/texindex b/indexing/texindex/texindex new file mode 100644 index 0000000000..55c4d728f1 --- /dev/null +++ b/indexing/texindex/texindex @@ -0,0 +1,9 @@ +sed -f ix.extract $1.idx | +sort -t +0 -1 +1n -2 | +uniq | +awk -f ix.collapse | +awk -f ix.rotate | +sed -f ix.genkey | +sort -f -d | +awk -f ix.format | +sed -f ix.polish > $1.ind diff --git a/indexing/texindex/texindex.pdf b/indexing/texindex/texindex.pdf Binary files differnew file mode 100644 index 0000000000..7b257e98a6 --- /dev/null +++ b/indexing/texindex/texindex.pdf diff --git a/indexing/texindex/texindex.tex b/indexing/texindex/texindex.tex new file mode 100644 index 0000000000..d7174754fc --- /dev/null +++ b/indexing/texindex/texindex.tex @@ -0,0 +1,61 @@ +\documentstyle[12pt,german,refman]{article} +\title{TEXINDEX} +\begin{document} +\maketitle +\subsubsection*{NAME} +{\tt texindex} +\subsubsection*{SYNOPSIS} +\verb+texindex file+ +\subsubsection*{DESCRIPTION} +\verb+Texindex+ +dient zur Generierung eines sortierten Stichwortverzeichnisses unter \LaTeX. +Aus einem *.idx - File, das von \LaTeX\ aus \verb+\index+-Eintr"agen +erzeugt wird, macht texindex ein *.ind - File, das dann "uber +\verb+\input+ oder \verb+\include+ im Quelltext eingebunden werden kann. +Die Extension .idx soll {\em nicht\/} angegeben werden. + +Wenn in den \verb+\index+-Eintr"agen +ein Space gefunden wird, so wird um ihn rotiert, so da"s jedes einzelne Wort +im Eintrag gefunden werden kann. Mit einer Tilde (\verb+~+) anstatt eines Spaces +wird die Rotation unterdr"uckt. Ein Beispiel: auf +Seite 2 steht der Eintrag +\verb+\index{grosse Gnus}+ . Es werden die Eintr"age +\begin{verbatim} +\item Gnus +\subitem gro"se 2 +\item gro"se Gnus 2 +\end{verbatim} +ins Stichwortverzeichnis +gemacht. + +Wenn ein Wort in dem \verb+\index+-Eintrag in eckigen Klammern +steht, dann wird es in \verb-\verb+- eingef"ugt. + +Eine weitere Unterteilung ist dadurch m"oglich, da"s man Kommas in den +\verb+\index+-Eintrag einf"ugt. Aus \verb+\index{kleine, fiese M"ucken}+ +ergibt sich folgendes (komplettes) *.ind-File: +\begin{verbatim} +\begin{theindex} + \indexspace + \item fiese M"ucken + \subitem kleine 3 + \indexspace + \item kleine + \subitem fiese M"ucken 3 + \indexspace + \item M"ucken + \subitem kleine + \subsubitem fiese 3 +\end{theindex} +\end{verbatim} + +\subsubsection*{BUGS} +Syntaktisch inkorrekte *.idx - Files f"uhren zu merkw"urdigen Ergebnissen. + +Wenn in den \verb+\index+-Eintr"agen Tabulatorzeichen stehen, werden +die Ergebnisse interessant, aber nicht sinnvoll. + +\subsubsection*{FILES} +\verb+Texindex+ verwended die Files +ix.collapse, ix.extract, ix.format, ix.genkey, ix.polish, ix.rotate. +\end{document} |