首页 > 解决方案 > 格式化数学表达式

问题描述

我目前正在使用 Java 为 Android 设计自己的衍生计算器。我见过其他应用程序读取用户输入的数学表达式,并以一种看起来像是写在纸上的方式对其进行格式化。

我正在尝试查看我的应用程序是否也可以做到这一点。例如,我可以键入一个以平方根为根或整数次方的表达式,它不会像控制台上的字面意思那样显示为“sqrt(x+3) 或 x^3”,而是根据内容进行相应的格式化是写的。我知道我可以只使用 Unicode 作为平方根,即 \u221A,但我特别在寻找下面示例图片中的功能。

导数计算器应用程序中的示例表达式

是否可以使用 Java 或者我必须切换到使用其他东西?我不知道从哪里开始寻找解决方案。我已经尝试在网上寻找解决方案,但没有任何东西与我正在寻找的东西相匹配。

任何帮助表示赞赏。

谢谢!

标签: javaandroid

解决方案


github.com/jianzhongli/MathView库似乎应该适合您 - 这是您的第一个方程式的示例渲染,代码如下

在此处输入图像描述

这是在布局中设置的,但库提供了同样的编程方式。此示例使用 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>

数学贾克斯

如您所见,公式是在元素app:text字段中定义的:MathView

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

构建.gradle(应用程序)

要使用 MathView,只需将其添加到您的应用程序 gradle 中:

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

以编程方式

您可以使用活动中的代码完成相同的结果:

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


推荐阅读