确定非键盘符号的数学类别(例如普通/0、关系/3、关闭/5 等)的“正确”方法是什么?
类似的东西\oplus
很容易猜到,但我不能立即确定\upuparrows
();一方面,我的印象是箭头符号通常被视为关系,而我知道Knuth 的向上箭头符号用它来表示二元运算。
我尝试写
\documentclass{article}
\usepackage{amssymb}
\begin{document}
\the\mathcode\upuparrows
\end{document}
但这产生了一个错误:
Bad character code (13332) \the\mathcode\upuparrows
注意13332
是正确的数字: 写作
\def\test{\mathchar 13332 }
$\test$
不会产生错误,并给出双向上箭头符号。 和13332
等于十六进制数3414
,以 3 开头,正确表明它是一个关系。
我最后怎么发现这是正确的呢?因为我运行了以下非常愚蠢的代码:
\documentclass{article}
\usepackage{amssymb}
\begin{document}
\newlength{\test}
\setbox0=\hbox{$a\mathord{\upuparrows}b$}
\setbox1=\hbox{$a\mathop{\upuparrows}b$}
\setbox2=\hbox{$a\mathbin{\upuparrows}b$}
\setbox3=\hbox{$a\mathrel{\upuparrows}b$}
\setbox4=\hbox{$a\mathopen{\upuparrows}b$}
\setbox5=\hbox{$a\mathclose{\upuparrows}b$}
\setbox6=\hbox{$a\mathpunct{\upuparrows}b$}
\setbox7=\hbox{$a\upuparrows b$}
\begin{tabular}{ll}
mathord & \setlength{\test}{\wd0} \the\test\\
mathop & \setlength{\test}{\wd1} \the\test\\
mathbin & \setlength{\test}{\wd2} \the\test\\
mathrel & \setlength{\test}{\wd3} \the\test\\
mathopen & \setlength{\test}{\wd4} \the\test\\
mathclose & \setlength{\test}{\wd5} \the\test\\
mathpunct & \setlength{\test}{\wd6} \the\test\\[0.1in]
ACTUAL & \setlength{\test}{\wd7} \the\test\\
\end{tabular}
\end{document}
生产:
显然这也不是解决问题的正确方法;除了愚蠢之外,还有一个问题就是几节数学课的长度可能相同。
现在相比之下,写作\the\mathcode`<
工作正常;它产生了12604
(313C
十六进制,前导数字 3 = mathrel,正如它应该的那样)。
我确实尝试在前面添加反引号\upuparrows
,但这只会产生错误
Improper alphabetic constant \the\mathcode`\upuparrows
Missing $ inserted \the\mathcode`\upuparrows
Missing $ inserted
(顺便问一下,反引号到底是做什么的?我正在阅读 TeXbook,那里给出的例子使用了它,例如,但我找不到解释。)
我也尝试了这个 TeX.SE 线程:
\documentclass{article}
\usepackage{amssymb}
\begin{document}
\the\mathcode\string\upuparrows
\end{document}
但产生了
Missing number, treated as zero \the\mathcode\string\upuparrows
答案1
改用\show\upuparrows
。您将收到以下响应:
> \upuparrows=\mathchar"3414.
现在您需要对其进行解码。如 TeX by Topic 的第 21.1 节所述,该代码被解析为数学类在"xyzz
哪里,这立即回答了您的问题 - 而是字体系列编号,是字符在字体中的位置。x
y
zz
再补充一点细节,\mathchar
是使用给定的类和系列排版给定字符的命令。正如您可能猜到的那样,这就是处理非键盘字符的方式。只有实际的字符才具有关联的\mathcode
。
答案2
您可以让 TeX 显示当前的数学列表结构,而不必单独显示每个命令。
\documentclass{article}
\usepackage{amssymb}
\begin{document}
$ a \sin b \upuparrows \times 2 \showoutput \showlists $
\end{document}
在终端和日志上生成:
### math mode entered at line 5
\mathord
.\fam1 a
\mathop\nolimits
.\mathord
..\fam0 s
.\mathord
..\fam0 i
.\mathord
..\fam0 n
\mathord
.\fam1 b
\mathrel
.\fam4 ^^T
\mathbin
.\fam2 ^^B
\mathord
.\fam0 2
它告诉您该表达式\upuparrows
产生了一个 mathrel 原子,后跟来自的 mathbin \times
。