如果可选参数不为空则生成索引的命令

如果可选参数不为空则生成索引的命令

我想定义一个命令,当我传递名称时,该命令会创建一个具有特定名称的索引,如果没有传递名称,则不会创建任何索引。

我的第一个想法是这样写的:

\newcommand{\kw}[1][]{\emph{#2}\index{#1}}

但是当我传递一个空的可选参数时,编译器会出错。我如何构建如下所示的 if-then 结构?

\newcommand{\kw}[1][]{
 if(#1 is not empty)
  \emph{#2}\index{#1}}
 else
  \emph{#2}
}

答案1

如果你不想使用xparse(为什么不呢?),你可以使用一些传统的技巧,例如:

\newcommand{\kw}[2][]{%
  \emph{#2}%
  \if&#1&\else
    \index{#1}%
  \fi
}

xparse在某些情况下更\IfValueT安全。不使用 LaTeX3 的更安全的实现是:

\usepackage{etoolbox}
\newcommand{\kw}[2][]{%
  \emph{#2}%
  \ifstrempty{#1}{}{\index{#1}}%
}

答案2

您可以使用xparse来自 LaTeX3 项目的包。

\usepackage{xparse}
\NewDocumentCommand\kw{o}{%
  \IfNoValueTF{#1}{%
    % #1 is empty.
  }{%
    % #1 has a value.
  }%
}

要重新创建示例命令:

\NewDocumentCommand\kw{om}{%
  \IfNoValueTF{#1}{%
    \emph{#2}%
  }{%
    \emph{#2}\index{#1}%
  }%
}

相关内容