PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : prüfen, ob macro das erste mal ausgeführt wird



christiank
19-03-2006, 11:50
Hallo!
Ich möchte ein Macro schreiben, das beim ersten Aufruf einen bestimmten zusätzlichen code ausführt, sonst aber immer das gleiche macht.
Hintergrund: ich habe möchte ein Glossary erstellen, das mir auf das erste vorkommen des Wortes im Text einen Link legt für PDF. Nun muss ich beim ersten ausführen des macros ein label definieren. Alle weiteren Vorkommen sollen nur auf das Glossary verweisen, aber nicht mehr zurück.

Meine Lösung bisher:
\def\newglossary#1{\hyperref[Glossary]{#1}\label{#1}}
\def\addglossary#1{\hyperref[Glossary]{#1}}

Dabei muss ich manuell entscheiden, ob ein Wort nun das erste Vorkommen ist oder nicht. Blöd.

Nächste Lösung:
Ich schaue, ob der Link schon definiert ist. Aber irgendiwe verstehe ich das ganze nicht und bekomme ständig Fehlermeldungen "multiply defined" oder "not defined"...
Natürlich habe ich jetzt nurnoch ein macro, nicht wie oben zwei.

%\makeatletter%
\def\addglossary#1%
{%
\hyperref[Glossary]{#1}%
\ifundefined{r@#1}%
{\label{#1}}%
{}%
}%
%\makeatother%

Erklärung:
Ich definiere das macro, das ich mit dem Wort, das in der Glossary erscheinen soll als Argument. Nun lege ich einen Link auf mein Glossary. Soweit so gut. Jetzt checke ich, ob die Referenz/das Label schon existiert. Wenn ja, dann mach nix, wenn nein dann erstelle neues Label.
Da r@#1 ein interner Befehl ist musste ich \makeatletter und \makeatother verwenden, geht aber trotzdem nicht.

Ich habe schon Tagelang probiert und alles durchsucht. ich komme nicht weiter. Weiß jemand eine Antwort? Vielen DANK