$时 这类误插 $。 $stem = '当$a$=__________时,$2(2a-3)$的值比$3(a+1)$的值大$1$.'; [$rendered, $changed] = BlankPlaceholderRenderer::replaceToBlankSpan( $stem, BlankPlaceholderRenderer::defaultBlankSpan(), false, false ); $this->assertTrue($changed); $this->assertStringNotContainsString('$时', $rendered); $this->assertMatchesRegularExpression('/\$2\(2a-3\)\$/u', $rendered); $this->assertMatchesRegularExpression('/当\$a\$=/u', $rendered); } public function test_fill_stem_malformed_missing_close_dollar_before_han_still_repaired(): void { // 脏数据:仅 $a=__________($a 与横线同一数学段且漏写收尾 $)时补闭合,避免吞段。 $stem = '当$a=__________时,$2(2a-3)$的值比$3(a+1)$的值大$1$.'; [$rendered, $changed] = BlankPlaceholderRenderer::replaceToBlankSpan( $stem, BlankPlaceholderRenderer::defaultBlankSpan(), false, false ); $this->assertTrue($changed); $this->assertStringNotContainsString('$时', $rendered); $this->assertMatchesRegularExpression('/\$2\(2a-3\)\$/u', $rendered); } public function test_inline_math_with_normal_parentheses_not_turned_to_blank(): void { $stem = '设$f(x)=\sin(x)$,则$g(2)$的值是__________。'; [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan( $stem, BlankPlaceholderRenderer::defaultBlankSpan(), false, false ); $this->assertStringContainsString('sin(x)', $rendered); $this->assertStringContainsString('g(2)', $rendered); $this->assertStringContainsString('border-bottom:1.2px dashed', $rendered); } public function test_left_quad_right_not_at_suffix_stays_in_formula(): void { // 段末不是「…=\left(\quad\right)」完整后缀时,不转为下划线(避免误伤中段记号)。 $stem = '若$x=\left(\quad\right)+1$,则$y=__________。'; [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan( $stem, BlankPlaceholderRenderer::defaultBlankSpan(), false, false ); $this->assertStringContainsString('\\left(\\quad\\right)', $rendered); } public function test_fill_degree_after_plain_blank_not_prefixed_with_stray_dollar(): void { // questions.id=332:inline $40^{\circ}$ 后又出现「向左拐______度」,中间无 $; // closeMissing 不得误用上一段公式的收尾 $,否则会出现「……横线 $度」。 $stem = '一辆汽车在笔直的公路上行驶,第一次向左拐 $40^{\circ}$,若经第二次拐弯后,运动路线与原来的路线平行,则第二次拐弯是否向右拐或向左拐______度。'; [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan( $stem, BlankPlaceholderRenderer::defaultBlankSpan(), false, false ); $this->assertStringContainsString('度', $rendered); $this->assertStringNotContainsString('$度', $rendered); } public function test_choice_stem_trailing_left_quad_right_becomes_blank_line(): void { // questions.id=30949:段末 $=\left(\quad\right)$ 意图为答题横线,转为段外下划线再渲染为标准空位。 $stem = '在三角形$ABC$中,$AC=3,AB=4,\angle CAB=120^{\circ}$,则$\left(\overrightarrow{AB}+\overrightarrow{AC}\right)\cdot\overrightarrow{AB}=\left(\quad\right)$'; [$rendered] = BlankPlaceholderRenderer::replaceToBlankSpan( $stem, BlankPlaceholderRenderer::defaultBlankSpan(), false, false ); $this->assertStringContainsString('border-bottom:1.2px dashed', $rendered); $this->assertStringContainsString('min-width:80px', $rendered); $this->assertStringNotContainsString('\\left(\\quad\\right)', $rendered); $this->assertStringNotContainsString('TOKEN', $rendered); $this->assertStringContainsString('\\overrightarrow{AB}', $rendered); } }