Resaltando parte de la figura de TikZ

Resaltando parte de la figura de TikZ

Estoy buscando una manera de usar transparencia/opacidad para resaltar un área particular en una figura de TikZ que generé. Para ser más específicos, tengo una figura de TikZ que ilustra la relación entre varios conceptos. Después de haber mostrado esta figura por primera vez, quiero reutilizarla más adelante en mi documento cuando analice conceptos específicos con más detalle. Para dejar claro qué concepto de figura se discute, quiero resaltar la parte relevante de la figura. Sería bueno si hubiera una manera de dejar la parte relevante de la figura sin cambios y hacer que el resto de la figura se desvanezca un poco usando opacidad. ¿Existe una forma sencilla de hacer esto?

Actualización: Aquí hay un 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}

Esto no hace exactamente lo que quiero porque: (1) Me gustaría poder especificar un círculo o rectángulo que contenga la parte resaltada de la figura, en lugar de tener que seleccionar explícitamente qué comandos no deberían estar en segundo plano. (2) Idealmente, me gustaría no tener que modificar la fuente básica de la figura para poder guardarla en un archivo separado y simplemente ingresarla y agregar el comando para seleccionar la parte que se resaltará. (3) El texto superpuesto a las flechas funciona bien debido al fondo blanco cuando no hay opacidad. Pero con la opacidad, el fondo blanco ya no cubre la flecha. ¿Existe una solución más sencilla que dibujar las flechas en dos partes?

Respuesta1

Puede dibujar una máscara semitransparente encima de la existente tikzpictureutilizando remember picturepara que las coordenadas estén disponibles. Las imágenes muestran la máscara en rojo para demostración y en blanco para la aplicación real:

ingrese la descripción de la imagen aquí

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

información relacionada