有关 ifthenelse 的帮助

有关 ifthenelse 的帮助

我正在尝试定义一个命令,如果给它一个参数,它就会输出\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

LaTeX 有一个快捷方式

在此处输入图片描述

\documentclass{article}

\makeatletter
\newcommand\Def{\@dblarg\Defx}
\newcommand\Defx[2][]{\textbf{#2}[index #1]}
\makeatother
\begin{document}

\Def{aaa}

\Def[bb]{aaa}


\end{document}

答案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

相关内容