在列表环境中创建 >>> 关键字

在列表环境中创建 >>> 关键字

我是 LaTeX 新手。我想在文章中展示 Python 代码。

这个想法是改变符号的颜色>>>

当我使用<@\textcolor{red}{my_text}@>并在 my_text 变量中写入文本时,它会起作用并改变颜色。但是当 my_text 为>>>¿¿¿ 时,它会显示。

>>>例如,我怎样才能显示为蓝色。我已经尝试更改了morekeywords= variable。但也没有用。

多谢。

\documentclass{article}
\usepackage{listings} 
\usepackage{color}

\lstset{
    language=Python,            
    columns=flexible,       
    escapeinside={<@}{@>},
    frame=lines
    }

\begin{document}

\begin{lstlisting}[caption=Python Console, 
                    label=amb,  numbers=none]
<@\textcolor{blue}{>>>}@> print(Hello World)
<@\textcolor{red}{Hello World}@>
\end{lstlisting}

\end{document}

答案1

添加>>>morekeywords但您还必须更改>为带有选项的字母alsoletter才能使其工作:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\lstset{
  language = Python ,            
  columns = flexible ,       
  escapeinside = {<@}{@>} ,
  frame = lines ,
  alsoletter = > ,
  morekeywords = {>>>}
}

\begin{document}

\begin{lstlisting}[caption=Python Console, label=amb, numbers=none]
>>> print(Hello World)
\end{lstlisting}

\end{document}

在此处输入图片描述

如果你想要蓝色但并非所有关键词都是蓝色您可以将其添加到不同的关键字类别中,并使用相应选项的可选参数为该类设置样式:

morekeywords = [2]{>>>} ,
keywordstyle = [2]\color{blue}\bfseries

在此处输入图片描述

只要你添加\usepackage[T1]{fontenc}总体来说这是一个好主意)但对于这个例子你不会再高兴了:

在此处输入图片描述

>>然后变成»(作为连字符)。在这种情况下,我个人会使用电传打字机作为代码的字体(无论如何我都会这样做,但这只是我个人的看法),代码如下basicstyle = \ttfamily

在此处输入图片描述

由于现在关键字不再是粗体,我们需要使用具有粗体系列的电传字体,例如\usepackage{lmodern}

在此处输入图片描述

如果您不想要电传打字机代码但仍想使用T1编码,并且如果您不需要>>在文档的其他任何地方被视为连字符,您也可以添加microtype包并禁用连字符

\usepackage{microtype}
\DisableLigatures[>]{encoding = T1}

无论如何,使用该microtype软件包都会对您的文档有益……

不带电传打字机:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{listings}
\usepackage{xcolor}

\usepackage{microtype}
\DisableLigatures[>]{encoding = T1}

\lstset{
  language = Python ,            
  columns = flexible ,       
  escapeinside = {<@}{@>} ,
  frame = lines ,
  alsoletter = > ,
  morekeywords = [2]{>>>} ,
  keywordstyle = [2]\color{blue}\bfseries
}

\begin{document}

\begin{lstlisting}[caption=Python Console, label=amb, numbers=none]
>>> print(Hello World)
\end{lstlisting}

\end{document}

在此处输入图片描述

使用电传打字机:

\documentclass{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage{listings}
\usepackage{xcolor}

\usepackage{microtype}
\DisableLigatures[>]{encoding = T1}

\lstset{
  basicstyle = \ttfamily ,
  language = Python ,            
  columns = flexible ,       
  escapeinside = {<@}{@>} ,
  frame = lines ,
  alsoletter = > ,
  morekeywords = [2]{>>>} ,
  keywordstyle = [2]\color{blue}\bfseries
}

\begin{document}

\begin{lstlisting}[caption=Python Console, label=amb, numbers=none]
>>> print(Hello World)
\end{lstlisting}

\end{document}

在此处输入图片描述

答案2

一种方法是使用 切换字体编码\usepackage[T1]{fontenc}。这会将文本模式更改>为实际>符号,而不是¿

这也会解析>>成 guillemet »,但你可以通过像这样分离它们来解决这个问题:>{}>{}>

完整代码:

\documentclass{article}
\usepackage{xcolor}
\usepackage[T1]{fontenc} % <-- here
\usepackage{listings}
\lstset{
    basicstyle=\ttfamily,
    language=Python,
    escapeinside={<@}{@>},
}
\begin{document}
\begin{lstlisting}
<@\textcolor{blue}{\texttt{>{}>{}>}}@> print(Hello World) % <-- here
<@\textcolor{red}{Hello World}@>
\end{lstlisting}
\end{document}

在此处输入图片描述

相关内容