在数学模式下,让字符表现得像“空格”

在数学模式下,让字符表现得像“空格”

有些人可能认为这是一个糟糕的想法,但我已经尝试在数学模式下使用点.来充当空格。

这个想法就是能够写成\cos.x或者,更一般地说,\macro.x而不是\macro{x}或者\macro x

我还没有成功。一个失败的想法是尝试将 更改为,\catcode仅在数学模式下。.9

根据具体情况,很容易让\macro.(带点)的行为像\macro——但这不是重点。

有什么建议么?

答案1

如果您只想在数学模式下以空间方式使用点,您可以将其定义为 math-cative,即其数学代码为“8000 并且它扩展为零。

\mathcode`.="8000
{\catcode`.=13 \gdef.{}}

$\cos.x$ is the same as $\cos x$.

\bye

答案2

您想有目的地调整 TeX 语法。

在做类似的事情时

\mathchardef\period=\mathcode`.
\mathcode`.="8000
\begingroup\lccode`~=`. \lowercase{\endgroup\def~}{}

将允许您键入\cos.x并获得相同的结果\cos x,但这对类似的东西没有任何好处\mathcal.A

最大的区别在于它\cos是一个无参数的宏,而\mathcal\dot或任何数学重音(仅举例来说)都是一个参数宏,并且 TeX 将把它.作为参数,因为宏后面没有括号{

请注意使用的语法始终如一在 LaTeX 手册中是\mathcal{A}\dot{x}等等。例如好的理由

如果您想走这条路,您可以自由地去做,但您需要在数学模式中重新定义所有单参数宏,这些宏将“受益于”这种模糊语法,以便它们期待一段时间,如果找到它,就丢弃它。

就像是

\NewCommandCopy\mathcal@original\mathcal
\DeclareRobustCommand\mathcal{%
  \@ifnextchar.{\@firstoftwo{\mathcal@original}}{\mathcal@original}%
}

因此\@firstoftwo{\mathcaloriginal}.将删除句号并离开\mathcaloriginal

这对于每一个这样的命令。只是为了有一个有争议的语法:我坚信\dot{x}并且\mathcal{A}很多更好。这\cos x甚至比 更清晰\cos.x,因为它就像标准渲染一样。

如果公式是另一个命令的参数,那么在和.的帮助下将 catcode 设置为 9 的另一种方法将不起作用。\everymath\everydisplay

相关内容