创建使用 \hspace 的 \newcommand 时出错

创建使用 \hspace 的 \newcommand 时出错

无论带不带参数,我的\newcommand声明都不适用于\hspace;我使用最新的 MathJax 和通用库。迄今为止的尝试:

\newcommand{hs}[1]{\hspace{#1}}
\newcommand{hs}[1]{\hspace{{#1}}}
\newcommand{hs}[1]{\hspace{{#1}px}}
\newcommand{hs1}[]{\hspace{10px}}

我有一页其他\newcommand声明,它们都运行正常,不确定这里出了什么问题。有什么补救措施吗?

答案1

通常情况下,TeX 中的所有命令前面都必须有一个反斜杠,以告诉 TeX 它们是命令,因此

\newcommand{hs}[1]{\hspace{#1}}

你需要

\newcommand{\hs}[1]{\hspace{#1}}

它将按照您期望的方式工作。

边注:如果你只是想用另一个名字创建一个命令的副本,你可以使用\let: \let\hs=\hspace。使用这种\newcommand方法,\hs命令将使用 \hspace,而使用 的\let方法,它将是 的副本\hspace。后者的一个优点是\hs*{argument}会按预期工作。使用 则\newcommand不会。

第二个版本添加了一对不应该存在的括号,因此它不能很好地工作。

\hspace{{1cm}}将扩展为\hskip{#1}\relax,这不是有效的语法并且会引发错误Missing number

第三个版本也一样。单位只会在错误之后出现Missing number,所以它在那里毫无用处。此外,TeX 不认识单位px,所以即使你删除括号,你仍然会得到一个Illegal unit of measure

第四个除了非法px单位外,还包含两个问题。第一个是,通常情况下,命令名称中不允许使用数字,因此您不能使用\hs1。第二个是,的第一个可选参数\newcommand(参数数量)不能为空([])。空参数与缺失参数非常不同!如果您尝试这样做(在从命令名称中删除数字后),您将收到另一个Missing number错误,因为 LaTeX 期望那里有一个数字。

相关内容