如何在SwiftUI中使用LaTeX创建数学公式文本视图?
我是Swift编程新手,希望用SwiftUI创建一个应用程序。这就是我希望实现的目标: 也就是说,一个文本字段具有针对如何在SwiftUI中使用LaTeX创建数学公式文本视图?,swiftui,Swiftui,我是Swift编程新手,希望用SwiftUI创建一个应用程序。这就是我希望实现的目标: 也就是说,一个文本字段具有针对LaTeX的实时语法高亮显示,然后其内容由mathjax呈现并显示在web视图中 我在这个网站和GitHub上做了一些搜索,结果发现相关代码大多是Objective-C或Swift 4.x(例如),并且没有一个与SwiftUI有接口。然而,在我的研究中,我发现了一种可能有效的方法。似乎有了这个框架,就可以使用来进行语法高亮显示(就像在那里做的那样,但是它的代码非常复杂)。我相信
LaTeX
的实时语法高亮显示,然后其内容由mathjax
呈现并显示在web视图中
我在这个网站和GitHub上做了一些搜索,结果发现相关代码大多是Objective-C或Swift 4.x(例如),并且没有一个与SwiftUI有接口。然而,在我的研究中,我发现了一种可能有效的方法。似乎有了这个框架,就可以使用来进行语法高亮显示(就像在那里做的那样,但是它的代码非常复杂)。我相信这种方法,因为如果一个人可以使用highlight.js
来实现代码高亮显示,那么以类似的方式,他应该能够使用其他Java脚本,如mathjax.js
来实现其他功能
不幸的是,由于我对Swift和SwiftUI都是新手,我不知道从哪里开始。谁能给我一些提示吗?(欢迎提供任何帮助,不一定使用
JavaScriptCore
)这里有一个可能的解决方案,它使用了一个很棒的框架:
您始终必须以[math]开头,以[/math]结尾,但可以使用默认的Latex。有关其文档的更多信息
这是我当前的解决方案,它使用包突出显示代码,并使用
mathjax.js
渲染数学
导入快捷界面
导入代码查看器
结构LaTeXView:视图{
@国家私有变量占位符字符串:String=“在此处插入”
@国家私有变量inputText:String=“”
var body:一些观点{
VStack{
//马克:代码编辑器
代码查看器(
内容:$inputText,
模式:。乳胶,
暗色调:日晒后的黑色,
灯光主题:。日光灯,
isReadOnly:错误,
尺码:50
)
//马克:用于渲染数学
HTMLStringView(htmlContent:“”
MathJax示例
MathJax={
特克斯:{
inlineMath:[['$','$'],['\\(','\\)']],
标签:“ams”
},
svg:{
fontCache:“全局”
}
};
\(inputText.replacingOccurrences(of:“\n\n”,with:“
”)
"""
)
}
}
}
结构LaTeXView\u预览:PreviewProvider{
静态var预览:一些视图{
LaTeXView()
}
}
结果如下所示:
请问如何将
RichTextView
添加到我的项目中?我得到这个错误:https://github.com/tophat/RichTextView 没有软件包。swift清单
。我是用Podfile安装的
import RichTextView
struct ContentView : View {
@State var string : String = "In physics, the mass-energy equivalence is stated by the equation [math]$E=mc^2$[/math], discovered in 1905 by Albert Einstein."
var body : some View {
TextField("Test", text: $string)
.padding(.vertical, 32)
.border(Color.red)
TextView(string: $string)
.padding(.horizontal, 16)
}
}
struct TextView : UIViewRepresentable {
@Binding var string : String
func makeUIView(context: Context) -> RichTextView {
let richTextView = RichTextView(
input: string,
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
frame: CGRect.zero,
completion: nil
)
return richTextView
}
func updateUIView(_ uiView: RichTextView, context: Context) {
uiView.update(
input: string,
latexParser: LatexParser(),
font: UIFont.systemFont(ofSize: UIFont.systemFontSize),
textColor: UIColor.black,
completion: nil
)
}
}