无论带不带参数,我的\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 期望那里有一个数字。