在 Beamer 中水平居中列出

在 Beamer 中水平居中列出

listings我正在尝试将Beamer 幻灯片中的列表排版居中。出现了一些我无法理解的奇怪行为。

我已经测试了 3 种定心方法:

  • 环境center
  • 命令\centering
  • 环境centering

这些都不能产生居中列表。

此外,使用该center环境会导致列表在第一行代码之前包含一个额外的小垂直空间。

如果我将列表包装在tikz节点中,所有方法都可以使用,尽管center会保留额外的垂直空间。我无法用包装列表,\makebox因为它会干扰解析。

问题是:为什么会发生这种情况?我该如何解决?

梅威瑟:

\documentclass{beamer}

\usepackage{listings}
\usepackage{tikz}
\lstset{basicstyle=\ttfamily}

\begin{document}

% REGULAR, EXPECTED BEHAVIOUR
\begin{frame}[fragile]{No centering}
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
  \par Bla\par
\end{frame}

% NO CENTERING ACHIEVED, STRANGE EXTRA VERTICAL SPACE
\begin{frame}[fragile]{Center Env}
\begin{center}%
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}%
  \par Bla\par
\end{center}
\end{frame}

\begin{frame}[fragile]{Centering}
  \centering%
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
  \par Bla\par
\end{frame}

\begin{frame}[fragile]{Centering Env}
  \begin{centering}%
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
  \par Bla\par
  \end{centering}
\end{frame}

\begin{frame}[fragile]{Center Env + Tikz node}
  \begin{center}%
  \tikz\node{%
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
  };
  \par Bla\par
  \end{center}
\end{frame}

\begin{frame}[fragile]{Centering + Tikz node}
  \centering%
  \tikz\node{%
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
  };
  \par Bla\par
\end{frame}

%%% GENERATES AN ERROR
% \begin{frame}[fragile]{Error}
%   \begin{center}%
%   \makebox{%
%   \begin{lstlisting}[gobble=4]
%     hello := "world";
%     there := 1;
%   \end{lstlisting}%
%   }
%   \end{center}
% \end{frame}

\end{document}

编辑

谢谢这个答案我找到了一个使用保存箱的解决方案:

\newsavebox{\codebox}
\begin{lrbox}{\codebox}
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
\end{lrbox}

\begin{frame}[fragile]{Centering}
  \centering%
  \usebox{\codebox}
  \par Bla\par
\end{frame}

\begin{frame}[fragile]{Centering Env}
  \begin{centering}%
  \usebox{\codebox}
  \par Bla\par
  \end{centering}
\end{frame}

问题仍然存在:为什么会发生这种情况(额外的 vspace 特别神秘)并且有没有更好的方法?

答案1

解决方法:

如果您人为地使线宽变小(例如,通过将列表包装在小页面中),则整个列表可以居中,但文本仍然会相对于小页面保持对齐。

\documentclass{beamer}

\usepackage{listings}
\usepackage{tikz}
\lstset{basicstyle=\ttfamily}

\begin{document}


\begin{frame}[fragile]{No centering}
    \centering
    \begin{minipage}{.381\textwidth}
  \begin{lstlisting}[gobble=4]
    hello := "world";
    there := 1;
  \end{lstlisting}
    \end{minipage}
  \par Bla\par
\end{frame}




\end{document}

在此处输入图片描述

相关内容