Python Markdown搞砸了数学公式

Dam*_* Lu 1 python markdown python-markdown

将内容从markdown转换为HTML格式时,使用以下数学函数

${\{y_{i}, x_{i1}, ..., x_{id}\}}_{i=1}^{n}$ 
Run Code Online (Sandbox Code Playgroud)

转换成了

${{y_{i}, x_{i1}, ..., x_{id}}}<em>{i=1}^{n}$
Run Code Online (Sandbox Code Playgroud)

有没有办法告诉Python的Markdown没有这样做?谢谢!

Way*_*lan 5

是的,数学语法与Markdown的语法冲突.您需要告诉解析器不要将其视为Markdown.

您有几种不同的方法可以做到这一点:

  1. 用原始HTML包装Math函数.Markdown不在原始块级HTML中处理.所以把你的数学包装成div:

    <div>${\{y_{i}, x_{i1}, ..., x_{id}\}}_{i=1}^{n}$</div>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使用第三方扩展(也在这里),它提供了一种将文档的一部分标记为数学的方法.您需要安装其中一个扩展,然后告诉Python-Markdown使用它.例如,要安装Python-Markdown-Math,请执行以下操作:

    pip install python-markdown-math
    
    Run Code Online (Sandbox Code Playgroud)

    然后,在Python代码中,您可以告诉Markdown使用扩展名:

    markdown.markdown(src, extensions=['mdx-math'])
    
    Run Code Online (Sandbox Code Playgroud)

    请注意,为了避免与用于指定货币(正常使用)的美元符号冲突,大多数扩展不支持使用单个美元符号作为包装.在这种情况下,您将需要使用双美元符号($$...$$).或者你可以打开像这样的单一美元符号的支持:

    markdown.markdown(
        src, 
        extensions=['mdx_math'], 
        extension_configs={
            'mdx_math': {'enable_dollar_delimiter': True}
        }
    )
    
    Run Code Online (Sandbox Code Playgroud)

    另外,Arithmatex Extension默认支持单一美元符号.但是,它是更大的扩展包的一部分.如果您只需要一个,Python-Markdown-Math将为您提供服务(每个都由Python-Markdown团队的不同成员开发).