使用宏参数进行索引的问题

使用宏参数进行索引的问题

我问过了如果参数的最后一个字符是 's',则删除它然后我得到了答案。然而,事实证明我的情况有点复杂。有些怪物的名字很难输入,所以我使用了宏,例如,\WviiSPOT而不是直接输入怪物的名字。事实证明,索引和段落的组合无法编译。有办法让它工作吗?

\documentclass{report}
\usepackage[xindy]{imakeidx}

\usepackage{xstring}
\newcommand{\indexMonster}[1]{\index{#1}}
\newcommand{\monster}[1]{%
    \IfEndWith{#1}{s}{%
    \StrGobbleRight{#1}{1}[\result]%
    #1\indexMonster{\result}%
    }{%
    #1\indexMonster{#1}}%
    }

\newcommand{\WviiSPOT}{\mbox{\monster{*S~P~O~T*}}}

\makeindex

\begin{document}
This works:
\monster{Red Pirannhas} \monster{Bambiphoots} \monster{Stag Weevils} \WviiSPOT{}

This does not:
\paragraph{But \WviiSPOT{} is insane!}
\end{document}

答案1

这是我的答案那里,包括新命令。你只需要\protect

\documentclass{article}
\usepackage{stringstrings}
\usepackage{makeidx}\makeindex

\begin{document}

\newcommand{\indexMonster}[1]{%
      \testmatchingchar{#1}{$}{s}
      \ifmatchingchar
          \substring[q]{#1}{1}{$-1}\index{\thestring}
        \else
          \index{#1}
       \fi}
\newcommand{\monster}[1]{#1\indexMonster{#1}}

\monster{zombies}

\newcommand{\WviiSPOT}{\mbox{\monster{*S~P~O~T*}}}

\WviiSPOT

\pagebreak

\paragraph{But \protect\WviiSPOT is insane!}

\monster{zombie}

\printindex

\end{document}

在此处输入图片描述

strinstrings包装由 Steven B. Segletes 制作。

相关内容