An mdformat plugin for mkdocs and packages commonly used with MkDocs (mkdocs-material, mkdocstrings, and python-markdown)
Supports:
- Indents are converted to four-spaces instead of two
- Note: when specifying
--align-semantic-breaks-in-lists, the nested indent for ordered lists is three, but is otherwise a multiple of four
- Note: when specifying
- Unordered list bullets are converted to dashes (
-) instead of* - By default, ordered lists are standardized on a single digit (
1.or0.) unless--numberis specified, thenmdformat-mkdocswill apply consecutive numbering to ordered lists for consistency withmdformat - MkDocs-Material Admonitions*
- *Note:
mdformat-admonwill format the same admonitions, but for consistency with the mkdocs styleguide, an extra space will be added by this package (#22)
- *Note:
- MkDocs-Material Content Tabs*
- *Note: the markup (HTML) rendered by this plugin is sufficient for formatting but not for viewing in a browser. Please open an issue if you have a need to generate valid HTML.
- MkDocs-Material Definition Lists
- mkdocstrings Anchors (autorefs)
- mkdocstrings Cross-References
- Python Markdown "Abbreviations"*
- *Note: the markup (HTML) rendered for abbreviations is not useful for rendering. If important, I'm open to contributions because the implementation could be challenging
- Python Markdown "Attribute Lists"
- Preserves attribute list syntax when using
--wrapmode
- Preserves attribute list syntax when using
- PyMdown Extensions "Arithmatex" (Math/LaTeX Support) (Material for MkDocs Math)
- This plugin combines three math rendering plugins from mdit-py-plugins:
- dollarmath: Handles
$...$(inline) and$$...$$(block) with smart dollar mode that prevents false positives (e.g.,$3.00is not treated as math) - texmath: Handles
\(...\)(inline) and\[...\](block) LaTeX bracket notation - amsmath: Handles LaTeX environments like
\begin{align}...\end{align},\begin{cases}...\end{cases},\begin{matrix}...\end{matrix}, etc.
- dollarmath: Handles
- Can be deactivated entirely with the
--no-mkdocs-mathflag
- This plugin combines three math rendering plugins from mdit-py-plugins:
- Python Markdown "Snippets"*
- *Note: the markup (HTML) renders the plain text without implementing the snippet logic. I'm open to contributions if anyone needs full support for snippets
See the example test files, ./tests/pre-commit-test.md and ./tests/format/fixtures.md
Add this package wherever you use mdformat and the plugin will be auto-recognized. No additional configuration necessary. For additional information on plugins, see the official mdformat documentation here
This package specifies two optional "extra" plugins ('recommended' and 'recommended-mdsf' ) for plugins that work well with typical documentation managed by mkdocs:
- For
'recommended': - For
'recommended-mdsf':- Instead of
mdformat-beautysh,mdformat-config,mdformat-ruff, andmdformat-web, the "mdsf" extras installmdformat-hooks, which allows the use ofmdsffor formatting code blocks in hundreds of languages using CLI formatters you already have installed; however, this requires extra configuration, so make sure to see the README: https://github.com/KyleKing/mdformat-hooks
- Instead of
repos:
- repo: https://github.com/executablebooks/mdformat
rev: 1.0.0
hooks:
- id: mdformat
additional_dependencies:
- mdformat-mkdocs
# Or
# - "mdformat-mkdocs[recommended-mdsf]>=5.1.0"
# Or
# - "mdformat-mkdocs[recommended]"uvx --with mdformat-mkdocs mdformatOr with pipx:
pipx install mdformat
pipx inject mdformat mdformat-mkdocsTo generate HTML output, any of the plugins can be imported from mdit_plugins. For more guidance on MarkdownIt, see the docs: https://markdown-it-py.readthedocs.io/en/latest/using.html#the-parser
from markdown_it import MarkdownIt
from mdformat_mkdocs.mdit_plugins import (
material_admon_plugin,
material_content_tabs_plugin,
mkdocstrings_autorefs_plugin,
mkdocstrings_crossreference_plugin,
pymd_abbreviations_plugin,
)
md = MarkdownIt()
md.use(material_admon_plugin)
md.use(material_content_tabs_plugin)
md.use(mkdocstrings_autorefs_plugin)
md.use(mkdocstrings_crossreference_plugin)
md.use(pymd_abbreviations_plugin)
text = "- Line 1\n - `bash command`\n - Line 3"
md.render(text)
# <ul>
# <li>Line 1
# <ul>
# <li><code>bash command</code></li>
# <li>Line 3</li>
# </ul>
# </li>
# </ul>mdformat-mkdocs adds the CLI arguments:
-
--align-semantic-breaks-in-liststo optionally align line breaks in numbered lists to 3-spaces. If not specified, the default of 4-indents is followed universally.# with: mdformat 1. Semantic line feed where the following line is three spaces deep # vs. "mdformat --align-semantic-breaks-in-lists" 1. Semantic line feed where the following line is three spaces deep
-
--ignore-missing-referencesif set, do not escape link references when no definition is found. This is required when references are dynamic, such as with python mkdocstrings -
--no-mkdocs-mathif set, deactivate math/LaTeX rendering (Arithmatex). By default, math is enabled. This can be useful if you want to format markdown without processing math syntax.
You can also use the toml configuration (https://mdformat.readthedocs.io/en/stable/users/configuration_file.html):
# .mdformat.toml
[plugin.mkdocs]
align_semantic_breaks_in_lists = true
ignore_missing_references = true
no_mkdocs_math = trueSee CONTRIBUTING.md