根据参数创建新命令的命令

根据参数创建新命令的命令

我想要一个\ensureinfocommand可以像这样调用的命令:

\ensureinfocommand{studentid}

此调用将检查命令是否\studentid已存在,如果不存在,则应创建以下内容:

\newcommand\studentid[1]{
    \newcommand\@studentid{#1}
}

我尝试实现\ensureinfocommand如下功能:

\newcommand\ensureinfocommand[1]{
    \ifcsname#1\endcsname\else
        \expandafter\newcommand\csname#1\endcsname[1]{
            \expandafter\newcommand\csname @#1\endcsname{##1}
        }
    \fi
}

这将创建所有必要的命令,但输出\@studentid是错误的。

\ensureinfocommand{studentid}
\studentid{1234567}

\begin{document}
\@studentid
\end{document}

这打印出来studentid了,但1234567我不明白为什么。有人看到我的命令有什么问题吗?

答案1

您缺少\makeatletter使用\@studentid

\documentclass{article}
\newcommand\ensureinfocommand[1]{%
    \ifcsname#1\endcsname\else
        \expandafter\newcommand\csname#1\endcsname[1]{%
            \expandafter\newcommand\csname @#1\endcsname{##1}%
        }%
    \fi
}

\ensureinfocommand{studentid}
\studentid{1234567}

\begin{document}
\makeatletter\@studentid\makeatother
\end{document}

我还擅自添加了合适的%以避免多余的空格标记。

相关内容