Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

题目markdown编辑公式乱码 #102

Open
liurongjie opened this issue Dec 17, 2020 · 1 comment
Open

题目markdown编辑公式乱码 #102

liurongjie opened this issue Dec 17, 2020 · 1 comment

Comments

@liurongjie
Copy link

No description provided.

@bobby285271
Copy link
Contributor

这边也遇到了这个问题,我的猜测是他的 markdown 渲染和 katex 渲染是拆开的。

/**
* Format as normal markdown without class link extensions.
*
* @param $markdown string content
* @return string
*/
public function asMarkdown($markdown)
{
$html = Markdown::process($markdown, 'gfm');
$output = HtmlPurifier::process($html, $this->purifierConfig);
return '<div class="markdown">' . $this->katex($output) . '</div>';
}

遇到下面的 markdown 文本:

test $n_{i,j},n_{i,j}$

在渲染 markdown 时是不管两个下划线是不是在 $ 里面的,直接当作 markdown 中的斜体处理:

<p>test $n<em>{i,j},n</em>{i,j}$</p>

转为 html 后再开始公式渲染,至于怎么渲染法应该还是看这个文件,表示看的有点晕。
但我猜测这个 <em></em> 的出现阻止了 katex 的渲染。

暂时没有什么好的解决方法,dirty hack 倒是有一个,但只限于解决公式中的下划线被识别为斜体的问题。

if ($marker === '*' && preg_match('/^[*]{2}((?>\\\\[*]|[^*]|[*][^*]*[*])+?)[*]{2}/s', $text, $matches) ||
$marker === '_' && preg_match('/^__((?>\\\\_|[^_]|_[^_]*_)+?)__/us', $text, $matches)) {

把这个判断条件删掉(别忘了前面的 || 也要删):

$marker === '_' && preg_match('/^__((?>\\\\_|[^_]|_[^_]*_)+?)__/us', $text, $matches)

这里同理:

if ($marker === '*' && preg_match('/^[*]((?>\\\\[*]|[^*]|[*][*][^*]+?[*][*])+?)[*](?![*][^*])/s', $text, $matches) ||
$marker === '_' && preg_match('/^_((?>\\\\_|[^_]|__[^_]*__)+?)_(?!_[^_])\b/us', $text, $matches)) {

删掉判断条件:

$marker === '_' && preg_match('/^_((?>\\\\_|[^_]|__[^_]*__)+?)_(?!_[^_])\b/us', $text, $matches)

当然编辑 markdown 文本,如果要把一段文字设置为斜体,就只能 *要倾斜的文字* 这样子了。

要注意的是,如果后面用 composer 更新依赖项,这些改动可能会被覆盖。

如果还是有乱码的情况,考虑先上传图片(捂脸)?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants