"Call by value" anstelle von "Call by refence

Redefinition von Makros, Definition eigener Befehle sowie neuer Umgebungen


Chili

"Call by value" anstelle von "Call by refence

Beitrag von Chili »

Hallo,

habe mir ein kleines Makro zusammengebastelt, welches jedes mal, wenn ich ein Akronym verwende, einen voll ausgeschriebenen Eintrag im Index erstellen soll. Das Funktioniert auch grundsätzlich, nur steht im .ind dann so was:

Code: Alles auswählen

  \item \acl {FIB}, \hyperpage{3, 4}, \hyperpage{17}, \hyperpage{20}, 
Da sollte aber stehen:

Code: Alles auswählen

  \item Focussed-Ion-Beam, \hyperpage{3, 4}, \hyperpage{17}, \hyperpage{20}, 
Wie kann ich Latex dazu bewegen an \Oldindex den Wert von \acl{#1} zu übergeben?

Mein kleines Makro (Danke an die vielen Foreneinträge da draussen):

Code: Alles auswählen

\let\Oldindex\index
\makeatletter
\renewcommand{\ac}{\protect\@acr}%
\newcommand{\@acr}[1]{%
    \expandafter\ifx\csname ac@#1\endcsname\AC@used
        \textit{\acs{#1}}\Oldindex{\acl{#1}}%
    \else
        \textit{\acl{#1} (\acs{#1})}\Oldindex{\acl{#1}}%
        \global\expandafter\let\csname ac@#1\endcsname\AC@used%
        \AC@addtoclearlist{#1}%
        \AC@logged{#1}%
    \fi
}
\makeatother
lg. Chili

Schweinebacke

Beitrag von Schweinebacke »

Offenbar expandiert \Oldindex nicht. Man muss also zusätzlich selbst für die Expansion sorgen. Wenn \acl voll expandierbar ist, geht das beispielsweise per:

Code: Alles auswählen

\protected@edef\expanded@acl{\acl{#1}}\expandafter\Oldindex\expandafter{\expanded@acl}
an Stelle Deines einfachen \Oldindex{\acl{#1}}.
Wie gesagt, das geht nur, wenn \acl voll expandierbar ist, was ich leider nicht weiß.

Antworten