Я изучил вопрос цитирования математики (рассматриваю возможность написания PR или вклада в существующий).
Записываю здесь свои первоначальные мысли и выводы.
- Похоже, вся логика цитирования проходит через следующие основные компоненты:
- Функция
buildQuote TopicController.selectedText- Контент, передаваемый в цитату, берётся из
this.quoteState.buffer— он заполняется вQuoteButton._selectionChanged(возможно, и в других местах тоже) - Это вызывает
selectedText - который вызывает
toMarkdown
- Функция
- Функция
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?
Если у кого-то есть другие идеи, где и что исправлять, другие возможные методы реализации или что-то ещё, пожалуйста, напишите об этом.
Кажется, MathJax+SVG не поддерживается, так что, возможно, это не проблема ↩︎