0度 latex_iOS 数学公式的展示(latex、mathjax)

一般都是用 webview 加载数学公式。

latex 公式

如果确定数学公式是 latex 的表达式,可以使用以下方式显示:

示例:

//latex 表达式

NSString *latex = @"a_{ij}^{2} + b^3_{2}=x^{t} + y' + x''_{12}";

NSString *latexHTML = [NSString stringWithFormat:@"",latex];

[_webView loadHTMLString:latexHTML baseURL:nil];

加载结果:

latex.png

其他格式的数学公式

如果后台返回的是 HTML 的标签,我们也可以直接用 webview 来加载,但是需要加载一个 mathjax 插件,用这个插件来解析数学公式

示例:

//HTML 代码

下列五个关系中,正确的个数为(     )

①$\frac{7}{2} \in R$             ②$\sqrt{2} \notin Q$ 

③$π \in Q$ ;                         ④ $|-3|\notin N$ ;

⑤ $-\sqrt{4} \in Z$. 

NSString *htmlStr = @"";//使用以上HTML代码

//加载 MathJax插件 js代码

NSString *scripStr = @"";

htmlStr = [NSString stringWithFormat:@"%@%@",htmlStr,scripStr];

[_webView loadHTMLString:htmlStr baseURL:nil];

加载结果:

html

webview 配置

用 webview 加载数学公式的时候,因为展示的就是一张图片,如果发现图片比较小,可以为图片标签注入一些样式:

NSString *jScript = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width','initial-scale=0.9','user-scalable=no');meta.setAttribute('user-scalable','no');document.getElementsByTagName('head')[0].appendChild(meta); var imgs = document.getElementsByTagName('img');for (var i in imgs){imgs[i].style.maxWidth='100%';imgs[i].style.height='auto';};";

WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jScript injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];

WKUserContentController *wkUController = [[WKUserContentController alloc] init];

[wkUController addUserScript:wkUScript];

WKWebViewConfiguration *wkWebConfig = [[WKWebViewConfiguration alloc] init];

wkWebConfig.userContentController = wkUController;

_webView = [[WKWebView alloc] initWithFrame:CGRectZero configuration:wkWebConfig];

webview 高度动态获取

加载数学公式的时候,我们可以等待公式加载完成之后,动态的通过webview的代理获取高度,从而重新布局。

具体方法:

在 webview 加载完成之后,在 WKNavigationDelegate 这个代理中的以下代理方法,运行一段 js 代码,获取高度:

- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {

[webView evaluateJavaScript:@"document.body.scrollHeight;" completionHandler:^(id _Nullable any, NSError * _Nullable error) {

CGFloat webviewHeight = [[NSString stringWithFormat:@"%@",any] floatValue];

}];

}

你可能感兴趣的:(0度,latex)