我想数学Scala代码Scaladoc文档中输入数学公式。 在Java中,我发现了一个叫LatexTaglet库,可以做的正是这种为Javadoc中,通过编写公式乳胶: http://latextaglet.sourceforge.net/
而这似乎与Maven(报告/插件一个POM的部分)以及集成。 是否有Scaladoc等效的图书馆吗? 如果没有,我怎么能融入这个库SBT?
我使用MATHML(也算http://www.w3.org/Math/ ),但看起来太冗长。 你有什么推荐的编辑器? 是否MATHML与Scaladoc很好地集成?
谢谢您的帮助!
最简洁的答案是不。 LaTeXTaglet由JavaDoc中成为可能Taglet的 API。 有一个在Scaladoc没有等效,因此没有清晰的解决方案。
不过,我可以认为这可能是很容易的做黑客的:
有一个叫库MathJax ,这会在HTML页面的LaTeX风格的数学公式和动态渲染到位。 我以前用过它,这是相当不错的; 所有你需要做的是包括脚本。 所以,你可以做两件事情:
- 编辑和重建Scaladoc源包括MathJax,或...
- 写一点后处理器抓取所有Scaladoc的HTML输出的它运行后,并注入到MathJax每个文件。
这样,你可以只写乳胶公式直接在斯卡拉的意见,他们应该在浏览器中呈现。 当然,如果你想要一个非哈克解决方案,我建议你创建一个Scaladoc Taglet的类似API;)
要遵循@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文件夹
即将推出的scala3又名斑点狗具有内置的降价支持 ,允许使用渲染乳胶的子集,简单的数学公式。