后台的 hf-tikz

后台的 hf-tikz

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就很容易了,因为您知道分页符在哪里。

您可以将所有\tikzmarkdraws 放在框架的开头。

代码

\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}

在此处输入图片描述

相关内容