我正在尝试定义一个宏,并将其包含在类定义中。暂时我将宏定义放在普通文档中。编译以下文档失败。
\documentclass[10pt,a4paper]{article}
\makeatletter
\def\ntcstitle#1{\def{\@ntcstitle}{#1}}
\newcommand{\thentcstitle}{\@ntcstitle}
\makeatother
\ntcstitle{Lorem Ipsum}
\begin{document}
\thentcstitle\par
\end{document}
这个例子是我从这里的另一个问题中复制来的,它似乎有效:
我还尝试将此定义移到类文件中,省略\makeatletter
和\makeatother
命令。使用类文件成功,错误消息相同。
这是错误信息:
! Missing control sequence inserted. <inserted text> \inaccessible l.10 \ntcstitle{Lorem Ipsum}
然后我用 LaTeX 样式定义替换了宏:
\documentclass[10pt,a4paper]{article}
\usepackage{lipsum}
\makeatletter
\newcommand{\ntcstitle}[1]{\newcommand{\@ntcstitle}{#1}}
\newcommand{\thentcstitle}{\@ntcstitle}
\makeatother
\ntcstitle{Lorem Ipsum}
\begin{document}
\thentcstitle\par
\end{document}
并且一切正如预期的那样。
我尝试使用\def
而不是\newcommand
因为我认为\def
这是在类文件中定义宏的正确方法。我在这里做错了什么?
答案1
你不应该\def
在乳胶中使用,但如果你这样做,语法是
\def\@ntcstitle{#1}}
不是
\def{\@ntcstitle}{#1}}
(当然#1
和尾随}
仅在您定义的上下文中有效\ntcstitle
)