Python f 字符串中的颜色编码

Python f 字符串中的颜色编码

自 2016 年 12 月发布的 Python 3.6 以来,出现了新的 f 字符串格式,您可以在字符串中放入要在{}s 中求值的 Python 代码。这很棒,但是用于语法高亮的代码列表的 TeX 包不知道它,或者他们知道吗?

梅威瑟:

\documentclass{article}

\usepackage{xcolor}
\usepackage{listings}

\definecolor{cCodeString}{RGB}{42,0.0,255}
\definecolor{cCodeKeywordstyle}{RGB}{150,0,150}
\definecolor{cCodeComment}{RGB}{63,127,95}

\lstset{language=python,
    columns=fullflexible,
    basicstyle=\small\ttfamily,
    keywordstyle=\color{cCodeKeywordstyle}\bfseries,
    commentstyle=\color{cCodeComment},
    stringstyle=\color{cCodeString},
}

\begin{document}

\begin{lstlisting}
name = "Ann"
print(f"{name}, you have {len(name):4} characters in your name.")
\end{lstlisting}

\end{document}

在此处输入图片描述

如果里面的东西{}看起来像代码那就太好了,因为解释器将其视为代码。

答案1

我无法使用该listings包找到答案。

不过,我认为该minted包可以理解 Python f 字符串:

\documentclass{article}
\usepackage{minted}
\begin{document}
\begin{minted}{python}
  name = "Ann"
  print(f"{name}, you have {len(name)} characters in your name.")
\end{minted}
\end{document}

其结果为:

在此处输入图片描述

但请注意,虽然 LaTeX 的minted包检测到第一个变量({name}),但它无法检测到第二个变量({len(name)})。

这实际上不是包装的问题minted,而是皮格门特斯Python 词法分析器,因为pygmentizeCLI 的呈现方式相同。(该minted包使用 Pygments 作为其后端。)

我还没有找到解决这个问题的方法,但是已经创建了一个问题在 Pygment 的 GitHub repo 中。

答案2

该扩展piton直接检测 Python 的 f 字符串中的插值。但是,piton需要 LuaLaTeX(但不需要任何外部程序)。

\documentclass{article}
\usepackage{xcolor}
\usepackage{piton}

\begin{document}

\begin{Piton}
name = "Ann"
print(f'{name}, you have {len(name):4} characters in your name.')
\end{Piton}

\bigskip
\SetPitonStyle{String.Interpol = \color{blue}, Interpol.Inside = \color{gray}}

\begin{Piton}
name = "Ann"
print(f'{name}, you have {len(name):4} characters in your name.')
\end{Piton}

\end{document}

上述代码的输出

相关内容