2017-01-09 1 views
0

Android 애플리케이션에 수학 방정식을 표시해야합니다. 'MathJax'를 엔진으로 사용하여 'MathView'(https://github.com/kexanie/MathView)를 사용하여 TeX 코드를 변환하는 것이 좋습니다. 유일한 문제는 컨테이너의 너비가 방정식의 너비보다 작 으면 방정식을 축소해야한다는 것입니다. 아무에게도 이것을 달성하는 방법이 있습니까?MathView에서 TeX 방정식을 자동으로 스케일하는 방법은 무엇입니까?

MathView :

<io.github.kexanie.library.MathView 
    android:id="@+id/formula" 
    android:layout_width="100dp" 
    android:layout_height="wrap_content" 
    android:background="#cccccc" 
    auto:engine="MathJax" /> 

MathView의 구성 :

formula.config(
      "MathJax.Hub.Config({\n" + 
        " extensions: [\"tex2jax.js\", \"handle-floats.js\"],\n" + 
        " jax: [\"input/TeX\", \"output/HTML-CSS\"],\n" + 
        " tex2jax: {\n" + 
        "  inlineMath: [ ['$','$'], [\"\\\\(\",\"\\\\)\"] ],\n" + 
        "  displayMath: [ ['$$','$$'], [\"\\\\[\",\"\\\\]\"] ],\n" + 
        "  processEscapes: true\n" + 
        " },\n" + 
        " \"HTML-CSS\": {\n" + 
        "  linebreaks: {\n" + 
        "  automatic: false,\n" + 
        "  width: \"container\"\n" + 
        "  },\n" + 
        " }\n" + 
        " });" 
    ); 

    formula.setText("<font color=\"#000000\">$$\\int_0^\\infty e^{-x^2} dx=\\frac{\\sqrt{\\pi}}{2}$$</font>"); 

감사합니다!

답변

1

이 작업을 수행하려면 수학을 조판하고 결과를 측정하여 컨테이너의 현명한 사람과 비교하고 컨테이너의 팬 배율을 설정 한 다음 계산을 다시 렌더링해야합니다. 새로운 크기.

다음은 그 예입니다.

<html> 
 
<head> 
 
<title>MathJax with Dynamic CSS</title> 
 
<script 
 
    src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.0/MathJax.js?config=TeX-AMS_HTML"> 
 
</script> 
 
<style> 
 
.box { 
 
    margin: 1em auto 0 auto; 
 
    border: 2px solid black; 
 
    padding: 0 20px; 
 
    width: 20em; 
 
} 
 
</style> 
 
</head> 
 
<body> 
 

 
<div class="box"> 
 
<div id="rescale" style="display:inline-block"> 
 
\[\sum_{n=1}^{10} {1\over n} = {1\over 1} + {1\over 2} + {1\over 3} 
 
    + {1\over 4} + {1\over 5} + {1\over 6} + {1\over 7} + {1\over 8} 
 
    + {1\over 9} + {1\over 10}\] 
 
</div> 
 
</div> 
 

 
<script> 
 
MathJax.Hub.Queue(function() { 
 
    var math = document.getElementById("rescale"); 
 
    var w = math.offsetWidth, W = math.parentNode.offsetWidth-40; 
 
    if (w > W) { 
 
    math.style.fontSize = (95*W/w)+"%"; 
 
    MathJax.Hub.getAllJax(math)[0].Rerender(); 
 
    } 
 
}); 
 
</script> 
 

 
</body> 
 
</html>

그것은 당신을 많이 할 싶은 게 아니지만, 그것은 작업을 수행합니다. SVG 및 CommonHTML 출력을 사용하면 다시 렌더링하지 않고도 글꼴 크기를 변경할 수 있습니다.

+0

고맙습니다. 이 코드를 Android로 이식하는 방법을 알고 계십니까? – Katharina

+0

'MathJax.Hub.Queue()'를'formula.config()'호출의 문자열 맨 아래에 추가하고'' 태그 주위에'id = "rescale"을 사용하여'div'를 넣으십시오. 'formula.setText()'호출에서. 컨테이너의 크기를 인위적으로 제한하기 때문에'.box' 부분은 필요 없습니다. –

+0

도와 주셔서 감사합니다! – Katharina

0

TEX 언어 전용 StackExchange 사이트가 있습니다. 거기에서 더 나은 도움을 얻을 수 있습니다. https://tex.stackexchange.com/

+0

고맙습니다 - 거기서 시도해 보겠습니다. – Katharina

+1

아니요, 주제에서 벗어나 거부됩니다. 이것은 TeX에 관한 것이 아니라 MathJax에 관한 것입니다. TeX는 MathJax의 질문을 정기적으로 거부합니다. –

관련 문제