自动格式化 \fancyvrb 环境中的某些文本

自动格式化 \fancyvrb 环境中的某些文本

例如,我有以下Verbatim来自fancyvrb包的环境:

\begin{Verbatim}
>>> 1+1
2
>>>
\end{Verbatim}

每当出现“>>>”时,我都想将其涂成蓝色。我可以自动完成着色工作,而不是手动为它们着色吗?

答案1

适合您用例的工具是列表包:除了给提示着色之外,它还会做很多其他适合编码的事情。默认情况下,它不会给 Python 提示着色,但很容易自定义。

它可以像这样简单:

\usepackage{listings}
\usepackage{xcolor}
\lstset{
  otherkeywords={>>>},     % used only because >>> is not an identifier
  morekeywords=[3]{>>>},
  keywordstyle={[3]\color{blue}}
}

\begin{document}
\begin{lstlisting}
>>> 1+1
2
>>>  
\end{lstlisting}

但您可能需要进行一些调整才能使其更像 Python。如果您喜欢语法着色,请添加到style={python-idle-code}\lstset{}获得类似 IDLE 的配色方案。(它在中定义listings-python.prf,必须单独包含。笨拙……)或者您可以使用language={python},以获得黑白基本方案。无论哪种方式,我都会推荐showstringspaces=falsetabsize=4。所以这是一个完整的几乎 MWE:

\documentclass{article}

\usepackage{listings}
\usepackage{xcolor}

% Optional:
\input{listings-python.prf}
\lstset{
  style={python-idle-code},
  showstringspaces=false,  % true by default for python
  % tabsize=4,
}

% Blue prompts 
\lstset{
  otherkeywords={>>>},    % used only because >>> is not an identifier
  morekeywords=[3]{>>>},
  keywordstyle={[3]\color{blue}},
}


\begin{document}
\begin{lstlisting}
>>> 1+1
2
>>> def hello():
    print("Hello, world!")
\end{lstlisting}

\end{document}

输出:

彩色蟒蛇

答案2

VerbatimOut这里有一种方法,只需在环境中插入逐字文本

\documentclass{article}
\usepackage{fancyvrb}
\usepackage{xcolor}


\begin{document}

\begin{VerbatimOut}{file.txt}
>>> 1+1
2
>>>
\end{VerbatimOut}

{
\def\greater{\char62}
\catcode`>=\active
\VerbatimInput[defineactive={\def>{\textcolor{blue}{\greater}}}]{file.txt}
}


\end{document}

结果

在此处输入图片描述

相关内容