Я работаю над калькулятором на основе html, и я хочу отобразить выражение, а затем оценить его, и все это должно быть сделано в Javascript. Я бы предпочел, чтобы выражение было написано в LaTeX, и для него можно было бы редактировать отображаемое выражение в интерактивном режиме, но могли работать другие языки.
То, что я пробовал раньше, - это визуализировать выражение в интерактивном режиме с помощью MathQuill, а затем оценить его с помощью MathJS. Однако это работает в некоторой степени, поскольку два пакета разработаны с различными целями (MathQuill отображает LaTeX, в то время как MathJS имеет собственный математический синтаксис), он работает не очень хорошо (например, если пользователь вводит \frac{5}{17*x}
и предполагает, что это правильный синтаксис, затем оценивает его и получает ошибку от MathJS).
В настоящее время я вижу три способа продолжения:
- Продолжайте с тем, что у меня есть (или, возможно, переключитесь на MathJax - что лучше?).
- Найдите инструмент, который выполняет как рендеринг, так и оценку (будь то в латекс или какой-либо другой язык)
- Найдите два инструмента для рендеринга и оценки с помощью синтаксиса close (если не тот же)
- Напишите мой собственный инструмент для рендеринга и оценки, как рекомендовано здесь. Я бы предпочел не делать этого, потому что это кажется утомительным, и я не хочу изобретать велосипед.
Каким образом можно сделать это?
Обновление 1:. Просмотрев список альтернативных языков, доступных в altJS, я думаю, что мог бы использовать Python, Ruby или Basic в качестве языка ввода для пользователя. Если бы я это сделал, у него появилось бы так много возможностей для его рендеринга (технически это не "рендеринг", а просто подумайте о том, сколько синтаксических маркеров там есть). Однако я не хочу, чтобы пользователи имели доступ к более продвинутым элементам этих языков, потому что это добавило бы путаницу моим пользователям, а также может быть небезопасным (например, с помощью eval
). Я хочу, чтобы пользователи могли использовать математические операции, переменные (только те, которые я указываю, что они могут, а также созданные пользователем) и функции (только те, которые я указываю, что они могут, а также определяемые пользователем). Есть ли способ ограничить подмножество языка, который можно использовать?
Обновление 2: Я просмотрел еще немного на странице altJS и понял, что почти все языки предназначены для компиляции языка XYZ в JavaScript, а затем запускают JavaScript на странице, а не запущен язык XYZ на странице. Я не рассматривал каждый из них, но большинство из них похоже на это. Другие, такие как Brython, похоже, предназначены для запуска языка XYZ в браузере, но как замена/дополнение к JavaScript, а не как язык ввода для пользователя. Есть ли способ обхода, поэтому я могу использовать эти методы в качестве входных данных?
Обновление 3: Благодарим @SpaceDog за эту информацию и за указание, что я не был конкретным в том, что пользователи могут достичь. Итак, вот функциональность, которую я хочу достичь:
- Основные операции (сложение, вычитание, умножение, деление/фракции, возведение в степень, корни, модуль)
- Функции (тригонометрические функции, журналы и т.д.)
- Константы (e, pi и т.д.)
- Переменные (назначение, переназначение и их использование)
- Пользовательские функции
LaTeXCalc, похоже, отвечает всем этим требованиям, за исключением последнего. Кроме того, он, похоже, не находится в Javascript.
Это подводит меня к другой идее, о которой я подумал: используйте что-то вроде MathJax для презентации, затем используйте Wolfram Alpha API, чтобы фактически обрабатывать вычисление. Преимущества заключаются в том, что он будет иметь гораздо более расширенные параметры как для ввода, так и для вывода. Однако приложение будет бесполезно (почему бы просто не использовать wolframalpha.com, если калькулятор практически является клоном?), Он стоит денег, и приложение не будет работать в автономном режиме (это настольное приложение, написанное в формате HTML/CSS/JS). Мысли об этом?