突出显示 TikZ 图形的一部分

突出显示 TikZ 图形的一部分

我正在寻找一种使用透明度/不透明度来突出显示我生成的 TikZ 图形中的特定区域的方法。更具体地说,我有一个 TikZ 图形,它说明了几个概念之间的关系。在我第一次展示这个图之后,我想在稍后详细讨论特定概念时在我的文档中重复使用它。为了清楚地说明讨论了图中的哪个概念,我想突出显示图中的相关部分。如果有一种方法可以让我保持图形的相关部分不变,并使用不透明度使图形的其余部分稍微褪色,那就太好了。有没有简单的方法可以做到这一点?

更新:这是 MWE:

\documentclass[10pt]{article}

\usepackage{tikz}
\usepackage{fancyhdr}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}

\begin{document}

\thispagestyle{empty}

\begin{tikzpicture}[
  opacity=0.5,
  box/.style={rectangle,draw=black,
    minimum size=1cm,text width=2.2cm,text centered,font=\small}]

%%% coordinates
  \coordinate (CM) at ( 0.0, 3.0);
  \coordinate (DM) at ( 0.0, 6.0);
  \coordinate (MM) at ( 0.0, 9.0);
  \coordinate (PR) at ( 0.0,12.0);

%%% nodes  
  \node[box] (cm) at (CM) {box 1};
  \node[box] (dm) at (DM) {box 2};
  \node[box] (mm) at (MM) {box 3};   
  \node[box] (pr) at (PR) {box 4}; 

%%% arrows
  \draw[->] (dm.south) -- 
    node[fill=white,align=center,text width=3.5cm,font=\small] 
    {\textsl{proc 1}} (cm.north);  

  \begin{scope}[opacity=1.0]
    \draw[->] (mm.south) -- 
      node[fill=white,align=center,text width=3.3cm,font=\small] 
      {\textsl{proc 2}} (dm.north);
  \end{scope}

  \draw[->] (pr.south) -- 
    node[fill=white,align=center,text width=3.5cm,font=\small] 
    {\textsl{proc 3}} (mm.north);
\end{tikzpicture}

\end{document}

这并不能完全满足我的要求,因为:(1)我希望能够指定一个包含图形突出显示部分的圆形或矩形,而不必明确选择哪些命令不应在背景中。 (2)理想情况下,我希望不必修改图形的基本源代码,这样我就可以将其保存在单独的文件中,只需输入它并添加命令以选择要突出显示的部分。 (3)当没有不透明度时,由于白色背景,箭头上叠加的文本可以正常工作。 但是有了不透明度,白色背景不再覆盖箭头。 有没有比将箭头画成两段更简单的解决方案?

答案1

tikzpicture您可以使用绘制一个半透明的蒙版,在现有蒙版的上方绘制一个半透明的蒙版,remember picture以便获取坐标。图片中红色蒙版用于演示,白色蒙版用于实际应用:

在此处输入图片描述

\documentclass[10pt]{article}

\usepackage{tikz}
\usepackage{fancyhdr}

\begin{document}

\thispagestyle{empty}

\begin{tikzpicture}[remember picture,
  box/.style={rectangle,draw=black,
    minimum size=1cm,text width=2.2cm,text centered,font=\small}]

%%% coordinates
  \coordinate (CM) at ( 0.0, 3.0);
  \coordinate (DM) at ( 0.0, 6.0);
  \coordinate (MM) at ( 0.0, 9.0);
  \coordinate (PR) at ( 0.0,12.0);

%%% nodes  
  \node[box] (cm) at (CM) {box 1};
  \node[box] (dm) at (DM) {box 2};
  \node[box] (mm) at (MM) {box 3};   
  \node[box] (pr) at (PR) {box 4}; 

%%% arrows
  \draw[->] (dm.south) -- 
    node[fill=white,align=center,text width=3.5cm,font=\small] (proc1) 
    {\textsl{proc 1}} (cm.north);  

    \draw[->] (mm.south) -- 
      node[fill=white,align=center,text width=3.3cm,font=\small] 
      {\textsl{proc 2}} (dm.north);


  \draw[->] (pr.south) -- 
    node[fill=white,align=center,text width=3.5cm,font=\small] 
    {\textsl{proc 3}} (mm.north);
    \coordinate (diagramNW) at (current bounding box.north west);
    \coordinate (diagramSE) at (current bounding box.south east);
\end{tikzpicture}


%% The mask
\begin{tikzpicture}[remember picture, overlay]
\fill [red, opacity=0.5,even odd rule]
    (diagramNW) rectangle (diagramSE) % Cover up everything
    (mm.north west) rectangle (dm.south east) % Cut out a rectangular area;
    (proc1) circle [radius=0.5cm];
\end{tikzpicture}

\end{document}

相关内容