我有一个名为的输入文件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
对于后者,您说的是,当在数学模式下找到字符时,应该产生一个取自数学字体系列、槽的.
标点符号原子( ) 。6
4
"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`\,
看起来相当可疑,因为你得到的是一个分号,而不是逗号。