我有以下示例代码:
\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}