自 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 词法分析器,因为pygmentize
CLI 的呈现方式相同。(该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}