2013-11-15 4 views
10

나는 HTML 기반 계산기를 사용하고 있으며, 표현식을 표현한 다음 평가하고 싶습니다.이 모든 것은 자바 스크립트에서 수행해야합니다. LaTeX로 작성된 표현식을 선호하며 렌더링 된 표현식을 대화식으로 편집하는 것이 가능하지만 다른 언어도 작동 할 수 있습니다.자바 스크립트에서 라텍스 수학 평가하기

내가 전에 시도한 것은 MathQuill과 대화식으로 표현식을 렌더링 한 다음 MathJS로 평가하는 것입니다. 그러나이 두 패키지는 서로 다른 목표로 설계되었으므로 어느 정도 작동합니다 (MathQuill은 LaTeX을 렌더링하지만 MathJS는 사용자 정의 수학 구문을 사용합니다). 완벽하게 작동하지 않습니다 (예 : \frac{5}{17*x}을 입력하고 올바른 구문이며, 그 다음 그것을 평가하고 MathJS로부터 오류를 얻습니다).

현재, 내가 진행하는 세 가지 방법을 참조하십시오 (? 또는 어쩌면 더 나은 MathJax-로 전환)

  • 내가 무엇을 계속합니다.
  • (만약 동일하지)
  • 렌더링 닫으로 평가하기위한 두 가지 도구를 찾기 (는 라텍스 또는 다른 언어인지) 렌더링 및 평가를 모두 수행하는 도구를 찾기 구문
  • 내 자신의 렌더링 쓰기 추천 도구 here으로 평가 도구. 나는 지루한 것처럼 보이기 때문에 이것을하지 않기를 바랄 것이다. 나는 바퀴를 재발 명하고 싶지 않다.

어떻게해야할까요?

업데이트 1 :altJS에서 사용할 수있는 대체 언어 목록을 살펴본 후 Python, Ruby 또는 Basic을 사용자 입력 용 언어로 사용할 수 있다고 생각합니다. 만약 내가 그렇게했다면, 렌더링을위한 많은 가능성을 열어 줄 것입니다. (기술적으로는 "렌더링"이 아니라, 얼마나 많은 구문 형광펜이 있는지 생각해보십시오.) 그러나 사용자가이 언어의 고급 요소에 액세스하는 것을 원하지 않습니다. 사용자에게 혼란을 줄 수 있으며 안전하지 않을 수도 있습니다 (예 : eval). 사용자가 수학 연산, 변수 (함수를 지정할 수 있고 함수를 작성할 수있는 함수 만 지정할 수 있습니다.) 및 함수 (사용자가 정의 할 수있는 함수 및 사용자 정의 함수) 만 사용할 수 있기를 바랍니다. 사용할 수있는 언어의 하위 집합을 제한하는 방법이 있습니까?

업데이트 2 : 나는 XYZ 대신 실행 언어의, 더 altJS 페이지에 일부 둘러 보았다, 그리고 거의 모든 언어는 다음, 자바 스크립트 언어 XYZ를 컴파일 페이지에서 자바 스크립트를 실행하도록 설계되었다는 것을 깨달았다 페이지에. 나는 각자 하나 하나를 들여다 보지 못했지만, 그들 대부분은 이것처럼 보입니다. Brython과 같은 다른 브라우저는 브라우저에서 언어 XYZ를 실행하도록 설계된 것 같지만 사용자를위한 입력 언어가 아닌 JavaScript의 대체/보완 도구로 사용됩니다. 이러한 방법을 입력으로 사용할 수있는 몇 가지 해결 방법이 있습니까?

업데이트 3 : 해당 정보는 @SpaceDog에 감사하고 사용자가 달성 할 수 있어야하는 구체적인 내용을 지적 해 주셔서 감사합니다.

  1. 기본 연산 (덧셈, 뺄셈, 곱셈, 나눗셈/분수, 지수, 뿌리, 계수)
  2. 함수 (삼각 함수, 로그 등 : 그래서, 여기에 내가 얻을 수하고자하는 기능입니다)을 제외하고
  3. 상수 (예, PI 등)
  4. 변수 (할당, 재 할당하고이를 사용)

