自身内容名称宏

自身内容名称宏

我可以在类文件中创建一个宏,该宏接受类似字符串的参数并调用本地宏吗?我想要做以下事情:

\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}

相关内容