当我使用的环境放置一些column
s时,默认情况下它们水平间距相等,忽略边距(即列之间的间距与到框架边缘的间距相同)。但是,当我使用参数更改它们的总宽度时,包含所有列的框现在左对齐(即第一列的左边缘位于类型区域的左边缘,最后一列的右边缘位于该区域的右边缘)。beamer
columns
totalwidth
totalwidth
我怎样才能将列框置于类型区域的中心(或者,在页面上)?
\centering
没有效果。我当然可以将整个内容包装在 中,但在我看来,minipage
这有点违背了设置的意义。此外,由于即使在 中仍会补偿框架边距,因此我仍然必须在 中使用(或等效地) 。我觉得我在这里遗漏了一些东西;应该有更简单的方法,对吧?totalwidth
columns
minipage
totalwidth
onlytextwidth
minipage
梅威瑟:
\documentclass{beamer}
\def\examplecols#1{%
\begin{column}{#1}
\rule{\textwidth}{1ex}
\end{column}
\begin{column}{#1}
\rule{\textwidth}{1ex}
\end{column}
}
\begin{document}
\begin{frame}
% Default behavior: equal spacing ignoring margins.
\begin{columns}
\examplecols{.5\textwidth}
\end{columns}
% Text width, for reference.
\rule{\textwidth}{1ex}
% Custom totalwidth: \centering has no effect.
\centering
\begin{columns}[totalwidth=.45\textwidth]
\examplecols{.2\textwidth}
\end{columns}
\vfill
% With a minipage (0.2 / 0.45 = 0.4444...):
\begin{minipage}{.45\textwidth}
% Default behavior: Still compensating for margins.
\begin{columns}
\examplecols{.4444\textwidth}
\end{columns}
% Text width, for reference.
\rule{\textwidth}{1ex}
% Custom totalwidth: This is what I actually want.
\begin{columns}[totalwidth=\textwidth]
\examplecols{.4444\textwidth}
\end{columns}
\end{minipage}
\end{frame}
\end{document}
答案1
您可以像这样重新定义 totalwidth 键:
\documentclass{beamer}
\makeatletter
\define@key{beamer@col}{totalwidth}{%
\def\beamer@colentrycode{\hfill\hbox to#1\bgroup\ignorespaces}%
\def\beamer@colexitcode{\unskip\egroup\hfill}}
\makeatother
\def\examplecols#1{%
\begin{column}{#1}
\rule{\textwidth}{1ex}
\end{column}
\begin{column}{#1}
\rule{\textwidth}{1ex}
\end{column}
}
\begin{document}
\begin{frame}
\begin{columns}[totalwidth=.45\textwidth]
\examplecols{.2\textwidth}
\end{columns}
\end{frame}
\end{document}