是什么原因导致我的矩阵周围出现标点符号?

是什么原因导致我的矩阵周围出现标点符号?

我有一个名为的输入文件mathchar.tex,我非常依赖它:

\mathchardef\Gamma="7400
\mathchardef\Delta="7401
\mathchardef\Theta="7402
\mathchardef\Lambda="7403
\mathchardef\Xi="7404
\mathchardef\Pi="7405
\mathchardef\Sigma="7406
\mathchardef\Upsilon="7407
\mathchardef\Phi="7408
\mathchardef\Psi="7409
\mathchardef\Omega="740A




%%%%%%

\mathchardef\alpha="040B
\mathchardef\beta="040C
\mathchardef\gamma="040D
\mathchardef\delta="040E
\mathchardef\epsilon="040F
\mathchardef\zeta="0410
\mathchardef\eta="0411
\mathchardef\theta="0412
\mathchardef\iota="0413
\mathchardef\kappa="0414
\mathchardef\lambda="0415
\mathchardef\mu="0416
\mathchardef\nu="0417
\mathchardef\xi="0418
\mathchardef\pi="0419
\mathchardef\rho="041A
\mathchardef\sigma="041B
\mathchardef\tau="041C
\mathchardef\upsilon="041D
\mathchardef\phi="041E
\mathchardef\chi="041F
\mathchardef\psi="0420
\mathchardef\omega="0421
\mathchardef\varepsilon="0422
\mathchardef\vartheta="0423
\mathchardef\varpi="0424
\mathchardef\varrho="0425
\mathchardef\varsigma="0426
\mathchardef\varphi="0427
\mathchardef\imath="047B
\mathchardef\jmath="047C
\mathchardef\ell="0460
\mathchardef\wp="047D
\mathchardef\partial="0440
\mathchardef\flat="045B
\mathchardef\natural="045C
\mathchardef\sharp="045D
\mathchardef\triangleleft="242F
\mathchardef\triangleright="252E
\mathchardef\star="243F

\mathchardef\smile="345E
\mathchardef\frown="345F
\mathchardef\leftharpoonup="3428
\mathchardef\leftharpoondown="3429
\mathchardef\rightharpoonup="342A
\mathchardef\rightharpoondown="342B

\mathchardef\lhook="342C \def\hookrightarrow{\lhook\joinrel\rightarrow}
\mathchardef\rhook="342D \def\hookleftarrow{\leftarrow\joinrel\rhook}


\mathchardef\<"343C
\mathchardef\>"343E
\mathchardef\slash"043D
\mathchardef\."643A
\mathchardef\,"643B


\mathcode`\<="343C
\mathcode`\>="343E
\mathcode`\/="043D
\mathcode`\.="643A
\mathcode`\,="643B

但每当我调用它时,我的矩阵就会发生奇怪的事情。考虑以下代码:

\input mathchar
$$\matrix{a&b\cr c&d\cr}$$
\bye

这将产生以下输出:

在此处输入图片描述

我不确定它们是句号和逗号,还是分号,还是其他什么。对于较大的矩阵,我往往只得到逗号(或者可能是单引号),而没有句号。

我很想知道哪一行mathchar.tex导致了这个问题。

答案1

两者之间有很大区别

\mathchardef\."643A

\mathcode`\.="643A

对于后者,您说的是,当在数学模式下找到字符时,应该产生一个取自数学字体系列、槽的.标点符号原子( ) 。64"3A

前者定义控制序列\.产生上面描述的相同的数学原子。

在后者中,\. 没有代表控制序列,因为它前面有一个反引号,而 TeX 期望的是数字和整个

`\.

表示字母常量(句点的 ASCII 码)。使用

\mathcode`.="643A

会做完全相同的事情。根据规则,当涉及字母常量时,可以对字符进行转义(在某些情况下必须进行转义,例如%),而不会以任何方式改变含义。生成的控制序列甚至不会添加到哈希表中。

使用您的代码

\mathchardef\<"343C
\mathchardef\>"343E
\mathchardef\."643A
\mathchardef\,"643B

你正在定义\<重新定义 \>\.\,。你显然不想要它。你的问题确实在于 的重新定义\,,因为\matrix使用它:

\def\matrix#1{\null\,\vcenter{\normalbaselines\m@th
    \ialign{\hfil$##$\hfil&&\quad\hfil$##$\hfil\crcr
      \mathstrut\crcr\noalign{\kern-\baselineskip}
      #1\crcr\mathstrut\crcr\noalign{\kern-\baselineskip}}}\,}

顺便说一句,你的任务\mathcode`\,看起来相当可疑,因为你得到的是一个分号,而不是逗号。

相关内容