要遵循@mergeconflict answer,這裏是我是如何做到的
至於有沒有妥善的解決辦法,我就是這樣做是實現解析所有生成的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]()
}
}
正如你可以看到,此爬蟲任務已附加到文檔任務,由自動完成。
這裏是文檔的一個例子,將與式現在
/**
* Compute the energy using formula:
*
* ##import MathJax
*
* $$e = m\times c^2$$
*/
def energy(m: Double, c: Double) = m*c*c
被渲染,這將是可能的,以改善該代碼。例如:
- 添加腳本導入的HTML頭部分
- 避免讀取整個文件(可能增加,進口標籤應該是在第幾行的規則
- 添加腳本到SBT包,並使用一些適合的任務
非常感謝你的答案添加到目標/ API文件夾!也許對於一個SIP的想法? – Choucri
是有可能做SBT(DOC)的crowling,和如果是的話如何? –