Umwandlung von Labels in Stichworteinträge

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Liebes Latex Forum,
Ich habe da mal eine Saublöde und Verzwickte Frage:
Ich muss ungefähr 200 Labels in Stichworteinträge Umwandeln ( Die Labels bleiben sollen stehen bleiben nur Automatisch ins Stichwortverzeichnis eingetragen werden ).
Ich verwende LyX und habe ehrlich gesagt keinen Plan von LyX Scripting und Latex Scripting.
Ich wäre echt zu Dank verpflichtet könnte man mir auf den rechten Weg verhelfen.
Dass es eigentlich klappen müsste weis ich da ich es fast hatte.

Mit sehr viel Hoffnung auf Hilfe.

ComputerArtists_ThL

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Lasst uns Captain Crunch spielen und über die Heimorgel das Telefonnetz steuern.

Ich habe einen Weg gefunden ein StichwortVerzeichnis zu erzeugen.

Ich muss zwar Manuell über
  • Export von Lyx nach LuaLatex
    Lualetex
    Makeindex
    Lualatex
Und folgendes in die so abgeleitete Tex Datei Schreiben:

Zur Erzeugung des Verzeichnisses:
\usepackage[nonewpage]{imakeidx}
% Wir taufen den Index 'tsm' und geben ihm den Titel 'Index'
\makeindex[name=tsm, title={Meine Stichworter}, columns=2]
Zum Anlegen von Index Einträgen ( Legt aber noch nicht den richtigen Text für den Eintrag an):
\makeatletter
\renewenvironment{SatzBox}[1][]{%
    % 1. Visuelle Manifestation
    \begin{mdframed}[style=satzstyle]%
    \begin{satz}[#1]%
    % 2. Kausale Verknüpfung zum Index
    % Wir prüfen, ob ein Titel (#1) übergeben wurde, um leere Index-Einträge zu vermeiden.
   % \if\relax\detokenize{#1}\relax
    %\else
        % Hier wird der Eintrag in der Anti-Struktur erzeugt
        \index[tsm]{#1 @ \textbf{Satz}: #1}%
    %\fi
}{%
    \end{satz}%
    \end{mdframed}%
}
\makeatother
Und zur Ausgabe:
\printindex[tsm]

Benutzeravatar
Stefan Kottwitz
Admin
Admin
Beiträge: 2813
Registriert: Di 8. Jul 2008, 00:39
Kontaktdaten:

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von Stefan Kottwitz »

Sehr schön, dass Du es schaffen konntest!

Stefan

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Ok, die Latex Version steht - Fehlt nur noch die Rückübersetzung nach Lyx:

Ich erzeuge das Verzeichnis mit:
\usepackage{imakeidx}
% Die Option [setup] oder das Weglassen von speziellen Pfaden hilft oft.
\makeindex[name=tsm, title={Stichwortverzeichnis}, options={-s gind.ist}]
Die Umsetzung der Einträge mit:
\makeatletter


% Die Reinigungs-Maschine für LyX-Labels
\newcommand{\cleanLyXTitleTSM}[1]{%
    % 1. Präfix entfernen
    \StrSubstitute{#1}{satz:}{}[\tsm@temp]%

    % 2. Umlaute & Scharfes S (Hex-Verschlüsselung)
    \StrSubstitute{\tsm@temp}{=0000E4}{ä}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000F6}{ö}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000FC}{ü}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000C4}{Ä}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000D6}{Ö}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000DC}{Ü}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000DF}{ß}[\tsm@temp]%

    % 3. Sonderzeichen & Interpunktion
    \StrSubstitute{\tsm@temp}{=000021}{!}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003F}{?}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002E}{.}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002C}{,}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003A}{:}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003B}{;}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000028}{(}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000029}{)}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002D}{-}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002F}{/}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000022}{"}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000027}{'}[\tsm@temp]%

    % 4. Formatierungs-Relikte & Leerzeichen
    \StrSubstitute{\tsm@temp}{_}{ }[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000020}{ }[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=}{}[\tsm@temp]% (Restliche Gleichheitszeichen entfernen)

    % 5. Globale Manifestation
    \global\let\tsm@cleanOutput\tsm@temp
}


