Skip to main content

Highly customizable extensions for Python-Markdown in the style of LaTeX environments/theorems

Project description

Python-Markdown Environments

Replicating amsthm features and syntax in Markdown so you can publish mathematical papers in HTML—because what mathematician hasn't tried to publish in the very reputable journal called Their Janky Flask Personal Site That No One Will Ever See?

This Python-Markdown extension uses LaTeX-like syntax

\begin{...}
...
\end{...}

to create environments such as captioned figures, general-purpose <div>s, dropdowns, and user-defined LaTeX-style theorems that can be styled with attached HTML classes.

Installation

pip install markdown-environments

Available Environments

  • \begin{captioned_figure}: figures with captions
  • \begin{cited_blockquote}: blockquotes with quote attribution
  • User-defined environments wrapped in general-purpose <div>s to style to your heart's content
  • User-defined environments formatted as <details> and <summary> dropdowns
  • User-defined LaTeX theorem environments with customizable:
    • Theorem counters
    • Heading punctuation
    • Linkable ids by theorem name

Documentation

Full documentation/API reference can be found here.

Example Usage

Backend:

import markdown
from markdown_environments import ThmsExtension

input_text = ...
output_text = markdown.markdown(input_text, extensions=[
    ThmsExtension(
        div_config={
            "types": {
                "thm": {
                    "thm_type": "Theorem",
                    "html_class": "md-thm",
                    "thm_counter_incr": "0,0,1"
                },
                r"thm\\\*": {
                    "thm_type": "Theorem",
                    "html_class": "md-thm"
                }
            },
            "html_class": "md-div"
        },
        dropdown_config={
            "types": {
                "exer": {
                    "thm_type": "Exercise",
                    "html_class": "md-exer",
                    "thm_counter_incr": "0,0,1"
                },
                "pf": {
                    "thm_type": "Proof",
                    "thm_counter_incr": "0,0,0,1",
                    "thm_name_overrides_thm_heading": True
                }
            },
            "html_class": "md-dropdown",
            "summary_html_class": "md-dropdown__summary mb-0"
        },
        thm_heading_config={
            "html_class": "md-thm-heading",
            "emph_html_class": "md-thm-heading__emph"
        }
    )
])

Markdown input:

# Section {{1}}: this is theorem counter syntax from ThmsExtension()

## Subsection {{0,1}}: Bees

Here we begin our study of bees.



\begin{thm}[the bee theorem]
According to all known laws of aviation, there is no way that a bee should be able to fly.
\end{thm}

\begin{pf}
Its wings are too small to get its fat little body off the ground.
\end{pf}



\begin{thm\*}{hidden thm name used as `id`; not real LaTeX syntax}
Bees, of course, fly anyways.
\end{thm\*}

