为什么我的脚注位置会随着字体大小而变化(以及如何修复它)?

为什么我的脚注位置会随着字体大小而变化(以及如何修复它)?

我正在创建一个新的 beamer 主题,它模仿现有的 powerpoint 模板。我花了相当多的时间让两种文档类型的脚注重叠,结果却发现脚注的位置取决于所选的字体大小。

这是 MWE(在正确位置带有虚拟徽标):

\documentclass[12pt]{beamer}%Changing the size here moves the footline logo
\usepackage{tikz}
\title{Hello world!}
\setbeamertemplate{footline}{%
\begin{beamercolorbox}[wd=\paperwidth,ht=.0769\paperheight,dp=0mm]{title in head/foot}%
\begin{center}%
\begin{tikzpicture}
\draw[fill=blue] (0.7094\paperwidth,0) rectangle (.9286484375\paperwidth,.0769\paperheight);
\draw[fill=blue] (0,.017\paperheight) rectangle (.6845\paperwidth,0.05\paperheight);
\end{tikzpicture}%
\end{center}%
\end{beamercolorbox}%
}
\setbeamertemplate{navigation symbols}{}
\begin{document}
\maketitle
\end{document}

这是 12pt 和 15pt 结果的比较,我使用的是 15pt 结果作为背景并将 12pt 结果涂成红色: 比较

12pt 大小的字体(红色)的底线略高于 15pt 大小的字体。为什么会出现这种情况?纸张宽度/纸张高度不应该取决于字体大小,因此我看不出它如何影响位置。

如果您无法重现该现象,请告诉我。

答案1

这是环境的定义center

\def\center{\trivlist \centering\item\relax}

和:

\def\endcenter{\endtrivlist}

\centering定义如下:

\def\centering{%
  \let\\\@centercr
  \rightskip\@flushglue\leftskip\@flushglue
  \parindent\z@\parfillskip\z@skip}

\trivlist定义为:

\def\trivlist{%
  \parsep\parskip
  \@nmbrlistfalse
  \@trivlist
  \labelwidth\z@
  \leftmargin\z@
  \itemindent\z@
  \let\@itemlabel\@empty
  \def\makelabel##1{##1}}

我们有:

\def\@trivlist{%
  \if@noskipsec \leavevmode \fi
  \@topsepadd \topsep
  \ifvmode
    \advance\@topsepadd \partopsep
  \else
    \unskip \par
  \fi
  \if@inlabel
    \@noparitemtrue
    \@noparlisttrue
  \else
    \if@newlist \@noitemerr \fi
    \@noparlistfalse
    \@topsep \@topsepadd
  \fi
  \advance\@topsep \parskip
  \leftskip \z@skip
  \rightskip \@rightskip
  \parfillskip \@flushglue
  \par@deathcycles \z@
  \@setpar{\if@newlist
             \advance\par@deathcycles \@ne
             \ifnum \par@deathcycles >\@m
               \@noitemerr
               {\@@par}%
             \fi
           \else
             {\@@par}%
           \fi}%
  \global \@newlisttrue
  \@outerparskip \parskip}

\endtrivlist是:

\def\endtrivlist{%
  \if@inlabel
    \leavevmode
    \global \@inlabelfalse
  \fi
  \if@newlist
    \@noitemerr
    \global \@newlistfalse
  \fi
  \ifhmode\unskip \par
  \else
    \@inmatherr{\end{\@currenvir}}%
  \fi
  \if@noparlist \else
    \ifdim\lastskip >\z@
      \@tempskipa\lastskip \vskip -\lastskip
      \advance\@tempskipa\parskip \advance\@tempskipa -\@outerparskip
      \vskip\@tempskipa
    \fi
    \@endparenv
  \fi
}

这里的垂直间距是相对于字体大小的。例如,Beamer 将其定义\parskip为,\setlength\parskip{0\p@}% \@plus \p@}并且\p@相对于字体大小。

因此,垂直间距取决于字体大小。

相比之下,\centering插入会跳过依赖于字体大小的内容,而这些只会影响水平的间距-不是垂直间距。

一般来说,如果您不想改变垂直间距(或者您不想让该间距取决于字体大小或可拉伸),则该center环境不是正确的选择。

相关内容