Beamer:在框架内缩进代码

Beamer:在框架内缩进代码

我使用 TexMaker。使用我一直使用的序言,我能够在文章、报告等中使用程序时正确缩进。但是当我在 beamer 中的框架内使用相同的结构时,缩进会被忽略。我尝试了其他类似帖子中建议的修复方法,但对我都不起作用。

梅威瑟:

\documentclass{beamer}
\usetheme{boadilla}
\usecolortheme{beaver}
\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{%frame=tb, % to form a frame around code
   language=Java,
   aboveskip=3mm,
   belowskip=3mm,
   showstringspaces=false,
   columns=flexible,
   basicstyle={\small\ttfamily},
   numbers=none,
   numberstyle=\tiny\color{gray},
   keywordstyle=\color{blue},
   commentstyle=\color{dkgreen},
   stringstyle=\color{mauve},
   breaklines=true,
   breakatwhitespace=true,
   tabsize=3,
}

\begin{document}
\begin{frame}[fragile]
\frametitle{Sample Program}
\begin{lstlisting}
public int increment() {
    int a = 5;
    int i = (++a) + (++a) + (a++);
    System.out.println(a);
    return i;
}
\end{lstlisting}
\end{frame}
\end{document}

我得到的输出:

在此处输入图片描述

答案1

这是由于制表符缩进造成的。有许多解决方法,以及一个补丁。

类似的问题之前也曾被问过[12]。在这些情况下,建议的解决方案是使用空格而不是制表符来缩进,或者为每个列表定义一个新命令。

另一种可能性是使用fragile=singleslide。这将禁用覆盖,但会使选项卡正常运行。

基本问题是,当使用选项beamer将框架内容写入临时文件时,制表符会消失fragile。下面有一个修复此问题的补丁;beamer加载后,可以将其添加到文档的序言中。请注意,如果您将其与 XeTeX 引擎一起使用,则需要使用-8bit命令行选项(请参阅了解详情)。我还打开了Beamer github 页面上的一个问题为了这。

\makeatletter
\def\beamer@verbatimreadframe{%
  \begingroup%
  \let\do\beamer@makeinnocent\dospecials%
  \count@=127%
  \@whilenum\count@<255 \do{%
    \advance\count@ by 1%
    \catcode\count@=11%
  }%
  \beamer@makeinnocent\^^L% and whatever other special cases
  \beamer@makeinnocent\^^I% <-- PATCH: allows tabs to be written to temp file
  \endlinechar`\^^M \catcode`\^^M=12%
  \@ifnextchar\bgroup{\afterassignment\beamer@specialprocessframefirstline\let\beamer@temp=}{\beamer@processframefirstline}}%
\makeatother

相关内容