2013-04-14 3 views
12

수학 스칼라 코드에 대한 Scaladoc 문서에 수학 공식을 입력하고 싶습니다. 자바에서 나는 라텍스 쓰는 식으로, 자바 독에 대해 정확히 수행 할 수 있습니다 LatexTaglet라는 라이브러리 발견 http://latextaglet.sourceforge.net/Scaladoc에 수학 공식을 포함시키는 방법이 있습니까?

을 그리고 메이븐 (A POM의보고/플러그인 섹션)과 잘 통합 할 것 같다. Scaladoc에 해당하는 라이브러리가 있습니까? 그렇지 않다면이 라이브러리를 SBT와 어떻게 통합 할 수 있습니까?

또한 MathML (http://www.w3.org/Math/)을 사용하는 것으로 생각되지만 너무 자세하게 보입니다. 추천 할 편집기가 있습니까? MathML은 Scaladoc과 잘 통합됩니까?

도움 주셔서 감사합니다.

답변

5

짧은 대답은 다음과 같습니다. LaTeXTaglet은 JavaDoc Taglet API에 의해 가능합니다. Scaladoc에는 동일한 기능이 없으므로 깨끗한 해결책이 없습니다.

HTML 페이지에서 LaTeX의 스타일 수학 공식을 찾습니다 MathJax라는 라이브러리, 거기에 동적으로 장소에 렌더링 :

그러나, 나는 할 수있을만큼 쉬운 수 있습니다 해킹 생각할 수 있습니다. 나는 전에 그것을 사용했다, 그것은 꽤 멋지다. 스크립트 만 포함하면됩니다. 그래서 당신은 두 가지를 할 수 :

  1. 편집하고 실행 된 후
  2. 이 Scaladoc의 HTML 출력을 모두 약간의 포스트 프로세서의 기어를 쓰기 ... MathJax, 또는를 포함하도록 Scaladoc 소스를 재 구축하고,에 MathJax를 주입 각 파일.

그런 식으로 LaTeX 수식을 스칼라 주석에 직접 쓸 수 있으며 브라우저에서 렌더링해야합니다. 당신이 비 해키 솔루션을 원 물론 경우에, 나는 당신이 Scaladoc에 대한 렛 같은 API를 만드는 게 좋을 것;

+0

답변 주셔서 감사를 많이 사용하여 대상/API를 폴더에 추가! 어쩌면? – Choucri

+0

는 SIP에 대한 아이디어는 SBT (문서)로 crowling을 할 수 있으며, 그렇다면 어떻게 할 것인가? –

7

여기, @mergeconflict answer에 따라하기)가로서 내가 그것을

했던 방법입니다

lazy val mathFormulaInDoc = taskKey[Unit]("add MathJax script import in doc html to display nice latex formula") 

mathFormulaInDoc := { 
    val apiDir = (doc in Compile).value 
    val docDir = apiDir // /"some"/"subfolder" // in my case, only api/some/solder is parsed 
    // will replace this "importTag" by "scriptLine 
    val importTag = "##import MathJax" 
    val scriptLine = "<script type=\"text/javascript\" src=\"https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML\"> </script>" 
    // find all html file and apply patch 
    if(docDir.isDirectory) 
    listHtmlFile(docDir).foreach { f => 
     val content = Source.fromFile(f).getLines().mkString("\n") 
     if(content.contains(importTag)) { 
      val writer = new PrintWriter(f) 
      writer.write(content.replace(importTag, scriptLine)) 
      writer.close() 
     } 
    } 
} 

// attach this task to doc task 
mathFormulaInDoc <<= mathFormulaInDoc triggeredBy (doc in Compile) 

// function that find html files recursively 
def listHtmlFile(dir: java.io.File): List[java.io.File] = { 
    dir.listFiles.toList.flatMap { f => 
    if(f.getName.endsWith(".html")) List(f) 
    else if(f.isDirectory)   listHtmlFile(f) 
    else       List[File]() 
    } 
} 

당신으로 : 더 적절한 솔루션은, 제가 한 것은 생성 된 모든 HTML 파일을 구문 분석 크롤러를 구현하고 발견 "수입 태그"를 대체하는 것입니다없는 MathJax 스크립트의 수입에 의해, (아래 코드 참조) 이 크롤러 작업이 doc 작업에 첨부되어 있음을 알 수 있습니다.이 작업은에 의해 자동으로 수행됩니다.. 여기

/** 
* Compute the energy using formula: 
* 
* ##import MathJax 
* 
* $$e = m\times c^2$$ 
*/ 
def energy(m: Double, c: Double) = m*c*c 

하기 화학식으로 표현 될 문서의 예는,이 코드를 향상시킬 수있을 것이다.예를 들어 :

  • 받는 스크립트를 추가 어쩌면 가져 오기 태그는 처음 몇 줄에 있어야하는 규칙을 추가 (html로 머리 부분에
  • 피하기 전체 파일을 읽는 스크립트 가져 오기를 추가 SBT 패키지, 일부 적절한 작업을
+0

미래의 노트 : cdn.mathjax.org는 수명이 거의 다되어 가고 있으며, 마이그레이션 요령은 https://www.mathjax.org/cdn-shutting-down/에서 확인하십시오. –

+0

@Choucri 이것이 올바른 결과를 가져올 수 있고 어떻게 수행 될 수 있는지 알려주므로 올바른 답이어야합니다. –

관련 문제