水平居中光束柱,具有自定义总宽度

水平居中光束柱,具有自定义总宽度

当我使用的环境放置一些columns时,默认情况下它们水平间距相等,忽略边距(即列之间的间距与到框架边缘的间距相同)。但是,当我使用参数更改它们的总宽度时,包含所有列的框现在左对齐(即第一列的左边缘位于类型区域的左边缘,最后一列的右边缘位于该区域的右边缘)。beamercolumnstotalwidthtotalwidth

我怎样才能将列框置于类型区域的中心(或者,在页面上)?

\centering没有效果。我当然可以将整个内容包装在 中,但在我看来,minipage这有点违背了设置的意义。此外,由于即使在 中仍会补偿框架边距,因此我仍然必须在 中使用(或等效地) 。我觉得我在这里遗漏了一些东西;应该有更简单的方法,对吧?totalwidthcolumnsminipagetotalwidthonlytextwidthminipage

梅威瑟:

\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}

MWE 输出

答案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}

在此处输入图片描述

相关内容