On 12 April 2016 at 09:05, Norbert Preining <prein...@logic.at> wrote: > Here is a minimal example extracted from the sbcl sources that shows > the effect: > \input texinfo @c -*-texinfo-*- > > @iftex > @macro cl{name} > {@smallertt@phantom{concurrency:}@llap{cl:}}\name\ > @end macro > @end iftex > > Some text > > @tindex @cl{built-in-class} > foo bar baz > > @printindex tp > > > @bye >
Thanks for sending, I believe the diff below fixes it. Please let me know whether it works. These catcode changes were there before but I must have removed them when the expansion of Texinfo macros no longer took place within a TeX group. They're needed for macro expansion in index entries, as you found. Index: texinfo.tex =================================================================== --- texinfo.tex (revision 7054) +++ texinfo.tex (working copy) @@ -5305,7 +5305,6 @@ \putwordIndexNonexistent \else \catcode`\\ = 0 - \escapechar = `\\ % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so @@ -6866,7 +6865,6 @@ \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other - \escapechar=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. @@ -7844,15 +7842,27 @@ % alias because \c means cedilla in @tex or @math \let\texinfoc=\c +\newcount\savedcatcodeone +\newcount\savedcatcodetwo + % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M \def\xeatspaces{\eatspaces}% % + % Temporarily undo catcode changes of \printindex + \savedcatcodeone=\catcode`\@ + \savedcatcodetwo=\catcode`\\ + \catcode`\@=0 + \catcode`\\=\active + % % Process the macro body under the current catcode regime. - \scantokens{#1\texinfoc}\aftermacro% + \scantokens{#1@texinfoc}\aftermacro% % + \catcode`\@=\savedcatcodeone + \catcode`\\=\savedcatcodetwo + % % The \texinfoc is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. % The \aftermacro allows a \comment at the end of the macro definition