LaTeXCalc 이러한 요구 사항을 모두 충족 것으로 보인다

  • 사용자 정의 함수
  • , 마지막 것. 또한 Javascript로 표시되지 않습니다.

    이것은 내가 생각한 또 다른 아이디어를 제시합니다. MathJax와 같은 것을 프레젠테이션에 사용하고 Wolfram Alpha API을 사용하여 실제로 계산을 처리하십시오. 이점은 입력 및 출력 모두에 대해 훨씬 더 고급 옵션을 제공한다는 것입니다. 그러나 응용 프로그램이 쓸모 없게 될 것입니다 (계산기가 사실상 단순한 복제본이라면 왜 wolframalpha.com을 사용하지 않는 것이 좋을까요?), 비용이 들며 응용 프로그램은 오프라인으로 작동하지 않습니다 (HTML로 작성된 데스크톱 응용 프로그램입니다)./CSS/JS). 그 생각?

    +0

    어쩌면 내 대답은 [this] (http://stackoverflow.com/a/42232776) 비슷한 질문에 도움이 될 수 있습니다. – Jeff

    답변

    5

    두 가지 별도의 작업을하고, 방정식을 멋지게 표시하고 평가하려고합니다. 따라서 두 가지를 수행하는 도구가 필요합니다. 라텍스는 평가보다는 프레젠테이션에 더 중점을 두지 만, 적어도 하위 집합에 대해서는 평가할 수 있습니다 (이 답변 : Is there a calculator with LaTeX-syntax? 참조).

    이 작업은 계산기를 얼마나 복잡하게 만들고 싶은지, 어떤 작업을 허용하고 싶은지에 따라 다릅니다. 작은 부분 집합을 사용한다면 (그리고 그것은 여러분처럼 들릴 것입니다) 손으로 변환기를 작성하는 것은 꽤 쉽습니다. 나는 프레젠테이션과 의미 론적 마크 업을 가지고있는 MathML을 살펴볼 것이다. 그러나 사용자가 파악하는 것이 가장 쉬운 방법은 아닙니다.

    사용자가 latex에 익숙하고 포함 된 기호의 하위 집합이 작 으면 직접 평가할 수있는 형식으로 latex를 구문 분석하기 쉽습니다.

    저는 여러분이 누구에게 '최상'인지에 대한 더 나은 예를 제공하기 위해 사용자가 액세스 할 수 있도록 허용 할 항목을 정확하게 정의해야한다고 생각합니다.

    편집 - 당신의 갱신

    음에 대한 응답으로, 당신은 (- 또는 라벨의 모든 당신은 조건 루프를 필요로) 전체 프로그래밍 언어를 작성하는 위험 가까이있어. 그래서 바퀴를 재발 명하는 것은 좋은 생각처럼 들리지 않습니다. 이 경우 나는 확실히 LaTeX를 입력 언어로 생각하지 않는다. 이상적으로는 사용자에게 더 친숙한 것을 원한다.

    다음은 수행 할 작업입니다. 이 작업을 수행 할 예정 이었지만, 명확한 대답이 아니며 노력을 반복하지 않도록하기 전에 더 많은 조사를해야 할 것입니다. .

    자바 스크립트의 하위 집합을 사용하는 파서를 작성하면이 파서는 LaTeX 또는 MathML로 코드를 변환하는 것이고 두 번째 것은 코드를 Python으로 변환/코드를 실행하십시오.

    C에서 나는 Lex와 Yacc (또는 Flex와 Bison 등)을 사용했고, Google에서는 빠른 자바가 Jison이라는 것을 밝힙니다. 그건 당신에게 언어 파서의 중추를 줄 것이고 당신은 그것을 고칠 수 있습니다.

    또는 기존 JS 파서로 시작하는 것이 도움이 될 수 있습니다.이 대답을 시도하십시오 : JavaScript parser in JavaScript.T

    당신은 당신이 처음에는 간단하게 유지 할 수있는 구문 분석 백본 일단 - 파서가이 때문에 이미 보장 - 표시 가능한 언어로 번역하는 것은 그냥 eval를 사용 위험 할 수 매우 쉽게 당신을 평가해야한다을 입력은 당신이 허용하는 것을 사용하는 것입니다. 그러나 나는 그것이 생산 버전 (테스트를위한 괜찮아요)에 대해 조언하고 그것은 내부 기능에 토큰을 매핑하는 데 많은 추가 작업을하지 않습니다.

    출력 결과를 향상 시키려면 입력을 단순화하거나 순서를 변경하려는 것이 좋습니다. 파서의 내부 표현을 취하고 그것에 대한 영리한 것들을 요구할 것입니다. 그러나 첫 번째 단계를 먼저 수행하십시오.

    오프라인으로 작업하기를 원한다. 다른 예제 프로그램을 호스트하는 다른 서버 아이디어는 작동하지 않을 것이다 (Wolfram Alpha 또는 Google을 사용하면 좋은 옵션이 될 수있다.). 그렇다면 프로그램의 요점은 무엇입니까?) 그러나 HTML/JS/CSS의 이식성을 원한다고 생각할지라도 다른 기본 언어로 작성하는 것이 더 나을지 생각해보십시오.

    다른 모든 것들은 가능한 모든 아이디어입니다. 각 애플리케이션에 대해 제 3 자 코드에 의존하기보다는 내부적으로 파서를 사용하는 것이 더 효과적 일 것이라고 생각합니다. 자신 만의 파서를 사용하면 나중에 기능 또는 언어 기능을 쉽게 추가 할 수 있습니다.

    마지막으로,이 방법으로 입력을 자바 스크립트로 제한 할 필요는 없습니다. 사용자가 Reverse Polish Notation에 대처할 수 있다고 생각한다면 손으로 파서를 작성하는 것이 쉽지만 출력용으로 멋지게 형식을 지정해야합니다.

    +1

    MathJax는 JavaScript이며 MathML과 호환됩니다. 그렇다면 JS에서도 구문 분석을 직접 작성할 수 있습니다. – SpaceDog

    관련 문제