我可以在类文件中创建一个宏,该宏接受类似字符串的参数并调用本地宏吗?我想要做以下事情:
\newcommand{\somename}{\def\@somename{#1}}
\newcommand{\warning}[1]
{ \ifthenelse
{\isundefined{\@#1}}
{You have to define #1. Use this macro: \textbackslash#1}
{}
}
\AtBeginDocument {\warning{somename}}
然后,如果在文档文件中我没有定义,\@somename
我就会收到一条警告。
有任何想法吗?
答案1
LaTeX 内核已经提供了这个:
\makeatletter % not in a class or package file
\newcommand{\warning}[1]{%
\@ifundefined{@#1}
{You have to define '#1'. Use this macro: \texttt{\symbol{`\\}#1}}
{}%
}
\newcommand{\somename}[1]{\def\@somename{#1}}
\makeatother % not in a class or package file
\AtBeginDocument{\warning{somename}}
请注意,第一个参数应该\@ifundefined
是代表宏的字符串姓名(没有初始反斜杠)。
答案2
我会使用该etoolbox
包:
代码:
\documentclass{article}
\usepackage{etoolbox}
\newcommand*{\DefinePerson}[1]{\csdef{#1}{}}
\newcommand*{\Warning}[1]{%
\ifcsdef{#1}{}{%
You have to define #1. Use the macro {\ttfamily\string\DefinePerson}.%
}%
}%
\DefinePerson{Steve Jobs}
\DefinePerson{Bill Gates}
\AtBeginDocument{%
\Warning{Steve Jobs}%
\Warning{Warren Buffet}%
}%
\begin{document}
\par
Hi there
\end{document}