如果您编译以下代码,您会注意到从幻灯片 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}
现在它们看起来完全对齐了(当然,这里的红线只是为了显示两个框架之间的对齐而添加的):