我用math 2.0拼凑了一个半工作版的mathjax,但它以一种我无法理解的方式打破。我在下面添加了一个plunkr来清楚地说明情况。
在我的代码(不是plunkr)中,这是我的相关html:
<textarea
#editorArea
ngDefaultControl
spellcheck="false"
class="editor"
[(ngModel)]='assignment.content.text'
(keyup)="updateResult()"
[ngStyle]="{'height' : formatDimension(editorDimensions.height), 'padding' : formatDimension(editorDimensions.padding)}
"></textarea>
<div class="result" #result>{{ editorArea.value }}</div>
这是从HTML触发的相关更新功能:
@ViewChild('result') result : ElementRef;
updateResult() {
MathJax.Hub.Queue(["Typeset", MathJax.Hub, this.result.nativeElement]);
}
最后这是我的mathJax配置:
<script type="text/x-mathjax-config">
MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
</script>
答案 0 :(得分:0)
这里的主要问题似乎是如何使用MathJax将<textarea>
的内容重复呈现到页面的单独区域中。 Modifying Math on the Page documentation中的一个简单案例对此进行了介绍。
基本上你有两个选择:
选项1
保持渲染的数学元素,然后使用Text
函数重新渲染一个新的数学字符串(注意:这要求整个textarea是一个大数学字符串,而不是散布数学字符串的普通文本){ {3}}:
HTML:
<div id="result">$ $ <!-- empty mathstring as placeholder -->
hello-mathjax.ts(部分):
ngOnInit() {
var self = this;
// callback function saves the rendered element, so it can
// be re-rendered on update with the "Text" function.
MathJax.Hub.Queue(
["Typeset",MathJax.Hub,"result"],
function () {self.resultElement = MathJax.Hub.getAllJax("result")[0];
self.updateResult();
}
);
}
updateResult () {
// re-render the same element with the value from the textarea
MathJax.Hub.Queue(["Text",this.resultElement,this.inputValue]);
}
updateResult () {
MathJax.Hub.Queue(["Text",this.resultElement,this.inputValue]);
}
选项2 每次擦除renderd div并完全重新渲染textarea的内容。 (如果textarea包含数学字符串和常规文本的混合,这就是要做的事情)Plunker:
HTML:
<div id="result"></div> <!-- No placeholder math string needed -->
hello-mathjax.ts(部分):
ngOnInit() {
var self = this;
MathJax.Hub.Queue(
["Typeset",MathJax.Hub,"result"],
function () {
self.updateResult();
}
);
}
updateResult () {
var resultDiv = document.getElementById("result");
// Replace the rendered content entirely
// with the bare text from the textarea.
resultDiv.innerHTML = this.inputValue;
// Rerender the entire resultDiv
MathJax.Hub.Queue(["Typeset",MathJax.Hub,"result"]);
}
此plunker演示Plunker