Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Class Foo
- */
- class Foo
- {
- /**
- * @var string
- */
- private $tpl = <<<'EOT'
- \documentclass{standalone}
- \usepackage{amsmath}
- \usepackage{amsfonts}
- \usepackage{amssymb}
- \begin{document}
- {\Large%
- ${latex}$%
- }
- \end{document}
- EOT;
- /**
- * @param $file
- * @param $mime
- * @return string
- */
- private function generateDataUri($file, $mime)
- {
- $contents = file_get_contents($file);
- $base64 = base64_encode($contents);
- return "data:$mime;base64,$base64";
- }
- /**
- * @param $math
- * @return string
- */
- public function mathToSvgDataUri($math)
- {
- $math = trim($math);
- $filename = md5($math);
- $tplReady = str_replace('{latex}', $math, $this->tpl);
- $path = __DIR__ . '/cache/data.tex';
- file_put_contents($path, $tplReady);
- shell_exec(
- 'cd ' . dirname($path)
- . ' && pdflatex -shell-escape data.tex'
- . ' && pdf2svg data.pdf ' . $filename . '.svg'
- );
- return '<img src="' . $this->generateDataUri(__DIR__ . '/cache/' . $filename . '.svg', 'image/svg+xml') . '" />';
- }
- /**
- * @param $math
- * @return string
- */
- public function mathToPngDataUri($math)
- {
- $math = trim($math);
- $filename = md5($math);
- $tplReady = str_replace('{latex}', $math, $this->tpl);
- $path = __DIR__ . '/cache/data.tex';
- file_put_contents($path, $tplReady);
- shell_exec(
- 'cd ' . dirname($path)
- . ' && pdflatex -shell-escape data.tex'
- . ' && convert -density 100 data.pdf -quality 100 ' . $filename . '.png'
- );
- return '<img src="' . $this->generateDataUri(__DIR__ . '/cache/' . $filename . '.png', 'image/png') . '" />';
- }
- }
- header('Content-Type: text/html; charset=UTF-8');
- $content = <<<'EOT'
- <div class="block">
- <p>Sei $N$ die Menge aller $n \in \mathbb{N}$ für die gilt $n>0$ und $2 \nmid n$.</p>
- <p>Sei $P$ die Menge aller $p \in \mathbb{Q}$ für die gilt $0 \leq p \leq 1$.</p>
- <p>Sei $P_{>0}$ die Menge $P \setminus \{0\}$.</p>
- <p>Sei $n \in N$ die maximale Anzahl der Spiele der Serie („best of $n$“).</p>
- <p>Sei $p \in P$ die Wahrscheinlichkeit für einen Sieg der betrachteten Mannschaft
- in einem Spiel.</p>
- <p>$\text{WP}_{m} : (n \in N, p \in P, m \in \mathbb{N}) \rightarrow P$ berechnet die
- Wahrscheinlichkeit, dass die betrachtete Mannschaft die Serie nach $m$ Spielen
- gewinnt. Dabei sei $m \in \mathbb{N}$, $\frac{n+1}{2} \leq m \leq n$.</p>
- \[
- \text{WP}_{m}(n,p,m) \mapsto
- p \binom{m-1}{\frac{n-1}{2}} p^{\frac{n-1}{2}} (1-p)^{m-1-\frac{n-1}{2}}
- \]
- \[
- \phi_n(\kappa) =
- \frac{1}{4\pi^2\kappa^2} \int_0^\infty
- \frac{\sin(\kappa R)}{\kappa R}
- \frac{\partial}{\partial R}
- \left[R^2\frac{\partial D_n(R)}{\partial R}\right]\,dR
- \]
- </div>
- EOT;
- $foo = new Foo();
- ?><!DOCTYPE html>
- <html lang="de">
- <head>
- <meta charset="UTF-8" />
- <title>Math rendering tests</title>
- <style>
- body {
- padding: 20px;
- }
- img {
- vertical-align: middle;
- }
- h1 {
- text-align: center;
- }
- .block {
- margin: 10px;
- padding: 10px;
- border: 1px solid #ccc;
- border-radius: 5px;
- }
- </style>
- <script type="text/x-mathjax-config">
- MathJax.Hub.Config({tex2jax: {inlineMath: [['$','$'], ['\\(','\\)']]}});
- </script>
- <script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script>
- </head>
- <body>
- <h1>SVG (pdflatex + pdf2svg)</h1>
- <?php
- $content2 = preg_replace_callback('/\$([^$]+)\$/', function ($ms) use ($foo) {
- return $foo->mathToSvgDataUri($ms[1]);
- }, $content);
- $content2 = preg_replace_callback('/\\\\\[(.*?)\\\\\]/s', function ($ms) use ($foo) {
- return '<p style="text-align: center;">' . $foo->mathToSvgDataUri($ms[1]) . '</p>';
- }, $content2);
- echo $content2;
- ?>
- <h1>PNG (pdflatex + convert)</h1>
- <?php
- $content2 = preg_replace_callback('/\$([^$]+)\$/', function ($ms) use ($foo) {
- return $foo->mathToPngDataUri($ms[1]);
- }, $content);
- $content2 = preg_replace_callback('/\\\\\[(.*?)\\\\\]/s', function ($ms) use ($foo) {
- return '<p style="text-align: center;">' . $foo->mathToPngDataUri($ms[1]) . '</p>';
- }, $content2);
- echo $content2;
- ?>
- <h1>Mathjax</h1>
- <?php echo $content; ?>
- </body>
- </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement