我以为不久前已经看到了这个问题的答案,但现在却找不到。
我有一个包含一些可变文本的文档,我想根据文本的尺寸在其后面绘制一个 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
到文档顶部,但坐标A
和B
尚未定义。我认为这应该在第二次运行时起作用。我认为remember picture
方面会记录节点。但这失败了。
答案1
blend mode=darken
并blend 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 picture
tikzpicture
通过在辅助文件中记住当前相对于当前页面的位置来实现。每个tikzpicture
将对应一行,如下所示
\pgfsyspdfmark {pgfid29}{21177794}{4593314}
其中pgfid29
表示这是第 29 个remember picture
。接下来的两个数字是 中的 x, y 坐标sp
。
每当你尝试访问一个节点时(A)
,Ti钾Z需要三个信息
- 坐标
(A)
- 包含图片的位置
(A)
- 当前图片的位置
如果没有tikzmark
辅助文件,则只知道最后两个要点。并将tikzmark
第一个要点放入辅助文件中。
顺便说一句:我不喜欢 的界面tikzmark
。对于那些想要重新实现的人,建议查看辅助文件以了解那里发生了什么。然后复制这个想法。