2012-01-17 6 views
1

MathML 태그로 분할 한 다음 랩하려고하는 문자열이 있습니다. 목표는 방정식에 대해 MathML (가능한 경우 MathJax) 출력을 렌더링하는 것입니다. 내가 겪고있는 문제는 MathML 태그를 다른 하위 문자열과 일치시키는 것입니다. 예를 들어문자열을 분할하고 mathml 태그의 하위 문자열을 줄입니다.

:

str = x + 2; 
newStr = str.split(''); //returns [x,+,2] 

I 수와 같은 배열을 통해 루프 :

for (i = 0;i < newStr.length; i++) { 
    write('<mn>' + newStr[i] + '</mn>') 

그러나 하나의 MathML을 태그에 대한이 유일한 작품. 각 하위 문자열을 태그에 매핑하고 태그로 묶은 다음 (바람직하게는 태그를 변수로 참조) 어떻게 태그를 닫습니다 (<msup>과 같은 다중 요소 MathML을 사용하면 태그가 재생됩니다) .

UPDATE는 예를 들어

, 이것은 내가 생산하기 위해 노력하고있어입니다 :

입력 : x + 2

출력 : 하루 종일이 문제를 진압하고있다 <mi>x</mi><mo>+</mo><mn>2</mn>

. 어떤 아이디어? MathJaxjqMath 같은

+0

필요한 입출력 사례를 제공해 줄 수 있습니까? – amosrivera

+0

@ amosrivera - 업데이트 된 게시물을 확인하십시오. – dopatraman

답변

1

도서관 숫자, 변수, 연산자, 중첩 된 괄호, 지수, 행렬, 취급, 당신을 위해이 작업을 수행 등 MathJax이 jqMath 그냥 간단 유니 코드 기반 구문을 구현하는 복잡한 서식, 라텍스 구문을 지원합니다. 예를 들어 jqMath에서 M.sToMathE('x + 2')을 사용하여 MathML 요소를 만들 수 있습니다. (그런 다음 innerHTML을 취할 수 있습니다. 문자열 형식으로 원한다면 믿을 수 있습니다.) Jqmath - apply after page load도 참조하십시오. (완전 공개 : 나는 jqMath를 썼다.)

0

이런 종류의 변환을 MathML로 어떻게 할 수 있는지 보여주는 출발점이있다. 또한 자바 스크립트보다 의사 코드가 더 많습니다.

string str = x + 2 
newStr = str.split(''); 

for (i = 0;i < newStr.length; i++) 
{ 
    string value = Operator_AsMathML(newStr[i]); 
    if(value == "") 
    { 
     if(isdigit(newStr[i][0]) 
      value = Number_AsMathML(newStr[i]); 
     else 
      value = Variable_AsMathML(newStr[i]); 
    } 
    write(value); 
} 

string Number_AsMathML(string number) 
{ 
    return "<mn>" + number + "</mn>"; 
} 

string Variable_AsMathML(string varname) 
{ 
    return "<mi>" + varname + "</mi>"; 
} 

string Operator_AsMathML(string opname) const 
{ 
    string front = "<mo>"; 

    switch(opname[0]) 
    { 
     case '+': 
      front += "+"; 
      break; 

     case '-': 
      front += "&#x2212;"; 
      break; 

     case '*': 
      front += "&times;"; 
      break; 

     case '/': 
      front += "/"; 
      break; 

     case '±': 
      front += "&#x00B1;"; 
      break; 

     default: 
      return ""; 
    } 

    front += "</mo>"; 
    return front; 
} 
관련 문제