我想在 tikz-node 中使用 overprint 环境。我希望 overprint 部分的内容文本居中对齐,但它向右对齐,甚至略微超出 overprint/nodes 边界。
最小示例输出:
我遗漏了什么以及如何修复该问题?
另外,我不希望套印出现抖动,它确实会出现一点抖动,但我希望这个问题会通过修复自动消失。
最小示例代码:
\documentclass[transparent]{beamer}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{positioning}
\begin{document}
\begin{frame}%
\begin{center}
\begin{tikzpicture}[every node/.style={draw}]
\onslide<+->{\node(a){test1};}
\onslide<+->{\node(b)[below=of a,align=center]{
\begin{overprint}[4cm]
\onslide<+>
$a=b$
\onslide<+>
$b=c$
\onslide<+>
$c=d$
\end{overprint}
};}
\node(c)[below=of b]{test2};
\end{tikzpicture}
\end{center}
\end{frame}%
\end{document}
答案1
这是由于overprint
工作原理和center
环境之间的不良交互造成的。由于在确定要使用哪个文本center
时环境处于有效状态,因此文本会获得一些额外的水平空间(以使其居中)。但是当设置文本时,它会以某种方式修改它,以便 TeX 增加更多空间使其再次居中。最终结果是文本被推得太靠右了。感谢 David Carlisle 和 Herbert,我可以提供两种方法来“取消”效果。当环境发挥作用时,这两种方法都可以消除效果。overprint
overprint
centre
overprint
请注意,由于overprint
工作方式,要获得内容居中,你必须添加\centering
到每个部分。没有其他方法可以做到这一点。在下面,我假设这就是你想要发生的事情。
\documentclass[transparent]{beamer}
\usepackage[english]{babel}
\usepackage{amsmath}
\usepackage{tikz}
\usetikzlibrary{positioning}
\makeatletter
\def\normaljustify{%
\let\\\@centercr
\rightskip\z@skip
\leftskip\z@skip%
\parfillskip=0pt plus 1.0fil\relax
}
\makeatother
\begin{document}
\begin{frame}%
\begin{center}
\begin{tikzpicture}[every node/.style={draw}]
\onslide<+->{\node(a){Herbert's code};}
\onslide<+->{\node(b)[below=of a,align=center]{%
\normaljustify
\begin{overprint}[4cm]
\onslide<+>
\centering
$a=b$
\onslide<+>
\centering
$b=c$
\onslide<+>
\centering
$c=d$
\end{overprint}
};}
\node(c)[below=of b]{test2};
\end{tikzpicture}
\begin{tikzpicture}[every node/.style={draw}]
\onslide<+->{\node(a){David Carlisle's code};}
\onslide<+->{\node(b)[below=of a,align=center]{%
\begin{minipage}{\textwidth}%
\begin{overprint}[4cm]
\onslide<+>
\centering
$a=b$
\onslide<+>
\centering
$b=c$
\onslide<+>
\centering
$c=d$
\end{overprint}%
\end{minipage}
};}
\node(c)[below=of b]{test2};
\end{tikzpicture}
\end{center}
\end{frame}%
\end{document}
我不确定我更喜欢这两种方法中的哪一种。关于 David 的方法(附加minipage
),有一点需要注意,那就是如果您在迷你页面中放入任何“正常”内容(例如裸文本),那么页面的宽度将\textwidth
不理想。