使用 prftree、tikz 和 beamer 进行垂直对齐

使用 prftree、tikz 和 beamer 进行垂直对齐

如果您编译以下代码,您会注意到从幻灯片 1 过渡到幻灯片 2 会导致幻灯片 1 中预先存在的图形略微向上移动。我想将其固定在原位,避免其位置发生任何明显的变化。我尝试过 hphantom、vhantom 和类似工具,但这是我能做到的最好的。我猜不同的间距是由于幻灯片 1 中的 noline 命令造成的,所以可能有一些方法可以解决这个问题,方法是保留线条并将其涂成白色,或者手动添加缺失的垂直空间,但我不知道该怎么做。

% !TeX program = xelatex

\documentclass[xcolor=dvipsnames]{beamer}

\usepackage{prftree}
\usepackage{tikz}

\begin{document}
 \begin{frame}
  \begin{figure}
    \centering
    \begin{tikzpicture}
        \uncover<1>{
            \draw (0,0) node {$\prftree[r,noline]{\hphantom{$\scriptstyle (\otimes)$}} {\prfsummary[$\!\Pi_1$]{\vdash \Gamma,A}} {\prfsummary[$\!\Pi_2$]{\vdash \Delta,B}} {}$};
        }
        \uncover<2->{
            \draw (0,0) node {$\prftree[r]{$\scriptstyle (\otimes)$} {\prfsummary[$\!\Pi_1$]{\vdash \Gamma,A}} {\prfsummary[$\!\Pi_2$]{\vdash \Delta,B}} {\vdash \Gamma,\Delta,A \otimes B}$};
        }
    \end{tikzpicture}
  \end{figure}
 \end{frame}
\end{document}

答案1

你猜对了,问题就在于第一帧没有这条线。

线条粗细应为,加上前后\prflinethickness的填充。\prflinepadbefore\prflinepadafter

我尝试添加一条没有尺寸且高度低于基线的规则,\prflinethickness+\prflinepadbefore+\prflinepadafter但仍然不正确。经过反复尝试,我找到了以下解决方案:

% !TeX program = xelatex

\documentclass[xcolor=dvipsnames]{beamer}

\usepackage{prftree}
\usepackage{tikz}
\usepackage{amsmath}
\newlength{\mylen}
\setlength{\mylen}{\prflinethickness}
\addtolength{\mylen}{\prflinepadbefore}
%\addtolength{\mylen}{\prflinepadafter}
\addtolength{\mylen}{.2ex}
\begin{document}
 \begin{frame}
  \begin{figure}
    \centering
    \begin{tikzpicture}
        \uncover<1>{%
            \node  {$\prftree[r,noline]{\phantom{$\scriptstyle (\otimes)$}}{\prfsummary[$\!\Pi_1$]{\vdash \Gamma,A}}{\prfsummary[$\!\Pi_2$]{\vdash \Delta,B\text{\rule[-\mylen]
            {0pt}{0pt}}}}{}$};%
        }
        \uncover<2->{%
            \node {$\prftree[r]{$\scriptstyle (\otimes)$}{\prfsummary[$\!\Pi_1$]{\vdash \Gamma,A}}{\prfsummary[$\!\Pi_2$]{\vdash \Delta,B}}{\vdash \Gamma,\Delta,A \otimes B}$};%
        }
    \end{tikzpicture}
  \end{figure}
 \end{frame}
\end{document}

现在它们看起来完全对齐了(当然,这里的红线只是为了显示两个框架之间的对齐而添加的):

在此处输入图片描述

相关内容