如何在SwiftUI中使用LaTeX创建数学公式文本视图?

如何在SwiftUI中使用LaTeX创建数学公式文本视图?,swiftui,Swiftui,我是Swift编程新手,希望用SwiftUI创建一个应用程序。这就是我希望实现的目标: 也就是说,一个文本字段具有针对LaTeX的实时语法高亮显示,然后其内容由mathjax呈现并显示在web视图中 我在这个网站和GitHub上做了一些搜索,结果发现相关代码大多是Objective-C或Swift 4.x(例如),并且没有一个与SwiftUI有接口。然而,在我的研究中,我发现了一种可能有效的方法。似乎有了这个框架,就可以使用来进行语法高亮显示(就像在那里做的那样,但是它的代码非常复杂)。我相信

我是Swift编程新手,希望用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
        )
   }
}