打字机字体中的单引号是否特殊?MathJax排版疑问
MathJax排版Pascal表达式时单引号的特殊处理原因
我需要在MathJax中排版Pascal表达式:
(chr='A') and (num=3)
要求数字、括号、等号、逻辑and运算符以数学符号渲染,其余内容使用打字机字体。我通过TeX命令\hbox和\tt实现该效果,同时搭配了特殊CSS样式:
.a mjx-c.mjx-c2019::before { content: "\\27" !important; padding-right: 0.525em !important; font-family: MJXZERO, MJXTEX-T; }
对应的HTML代码:
<script src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-chtml-full.js" type="text/javascript"></script> Correct: <span class="math a">\\[({ t chr}=\\hbox{\\tt 'A'})\\land ({ t num}=3)\\]</span> Wrong: <span class="math b">\\[({ t chr}=\\hbox{\\tt 'A'})\\land ({ t num}=3)\\]</span> Without \\hbox: <span class="math c">\\[({ t chr}={\tt 'A'})\\land ({ t num}=3)\\]</span>
该方案可实现需求,但必须借助上述特殊CSS才能让单引号显示为打字机字体;若不使用\hbox,单引号会被渲染为另一种符号。而{\tt ...}内的其他字符都能正常显示为打字机字体,原因如下:
核心原因
MathJax遵循TeX语法规则,在数学模式下,单引号(')是具备特殊语义的命令缩写——它会被解析为数学上标撇号(对应Unicode字符U+2019,用于表示导数等数学符号),而非普通文本字符。
即便用{\tt ...}指定了打字机字体,只要内容仍处于数学模式中,MathJax会优先处理单引号的数学语义,将其渲染为数学撇号,而非打字机风格的普通直单引号(U+0027)。
而\hbox的作用是将包裹内容切换到文本模式,在文本模式下,单引号不再具备数学特殊属性,会被当作普通文本字符处理,配合\tt就能正常显示为打字机字体的单引号。
内容的提问来源于stack exchange,提问作者Heiko Theißen
相关产品推荐
相关产品推荐

