如何使用Swift渲染Xetex
我正在使用Swift 4.0开发Cocoa应用程序,并且我正在尝试使用xetex编译器呈现LaTeX。 我的应用程序的主要画面是它应该能够使用不同的.ttf来渲染,所以我相信我需要xetex(甚至是luaLaTeX)。
这是我的尝试
我考虑使用基于云的LaTeX渲染器,这样我就不必担心为每个系统安装Xetex,但是这并没有很好地实现,因为我只能在Node.js中找到这样做的付费服务,我想我可以使用。
接下来,我假设用户遵循了一条指令,在线下载xetex,并使用/ Library / TeX / texbin / xetex命令通过Process()调用了系统调用,这几乎可以工作,但Xcode对安全性给我的信息抱怨
compileLatex.sh: line 3: /Library/TeX/texbin/xetex: Operation not permitted
是否有任何已知的解决方法可以做到这一点? 如果我可以以某种方式将Xetex编译器与我的应用程序捆绑在一起,我认为这会很好,但我不知道如何做这样的事情。
相关代码
由Process()调用的compileLatex.sh的内容
#!/bin/bash
/Library/TeX/texbin/xetex "$1"
open "$2"
调用bash脚本的ViewController的内容。
let file = "TemplateMODIFIED.tex"
if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
var env = ProcessInfo.processInfo.environment
var path = env["PATH"] as! String
path = "/Library/TeX/texbin:" + path
env["PATH"] = path
let task = Process()
task.launchPath = "/bin/bash"
task.environment = env
task.arguments = [dir.path + "/compileLatex.sh", dir.path + "/TemplateMODIFIED.tex", dir.path + "/TemplateMODIFIED.pdf"]
task.launch()
}
任何建议或者我应该使用的解决方法或最佳实践表示赞赏。 谢谢!
更新:我刚刚了解了Cocoa项目的project.entitlements文件,因此通过将Sandbox模式切换为关闭状态,我可以执行系统调用并克服Operation not permitted
错误。 所以我能够使它工作,但我仍然不完全满意这个解决方案,因为用户必须在使用这个应用程序之前下载并安装xetex。