Tikz Node - 防止 TikZ 在行内添加空格

Tikz Node - 防止 TikZ 在行内添加空格

我有一个自动命令,可以在特定文本的顶部添加一个省略号,以便我可以在演示文稿中突出显示它(深受启发\newcommand:如何确定是否处于数学模式(然后包括$ $)?)。

问题是 tikz 节点比原始文本大,这在幻灯片过渡中会使我的文本“跳舞”。

有没有办法防止 tikz 在实际文本参数之外添加任何空格?我尝试使用remember picture,overlay带有节点大小的选项phantom{},但阴影会出现在错误的位置。

平均能量损失


\documentclass[]{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes,calc}

\newif\ifsmm
\newcommand*{\mysmc}[1]{%
\relax\ifmmode\smmtrue\else\smmfalse\fi%
\tikz[baseline=(text.base)]%
\node(text)[ellipse, fill=blue, fill opacity=0.2, inner sep=0.2mm, text opacity=1]%
{\ifsmm$#1$\else#1\fi};%
}

\begin{document}

\begin{frame}
This is the example without a highlighted word.\\
This is \mysmc{the} example with a highlighted word. (text is shifted)\\[1cm]

This \mysmc{\color{blue}is} the example with a different size. $a^2+\mysmc{b^2}=c$
\end{frame}
\end{document}

答案1

您需要覆盖来忽略多余的宽度,但您还需要\hspace保留空间并使覆盖居中。

\documentclass[]{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes,calc}

\newsavebox\smmbox
\newif\ifsmm
\newcommand*{\mysmc}[1]{%
\relax\ifmmode\smmtrue\else\smmfalse\fi%
\savebox{\smmbox}{\ifsmm$#1$\else#1\fi}%
\hspace{0.5\wd\smmbox}% half way
\tikz[overlay,baseline=(text.base)]{%
\node(text)[ellipse, fill=blue, fill opacity=0.2, inner sep=0.2mm, text opacity=1]%
{\usebox{\smmbox}};}%
\hspace{0.5\wd\smmbox}}

\begin{document}

\begin{frame}
This is the example without a highlighted word.\\
This is \mysmc{the} example with a highlighted word. (text is shifted)\\[1cm]

This \mysmc{\color{blue}is} the example with a different size. $a^2+\mysmc{b^2}=c$
\end{frame}
\end{document}

演示

答案2

消除偏移的一种方法是,在每张幻灯片上排版椭圆,但仅在某些幻灯片上填充或绘制椭圆。

但是,无论您选择哪个选项,我都建议您使命令覆盖规范可感知。

以下是一个例子:

\documentclass[]{beamer}
\usepackage{tikz}
\usetikzlibrary{shapes.geometric}
\newif\ifsmm
\newcommand<>{\mysmc}[1]{%
  \relax\ifmmode\smmtrue\else\smmfalse\fi%
  \def\tempa{}%
  \def\tempb{#2}%
  \ifx\tempa\tempb
    \tikz[baseline=(text.base)]{%
    \node (text) [highlighted, ellipse, fill opacity=0.2, inner sep=0.2mm, text opacity=1] {\ifsmm$#1$\else#1\fi};
  }%
  \else
  \tikz[baseline=(text.base)]{%
    \node (text) [highlight on=#2, ellipse, fill opacity=0.2, inner sep=0.2mm, text opacity=1] {\ifsmm$#1$\else#1\fi};
  }%
  \fi
}
\tikzset{% set up for transitions using tikz with beamer overlays - developed by Daniel (http://tex.stackexchange.com/a/55849/) and, in earlier form, by Matthew Leingang (http://tex.stackexchange.com/a/6155/) and modified for this use, I think by Qrrbrbirlbel (http://tex.stackexchange.com/a/112471/)
    alt/.code args={<#1>#2#3}{%
      \alt<#1>{\pgfkeysalso{#2}}{\pgfkeysalso{#3}} % \pgfkeysalso doesn't change the path
    },
    highlighted/.style={fill=blue},
    highlight on/.style={alt=#1{highlighted}{}},
}
\begin{document}
\begin{frame}
  This is the example without a highlighted word.\\
  This is \mysmc<2->{the} example with a highlighted word. (text is shifted)\\[1cm]

  This \mysmc{\color{blue}is} the example with a different size. $a^2+\mysmc<2->{b^2}=c$
\end{frame}
\end{document}

\mysmc现在采用可选的覆盖规范。如果\mysmc{}使用,该命令将执行它一贯执行的操作。如果\mysmc<>{}使用,将在每张幻灯片上构建一个椭圆,但仅在覆盖规范中指定的幻灯片上填充。

在上面的例子中,命令的第一个和第三个实例指定<2->它们的椭圆仅在幻灯片 2 上填充。第二个实例没有覆盖规范,因此它的椭圆在幻灯片 1 和 2 上填充。

这确保为椭圆留下足够的空间。虽然这确实会在非突出显示的幻灯片上创建额外的空间,但我认为这在演示中比试图将椭圆挤压到比它实际需要的更少的空间要好。

输出如下:

带有和不带有叠加规格的突出显示幻灯片

相关内容