mkdocs-material/docs/reference/math.md

201 lines
5.9 KiB
Markdown
Raw Normal View History

2020-07-24 17:11:42 +03:00
---
2022-06-19 14:01:44 +03:00
icon: material/alphabet-greek
2020-07-24 17:11:42 +03:00
---
2023-05-23 18:30:23 +03:00
# Math
2020-07-24 17:11:42 +03:00
2024-01-20 04:53:16 +03:00
[MathJax] and [KaTeX] are two popular libraries for displaying
mathematical content in browsers. Although both libraries offer similar
functionality, they use different syntaxes and have different configuration
options. This documentation site provides information on how to integrate them
2023-05-23 18:30:23 +03:00
with Material for MkDocs easily.
2020-07-24 17:11:42 +03:00
2021-10-10 13:19:14 +03:00
[MathJax]: https://www.mathjax.org/
[LaTeX]: https://en.wikibooks.org/wiki/LaTeX/Mathematics
[MathML]: https://en.wikipedia.org/wiki/MathML
[AsciiMath]: http://asciimath.org/
2023-05-13 14:34:57 +03:00
[KaTeX]: https://katex.org/
2020-07-24 17:11:42 +03:00
2023-05-23 18:30:23 +03:00
2020-07-24 17:11:42 +03:00
## Configuration
2024-01-20 04:53:16 +03:00
The following configuration enables support for rendering block and
2023-05-23 18:30:23 +03:00
inline block equations using [MathJax] and [KaTeX].
### MathJax
2024-01-20 04:53:16 +03:00
[MathJax] is a powerful and flexible library that supports multiple input formats,
such as [LaTeX], [MathML], [AsciiMath], as well as various output formats like
HTML, SVG, MathML. To use MathJax within your project, add the following lines
2023-05-23 18:30:23 +03:00
to your `mkdocs.yml`.
2020-07-24 17:11:42 +03:00
2022-09-11 20:25:40 +03:00
=== ":octicons-file-code-16: `docs/javascripts/mathjax.js`"
2020-07-24 17:11:42 +03:00
``` js
window.MathJax = {
tex: {
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex"
}
};
2021-12-11 16:30:07 +03:00
document$.subscribe(() => { // (1)!
2024-01-20 04:53:16 +03:00
MathJax.startup.output.clearCache()
MathJax.typesetClear()
MathJax.texReset()
MathJax.typesetPromise()
})
2020-07-24 17:11:42 +03:00
```
2021-10-10 13:19:14 +03:00
1. This integrates MathJax with [instant loading].
2023-05-23 18:30:23 +03:00
=== ":octicons-file-code-16: `mkdocs.yml`"
2020-07-24 17:11:42 +03:00
``` yaml
2021-10-10 13:19:14 +03:00
markdown_extensions:
- pymdownx.arithmatex:
generic: true
2020-07-24 17:11:42 +03:00
extra_javascript:
2023-05-23 18:30:23 +03:00
- javascripts/mathjax.js
2020-07-24 17:11:42 +03:00
- https://polyfill.io/v3/polyfill.min.js?features=es6
- https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js
```
2023-05-23 18:30:23 +03:00
See additional configuration options:
- [Arithmatex]
[Arithmatex]: ../setup/extensions/python-markdown-extensions.md#arithmatex
[instant loading]: ../setup/setting-up-navigation.md#instant-loading
2024-01-20 04:53:16 +03:00
<script src="https://polyfill.io/v3/polyfill.min.js?features=es6"></script>
<script id="MathJax-script" async src="https://cdn.jsdelivr.net/npm/mathjax@3/es5/tex-mml-chtml.js"></script>
<script>
window.MathJax = {
tex: {
inlineMath: [["\\(", "\\)"]],
displayMath: [["\\[", "\\]"]],
processEscapes: true,
processEnvironments: true
},
options: {
ignoreHtmlClass: ".*|",
processHtmlClass: "arithmatex"
}
};
</script>
2023-05-23 18:30:23 +03:00
### KaTeX
2024-01-20 04:53:16 +03:00
[KaTeX] is a lightweight library that focuses on speed and simplicity. It
supports a subset of LaTeX syntax and can render math to HTML and SVG. To use
2023-05-23 18:30:23 +03:00
[KaTeX] within your project, add the following lines to your `mkdocs.yml`.
=== ":octicons-file-code-16: `docs/javascripts/katex.js`"
``` js
document$.subscribe(({ body }) => { // (1)!
renderMathInElement(body, {
delimiters: [
{ left: "$$", right: "$$", display: true },
{ left: "$", right: "$", display: false },
{ left: "\\(", right: "\\)", display: false },
{ left: "\\[", right: "\\]", display: true }
],
})
})
```
1. This integrates KaTeX with [instant loading].
=== ":octicons-file-code-16: `mkdocs.yml`"
2023-05-13 14:34:57 +03:00
``` yaml
markdown_extensions:
- pymdownx.arithmatex:
generic: true
2024-01-20 04:53:16 +03:00
2023-05-13 14:34:57 +03:00
extra_javascript:
2024-01-20 04:53:16 +03:00
- javascripts/katex.js
- https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.js
2023-05-13 14:34:57 +03:00
- https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/contrib/auto-render.min.js
2024-01-20 04:53:16 +03:00
2023-05-13 14:34:57 +03:00
extra_css:
- https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.7/katex.min.css
```
2020-07-24 17:11:42 +03:00
## Usage
### Using block syntax
Blocks must be enclosed in `#!latex $$...$$` or `#!latex \[...\]` on separate
lines:
2020-07-24 17:11:42 +03:00
2023-05-23 18:30:23 +03:00
``` latex title="block syntax"
2020-07-24 17:11:42 +03:00
$$
\operatorname{ker} f=\{g\in G:f(g)=e_{H}\}{\mbox{.}}
$$
```
<div class="result" markdown>
2020-07-24 17:11:42 +03:00
$$
\operatorname{ker} f=\{g\in G:f(g)=e_{H}\}{\mbox{.}}
$$
</div>
2020-07-24 19:29:34 +03:00
### Using inline block syntax
2020-07-24 17:11:42 +03:00
2020-07-24 19:29:34 +03:00
Inline blocks must be enclosed in `#!latex $...$` or `#!latex \(...\)`:
2020-07-24 17:11:42 +03:00
2023-05-23 18:30:23 +03:00
``` latex title="inline syntax"
2024-01-20 04:53:16 +03:00
The homomorphism $f$ is injective if and only if its kernel is only the
singleton set $e_G$, because otherwise $\exists a,b\in G$ with $a\neq b$ such
2020-07-24 17:11:42 +03:00
that $f(a)=f(b)$.
```
<div class="result" markdown>
2020-07-24 17:11:42 +03:00
2024-01-20 04:53:16 +03:00
The homomorphism $f$ is injective if and only if its kernel is only the
singleton set $e_G$, because otherwise $\exists a,b\in G$ with $a\neq b$ such
2020-07-24 17:11:42 +03:00
that $f(a)=f(b)$.
</div>
2023-05-23 18:30:23 +03:00
## Comparing MathJax and KaTeX
2024-01-20 04:53:16 +03:00
When deciding between MathJax and KaTeX, there are several key factors to
2023-05-23 18:30:23 +03:00
consider:
2024-01-20 04:53:16 +03:00
- __Speed__: KaTeX is generally faster than MathJax. If your site requires
rendering large quantities of complex equations quickly, KaTeX may be the
better choice.
2023-05-23 18:30:23 +03:00
2024-01-20 04:53:16 +03:00
- __Syntax Support__: MathJax supports a wider array of LaTeX commands and can
process a variety of mathematical markup languages (like AsciiMath and MathML).
If you need advanced LaTeX features, MathJax may be more suitable.
2023-05-23 18:30:23 +03:00
2024-01-20 04:53:16 +03:00
- __Output Format__: Both libraries support HTML and SVG outputs. However,
MathJax also offers MathML output, which can be essential for accessibility,
as it is readable by screen readers.
2023-05-23 18:30:23 +03:00
2024-01-20 04:53:16 +03:00
- __Configurability__: MathJax provides a range of configuration options,
allowing for more precise control over its behavior. If you have specific
rendering requirements, MathJax might be a more flexible choice.
2023-05-23 18:30:23 +03:00
2024-01-20 04:53:16 +03:00
- __Browser Support__: While both libraries work well in modern browsers,
MathJax has broader compatibility with older browsers. If your audience uses a
variety of browsers, including older ones, MathJax might be a safer option.
2023-05-23 18:30:23 +03:00
2024-01-20 04:53:16 +03:00
In summary, KaTeX shines with its speed and simplicity, whereas MathJax offers
more features and better compatibility at the expense of speed. The choice
2023-05-23 18:30:23 +03:00
between the two will largely depend on your specific needs and constraints.