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}