Математика должна быть цитируемой

Я изучил вопрос цитирования математики (рассматриваю возможность написания PR или вклада в существующий).

Записываю здесь свои первоначальные мысли и выводы.

  • Похоже, вся логика цитирования проходит через следующие основные компоненты:
  • Функция buildQuote принимает объект поста — я полагаю, это полное JSON-описание поста пример.

Таким образом, моё первоначальное впечатление таково, что один из этих пунктов можно исправить:

  • toMarkdown сопоставляет элементы с различными HTML-тегами; MathJax, кажется, использует пользовательские элементы, которые можно обнаружить (возможно, не при рендеринге SVG), возможно, то же самое делает KaTeX?
  • selectedText выполняет некоторое сопоставление для элементов, таких как блоки кода и onebox — возможно, удастся обнаружить элементы MathJax/KaTeX и преобразовать их? (Примечание: вероятно, стоит предусмотреть здесь хук или что-то подобное, чтобы логику преобразования можно было добавить в плагин discourse-math, а не в основную кодовую базу Discourse).
  • Остальные пункты кажутся менее подходящими по сравнению с этими двумя.

Некоторые другие размышления о подходах и о том, как получить исходную математику.

В зависимости от того, как работают KaTeX / MathJax+SVG[1], у каждого экземпляра математики, думаю, должен быть корневой HTML-элемент (возможно, несколько, так как есть скрытые элементы для доступности и т.д.). Таким образом, если мы знаем места, где присутствует математика, мы сможем проанализировать исходный пост на наличие содержимого, ограниченного $ (но интерпретаторы — дело тонкое — возможно, в кодовой базе уже есть такой?).

Или же, по крайней мере, MathJax имеет функцию правой кнопки мыши > View TeX (которая должна возвращать буквальную строку между парами $); я не уверен, как подключиться к этому, но если есть способ сделать это для MathJax v2, v3 и KaTeX, то можно использовать это для замены выделенной форматированной математики на $...$ (примечание: это работает для встроенной математики, нужно также охватить случай с другим типом, который использует разделители $$...$$ или [/.../]).

Проблемы на данный момент:

  • Не знаю, как реализовать хук или есть ли что-то лучшее для использования / более правильный способ сделать это в кодовой базе Discourse.
  • Несколько неизвестных моментов относительно MathJax/KaTeX, которые нужно изучить.
    • HTML-элементы — как надёжно их обнаруживать?
    • Как получить исходный код TeX?

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


  1. Кажется, MathJax+SVG не поддерживается, так что, возможно, это не проблема ↩︎

6 лайков