我试图理解为什么修改右边距会改变宽度等于纸张宽度的框的位置。
\documentclass{beamer}
%\setbeamersize{text margin right=0cm}
% Modifying the right margin makes the beamercolorbox move to the right althought the box still
% is of width paperwidth.
% The LINEND is moving as expected.
\setbeamercolor{bgcolor}{fg=black,bg=red}
\setbeamertemplate{frametitle}{\begin{beamercolorbox}[wd=\paperwidth]{bgcolor}Box\end{beamercolorbox}}
\begin{document}
\begin{frame}{Title}
LINESTART \hfill LINEEND
\end{frame}
\end{document}
答案1
\setbeamersize{text margin right=0cm}
工作正常,但\begin{beamercolorbox}[wd=\paperwidth] ...
会自动使其内容居中。例如,当您将...
的部分更改为 时,这一点会更清楚\setbeamertemplate{frametitle}{...}
\begin{beamercolorbox}[wd=\dimexpr\paperwidth-1cm\relax] ...
或者\leavevmode\rule{\dimexpr\paperwidth-1cm\relax}{1pt}
。
来自beamer
v3.59 用户指南,第 12.5 节,关键wd
文档beamercolorbox
,
如果宽度大于正常文本宽度(由 的值指定)
\textwidth
,则结果框的宽度将重置为宽度\textwidth
,但会在框的左端和右端插入智能负跳过。
在您的示例中,\paperwidth = <text margin left> + \textwidth + <text margin right>
,其中<text margin left> = 1cm
和<text margin right>
设置为0pt
。因此\paperwidth > \textwidth
。
答案2
我对这个问题有以下解决方案。由于某些我仍然不完全理解的原因,beamercolorbox 的行为与我对手册的理解不同。然而,对几个案例的实验让我修正了位置,这可以在改变投影仪大小后进行。将这些修正放入我自己的 beamerFix 包中是我目前幻灯片生成的解决方案。希望这个想法对来这里的其他人有所帮助——也许会找到更好的解决方案。
\documentclass[aspectratio=169]{beamer}
\makeatletter
\newlength\beamerFix@deltaMargin
\setlength\beamerFix@deltaMargin{\dimexpr 0.5\beamer@leftmargin - 0.5\beamer@rightmargin}
\setbeamersize{text margin left=0.4cm, text margin right=0.4cm}
\addtolength\beamerFix@deltaMargin{\dimexpr 0.5\beamer@rightmargin - 0.5\beamer@leftmargin}
\makeatother
\setbeamercolor{bgcolor}{fg=black,bg=red}
\makeatletter
\setbeamertemplate{frametitle}{%
\nointerlineskip\ifdim\beamerFix@deltaMargin>0cm{}\else{\hspace*{\beamerFix@deltaMargin}}\fi%
\begin{beamercolorbox}[wd=\paperwidth]{bgcolor}Box \hfill \insertframetitle \hfill End\end{beamercolorbox}%
}
\makeatother
\begin{document}
\begin{frame}{Title}
Start \hfill End
\end{frame}
\end{document}