确定非键盘符号的数学类别

确定非键盘符号的数学类别

确定非键盘符号的数学类别(例如普通/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`<工作正常;它产生了12604313C十六进制,前导数字 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哪里,这立即回答了您的问题 - 而是字体系列编号,是字符在字体中的位置。xyzz

再补充一点细节,\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

相关内容