true, 'verboseOutput' => true ]); // の中身だけ $inner = function(string $tex, bool $display = false): string { $html = (new Latex())->render($tex, $display); return preg_replace('#^]*>|$#', '', $html); }; $test->describe('LaTeXからMathMLへの変換', function($test) use ($inner): void { $test->it('要素で囲み、元のLaTeXをalttextに入れるはず', function($test): void { $test->assertEquals('x', (new Latex())->render('x')); $test->assertEquals('x', (new Latex())->render('x', true)); $test->assertStringContains('alttext="a < b"', (new Latex())->render('a < b')); }); $test->it('識別子・数字・演算子を区別するはず', function($test) use ($inner): void { $test->assertEquals('a+12.5', $inner('a + 12.5')); $test->assertEquals('a<b', $inner('a < b')); }); $test->it('上付き・下付きを変換するはず', function($test) use ($inner): void { $test->assertEquals('x2', $inner('x^2')); $test->assertEquals('ai2', $inner('a_i^2')); }); $test->it('分数と根号を変換するはず', function($test) use ($inner): void { $test->assertEquals('ab', $inner('\frac{a}{b}')); $test->assertEquals('x', $inner('\sqrt{x}')); $test->assertEquals('x3', $inner('\sqrt[3]{x}')); }); $test->it('ギリシャ文字と記号を変換するはず', function($test) use ($inner): void { $test->assertEquals('α+β', $inner('\alpha + \beta')); $test->assertStringContains('→', $inner('x \to 0')); $test->assertStringContains('≤', $inner('a \leq b')); }); $test->it('関数名を立体にし、細い空白を入れるはず', function($test) use ($inner): void { $test->assertEquals('sinx', $inner('\sin x')); $test->assertStringContains('tr', $inner('\operatorname{tr} A')); }); $test->it('大型演算子と極限を変換するはず', function($test) use ($inner): void { $test->assertStringContains('∑', $inner('\sum_{i=1}^{n} i')); $test->assertStringContains('lim', $inner('\lim_{x \to 0} f')); }); $test->it('行列と括弧を変換するはず', function($test) use ($inner): void { $m = $inner('\begin{pmatrix} 1 & 2 \\\\ 3 & 4 \end{pmatrix}'); $test->assertStringContains('1234', $m); $test->assertStringContains('form="prefix">(', $m); $test->assertStringContains('form="postfix">)', $m); $test->assertStringContains('form="prefix">(x', $inner('\left( x \right)')); }); $test->it('文字の種類とアクセントを変換するはず', function($test) use ($inner): void { $test->assertEquals('𝐯', $inner('\mathbf{v}')); $test->assertStringContains('d', $inner('\mathrm{d}x')); $test->assertStringContains('', $inner('\vec{v}')); $test->assertStringContains('if ', $inner('\text{if } x')); }); $test->it('HTMLをエスケープするはず', function($test) use ($inner): void { $out = $inner('\text{}'); $test->assertFalse(str_contains($out, '