当命令结果为空时生成错误消息

当命令结果为空时生成错误消息

我有以下示例代码:

\documentclass{article}

\usepackage{etoolbox}

\newcommand{\defineSpecies}[2]{\csdef{spec@#1}{#2}}
\newrobustcmd{\spec}[1]{\csuse{spec@#1}}

\defineSpecies{h2o}{H$_2$O}

\begin{document}

\spec{h2o}
\spec{undefined}

\end{document}

我的目的是重新定义\spec{},当它提供空输出时(例如,\spec{undefined}实际上未定义)会打印错误消息。您能帮我实现这个目标吗?

答案1

您可以\spec@#1使用 测试是否存在\ifcsname <csname>\endcsname,并有条件地打印\GenericError

\documentclass{article}

\usepackage{etoolbox}

\newcommand{\defineSpecies}[2]{\csdef{spec@#1}{#2}}
\newrobustcmd{\spec}[1]{%
  \ifcsname spec@#1\endcsname% Specification exists
    \csuse{spec@#1}%
  \else% Specification does not exist
    \GenericError{}{Specification `#1' undefined}{}{}%
  \fi}

\defineSpecies{h2o}{H$_2$O}

\begin{document}

\spec{h2o}
\spec{undefined}% This will cause an error.

\end{document}

相关内容