TikZ: Brilho para nó retangular

TikZ: Brilho para nó retangular

Eu gostaria de usar um efeito de brilho para nós coloridos contendo algum texto. Infelizmente, só consigo encontrar a chave circular glow, veja o exemplo abaixo.

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

insira a descrição da imagem aqui

Existe uma maneira de obter uma área colorida retangular com brilho semelhante ao da área circular acima, ou seja, algo como "brilho retangular"?

Responder1

Você poderia brincar \shade"dividindo" sua área de sombreamento em quatro partes, aproveitando a local bounding boxopção para evitar colocar coordenadas explícitas.

Também criei um \piccom dois argumentos: o primeiro é o nome da área retangular que você gostaria de sombrear, no meu exemplo mybox; a segunda é a cor que você gostaria de usar, no meu exemplo green.
Claro, você poderia adicionar outros parâmetros, por exemplo, a outra cor para sombreamento, nos meus exemplos "branco" é fixo.

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

insira a descrição da imagem aqui

A opção on background layernão é necessária no seu caso, mas adicionei para deixar a foto myshademais geral (evitando que ela sobrescreva a área, veja o exemplo a seguir, sem que on background layero texto de mynodefique escondido sob o sombreamento).

Só para mostrar como você pode usar a foto myshadepara sombrear áreas retangulares. A caixa delimitadora está sombreada em vermelho, o nó está sombreado em ciano:

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

insira a descrição da imagem aqui

Responder2

Na verdade. Vamos dar uma olhada no manual:

manual

Então o que você pode fazer é tentar fingir algum tipo de brilho adicionando um arquivo general shadow. Se você selecionar scalee fill colorcom cuidado, chega bem perto.

Você também pode adicionar um fade, veja sua biblioteca, mas ele não fornece um fade em escala, como você deseja (apenas N, W, S, E, circular(es)).

Opinião: Em termos de legibilidade, drop shadowpode não ser tão ruim assim... se você precisar de tais efeitos, aliás. Lembre-se de que o TeX/LaTeX se origina da composição tipográfica de documentos profissionais, como livros. Em grande medida, ainda resiste ao caminho do MS-Office... que eu gosto. Na maioria das vezes, esta abordagem mais restritiva ajuda a comunicar mensagens visuais de forma diferente, se não melhor.

Substituí seu clipe por uma borda grande o suficiente.

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}

informação relacionada