无法使用 tikz 制作真正的叠加层,并且 noto 字体使情况变得更糟

无法使用 tikz 制作真正的叠加层,并且 noto 字体使情况变得更糟

我想在幻灯片之间创建一个突出显示机制。但是,即使我在 tikz 中使用overlay,或者我手动重新定义边界框,突出显示也会移动我的元素。如果没有 noto 字体,基线对齐不佳,但使用 noto 字体时整条线都会移动:

比较在此处输入图片描述在此处输入图片描述

梅威瑟:

\documentclass[aspectratio=169]{beamer}

\RequirePackage[sfdefault]{noto}

\usepackage{tikz}
\usetikzlibrary{fit}
\usetikzlibrary{positioning}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\begin{document}

\begin{frame}[fragile]
  \def\myHighlight#1{%
    \begin{tikzpicture}[baseline=(a.base)]%
      \node[fill=green,inner sep=0pt](a){#1};%
      \only<3->{\begin{scope}[overlay]
          \begin{pgfonlayer}{background}
            \node[rounded corners,fill=green,fit=(a),inner sep=1pt](a){};%          
          \end{pgfonlayer}
        \end{scope}}
      \useasboundingbox (a.north east) rectangle (a.south west);
    \end{tikzpicture}%
  }
  \begin{itemize}
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \end{itemize}
\end{frame}


\end{document}

答案1

您重复使用了节点名称a,这意味着\useasboundingbox选择了突出显示节点而不是文本节点。要么给它起一个不同的名称,要么根本不要命名它。

\documentclass[aspectratio=169]{beamer}
%\url{https://tex.stackexchange.com/q/685231/86}
\RequirePackage[sfdefault]{noto}

\usepackage{tikz}
\usetikzlibrary{fit}
\usetikzlibrary{positioning}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}

\begin{document}

\begin{frame}[fragile]
  \def\myHighlight#1{%
    \begin{tikzpicture}[baseline=(a.base)]%
      \node[fill=green,inner sep=0pt](a){#1};%
      \only<3->{\begin{scope}[overlay]
          \begin{pgfonlayer}{background}
            \node[rounded corners,fill=green,fit=(a),inner sep=1pt](b){};% <-- node name change here
          \end{pgfonlayer}
        \end{scope}}
      \useasboundingbox (a.north east) rectangle (a.south west);
    \end{tikzpicture}%
  }
  \begin{itemize}
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \item [\only<1>{Hello}\only<2->{\myHighlight{Hello}}] BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla BlablaBlabla Blabla
  \end{itemize}
\end{frame}


\end{document}

相关内容