\begin{pf}[Proofs are configured to have titles override the heading]{hidden names are useless when there's already a name}
Because bees don't care what humans think is impossible.
\end{pf}



\begin{exer}

\begin{summary}
Prove that this `summary` environment is common to all dropdown-based environments.
\end{summary}

Solution: by reading the documentation, of course!
\end{exer}



\begin{exer}
All dropdowns initialized in `ThmsExtension()` have a default `summary` value of `thm_type`,
so using dropdowns like `pf` and `exer` here without a `summary` block is also fine.
\end{exer}

HTML output (prettified):

<h1>Section 1: this is theorem counter syntax from ThmsExtension()</h1>
<h2>Subsection 1.1: Bees</h2>
<p>Here we begin our study of bees.</p>



<div class="md-div md-thm">
  <p>
    <span class="md-thm-heading" id="the-bee-theorem">
      <span class="md-thm-heading__emph">Theorem 1.1.1</span> (the bee theorem)<span class="md-thm-heading__emph">.</span>
    </span>
    According to all known laws of aviation, there is no way that a bee should be able to fly.
  </p>
</div>

<details class="md-dropdown">
  <summary class="md-dropdown__summary mb-0">
    <span class="md-thm-heading">
      <span class="md-thm-heading__emph">Proof 1.1.1.1</span><span class="md-thm-heading__emph">.</span>
    </span>
  </summary>

  <div>
    <p>Its wings are too small to get its fat little body off the ground.</p>
  </div>
</details>



<div class="md-div md-thm">
  <p>
    <span class="md-thm-heading" id="hidden-thm-name-used-as-id-not-real-latex-syntax">
      <span class="md-thm-heading__emph">Theorem</span><span class="md-thm-heading__emph">.</span>
    </span>
    Bees, of course, fly anyways.
  </p>
</div>

<details class="md-dropdown">
  <summary class="md-dropdown__summary mb-0">
    <span class="md-thm-heading" id="proofs-are-configured-to-have-titles-override-the-heading">
      <span class="md-thm-heading__emph">Proofs are configured to have titles override the heading</span><span class="md-thm-heading__emph">.</span>
    </span>
  </summary>

  <div>
    <p>Because bees don't care what humans think is impossible.</p>
  </div>
</details>



<details class="md-dropdown md-exer">
  <summary class="md-dropdown__summary mb-0">
    <p>
      <span class="md-thm-heading">
        <span class="md-thm-heading__emph">Exercise 1.1.2</span><span class="md-thm-heading__emph">.</span>
      </span>
      Prove that this <code>summary</code> environment is common to all dropdown-based environments.
    </p>
  </summary>

  <div>
    <p>Solution: by reading the documentation, of course!</p>
  </div>
</details>



<details class="md-dropdown md-exer">
  <summary class="md-dropdown__summary mb-0">
    <span class="md-thm-heading">
      <span class="md-thm-heading__emph">Exercise 1.1.3</span><span class="md-thm-heading__emph">.</span>
    </span>
  </summary>

  <div>
    <p>
      All dropdowns initialized in <code>ThmsExtension()</code> have a default <code>summary</code> value of <code>thm_type</code>,
      so using dropdowns like <code>pf</code> and <code>exer</code> here without a <code>summary</code> block is also fine.
    </p>
  </div>
</details>

HTML example render:

Closed dropdowns:

example render (closed dropdowns)

Open dropdowns:

example render (open dropdowns)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

markdown_environments-1.11.0.tar.gz (41.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

markdown_environments-1.11.0-py3-none-any.whl (19.3 kB view details)

Uploaded Python 3

File details

Details for the file markdown_environments-1.11.0.tar.gz.

File metadata

  • Download URL: markdown_environments-1.11.0.tar.gz
  • Upload date:
  • Size: 41.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.0.1 CPython/3.12.8

File hashes

Hashes for markdown_environments-1.11.0.tar.gz
Algorithm Hash digest
SHA256 47d22b5d4bf5b95dd6b466066f28947f99bab26ad8e1d03ed8a2fc199cececc9
MD5 530586baea3ff9d1f98e4bc6f3a92efe
BLAKE2b-256 21aeeeadea606d8076ffbbab8b1ced165ae42fcd68fec19f0fed83c0b41413e3

See more details on using hashes here.

Provenance

The following attestation bundles were made for markdown_environments-1.11.0.tar.gz:

Publisher: publish.yaml on AnonymousRand/python_markdown_environments

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file markdown_environments-1.11.0-py3-none-any.whl.

File metadata

File hashes

Hashes for markdown_environments-1.11.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e8aad3e23b6d7e5478f89d344eade53bbead14605338eceaaecdb71ee847f602
MD5 801eff1b82124b5d12501062adf4c0c6
BLAKE2b-256 c7b776a41fb72d3782f9c27f7e03a89ef58e03e2c41d0034a145423b37c4a6aa

See more details on using hashes here.

Provenance

The following attestation bundles were made for markdown_environments-1.11.0-py3-none-any.whl:

Publisher: publish.yaml on AnonymousRand/python_markdown_environments

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page