Введите значения переменных в синтаксис Katex /Latex

Я работаю над проектом, который использует формат Katex для отображения математических формул.

Теперь я столкнулся с небольшой проблемой здесь.

Предположим, что для рендеринга дроби синтаксис katex \drac{x}{y}

Теперь, если у меня есть переменная x значения 3 и другая переменная y значения 5.

Как бы я ввел значения в синтаксис Katex?

Я хочу что-то вроде

var x = 3;
var y = 5;

\dfrac{x}{y}

где x и y в синтаксисе katex будут заменены фактическими значениями.

Примечание:- Я также использую https://github.com/talyssonoc/react-katex

оказать Katex.

1 ответ

Я думаю, что я использовал бы макро-замену для этого. Постарайтесь, чтобы ваша формула была выражена как \frac{\x}{\y} каким бы механизмом не создавалась формула. Затем вы можете заменить либо имена переменных, либо значения вместо этих макросов. Что-то вроде этого:

katex.render("\\frac{\\x}{\\y}", element, {
  macros: {
    "\\x": String(x),
    "\\y": String(y),
  }
});

Если у вас нет способа контролировать первоначальное построение формул, это просто переносит проблему с подстановки значений в формулу на подстановку в нее команд. В этом случае вы, вероятно, захотите разбить входную строку на команды\… и другие письма. Команды остаются без изменений, тогда как другие буквы могут быть заменены.

Остерегайтесь одной группировки: вход \frac xy рендерится просто отлично, но с x=34.5 а также y=5.67 подставляется наивным способом, результат \frac 34.55.67 (что даст вам замена текста и макроса) \frac{3}{4}.55.67, Поэтому убедитесь, что каждый макрос в вашей формуле заключен в {…} или добавить другой уровень {…} когда вы делаете замену, как в "\\x": "{" + x + "}", Вложение макросов {…} внутри формулы есть то преимущество, что вам не придется беспокоиться о макросе, который съест следующий пробел: \text{\x is 2} это плохо но \text{{\x} is 2} лучше.

Но даже при правильной группировке этот подход не идеален, поскольку не все некоманды действительно являются переменными. Например с \begin{array}{rlrl}…\end{array} ни a в array ни r в rlrl следует считать переменной. Исправить это действительно проблематично, так как для этого требуется много смысла.

Одним из способов решения этой дилеммы было бы позволить KaTeX выполнить рендеринг, а затем выполнить подстановку в результирующем поддереве DOM. Вы должны быть в состоянии идентифицировать переменные как <span class="mord …">…</span> (mord расшифровывается как обычная математика) Это означает, что вы зависите от точного представления, которое KaTeX использует для вывода, поэтому вам следует убедиться, что вы используете фиксированную версию KaTeX, поскольку эти внутренние компоненты могут быть изменены без предварительного уведомления. Также следует учитывать тот факт, что в некоторых (возможно, будущих) версиях это может нарушить некоторые конструкции, которые зависят от ширины данного блока, хотя даже такие проблемные вещи, как \underbrace Похоже, что в настоящее время работает с этим подходом замены.

Другие вопросы по тегам