\index 自体が @ を使用している場合、@ を含む文字列にインデックスを付けるにはどうすればよいですか?

\index 自体が @ を使用している場合、@ を含む文字列にインデックスを付けるにはどうすればよいですか?

文字列をインデックスする必要があります$@

\documentclass[a4paper,10pt,openany]{scrbook}

\usepackage{imakeidx}
\makeindex

\newcommand{\indexthing}[1]%
{%
    \index{#1@\texttt{#1} (thing)}%
    \index{things!\texttt{#1}}%
}

\begin{document}

\chapter{ch1}

foo\index{foo}
bar\index{bar}
\index{\$\@}      % PROBLEM A
\indexthing{\$\@} % PROBLEM B

\chapter{ch2}

baz\index{baz}

\printindex

\end{document}

PROBLEM B の行をコメント アウトすると、ドキュメントはコンパイルされますが、$ではなく がインデックスに表示されます$@

問題Bの行を残しておくと、コンパイルが全く行われません。

! Extra }, or forgotten \endgroup.
l.17     \subitem m {}}
                       , 1

@インデックスに含めるにはどうすればよいですか?

答え1

あなたは引用先頭に付ける文字実際のキャラクター:

\documentclass[a4paper,10pt,openany]{scrbook}

\usepackage{imakeidx}
\makeindex

\newcommand{\indexthing}[1]%
{%
    \index{#1@\texttt{#1} (thing)}%
    \index{things!\texttt{#1}}%
}

\begin{document}

\chapter{ch1}

foo\index{foo}
bar\index{bar}
\index{\$"@}      % PROBLEM A
\indexthing{\$"@} % PROBLEM B

\chapter{ch2}

baz\index{baz}

\printindex

\end{document}

文字はMakeIndexスタイルに依存します。詳細については、セクションを参照してください。入力スタイル指定子MakeIndex マニュアルを参照してください。

関連情報