mitmproxy / pdoc

API Documentation for Python Projects
https://pdoc.dev
MIT No Attribution
1.94k stars 190 forks source link

Markdown emphasis captures before math does #639

Open andyabateagility opened 10 months ago

andyabateagility commented 10 months ago

Problem Description

Pdoc appears to keep looking for markdown emphasis tokens * within both inline $...$ and display $$...$$ math. This make starred environments break Pdoc's math rendering, and leads to unrendered math if matched stars do not have surrounding whitespace.

Steps to reproduce the behavior:

For example, this fails to render, and instead produces bare text, missing the stars *, and with emphasized text between the stars. Removing the stars allows this to render correctly as displaymath. VSCode's markdown preview renders both correctly.

$$
\begin{align*}
f(x) &= x^2\\
     &= x \cdot x
\end{align*}
$$

Underscores don't seem to have the same issue, and math renders correctly if there is whitespace around the stars (but that creates other errors in the math renderer, so it can't fix the above issue).

Possibly related, but newlines within displaymath break math rendering, and math newlines \\ are ignored.

System Information

pdoc: 14.1.0 Python: 3.10.12 Platform: Linux-6.2.0-36-generic-x86_64-with-glibc2.35

mhils commented 10 months ago

Thanks for the report! The issue here is that we do Markdown processing first, and only then our math renderer (MathJax) kicks in. Eventually we should solve this with a custom markdown2 extra that exempts $$/$ areas from processing. For now, as a workaround, you can escape the * to with \* get the desired behavior:


r"""
$$
\begin{align\*}
f(x) &= x^2\\
     &= x \cdot x
\end{align\*}
$$
"""

That workaround may break unfortunately when we get it fixed properly, but let's see. :)

andyabateagility commented 10 months ago

Thanks for the tip on escaping! Newlines with four backslashes appear to work as well