Форматирование математических выражений - PullRequest
1 голос
/ 24 апреля 2020

Я сейчас нахожусь в процессе разработки моего собственного производного калькулятора для Android с использованием Java. Я видел, как другие приложения читали математические выражения, набранные пользователем, и он форматировал их так, как будто они написаны на бумаге.

Я пытаюсь выяснить, есть ли способ, которым мое приложение могло бы сделай то же самое. Например, я мог бы ввести квадрат выражения с корнем или взятым в степень целого числа, и он выглядел бы не как «sqrt (x + 3) или x ^ 3», как это буквально выглядит на консоли, а отформатировал соответствующим образом в зависимости от того, что написано. Я знаю, что я мог бы просто использовать Unicode для квадрата root, который является \ u221A, но я специально ищу функциональность, как в приведенном ниже примере.

Example Expression in Derivative Calculator App

Возможно ли использовать Java или мне придется переключиться на использование чего-то еще? Я не знаю, где начать искать решение. Я пытался найти решения в Интернете, но нет ничего, что соответствует тому, что я ищу.

Любая помощь приветствуется.

Спасибо!

1 Ответ

0 голосов
/ 26 апреля 2020

Библиотека github.com / jianzhongli / MathView выглядит так, как будто она должна работать для вас - вот пример рендеринга ваших первых уравнений с кодом ниже:

enter image description here

Это установлено в макете, но библиотека предоставляет программные c способы сделать то же самое. В этом примере используется механизм MathJax, а библиотека также поддерживает KaTeX.

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">


    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/text1"
        android:text="f(x) = sqrt(x/(x+2))"
        android:textStyle="bold"
        android:textAlignment="center"
        app:layout_constraintBottom_toTopOf="@id/formula_one"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        />

    <io.github.kexanie.library.MathView
        android:id="@+id/formula_one"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@id/text1"
        app:text="\\begin{align} f(x) &amp; = \\sqrt{\\frac{x}{x+2}} \\\\ &amp; = \\frac{\\sqrt{x}}{\\sqrt{x+2}} \\end{align}"
        app:engine="MathJax"
        >
    </io.github.kexanie.library.MathView>



</androidx.constraintlayout.widget.ConstraintLayout>

MathJax

Как видно, формула определена в поле app:text элемента MathView:

app:text="\\begin{align} f(x) &amp; = \\sqrt{\\frac{x}{x+2}} \\\\ &amp; = \\frac{\\sqrt{x}}{\\sqrt{x+2}} \\end{align}"

build.gradle (приложение)

Чтобы использовать MathView, просто добавьте это в ваш gradle приложения:

dependencies {
    ...
    implementation 'io.github.kexanie.library:MathView:0.0.6'
}

Программно

Вы можете Совершенно sh тот же результат, используя код в действии:

MathView mv = findViewById(R.id.formula_one);
mv.setText("\\begin{align} f(x) &amp; = \\sqrt{\\frac{x}{x+2}} \\\\ &amp; = \\frac{\\sqrt{x}}{\\sqrt{x+2}} \\end{align}");

Ссылка

Вот краткое руководство по использованию MathJax: https://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference/25048#25048

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...