TikZ: Leuchten für rechteckigen Knoten

TikZ: Leuchten für rechteckigen Knoten

Ich möchte einen Leuchteffekt für farbige Knoten verwenden, die Text enthalten. Leider kann ich nur den Schlüssel finden circular glow, siehe Beispiel unten.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shadows}

\begin{document}

\begin{tikzpicture}
\clip (-2, -3) rectangle (2,3);
\node[circular glow={fill=green}, rectangle, text width=2.5cm, align=justify] {Given the rectangular text area, rectangular glow would be desirable to also cover the corners.};
\end{tikzpicture}

\end{document}

Bildbeschreibung hier eingeben

Gibt es eine Möglichkeit, einen rechteckigen farbigen Bereich mit ähnlichem Glanz wie der kreisförmige Bereich oben zu erhalten, also so etwas wie „rechteckigen Glanz“?

Antwort1

Sie könnten mit \shadeder „Aufteilung“ Ihres Schattierungsbereichs in vier Teile experimentieren und dabei die local bounding boxOption nutzen, die Eingabe expliziter Koordinaten zu vermeiden.

Ich habe auch ein \picmit zwei Argumenten erstellt: das erste ist der Name des rechteckigen Bereichs, den Sie schattieren möchten, in meinem Beispiel mybox; das zweite ist die Farbe, die Sie verwenden möchten, in meinem Beispiel green.
Natürlich können Sie auch andere Parameter hinzufügen, zum Beispiel die andere Farbe für die Schattierung, in meinen Beispielen ist „weiß“ fest.

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shadings, backgrounds}
\tikzset{
    pics/myshade/.style 2 args={
        code = {%
          \begin{scope}[on background layer]
            \shade[upper left=white, upper right=#2,
            lower left=white,lower right=white]
            (#1.south west) rectangle (#1.center);
            \shade[upper left=#2, upper right=white,
            lower left=white,lower right=white]
            (#1.south) rectangle (#1.east);
            \shade[upper left=white, upper right=white,
            lower left=#2,lower right=white]
            (#1.center) rectangle (#1.north east);
            \shade[upper left=white, upper right=white,
            lower left=white,lower right=#2]
            (#1.west) rectangle (#1.north);
          \end{scope}
        }
    }
}


\begin{document}
    \begin{tikzpicture}[local bounding box=mybox]
        \clip (-2, -3) rectangle (2,3);
        \pic {myshade={mybox}{green}};
        \node[rectangle, text width=2.5cm, align=justify] 
        {Given the rectangular text area, rectangular glow would be desirable to also cover the corners.};
    \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Die Option on background layerwird in Ihrem Fall nicht benötigt, aber ich habe sie hinzugefügt, um das Bild myshadeallgemeiner zu gestalten (um zu vermeiden, dass es den Bereich überschreiben könnte, siehe folgendes Beispiel, ohne das on background layerder Text mynodeunter der Schattierung verborgen wäre).

Nur um zu zeigen, wie Sie das Bild zum Schattieren beliebiger rechteckiger Bereiche verwenden können myshade. Der Begrenzungsrahmen ist rot schattiert, der Knoten ist cyan schattiert:

\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{shadings, backgrounds}
\tikzset{
    pics/myshade/.style 2 args={
        code = {%
          \begin{scope}[on background layer]
            \shade[upper left=white, upper right=#2,
            lower left=white,lower right=white]
            (#1.south west) rectangle (#1.center);
            \shade[upper left=#2, upper right=white,
            lower left=white,lower right=white]
            (#1.south) rectangle (#1.east);
            \shade[upper left=white, upper right=white,
            lower left=#2,lower right=white]
            (#1.center) rectangle (#1.north east);
            \shade[upper left=white, upper right=white,
            lower left=white,lower right=#2]
            (#1.west) rectangle (#1.north);
          \end{scope}
        }
    }
}


\begin{document}
    \begin{tikzpicture}[local bounding box=mybox]
        \clip (-2, -3) rectangle (2,3);
        \pic {myshade={mybox}{red}};
        \node[rectangle, text width=2.5cm, align=justify] (mynode)
        {Given the rectangular text area, rectangular glow would be desirable to also cover the corners.};
        \pic {myshade={mynode}{cyan}};
    \end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Antwort2

Nicht wirklich. Werfen wir einen Blick in die Anleitung:

Handbuch

Sie können also versuchen, eine Art Leuchten vorzutäuschen, indem Sie ein hinzufügen general shadow. Wenn Sie scaleund fill colorsorgfältig auswählen, kommt es dem schon ziemlich nahe.

Sie können auch eine Überblendung hinzufügen (siehe die Bibliothek), diese bietet jedoch keine skalierte Überblendung, wie Sie möchten (nur N, W, S, O, kreisförmig).

Meinung: In Bezug auf die Lesbarkeit drop shadowist das vielleicht nicht so schlecht ... falls Sie solche Effekte benötigen, übrigens. Denken Sie daran, dass TeX/LaTeX ursprünglich aus dem Satz professioneller Dokumente wie Büchern stammt. Es widersetzt sich noch immer weitgehend dem MS-Office-Pfad ... was mir gefällt. Meistens hilft dieser restriktivere Ansatz dabei, visuelle Botschaften anders, wenn nicht sogar besser zu kommunizieren.

Ich habe Ihren Clip durch einen ausreichend großen Rand ersetzt.

Ergebnis

\documentclass[border=6mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{shadows}

\begin{document}

 \begin{tikzpicture}
%   \clip (-2, -3) rectangle (2,3);
    \node[
        circular glow={fill=green}, 
        rectangle,
        text width=2.5cm, 
        align=justify
    ] at (0,0)
    {Given the rectangular text area, rectangular glow would be desirable to also cover the corners.};
    
    \node[
        general shadow={fill=green!45,shadow scale=1.05}, 
%       drop shadow, fill=green,
        rectangle, fill=green,
        text width=2.5cm, 
        align=justify
    ] at (5,0)
    {Given the rectangular text area, rectangular glow would be desirable to also cover the corners.};
    
 \end{tikzpicture}

\end{document}

verwandte Informationen