TikZ: Resplandor para nodo rectangular

TikZ: Resplandor para nodo rectangular

Me gustaría utilizar un efecto de brillo para los nodos de colores que contienen texto. Desafortunadamente, solo puedo encontrar la clave circular glow; vea el ejemplo a continuación.

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

ingrese la descripción de la imagen aquí

¿Hay alguna manera de obtener un área rectangular de color con un brillo similar al del área circular de arriba, es decir, algo así como "brillo rectangular"?

Respuesta1

Podrías jugar con \shade"dividir" tu área de sombreado en cuatro partes, aprovechando la local bounding boxopción para evitar poner coordenadas explícitas.

También creé un \piccon dos argumentos: el primero es el nombre del área rectangular que te gustaría sombrear, en mi ejemplo mybox; el segundo es el color que te gustaría usar, en mi ejemplo green.
Por supuesto, podrías agregar otros parámetros, por ejemplo el otro color para el sombreado; en mis ejemplos, "blanco" es fijo.

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

ingrese la descripción de la imagen aquí

La opción on background layerno es necesaria en tu caso, pero la agregué para hacer la imagen myshademás general (evitarla podría sobrescribir el área, mira el siguiente ejemplo, sin que on background layerel texto de mynodequedara oculto debajo del sombreado).

Solo para mostrar cómo puedes usar la imagen myshadepara sombrear áreas rectangulares. El cuadro delimitador está sombreado en rojo, el nodo está sombreado en cian:

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

ingrese la descripción de la imagen aquí

Respuesta2

No precisamente. Echemos un vistazo al manual:

manual

Entonces, lo que puedes hacer es intentar fingir algún tipo de brillo agregando un general shadow. Si seleccionas scaley fill colorcuidadosamente, se acerca bastante.

También puede agregar un desvanecimiento, ver su biblioteca, pero no proporciona un desvanecimiento escalado, como desea (solo N, W, S, E, circular(es)).

Opinión: En términos de legibilidad, drop shadowpuede que no sea tan malo... si necesitas tales efectos, por cierto. Recuerde, TeX/LaTeX se origina en la composición tipográfica de documentos profesionales, como libros. En gran medida todavía se resiste a la ruta de MS-Office... lo cual me gusta. La mayoría de las veces, este enfoque más restrictivo ayuda a comunicar mensajes visuales de manera diferente, si no mejor.

Reemplacé tu clip por un borde lo suficientemente grande.

resultado

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

información relacionada