Hervorhebung eines Teils der TikZ-Figur

Hervorhebung eines Teils der TikZ-Figur

Ich suche nach einer Möglichkeit, Transparenz/Opazität zu verwenden, um einen bestimmten Bereich in einer von mir erstellten TikZ-Abbildung hervorzuheben. Genauer gesagt habe ich eine TikZ-Abbildung, die die Beziehung zwischen mehreren Konzepten veranschaulicht. Nachdem ich diese Abbildung zum ersten Mal gezeigt habe, möchte ich sie später in meinem Dokument wiederverwenden, wenn ich bestimmte Konzepte ausführlicher bespreche. Um deutlich zu machen, welches Konzept der Abbildung besprochen wird, möchte ich den relevanten Teil der Abbildung hervorheben. Es wäre schön, wenn es eine Möglichkeit gäbe, den relevanten Teil der Abbildung unverändert zu lassen und den Rest der Abbildung mithilfe von Opazität etwas verblassen zu lassen. Gibt es eine einfache Möglichkeit, dies zu tun?

Update: Hier ist ein 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}

Das ist nicht ganz das, was ich will, weil: (1) ich gerne einen Kreis oder ein Rechteck angeben möchte, das den hervorgehobenen Teil der Figur enthält, anstatt explizit auswählen zu müssen, welche Befehle nicht im Hintergrund sein sollen. (2) Idealerweise möchte ich die grundlegende Quelle für die Figur nicht ändern müssen, damit ich sie in einer separaten Datei aufbewahren und sie einfach eingeben und den Befehl zum Auswählen des hervorzuhebenden Teils hinzufügen kann. (3) Der über die Pfeile gelegte Text funktioniert aufgrund des weißen Hintergrunds einwandfrei, wenn keine Deckkraft vorhanden ist. Aber mit Deckkraft bedeckt der weiße Hintergrund die Pfeile nicht mehr. Gibt es eine einfachere Lösung, als die Pfeile in zwei Teilen zu zeichnen?

Antwort1

Sie können eine halbtransparente Maske über Ihre vorhandene Maske zeichnen, tikzpictureindem Sie verwenden, remember pictureum die Koordinaten verfügbar zu machen. Die Bilder zeigen die Maske zur Demonstration in Rot und für die tatsächliche Anwendung in Weiß:

Bildbeschreibung hier eingeben

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

verwandte Informationen