mindoc
mindoc copied to clipboard
未能正确渲染行内的LaTeX公式
请按照一下格式提交issue,谢谢!
-
你当前使用的是哪个版本的 MinDoc(
godoc_linux_amd64 version
)? v2.1-beta.5 -
你当前使用的是什么操作系统? debian 10.2
-
你是如何操作的?
书写 markdown 内容:
正弦:对边比斜边
$\sin A = \frac {a} {c}$
$\sin B = \frac {b} {c}$
- 你期望得到什么结果?
行内的数学公式能够被正确渲染
- 当前遇到的是什么结果?
行内的数学公式未被正确渲染,仍以文字 $\sin A = \frac {a} {c}$ 显示。
但使用 $$\sin A = \frac {a} {c}$$
时却可以正确渲染整行公式。
此问题在官方演示网站中也存在: https://doc.iminho.me/docs/mindoc/mindoc-1dc9h5j1i7sv4
在
Cmd Markdown 高阶语法手册
小节的第五点LaTeX 公式
中可见该错误
其实是可以渲染的,只不过要用两个$$把公式括起来。
可以试试修改容器内的/mindoc/static/editor.md/editormd.js
,大概在3597
行左右,原来的代码是这样的:
markedRenderer.paragraph = function(text) {
var isTeXInline = /\$\$(.*)\$\$/g.test(text);
var isTeXLine = /^\$\$(.*)\$\$$/.test(text);
var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : "";
var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text);
var isToCMenu = /^\[TOCM\]$/.test(text);
if (!isTeXLine && isTeXInline)
{
text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) {
return "<span class=\"" + editormd.classNames.tex + "\">" + $2.replace(/\$/g, "") + "</span>";
});
}
修改为
markedRenderer.paragraph = function(text) {
var isTeXInline = /\$(.*)\$/g.test(text); // Change this line
var isTeXLine = /^\$\$(.*)\$\$$/.test(text);
var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : "";
var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text);
var isToCMenu = /^\[TOCM\]$/.test(text);
if (!isTeXLine && isTeXInline)
{
text = text.replace(/(\$([^\$]*)\$)+/g, function($1, $2) { // Change this line
return "<span class=\"" + editormd.classNames.tex + "\">" + $2.replace(/\$/g, "") + "</span>";
});
}
其实就是改变regex让它匹配单个$符号的行内公式。修改之后可能需要清理一下浏览器缓存
还有个问题,cherry编辑器无法渲染公式,只能用第一个编辑器,但是第一个编辑器无法调颜色,纯白好辣眼睛
还有个问题,cherry编辑器无法渲染公式,只能用第一个编辑器,但是第一个编辑器无法调颜色,纯白好辣眼睛
无论是行间还是单行公式,cherry编辑器都无法渲染
其实是可以渲染的,只不过要用两个$$把公式括起来。
可以试试修改容器内的
/mindoc/static/editor.md/editormd.js
,大概在3597
行左右,原来的代码是这样的:markedRenderer.paragraph = function(text) { var isTeXInline = /\$\$(.*)\$\$/g.test(text); var isTeXLine = /^\$\$(.*)\$\$$/.test(text); var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); var isToCMenu = /^\[TOCM\]$/.test(text); if (!isTeXLine && isTeXInline) { text = text.replace(/(\$\$([^\$]*)\$\$)+/g, function($1, $2) { return "<span class=\"" + editormd.classNames.tex + "\">" + $2.replace(/\$/g, "") + "</span>"; }); }
修改为
markedRenderer.paragraph = function(text) { var isTeXInline = /\$(.*)\$/g.test(text); // Change this line var isTeXLine = /^\$\$(.*)\$\$$/.test(text); var isTeXAddClass = (isTeXLine) ? " class=\"" + editormd.classNames.tex + "\"" : ""; var isToC = (settings.tocm) ? /^(\[TOC\]|\[TOCM\])$/.test(text) : /^\[TOC\]$/.test(text); var isToCMenu = /^\[TOCM\]$/.test(text); if (!isTeXLine && isTeXInline) { text = text.replace(/(\$([^\$]*)\$)+/g, function($1, $2) { // Change this line return "<span class=\"" + editormd.classNames.tex + "\">" + $2.replace(/\$/g, "") + "</span>"; }); }
其实就是改变regex让它匹配单个$符号的行内公式。修改之后可能需要清理一下浏览器缓存
另外,这个方法可以对普通行生效,但是对于- 开头的列表行不生效