Repository navigation
fix(markdown): 修复 KaTeX 公式溢出、围栏相邻内容失效与表格代码断词 - #9
Merged
Merged
Conversation
katex.min.css 将 .katex-display > .katex 设为 nowrap,超宽公式会直接 溢出公式块撑破版面。改为 flex + margin auto 实现安全居中:放得下时 保持居中,放不下时贴左并在块内出现横向滚动条。
markdown 会把相邻行合并为同一段落,开栏行后无空行直接跟内容(或关栏行 紧跟内容行)时,围栏不再是独立段落,isOpeningFence / isClosingFence 无法 识别,整段按纯文本渲染。拆分归一化将首行开栏、末行关栏从段落中还原为 独立围栏段落,交由原有识别逻辑处理。
prose 的行内代码断行策略由 break-all 调整为 break-words,长代码仅在 放不下时才断,表格窄列不再把 02_gen_query_opt.py 之类的文件名拆断; Markdown 表格外层包一层横向滚动容器(与代码块 overflow-x-auto、 shadcn Table 包装策略一致),窄容器下表格整体可横向滑动。
xiaolfeng
requested changes
Oct 26, 2026
xiaolfeng
left a comment
Owner
There was a problem hiding this comment.
三处 Markdown 渲染缺陷的根因定位很准:KaTeX 用 flex + margin-inline: auto 避开了 text-align: center 的左侧不可达溢出,围栏选择在 mdast 层做前置段落归一化,表格外包横向滚动容器并将行内代码切回 break-words,整体改动边界清晰。
代码走查结合 unified + remark-parse + remark-rehype + react-dom 实测发现 1 处阻断级白屏回归(Blocker) 与 3 处契约/排版问题(Major),需修正并补齐回归用例后再合入。
审查问题总览
| 级别 | 文件位置 | 问题摘要 |
|---|---|---|
| Blocker | remark-fenced-blocks.ts |
单次首尾切分叠加开栏正则不一致,在无空行嵌套 :::steps 或非标准开栏头下生成空标签 hName: "",触发 React Invalid tag: "" 白屏崩溃 |
| Major | remark-fenced-blocks.test.ts |
新增单测均基于手写 createAst,未覆盖 remark-parse 真实段落合并与列表惰性延续行为 |
| Major | theme.css |
.katex-display 改为 flex 后 .katex 宽度收缩,导致带 \tag{...} 编号的块级公式与右侧编号重叠 |
| Major | markdown-table.tsx |
未透传其余 <table> 属性;外层 BFC 使 .prose 默认表格外边距将滚动条推离表格底边 |
| Nit | prose.ts |
多列表格窄屏下中文表头可能被长代码列挤压成单字竖排;[overflow-wrap:anywhere] 被同级 break-words 覆盖 |
合入前核对清单
- 重构
remark-fenced-blocks.ts为按行切分,统一开栏正则与组件白名单(callout | card | steps | step),处理列表/引用尾行:::惰性延续,消除 AST 子节点原地变异 - 补齐经过真实 Markdown 解析管线的嵌套围栏、连续相邻围栏、非标准开栏回退与列表内关栏回归单测
- 修复 KaTeX 带
\tag{...}块级公式的宽度收缩重叠问题 - 补齐
MarkdownTable的...rest属性转发与纵向外边距归属调整
- 重构 remark-fenced-blocks 为按行切分与统一白名单校验,杜绝空标签 hName 生成与 AST 原地变异
- 提升列表与引用块尾行由于 CommonMark 惰性延续误吞的 ::: 关栏标记
- 修复 KaTeX 带 \tag{...} 块级公式在 flex 下宽度收缩导致的编号重叠缺陷
- 补齐 MarkdownTable 的 ...rest 属性透传与纵向外边距归属调整
- prose 增加 [&_th]:whitespace-nowrap 防止多列表格表头被长代码挤压为单字竖排
- 补齐嵌套围栏、连续相邻围栏、非标准开栏回退与列表内关栏端到端回归测试
Owner
|
看到新提交推上来了。我平时只从待审队列里集中看 PR,不会主动轮询分支上的新 commit。 Tip 每次改完推送并确认 CI 跑绿后,记得在页面右上角 Reviewers 一栏点一下我名字旁边的 Re-request review(环形箭头图标)。状态切回待复审后我这边才会收到提醒并进入下一轮检查,避免你等空。 |
- 恢复 proseArticle 核心表格与列表样式变量,消除暗色模式文字隐形回归 - 重构 KaTeX 编号公式为 flex 弹性流,移除固定 4rem padding 并自适应撑开 - 修复 remark-fenced-blocks 中 autolink 拆分开栏、列表尾行吞行漏提及属性正则 - MarkdownTable 过滤 node hast 属性杜绝 DOM 污染,收敛外边距为自适应 - 补齐真实 Markdown 渲染管线下 autolink 开栏、连续 steps 及编号公式测试
- 为 .katex-display 补充基于 local/scroll 背景的双向滚动边缘渐隐阴影,指示横向溢出 - 为 .tag 补充 align-self: center,确保在 aligned 多行推导或矩阵环境下与几何中心严格对齐 - 补齐多行带编号 aligned 环境与 pmatrix 复杂矩阵的端到端单测覆盖
xiaolfeng
self-requested a review
October 28, 2026 17:19
Owner
修复与优化进度说明 (commits: 1ff01b5, 105ab98)已接手并彻底修复上一轮评审指出的全部遗留缺陷与视觉回归:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
PR:fix(markdown): 修复 KaTeX 公式溢出、围栏相邻内容失效与表格代码断词
动机
Wiki Reader(web-wiki)与主站共用的 Markdown 渲染管线(
components/src/markdown)存在三类前端渲染缺陷:katex.min.css将.katex-display > .katex设为 nowrap,超宽公式直接画出公式块、被视口截断,页面版面被撑破。:::callout{...}后无空行直接跟内容时,围栏不再是独立段落,isOpeningFence的单子节点判定失效,callout 整段按纯文本输出(如research/twostage页的全部 callout)。[&_code]:break-all使窄表格列中的文件名被任意拆断(02_gen_query_opt.py→02_gen_query_opt.p/y)。修改
theme.css(9502f7b):.katex-display改为 flex +overflow-x: auto安全居中——放得下保持居中,放不下块内横向滚动;scrollbar-width: thin与padding-bottom防止滚动条遮挡下标。remark-fenced-blocks.ts(812f001):新增splitFenceParagraph归一化,把段首开栏行、段尾关栏行从合并段落中拆回独立围栏段落,交由原有识别逻辑处理(isOpeningFence/parseOpeningFence/collectFencedBlock零改动)。prose.ts+markdown-table.tsx(0d5afab):行内代码断行策略break-all→break-words,长代码仅在放不下时才断;Markdown 表格外层包overflow-x-auto滚动容器(与代码块、shadcn Table 包装策略一致),窄屏下表格整体横向滑动而非压缩内容。测试
components:vitest 298 项全部通过(新增remark-fenced-blocks单测 6 项、react-markdown 集成测试 2 项);tsc --noEmit通过;eslint 无新增问题web-wiki:vitest 80 项全部通过:::残留;表格代码完整不断词;移动端 390px 表格横向滚动且无页面级溢出