如何防止 beamer 删除 lstlisting 的制表符对齐?

如何防止 beamer 删除 lstlisting 的制表符对齐?

我想使用 在演示文稿幻灯片上显示我的 C# 代码片段beamer。由于代码很长,我使用框架选项将框架设置为可拆分allowframebreaks。现在代码可以在多个框架中显示。不幸的是,原始源中的制表符对齐不再保留。


替代文本


\documentclass[dvipsnames,cmyk]{beamer}
\usepackage{listings}

\lstset%
{%
   language=[Sharp]C,
   backgroundcolor=\color{Black},
   basicstyle=\color{White}\tiny\ttfamily,
   keywordstyle=\color{Orange},
   identifierstyle=\color{Cyan},
   stringstyle=\color{Red}, 
   commentstyle=\color{Green},  
   breaklines=true,
   breakatwhitespace=true,
   tabsize=10,
   showstringspaces=false%
}



\begin{document}
\begin{frame}[allowframebreaks,fragile]{MyListing}
\begin{lstlisting}
using System;

publid delegate void Foo(object o);

public class Program: object
{
 public static void Main(string[] args)
 {
   Console.WriteLine("Hello World");//This is a comment.
   /*This is a comment too.*/
 }
 public static void PSTricks(this object)
 {
   Say("I Love PSTricks!");

   Say("I Love PSTricks!");

   Say("I Love PSTricks!");

   Say("I Love PSTricks!");
 }

 public static void LaTeX(this object)
 {
   Say("I Love LaTeX too!");

   Say("I Love LaTeX too!");

   Say("I Love LaTeX too!");

   Say("I Love LaTeX too!");
 }

 public void Say(System.String message)
 {
   System.Text.StringBuilder sb=new System.Text.StringBuilder();

   sb.Append(messange);

   Console.WriteLine(sb);
 }
}
\end{lstlisting}
\end{frame}
\end{document}

编辑1:

这种不良行为仅发生在内联包含中。

如下图所示,从外部文件进行包含的效果很好。

替代文本

答案1

这行不通,因为易碎材料必须写入外部临时文件,然后由投影仪读回。标签在这里丢失了。请按如下方式使用:

\documentclass[dvipsnames,cmyk]{beamer}

\usepackage{listings}

\begin{document}

\defverbatim[colored]\Lst{%
\begin{lstlisting}[tabsize=2,showtabs,frame=single]
using System;
                publid delegate void Foo(object o);
\end{lstlisting}}

\begin{frame}[allowframebreaks]{MyListing}
\Lst
\end{frame}

\end{document}

顺便说一句:请提供最小例子 ... ;-)

相关内容