java - 格式化数学表达式
问题描述
我目前正在使用 Java 为 Android 设计自己的衍生计算器。我见过其他应用程序读取用户输入的数学表达式,并以一种看起来像是写在纸上的方式对其进行格式化。
我正在尝试查看我的应用程序是否也可以做到这一点。例如,我可以键入一个以平方根为根或整数次方的表达式,它不会像控制台上的字面意思那样显示为“sqrt(x+3) 或 x^3”,而是根据内容进行相应的格式化是写的。我知道我可以只使用 Unicode 作为平方根,即 \u221A,但我特别在寻找下面示例图片中的功能。
是否可以使用 Java 或者我必须切换到使用其他东西?我不知道从哪里开始寻找解决方案。我已经尝试在网上寻找解决方案,但没有任何东西与我正在寻找的东西相匹配。
任何帮助表示赞赏。
谢谢!
解决方案
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) & = \\sqrt{\\frac{x}{x+2}} \\\\ & = \\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) & = \\sqrt{\\frac{x}{x+2}} \\\\ & = \\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) & = \\sqrt{\\frac{x}{x+2}} \\\\ & = \\frac{\\sqrt{x}}{\\sqrt{x+2}} \\end{align}");
参考
这是使用 MathJax 的入门指南: https ://math.meta.stackexchange.com/questions/5020/mathjax-basic-tutorial-and-quick-reference/25048#25048
推荐阅读
- keras - LSTM 预测结果交互
- angular - 升级后或新项目无法构建 Angular 12 和 Webpack 5
- unity3d - 我需要做什么才能将我的游戏更新到 Google Play Billing 3?
- java - 基于 Kerberos MSLSA 票证缓存的 AD 中 Java App auth 的困惑
- php - 使用 axios 将方法修补到 Codeigniter 3
- php - Laravel 8 firstOrCreate 不使用 $fillable
- python - 在python中使用PyJWT解码jwt令牌给出错误算法不支持
- kubernetes - Metrics-Server:节点没有匹配类型的地址 [InternalIP]
- xpath - 如何在 Appium 中使用 @FindBy 设置路径?
- javascript - Writing custom InstantLayerNormalization in tensorflow js