页面上文本后面的 Tikz 图片

页面上文本后面的 Tikz 图片

我以为不久前已经看到了这个问题的答案,但现在却找不到。

我有一个包含一些可变文本的文档,我想根据文本的尺寸在其后面绘制一个 TikZ 图片。

我知道我可以使用 TikZ 的opacity参数来实现我想要的效果,但是我真的不喜欢这种方法。

因此,这是我使用图层的尝试。我以为我理解了这一点,但显然我弄错了。

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc}
\usetikzlibrary{backgrounds}
\pgfdeclarelayer{background}
\pgfdeclarelayer{foreground}
\pgfsetlayers{background,main,foreground}
\begin{document}

\begin{minipage}{2in}
\tikz[remember picture] \coordinate (A);%%
  Hello world
\tikz[remember picture] \coordinate (B);%%

\begin{tikzpicture}[remember picture,overlay]
  \begin{pgfonlayer}{background}
    \coordinate (nA) at ([yshift=14pt]A)  ;
    \coordinate (sB) at ([yshift=-14pt]B);
    \draw (nA) -- (sB);
    \draw[fill=orange!80] (nA) rectangle (sB);
    %% ----------------------------------------------------
    %% I know this next line kind of achieves what I want.  
    %% I just prefer not to do it this way.                 
    %% ----------------------------------------------------
    % \draw[fill=orange,opacity=0.80] (nA) rectangle (sB);  
  \end{pgfonlayer}
\end{tikzpicture}
\end{minipage}

\end{document}

结果:

在此处输入图片描述

我尝试将 移动tikzpicture到文档顶部,但坐标AB尚未定义。我认为这应该在第二次运行时起作用。我认为remember picture方面会记录节点。但这失败了。

答案1

blend mode=darkenblend mode=multiply真正起到作用

\documentclass{article}
\usepackage{tikz}
\begin{document}

Hello world
\tikz[remember picture] \coordinate (A);%
Hello world
\tikz[remember picture] \coordinate (B);%
Hello world

\begin{tikzpicture}[remember picture,overlay]
    \coordinate (nA) at ([yshift=14pt]A);
    \coordinate (sB) at ([yshift=-14pt]B);
    \draw[fill=orange,blend mode=darken] (nA) rectangle (sB);
\end{tikzpicture}

\end{document}

另一种方法是使用tikzmark

\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{tikzmark}
\begin{document}

\begin{tikzpicture}[remember picture,overlay]
    \coordinate (nA) at ([yshift=14pt]pic cs:A);
    \coordinate (sB) at ([yshift=-14pt]pic cs:B);
    \draw[fill=orange] (nA) rectangle (sB);
\end{tikzpicture}

Hello world
\tikzmark{A}
Hello world
\tikzmark{B}
Hello world

\end{document}

为什么tikzmark在这种情况下(有点)是必要的?

remember picturetikzpicture 通过在辅助文件中记住当前相对于当前页面的位置来实现。每个tikzpicture将对应一行,如下所示

\pgfsyspdfmark {pgfid29}{21177794}{4593314}

其中pgfid29表示这是第 29 个remember picture。接下来的两个数字是 中的 x, y 坐标sp

每当你尝试访问一个节点时(A),TiZ需要三个信息

  • 坐标(A)
  • 包含图片的位置(A)
  • 当前图片的位置

如果没有tikzmark辅助文件,则只知道最后两个要点。并将tikzmark第一个要点放入辅助文件中。

顺便说一句:我不喜欢 的界面tikzmark。对于那些想要重新实现的人,建议查看辅助文件以了解那里发生了什么。然后复制这个想法。

相关内容