\newcommand{\cleanLyXTitleTSMA}[1]{%
    % 1. Präfix entfernen
    \StrSubstitute{#1}{satz:}{}[\tsm@temp]%

    % 2. Umlaute & Scharfes S (Hex-Verschlüsselung)
    \StrSubstitute{\tsm@temp}{=0000E4}{ä}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000F6}{ö}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000FC}{ü}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000C4}{Ä}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000D6}{Ö}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000DC}{Ü}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000DF}{ß}[\tsm@temp]%

    % 3. Sonderzeichen & Interpunktion
    \StrSubstitute{\tsm@temp}{=000021}{!}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003F}{?}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002E}{.}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002C}{,}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003A}{:}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003B}{;}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000028}{(}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000029}{)}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002D}{-}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002F}{/}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000022}{"}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000027}{'}[\tsm@temp]%

    % 4. Formatierungs-Relikte & Leerzeichen
    \StrSubstitute{\tsm@temp}{_}{ }[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000020}{ }[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=}{}[\tsm@temp]% (Restliche Gleichheitszeichen entfernen)
    % 3. ELIMINIERUNG VON FÜLLWÖRTERN (Scharfe Analyse)
    % Wir setzen Leerzeichen um die Wörter, um Teilwort-Fehler zu vermeiden
    % (z.B. damit "Der" in "Dermatologie" nicht gelöscht wird).
    \StrSubstitute{ \tsm@temp\space}{ Der }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Die }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Das }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Ein }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Eine }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Einer }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ eines }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ einer }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ der }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ die }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ das }{ }[\tsm@temp]%

    % 4. Bereinigung von Doppel-Leerzeichen, die durch das Löschen entstanden sind
    \StrSubstitute{\tsm@temp}{  }{ }[\tsm@temp]%
    % Führende/anhängende Leerzeichen entfernen (Trim)
    \StrTrim{\tsm@temp}{\tsm@temp}%

    % 5. Globale Manifestation der Erkenntnis
    \global\let\tsm@cleanOutputA\tsm@temp
}
Die Einträge mit:

