有没有一种方法,包括在Scaladoc数学公式?(Is there a way to include

2019-08-22 22:17发布

我想数学Scala代码Scaladoc文档中输入数学公式。 在Java中,我发现了一个叫LatexTaglet库,可以做的正是这种为Javadoc中,通过编写公式乳胶: http://latextaglet.sourceforge.net/

而这似乎与Maven(报告/插件一个POM的部分)以及集成。 是否有Scaladoc等效的图书馆吗? 如果没有,我怎么能融入这个库SBT?

我使用MATHML(也算http://www.w3.org/Math/ ),但看起来太冗长。 你有什么推荐的编辑器? 是否MATHML与Scaladoc很好地集成?

谢谢您的帮助!

Answer 1:

最简洁的答案是不。 LaTeXTaglet由JavaDoc中成为可能Taglet的 API。 有一个在Scaladoc没有等效,因此没有清晰的解决方案。

不过,我可以认为这可能是很容易的做黑客的:

有一个叫库MathJax ,这会在HTML页面的LaTeX风格的数学公式和动态渲染到位。 我以前用过它,这是相当不错的; 所有你需要做的是包括脚本。 所以,你可以做两件事情:

  1. 编辑和重建Scaladoc源包括MathJax,或...
  2. 写一点后处理器抓取所有Scaladoc的HTML输出的它运行后,并注入到MathJax每个文件。

这样,你可以只写乳胶公式直接在斯卡拉的意见,他们应该在浏览器中呈现。 当然,如果你想要一个非哈克解决方案,我建议你创建一个Scaladoc Taglet的类似API;)



Answer 2:

要遵循@mergeconflict答案 ,这里是我做到了

由于没有妥善的解决办法,我就是这样做是实现解析所有生成的html文件履带式,并更换任何发现“进口标签”(见下面的代码),由MathJax脚本进口:

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]()
  }
}

正如你可以看到,该履带任务附加到文档的任务,它是自动完成的sbt doc

这里是将与式呈现的文档的一个例子

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

现在,将有可能改善该代码。 例如:

  • 添加脚本导入的HTML头部分
  • 避免读取整个文件(可能添加了进口标签应该是在第几行规则
  • 添加脚本到SBT封装,并采用一些合适的任务,将其添加到目标/ API文件夹


Answer 3:

即将推出的scala3又名斑点狗具有内置的降价支持 ,允许使用渲染乳胶的子集,简单的数学公式。



文章来源: Is there a way to include math formulae in Scaladoc?