MathJax не рендерит встроенную математику, если за ней следует кривая апостроф (U+2019), но работает с прямой апостроф (U+0027)

Я столкнулся с проблемой рендеринга встроенного MathJax в Discourse, когда математическое выражение следует за кавычным апострофом (U+2019), который часто подставляется «умными» кавычками в некоторых браузерах или редакторах.


:white_check_mark: Это отображается корректно:

$\mathbb{R}^2$'s basis

Здесь используется прямой ASCII-апостроф (U+0027).

\mathbb{R}^2’s basis


:cross_mark: Это не отображается:

$\mathbb{R}^2$’s basis

$\mathbb{R}^2$’s basis

Здесь используется правая одинарная кавычка (U+2019), которую иногда автоматически вставляют мобильные клавиатуры, текстовые редакторы с поддержкой форматирования или при копировании/вставке из форматированных источников.


Ожидаемое поведение:

Обе версии должны корректно отображать математику. Символ, идущий сразу после блока встроенной математики, не должен влиять на парсинг MathJax.

Почему это важно:

  • Это сложно обнаружить, если не сравнивать символы по Unicode.
  • Кавычный апостроф визуально неотличим от прямого в большинстве шрифтов.
  • Небольшое различие в форматировании не должно незаметно ломать рендеринг.
  • Непоследовательное поведение подрывает опыт создания постов с большим количеством математики.

Я не ожидал, что TeX будет обрабатывать обычную кавычку и фигурную кавычку одинаково. Это, похоже, ожидаемое поведение, хотя и раздражающее.

Похоже, это источник проблемы, но, вероятно, это просто потому, что я старый. :wink:

Так что движок MathJax может видеть то, что находится за пределами $…$ или \begin{matrix}\$\$ \\\vdots\\\$\$ \end{matrix}?

Хм. Мне действительно не стоило отвечать, ведь я перестал использовать LaTeX десять лет назад, но вот я снова здесь.

Кажется, закрывающий $ должен быть обязательно отделён пробелом, и обычная апостроф-запятая в данном случае ведёт себя как особый случай.


$\mathbb{R}^2$s basis
$\mathbb{R}^2$’s basis
$\mathbb{R}^2$ ’s basis

$\mathbb{R}^2$s basis
$\mathbb{R}^2$’s basis
\mathbb{R}^2 ’s basis

Так что, думаю, ваше простое решение — всегда ставить пробел после закрывающего $.

Я почти уверен, что это ожидаемое поведение, и удивлён, что мои знания, полученные десятилетия назад, всё ещё работают. Но именно поэтому версия TeX стремится к числу \pi.

С другой стороны, если добавить пробел, остаётся этот раздражающий лишний пробел. А точка после закрывающего доллара работает как положено.

Возвращаюсь к мысли, что, возможно, я не знаю, какое поведение здесь ожидаемо, и не готов пытаться рендерить TeX со своего телефона.

Редактирование: Ага. Ответ, кажется, сложнее, чем мы оба предполагали. См. TeX and LaTeX math delimiters — MathJax 4.0 documentation

Коротко: вы не хотите запускать рендеринг математики каждый раз, когда кто-то использует знак доллара!