在 beamer 中漂亮地显示代码

在 beamer 中漂亮地显示代码

我目前正在制作我的第一个 Beamer 演示文稿,所以如果这是一个非常简单的问题,请原谅。我曾尝试研究如何在 Beamer 演示文稿上显示代码。我已设法使用 来做到这一点semiverbatim。但是,我对此并不完全满意,因为可读性太差,没有任何关键字着色等。我曾尝试使用listings我在 LaTeX 中撰写文章时熟悉的软件包,但我没有成功。

以下是我的演讲中的一个例子:

\begin{frame}[fragile]
\begin{semiverbatim}
class DampenedPendulum(Pendulum):
    def __init__(self, B, L=1, M=1, g=9.81):
        super().__init__(L=1, M=1, g=9.81)
        self.solve_called = False
        self.B = B
\end{semiverbatim}
\end{frame}

效果还不错,但我想通过添加一些关键字颜色来提高可读性,就像在listings包中一样。任何关于如何做到这一点的提示都将不胜感激。

下面是我使用该包尝试实现此目的的一个例子listings

\documentclass{beamer}
\usetheme{Boadilla}

\usepackage{listings}
\usepackage{xcolor}
 
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
 
\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

 
\lstset{style=mystyle}

\begin{document}

\begin{frame}[fragile]
\begin{lstlisting}
class DampenedPendulum(Pendulum):
    def __init__(self, B, L=1, M=1, g=9.81):
        super().__init__(L=1, M=1, g=9.81)
        self.solve_called = False
        self.B = B
\end{lstlisting}
\end{frame}

\end{document}

这会显示编号行和背景颜色,但不显示关键字的颜色。样式代码是从 Overleaf 页面复制而来,我已多次在文章中使用它来获得漂亮的打印代码。

答案1

为了listings了解关键字、字符串语法、数字格式、注释语法等,您需要提供语言标识符。在这种情况下,您应该添加language=Python\lstdefinestyle{mystyle}

\documentclass{beamer}
\usetheme{Boadilla}

\usepackage{listings}
\usepackage{xcolor}
 
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}
 
\lstdefinestyle{mystyle}{
    language=Python,
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

 
\lstset{style=mystyle}

\begin{document}

\begin{frame}[fragile]
\begin{lstlisting}
class DampenedPendulum(Pendulum):
    def __init__(self, B, L=1, M=1, g=9.81):
        super().__init__(L=1, M=1, g=9.81)
        self.solve_called = False
        self.B = B
        print(23, "is a number")
        # print statements should not be in the constructor
\end{lstlisting}
\end{frame}

\end{document}

在此处输入图片描述

相关内容