{{-- 与 components/exam/paper-body 选择题选项渲染完全一致(布局 + 公式预处理)。 参数: - $options: array 选项(数字下标或 A/B/C/D 键) - $gradingMode: bool 是否判卷上下文(影响 OptionLayoutDecider) - $mathProcessed: bool 题目是否已整体预处理公式 - $logQuestionNumber: string|int 仅用于日志标识 - $showLeadSpacer: bool 是否在选项前插入与 question-grid 对齐的隐形占位(嵌入案例行等非 grid 场景可设为 false) --}} @php /** @var array $options */ /** @var bool $gradingMode */ /** @var bool $mathProcessed */ /** @var string|int|null $logQuestionNumber */ /** @var bool $showLeadSpacer */ $showLeadSpacer = $showLeadSpacer ?? true; $layoutDeciderService = app(\App\Support\OptionLayoutDecider::class); $layoutMeta = $layoutDeciderService->decide( $options, $gradingMode ? 'grading' : 'exam' ); $optionsClass = $layoutMeta['class']; $layoutDesc = $layoutMeta['layout']; $hasImageOptionInQuestion = false; foreach ($options as $optRaw) { if (preg_match('/<(img|image|svg)\\b|data:image\\//i', (string) $optRaw) === 1) { $hasImageOptionInQuestion = true; break; } } if ($hasImageOptionInQuestion) { $optionsClass = 'options-grid-4'; $layoutDesc = '4列布局(图片选项固定)'; } \Illuminate\Support\Facades\Log::debug('选择题布局决策', [ 'question_number' => $logQuestionNumber ?? null, 'context' => $gradingMode ? 'grading' : 'exam', 'opt_count' => $layoutMeta['opt_count'], 'max_length' => $layoutMeta['max_length'], 'has_complex_formula' => $layoutMeta['has_complex_formula'], 'has_image_option' => $hasImageOptionInQuestion, 'selected_class' => $optionsClass, 'layout' => $layoutDesc, ]); @endphp @if($showLeadSpacer)
@endif @endforeach