我问过了如果参数的最后一个字符是 '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 制作。