我想要一个\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}
我还擅自添加了合适的%
以避免多余的空格标记。