shi-yang / jnoj

Jiangnan Online Judge
https://www.jnoj.dev
Other
241 stars 62 forks source link

题目markdown编辑公式乱码 #102

Open liurongjie opened 3 years ago

bobby285271 commented 3 years ago

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

https://github.com/shi-yang/jnoj/blob/5115f928d875951e3e7f44f021bae75b3ffc0ae5/components/Formatter.php#L29-L40

遇到下面的 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 倒是有一个,但只限于解决公式中的下划线被识别为斜体的问题。

https://github.com/shi-yang/jnoj/blob/5115f928d875951e3e7f44f021bae75b3ffc0ae5/vendor/cebe/markdown/inline/EmphStrongTrait.php#L37-L38

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

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

这里同理: https://github.com/shi-yang/jnoj/blob/5115f928d875951e3e7f44f021bae75b3ffc0ae5/vendor/cebe/markdown/inline/EmphStrongTrait.php#L57-L58

删掉判断条件:

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

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

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

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