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

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

latex 公式

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

gif.latex?%E5%9C%A8%E8%BF%99%E9%87%8C%E5%A1%AB%E5%86%99%E4%BD%A0%E7%9A%84latex%E4%BB%A3%E7%A0%81

示例:

//latex 表达式

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

NSString *latexHTML = [NSString stringWithFormat:@"gif.latex?%@%5C%22",latex];

[_webView loadHTMLString:latexHTML baseURL:nil];

加载结果:

ba88636f7e50

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];

加载结果:

ba88636f7e50

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];

}];

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值