"Call by value" anstelle von "Call by refence Thema ist als GELÖST markiert

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:
  \item \acl {FIB}, \hyperpage{3, 4}, \hyperpage{17}, \hyperpage{20}, 
Da sollte aber stehen:
  \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):
\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:
\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