minted 不会转义 python docstring 中的 LaTeX 代码

minted 不会转义 python docstring 中的 LaTeX 代码

我该如何让 minted 转义文档字符串中的 LaTeX 代码?我应该使用一些开关吗?

\documentclass[a4paper,12pt]{article} 
\usepackage[italian]{babel}

\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage{minted}
\renewcommand{\theFancyVerbLine}{\sffamily
  \textcolor[rgb]{0.5,0.5,1.0}{\scriptsize
  \oldstylenums{\arabic{FancyVerbLine}}}}

\title{General Title}
\author{Infrid}

\begin{document}
\maketitle 

\begin{minted}[mathescape,linenos=true]{python}
def naive(a,x):
    """
    lorem ipsum....

    this code will not be escaped
    $ a = \{a_0, a_1, a_2, a_3, \dots, a_n\} $

    """
    # this code will be escaped
    p = a[0] # $ p = \frac{1}{3} $
    y = x
    for ai in a[1:]:
        p = p + ai*y
        y = y*x

    return p
\end{minted}

\end{document}

答案1

正如其他人指出的那样,这是因为 minted 仅mathescape在评论内部激活。

FWIW,同样适用于t-vimConTeXt 中的模块。它类似于mintedLaTeX 的包,但使用vim而不是pygments来进行语法高亮。

t-vim提供了一个选项,可以在解析源代码之前加载任意 vim 文件。因此,可以动态更改解析器。例如,要将文档字符串识别为注释,您可以使用本示例中给出的 vim 文件线在 vim 邮件列表中。

\usemodule[vim]

\startvimrc[name=python-docstring]
syn match  pythonBlock      ":$" nextgroup=pythonDocString skipempty skipwhite
syn region pythonDocString  matchgroup=Normal start=+[uU]\='+ end=+'+ skip=+\\\\\|\\'+ contains=pythonEscape,@Spell contained
syn region pythonDocString  matchgroup=Normal start=+[uU]\="+ end=+"+ skip=+\\\\\|\\"+ contains=pythonEscape,@Spell contained
syn region pythonDocString  matchgroup=Normal start=+[uU]\="""+ end=+"""+ contains=pythonEscape,@Spell contained
syn region pythonDocString  matchgroup=Normal start=+[uU]\='''+ end=+'''+ contains=pythonEscape,@Spell contained
hi def link pythonDocString Comment
\stopvimrc

\definevimtyping[PYTHON][syntax=python, extras=python-docstring]

\starttext

\startPYTHON[escape=on]
def naive(a,x):
    """
    lorem ipsum....

    this code will be escaped (note no spaces)
    \math{a=\{a_0,a_1,a_2,a_3,\dots,a_n\}}

    """
    # this code will be escaped
    p = a[0] # \math{p=\sqrt{\frac{1}{3}}}
    y = x
    for ai in a[1:]:
        p = p + ai*y
        y = y*x

    return p
\stopPYTHON
\stoptext

这使:

在此处输入图片描述

t-vim 的一个不同之处在于您需要使用\math{...}(或\m{...}) 而不是 来启用数学模式$...$。与 和 一样,mintedlistings数学模式中不要使用空格。

要在中执行类似操作minted,您需要更改 python 解析器,以便它将文档字符串识别为注释。

答案2

摘自手册minted

mathescape(布尔值)(默认值:false)
在注释中启用 LaTeX 数学模式。不要在数学模式中使用空格 — 它们将像其他全角逐字空格一样呈现。用法与包中相同 listings

该包旨在排版代码,因此代码必须是。我不认为

$ a = \{a_0, a_1, a_2, a_3, \dots, a_n\} $

是合法的 Python 代码。

相关内容