\renewenvironment{SatzBox}[1][]{%
    % 1. Visuelle Manifestation
    \begin{mdframed}[style=satzstyle]%
    \begin{satz}[#1]%
    % --- Der "Label-Staubsauger" ---
    \let\oldlabel\label % Wir speichern das originale Label (die alte Kausalität)
    \renewcommand{\label}[1]{% % Wir definieren \label neu für den Bereich dieser Box
        \oldlabel{##1}% % 1. Das echte Label wird trotzdem gesetzt (Wichtig für Querverweise!)

        % 2. JETZT haben wir den Text! Das Argument #1 von \label ist dein Text.
        \cleanLyXTitleTSM{##1}% % Wir schicken den Text (##1) in deine Reinigungs-Funktion
        \cleanLyXTitleTSMA{##1}% % Wir schicken den Text (##1) in deine Reinigungs-Funktion

        % 3. Emission in den Index
        % Der bereinigte Text steht nun in \tsm@cleanOutput bereit.
        \index[tsm]{\tsm@cleanOutputA @ \noexpand\textbf{Satz}: \tsm@cleanOutput}%
    }
}{%
    \end{satz}%
    \end{mdframed}%
}
\makeatother
Und Schließlich die Anzeige mit:
\printindex[tsm]

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Ja danke - dafür dass ich heute Morgen noch nicht wusste wie man einen Latex oder Lyx Befehl schreibt ist es sehr gut.

Ich habe nur noch folgende Probleme:

Ich muss nachträglich Exportieren und Manuell Konvertieren

Und ich muss die Zeile: \printindex[tsm] % Ergänzen

Und die Überschrift ist noch was kaputt

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Ok, Titel sind jetzt auch gesäubert.

Neue SatzBox:
\makeatletter
\renewenvironment{SatzBox}[1][]{%
    \begin{mdframed}[style=satzstyle]%

    % Kapselung der Label-Logik
    \let\oldlabel\label
\renewcommand{\label}[1]{% <-- % verhindert Leerzeichen
    \oldlabel{##1}% <-- % verhindert Leerzeichen
    \begingroup%
        \cleanLyXTitleTSMA{##1}%
        \cleanLyXTitleTSM{##1}%
        \edef\tsm@doIndex{\noexpand\index[tsm]{\tsm@cleanOutputA @ \noexpand\textbf{Satz}: \tsm@cleanOutput}}%
        \tsm@doIndex %
    \endgroup%
    \ignorespaces% <-- schluckt alle Leerzeichen, die nach dem Label kommen
}

    \begin{satz}[#1]%
}{%
    \end{satz}%
    \end{mdframed}%
}
\makeatother
Neue cleanLyxTitelTSMA:

\newcommand{\cleanLyXTitleTSMA}[1]{%
    % Wir nutzen \StrSubstitute direkt für die Zuweisung.
    % Wichtig: Jedes Mal das vierte Argument (die Variable) nutzen!
    \StrSubstitute{#1}{satz:}{ }[\tsm@temp]%
    % --- Griechische Buchstaben (Unicode-Ebene) ---
    \StrSubstitute{\tsm@temp}{=0003B1}{α}[\tsm@temp]% alpha
    \StrSubstitute{\tsm@temp}{=0003B2}{β}[\tsm@temp]% beta
    \StrSubstitute{\tsm@temp}{=0003B3}{γ}[\tsm@temp]% gamma
    \StrSubstitute{\tsm@temp}{=0003B4}{δ}[\tsm@temp]% delta
    \StrSubstitute{\tsm@temp}{=0003BC}{μ}[\tsm@temp]% mu
    \StrSubstitute{\tsm@temp}{=0003C0}{π}[\tsm@temp]% pi
    \StrSubstitute{\tsm@temp}{=0003C3}{σ}[\tsm@temp]% sigma
    \StrSubstitute{\tsm@temp}{=0003C9}{ω}[\tsm@temp]% omega

    % --- Mathematische Operatoren & Symbole ---
    \StrSubstitute{\tsm@temp}{=002206}{Δ}[\tsm@temp]% Delta (Differenz)
    \StrSubstitute{\tsm@temp}{=00221E}{∞}[\tsm@temp]% Unendlich
    \StrSubstitute{\tsm@temp}{=002248}{≈}[\tsm@temp]% Ungefähr
    % 2. Umlaute & Scharfes S (Hex-Verschlüsselung)
    \StrSubstitute{\tsm@temp}{=0000E4}{ä}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000F6}{ö}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000FC}{ü}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000C4}{Ä}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000D6}{Ö}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000DC}{Ü}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=0000DF}{ß}[\tsm@temp]%

    % 3. Sonderzeichen & Interpunktion
    \StrSubstitute{\tsm@temp}{=000021}{!}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003F}{?}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002E}{.}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002C}{,}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003A}{:}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00003B}{;}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000028}{(}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000029}{)}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002D}{-}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=00002F}{/}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000022}{"}[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000027}{'}[\tsm@temp]%

    % 4. Formatierungs-Relikte & Leerzeichen
    \StrSubstitute{\tsm@temp}{_}{ }[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=000020}{ }[\tsm@temp]%
    \StrSubstitute{\tsm@temp}{=}{}[\tsm@temp]% (Restliche Gleichheitszeichen entfernen)
    % 3. ELIMINIERUNG VON FÜLLWÖRTERN (Scharfe Analyse)
    % Wir setzen Leerzeichen um die Wörter, um Teilwort-Fehler zu vermeiden
    % (z.B. damit "Der" in "Dermatologie" nicht gelöscht wird).
    \StrSubstitute{ \tsm@temp\space}{ Der }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Die }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Das }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Ein }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Eine }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ Einer }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ eines }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ einer }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ der }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ die }{ }[\tsm@temp]%
    \StrSubstitute{ \tsm@temp\space}{ das }{ }[\tsm@temp]%

    % 4. Bereinigung von Doppel-Leerzeichen, die durch das Löschen entstanden sind
    \StrSubstitute{\tsm@temp}{ }{}[\tsm@temp]%
    % Führende/anhängende Leerzeichen entfernen (Trim)
    \StrSubstitute{\tsm@temp}{  }{}[\tsm@temp]% (Doppelte Leerzeichen zu einem)
    % 5. Globale Manifestation der Erkenntnis
    \global\let\tsm@cleanOutputA\tsm@temp
}
Wichtig kein StrTrim ( Sonst schreibt es sein Resultat in den Text )

