我hf-tikz
在 Beamer 演示文稿中经常使用它。每次使用它时,我发现一个非常烦人的事情是,如果提供突出显示的矩形恰好位于 和 命令所包围的文本之前的文本上\tizmarkin
,\tikzmarkend
则这些文本将被隐藏。
例如,参见此 MWE
\documentclass{beamer}
\usepackage{tikz}
\usepackage[beamer]{hf-tikz}
\begin{document}
\begin{frame}
\begin{align*}
\mathbf{\hat{f}}(\tikzmarkin<2>[above left offset={-1.1,0.35},below right offset={1.0,-1.35}]{myhl}t+R\tikzmarkend{myhl}) &= a + b + c
\end{align*}
\end{frame}
\end{document}
产生此结果(错位是由于不良的屏幕截图造成的)
有办法避免这种情况吗?或者(我担心)这是hf-tikz
工作方式的一部分,因此无法以某种方式绕过?
答案1
已经有近hf-tikz
十年的历史了,并且并没有提供太多不能直接用来实现的功能,tikzmark
这基本上就是我在这里所做的,但是使用了 的原始界面hf-tikz
。
这是:标记突出显示部分的开始和结束,但\tikzmarkdraw
要尽早标记,以便绘制它前 \mathbf{\hat{f}}
放到页面上,但需要在同一页上。这样beamer
就很容易了,因为您知道分页符在哪里。
您可以将所有\tikzmarkdraw
s 放在框架的开头。
代码
\documentclass{beamer}
\usepackage{tikz}
\usepackage[beamer]{hf-tikz}
\NewDocumentCommand{\tikzmarkbegin}{m}{\tikzmarkend{begin-#1}}
\NewDocumentCommand{\tikzmarkdraw}{D<>{.-} O{} m}{%
\only<#1>{%
\tikz[remember picture,overlay]\draw[hf/rect,#2]
([shift={(\aboveleftoff)}]pic cs:begin-#3) rectangle
% node [anchor=base] (node-#3) {}
([shift={(\belowrightoff)}]pic cs:#3);%
}%
}
\tikzset{hf/rect/.style={line width=+1pt, fill=\fcol, draw=\bcol, rounded corners}}
\begin{document}
\begin{frame}
\begin{align*}
\tikzmarkdraw<2>[above left offset={-1.1,0.35},below right offset={1.0,-1.35}]{myhl}
\mathbf{\hat{f}}(\tikzmarkbegin{myhl} t + R\tikzmarkend{myhl}) &= a + b + c
\end{align*}
\end{frame}
\end{document}
输出
答案2
没有必要将 hf-tikz 注释移到背景中。您可以改为更改blend mode
:
\documentclass{beamer}
\usepackage{tikz}
\usepackage[beamer]{hf-tikz}
\begin{document}
\begin{frame}
\begin{align*}
\mathbf{\hat{f}}(\tikzmarkin<2>[above left offset={-1.1,0.35},below right offset={1.0,-1.35},blend mode=multiply]{myhl}t+R\tikzmarkend{myhl}) &= a + b + c
\end{align*}
\end{frame}
\end{document}
答案3
由于您仅在第二个覆盖层上显示框,因此您可以使用tikzmark
库并在等式之前绘制背景:
\documentclass{beamer}
\setbeamertemplate{background canvas}{\includegraphics[scale=2]{example-image-duck}}
\usepackage{tikz}
\usetikzlibrary{tikzmark,fit}
\begin{document}
\begin{frame}
\begin{tikzpicture}[overlay, remember picture]
\node<2> [draw=pink!50!violet,thick,fill=orange!30!white, rounded corners, inner xsep=7pt, fit=(myhl)] {};
\end{tikzpicture}
\begin{align*}
\mathbf{\hat{f}}(\tikzmarknode{myhl}{t+R}) &= a + b + c
\end{align*}
\pause
\end{frame}
\end{document}
如果您想在所有覆盖层上显示它,您可以将其添加到背景层:
\documentclass{beamer}
\setbeamertemplate{background canvas}{\includegraphics[scale=2]{example-image-duck}}
\usepackage{tikz}
\usetikzlibrary{tikzmark,fit}
\begin{document}
{
\addtobeamertemplate{background canvas}{}{ \begin{tikzpicture}[overlay, remember picture]
\node [draw=pink!50!violet,thick,fill=orange!30!white, rounded corners, inner xsep=7pt, fit=(myhl)] {};
\end{tikzpicture}
}
\begin{frame}
\begin{align*}
\mathbf{\hat{f}}(\tikzmarknode{myhl}{t+R}) &= a + b + c
\end{align*}
\end{frame}
}
\end{document}