我该如何让 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 中的模块。它类似于minted
LaTeX 的包,但使用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{...}
) 而不是 来启用数学模式$...$
。与 和 一样,minted
在listings
数学模式中不要使用空格。
要在中执行类似操作minted
,您需要更改 python 解析器,以便它将文档字符串识别为注释。
答案2
摘自手册minted
:
mathescape
(布尔值)(默认值:false)
在注释中启用 LaTeX 数学模式。不要在数学模式中使用空格 — 它们将像其他全角逐字空格一样呈现。用法与包中相同listings
。
该包旨在排版代码,因此代码必须是。我不认为
$ a = \{a_0, a_1, a_2, a_3, \dots, a_n\} $
是合法的 Python 代码。