tikz 节点内的 Overprint 环境:内容意外对齐

tikz 节点内的 Overprint 环境:内容意外对齐

我想在 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,我可以提供两种方法来“取消”效果。当环境发挥作用时,这两种方法都可以消除效果。overprintoverprintcentreoverprint

请注意,由于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不理想。

套印和中心整理

相关内容