代码块内的数学公式被解释为数学公式
Opened this issue · 5 comments
YuxinZhaozyx commented
ikeq commented
因为代码块里匹配到了 blockMath,不太好处理,只能通过标记区分开,代码块里不要使用 blockMath 的符号。另外如果只是为了演示数学公式,并不需要带上块级符号啊。
我是这样配的:
mathjax:
inlineQuote: '@'
blockQuote: ['```tex', '```']
演示就用别的符号,或者不带符号,因为 ```tex 本身就与代码块冲突(甩锅)。
YuxinZhaozyx commented
我遇到的主要问题是
markdown:
......放置在`$GOPATH/pkg/$GOOS_$GOARCH`中(以Mac为例就是`$GOPATH/pkg/darwin_amd64`)。
结果 "$GOPATH/pkg/$" 被解释成了数学公式
ikeq commented
这是预期行为,因为就是直接字符串匹配的,所以最好避开这些特殊符号,特别是 inlineMath...
我看大家通常喜欢用 \(
和 \)
?
ikeq commented
如果能有一份数学公式中用到的所有类型的符号的统计,那匹配还可以更好,但似乎不好找。
YuxinZhaozyx commented
我设计了一个正则表达式可以处理这个问题:
用于测试的markdown字符串:
This is an inline math: $\frac{1}{2}$,
A math block:
$$
\frac{1}{2} \\
\text{a dollor symbol inside math block:} $
$$
Math block inside inline code: `hello world $\frac{1}{2}$`.
Math block inside code block:
```
$$
\frac{1}{2}
$$
```
正则表达式替换的代码:
var reg = /(`([^\\\``\n]|(\\.))+([^\\\``\n]*(\\.)?)*`)|((```)([^\\\``]|(\\.)|(`[^\\\``])|(``[^\\\``]))+([^\\\``]*((\\.)|(`[^\\\``])|(``[^\\\``]))?)*(```))|(\$([^\\\$\n]|(\\.))+([^\\\$\n]*(\\.)?)*\$)|(\$\$([^\\\$]|(\\.)|(\$[^\\\$]))+([^\\\$]*((\\.)|(\$[^\\\$]))?)*\$\$)/g;
// str 就是上文的markdown测试数据
str.replace(reg, function(word){
if (/^`[^`][^]*/.test(word)) {
return "<inline-code>"; // 识别出这是个行内代码块,解释数学公式时不需要改动,因此只要return word;就可以了。
} else if (/^```[^]*/.test(word)) {
return "<code block>"; // 识别出这是个代码块。
} else if (/^\$[^\$][^]*/.test(word)) {
return "<inline-math>"; // 行内数学公式。
} else {
return "<math-block>"; // 数学公式块。
}
});
结果:
This is an inline math: <inline-math>,
A math block:
<math-block>
Math block inside inline code: <inline-code>.
Math block inside code block:
<code block>
希望您可以加到这个插件中,我对js并不熟,还是不pull request了。