我想在幻灯片之间创建一个突出显示机制。但是,即使我在 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}