有些人可能认为这是一个糟糕的想法,但我已经尝试在数学模式下使用点.
来充当空格。
这个想法就是能够写成\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