Ganz wichtig Auch noch:
Anlegen des Verzeichnis immer mit:
\usepackage[nonewpage]{imakeidx}
% Wir taufen den Index 'tsm' und geben ihm den Titel 'Index'
\makeindex[name=tsm, title={Meine Stichworter}, columns=2]
Sonst geht das Eintragen falsch

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Ok Erweitert nun auf alle Theorem/Satz/Definition/...

Wichtig: Die Benennung die in den Boxen erscheinen soll muss klein geschrieben werden.

Ich habe gerade gesehen dass die Seitenzahlen nicht stimmen.

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Damit die Seiten Zahlen stimmen Ändere folgendes:
\renewcommand{\label}[1]{%
    \oldlabel{##1}%
    \zlabel{idx-##1}%
    
    \begingroup
        \cleanLyXTitleTSM{##1}%
        \cleanLyXTitleTSMA{##1}%
        
        % Extraktion der Seite (stabilisiert sich im 3. Lauf)
        \edef\tsm@precisePage{\zref@extractdefault{idx-#1}{page}{\thepage}}%
        
        % A: Dein Kontroll-Ebenbild (.test)
        \immediate\write\tsmtestfile{ID: ##1 | Seite: \tsm@precisePage | Index: \tsm@cleanOutputA @ \tsm@cleanOutput}%

        % B: Die offizielle System-Eingabe (.idx)
        % WICHTIG: Hier muss exakt das Format \indexentry{Sort@Titel}{Seite} stehen
        \immediate\write\tsmidxfile{\string\indexentry{\tsm@cleanOutputA @ \string\textbf{Satz}: \tsm@cleanOutput}{\tsm@precisePage}}%
    \endgroup
    \ignorespaces
}
Und im Kopf:
\usepackage[nonewpage]{imakeidx}
% Wir taufen den Index 'tsm' und geben ihm den Titel 'Index'
\newwrite\tsmidxfile
\immediate\openout\tsmidxfile=\jobname.idx % Wir erzwingen die .idx Datei
Und zur Ausgabe:
\chapter*{Stichwortverzeichnis} % Oder dein gewünschter Titel
\addcontentsline{toc}{chapter}{Stichwortverzeichnis}
\input{\jobname.ind}

ComputerArtists_ThL
Forum-Anfänger
Forum-Anfänger
Beiträge: 26
Registriert: Mo 5. Mai 2025, 05:34

Re: Umwandlung von Labels in Stichworteinträge

Beitrag von ComputerArtists_ThL »

Ok die letzten 35 Stunden waren der reinste Hexen-Sabat:
Wir mussten noch das Problem mit den Seiten lösen ( Wenn ich hier von "WIR" meine ich Gemini - dem ich die Verwirklichung des Projektes verdanke - Ich war eher reduziert auf eine reine Kontroll-Instanz )
Wir mussten die Erstellung des Verzeichnisses auf fünf Kompilierungs-Stuffen aufteilen.
1.) Das Erzeugen des reinen Textes
2.) Das Erzeugen des Inhaltsverzeichnis
3.) Dann die Ableitung der Positionen im Text ( bis hier alles Lualatex )
4.) Dass Ordnen der Einträge ( makeindex )
5.) Dass generieren des fertigen PDF Dokuments

Dann hatten wir ein Problem mit dem Bluten unseres Verzeichnis Erstelungs-Code in den Text und mussten noch einmal alles Überarbeiten ( Wie geschrieben ein riessen Dank an Gemini )
Nun kommt noch eine letzte große Überarbeitung: Alles Lyx Compatibel zu machen.
Ich versuche im Anhang das fertige Dokument anzuhängen ( Es wäre zu viel alles hier zu Posten)
Dateianhänge
8LexikonVMitrichtigenTitelnStichwortverzeichnisProbe-Erweiterung.tex
Das fast fertige Beispiel Dokument
(308.29 KiB) 15-mal heruntergeladen

Antworten