删除 beamer 列表中的边距

删除 beamer 列表中的边距

我正在我的 beamer 文档中包含一些代码。我想删除所有边距,以便可以包含尽可能多的代码。这是我正在尝试的代码:

\documentclass[]{beamer}
\usepackage[spanish]{babel}
\usepackage[utf8]{inputenc} 
\usepackage{listings} 
\usepackage{caption}  
\usepackage{color}
\definecolor{comentaryGreen}{rgb}{0,0.6,0}
\lstset{
         basicstyle=\tiny  ,
         numbers=none,              
         tabsize=1,
         extendedchars=true,         
         breaklines=true,
         language=Java,                              
         keywordstyle=\color{blue},       
         commentstyle=\color{comentaryGreen},
         rulecolor=\color{black},         
         showspaces=false,  
         showtabs=false,   
         showstringspaces=false, 
         xleftmargin=0pt,
         framexleftmargin=0pt,
         framexrightmargin=0pt,
         framexbottommargin=0pt,
 }
 \lstloadlanguages{
         Java
 } 
\usetheme{Antibes}
\usecolortheme{dolphin}

\begin{frame}
    \lstinputlisting[linerange={529-550}]{source/cGaussianBlur.java}
\end{frame}

\end{document}

(我使用的代码可以在http://imagej.nih.gov/ij/source/ij/plugin/filter/GaussianBlur.java

结果如下:

在此处输入图片描述

我怎样才能消除这些边距?

答案1

正如 dcmst 在他(她?)的评论例如,你可以关注Paul Gaborit 的方法局部增加文本宽度:

\begin{frame}
  \begin{columns}
    \column{\dimexpr\paperwidth-10pt}
      \lstinputlisting{cGaussianBlur.java}
  \end{columns}
\end{frame}

然而,左边仍然会有一些空白:

在此处输入图片描述

为什么?因为你的源文件缩进,并将listings在输出中包含该缩进;它将/可以不是去掉它。

实际上,确实listings提供了一个gobble键,用于删除列表每行开头的指定数量的空格。此外,Martin Scharrer 的lstautogobble软件包对此进行了改进,提供了一个名为的键autogobble,它会自动测量需要删除的空格数,这样您就不必自己指定该数字,如在MaxNoe 的回答

但是,这两种方法仅与“嵌入式”列表兼容,即存在于文件内.texlstlisting环境内(或类似环境)的列表。它们确实不是适用于外部列表,即位于外部文件中并通过\lstinpulisting宏插入的列表。

为了解决这个问题,我写道,一会儿回来,一个小包叫lstautodedent。它定义了一个名为 的键autodedent,其工作原理与lstautogobbleautogobble键非常相似。主要区别在于它既适用于嵌入式列表,也适用于外部列表。只有一个警告:它不能很好地与制表符配合使用。

我还没有在 CTAN 上提交这个包,但你可以.sty从我的GitHub 帐户

要使用它,请lstautodedent在您的前言中加载,autodedent像设置其他布尔键一样设置键listings,并且(假设您的源代码以空格字符而不是制表符缩进)您不会在左侧得到任何空格:

在此处输入图片描述

完整代码

\documentclass[]{beamer}

\usepackage{lstautodedent}

% this is only to write a fraction of your source file to 
% an external file and make my answer self-contained
\usepackage{filecontents}
\begin{filecontents*}{cGaussianBlur.java}
    public float[][] makeGaussianKernel(final double sigma, final double accuracy, int maxRadius) {
        int kRadius = (int)Math.ceil(sigma*Math.sqrt(-2*Math.log(accuracy)))+1;
        if (maxRadius < 50) maxRadius = 50;         // too small maxRadius would result in inaccurate sum.
        if (kRadius > maxRadius) kRadius = maxRadius;
        float[][] kernel = new float[2][kRadius];
        for (int i=0; i<kRadius; i++)               // Gaussian function
            kernel[0][i] = (float)(Math.exp(-0.5*i*i/sigma/sigma));
        if (kRadius < maxRadius && kRadius > 3) {   // edge correction
            double sqrtSlope = Double.MAX_VALUE;
            int r = kRadius;
            while (r > kRadius/2) {
                r--;
                double a = Math.sqrt(kernel[0][r])/(kRadius-r);
                if (a < sqrtSlope)
                    sqrtSlope = a;
                else
                    break;
            }
            for (int r1 = r+2; r1 < kRadius; r1++)
                kernel[0][r1] = (float)((kRadius-r1)*(kRadius-r1)*sqrtSlope*sqrtSlope);
        }
\end{filecontents*}


\usepackage{listings} 
\usepackage{color}
\definecolor{comentaryGreen}{rgb}{0,0.6,0}
\lstset{
         basicstyle=\tiny  ,
         numbers=none,              
         tabsize=1,
         extendedchars=true,         
         breaklines=true,
         language=Java,                              
         keywordstyle=\color{blue},       
         commentstyle=\color{comentaryGreen},
         rulecolor=\color{black},         
         showspaces=false,  
         showtabs=false,   
         showstringspaces=false, 
         xleftmargin=0pt,
         framexleftmargin=0pt,
         framexrightmargin=0pt,
         framexbottommargin=0pt,
         autodedent,
 }
 \lstloadlanguages{
         Java
 } 
\usetheme{Antibes}
\usecolortheme{dolphin}

\begin{document}

\begin{frame}
  \begin{columns}
    \column{\dimexpr\paperwidth-10pt}
      \lstinputlisting{cGaussianBlur.java}
  \end{columns}
\end{frame}

\end{document}

答案2

您的“问题”是您的代码的正确缩进。lstlisting是一个逐字环境,因此它会排版您的缩进的制表符。

该问题的解决方案由 -package 提供lstautogobble

\usepackage{listings}
\usepackage{lstautogobble}

\lstset{autogobble,
        ...,
        ...,
    }

它会减去适当数量的制表符,因此不会考虑您的 LaTeX 代码缩进。

相关内容