Seite 1 von 1

"Call by value" anstelle von "Call by refence

Verfasst: Do 8. Okt 2009, 20:28
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

Verfasst: Fr 9. Okt 2009, 07:57
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ß.