MathJax在安卓设备上无法工作

3

我正在尝试在安卓中使用MathJax库,但是一直没有成功。 我希望能够在文本中间显示一些复杂的数学公式(像数学推导) 这个链接现在肯定不再可用了 http://cs.jsu.edu/wordpress/?p=498

import android.os.Bundle;
import android.os.Handler;
import android.support.v7.app.ActionBarActivity;
import android.webkit.WebView;
import android.widget.Toast;

public class MainActivity extends ActionBarActivity {
    WebView w;

    private String doubleEscapeTeX(String s) {
        String t = "";
        for (int i = 0; i < s.length(); i++) {
            if (s.charAt(i) == '\'')
                t += '\\';
            if (s.charAt(i) != '\n')
                t += s.charAt(i);
            if (s.charAt(i) == '\\')
                t += "\\";
        }
        return t;
    }

    private int exampleIndex = 0;

    private String getExample(int index) {
        return getResources().getStringArray(R.array.tex_examples)[index];
    }

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        w = (WebView) findViewById(R.id.webview);
        w.getSettings().setJavaScriptEnabled(true);
        w.getSettings().setBuiltInZoomControls(true);
        w.loadDataWithBaseURL("http://bar",
                "<script type='text/x-mathjax-config'>"
                        + "MathJax.Hub.Config({ " + "showMathMenu: false, "
                        + "jax: ['input/TeX','output/HTML-CSS'], "
                        + "extensions: ['tex2jax.js'], "
                        + "TeX: { extensions: ['AMSmath.js','AMSsymbols.js',"
                        + "'noErrors.js','noUndefined.js'] } " + "});</script>"
                        + "<script type='text/javascript' "
                        + "src='file:///android_asset/MathJax/MathJax.js'"
                        + "></script><span id='math'></span>", "text/html",
                "utf-8", "");

        // Here is my added code.
        new Handler().postDelayed(new Runnable() {

            @Override
            public void run() {
                // TODO Auto-generated method stub
                String s = getExample(exampleIndex++);
                if (exampleIndex > getResources().getStringArray(
                        R.array.tex_examples).length - 1)
                    exampleIndex = 0;
                Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();
                w.loadUrl("javascript:document.getElementById('math').innerHTML='\\\\["
                        + doubleEscapeTeX("\\int_{-\\infty}^{\\infty} e^{-x^2}\\, dx = \\sqrt{\\pi}"+ "\\\\]';"));
                w.loadUrl("javascript:MathJax.Hub.Queue(['Typeset',MathJax.Hub]);");

            }
        }, 1000);

    }
}

我在LogCat中看到以下内容:

[INFO:CONSOLE(1)] "Uncaught ReferenceError: MathJax is not defined", source:  (1)

感谢您的提前帮助。 enter image description here
这是一张图片,可能与IT技术有关。

你的资产文件夹中有MathJax吗? - Neoh
我有项目结构,请告诉我是否有问题。 - frost
1
请参考此git仓库:https://github.com/leathrum/android-apps/tree/master/MathJaxApp/full。尝试下载assets.zip,里面应该有一个MathJax文件夹。将其放入您的资产文件夹中。 - Neoh
这个 assets.zip 文件只包含 MathJax 文件夹吗?那我是需要解压缩并将 MathJax 文件夹放入我的 assets 文件夹,还是整个 assets.zip 文件都需要放进去? - frost
我注意到你的文件夹中有assets.zip。那可能不是你应该做的。你的assets目录里应该有一个“MathJax”文件夹。 - Neoh
显示剩余4条评论
1个回答

3

我浪费了一天的时间才找到答案,所以现在花些时间写下这个答案。

这个答案是根据@Neoh在这个链接中提供的解决方案编写的:Display Good-looking Math Formula in Android

请注意,最初我犯了一个错误:不要将ASSESTS.ZIP文件复制到资产文件夹中,而是将MathJax文件夹复制到资产文件夹中。

完成后,您可能会遇到ResourceNotFoundException问题,而无缘无故地认为代码中有什么东西丢失了,但实际上并非如此。这是Android buildToolVersion 21.0.1中的一个错误,我能够追踪到它,还有一个非常有用的解决方案帮助我注意到并解决了这个问题:https://dev59.com/XYTba4cB1Zd3GeqP6XfL#26493179

感谢@Neoh和@Riley C提供的解决方案和帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接