Выделение части рисунка 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}

Связанный контент