我正在尝试定义一个命令,如果给它一个参数,它就会输出\textbf{#1}\index{#1}
,如果给它两个参数,它就会输出。本质上,我希望它默认索引到输入,但如果给它一个可选参数,它就会索引到输入。如果给它一个参数,它就可以自动将其大写(这样就可以运行),\textbf{#1}\index{#2}
那就太好了,但我还没有深入研究过这个问题。\myIndex{word}
\textbf{word}\index{Word}
从这个答案,看起来这个包xifthen
可以满足我的要求。不幸的是,我对 并不熟悉ifthenelse
,因此编写以下内容时会出现错误:
\newcommand{\Def}[2][]{\textbf{#2}\index{%\ifthenelse{\isempty{#1}{#2}{#1}%}}
我得到的具体错误是file ended while scanning use of \@xargdef
,以及我在代码中undefined control sequence
使用时出现的各种错误。\Def
答案1
答案2
\documentclass{article}
\newcommand\Def[2][]{\textbf{#2}\ifx\relax#1\relax \index{#2}\else\index{#1}\fi}
\usepackage{imakeidx}
\makeindex
\begin{document}
\Def{foo}
\Def[bar]{baz}
\printindex
\end{document}
答案3
您不想索引\ifthenelse
。条件应该调用\index
,而不是相反:
\newcommand{\Def}[2][]{%
\ifthenelse{\isempty{#1}}{\index{#2}}{\index{#1}}%
\textbf{#2}%
}
如果你热衷于使用xparse
,你可以做
\usepackage{xparse}
\NewDocumentCommand{\Def}{om}{%
\IfNoValueTF{#1}{\index{#2}}{\index{#1}}%
\textbf{#2}%
}
这比测试更为强大\isempty
。