TikZ: Свечение для прямоугольного узла

TikZ: Свечение для прямоугольного узла

Я хотел бы использовать эффект свечения для цветных узлов, содержащих текст. К сожалению, я могу найти только ключ circular glow, см. пример ниже.

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

введите описание изображения здесь

Есть ли способ получить прямоугольную цветную область с таким же свечением, как у круглой области выше, т. е. что-то вроде «прямоугольного свечения»?

решение1

Вы можете поиграть с \shade«разделением» области затенения на четыре части, воспользовавшись local bounding boxвозможностью избежать указания явных координат.

Я также создал \picс двумя аргументами: первый — это имя прямоугольной области, которую вы хотите затенить, в моем примере mybox; второй — это цвет, который вы хотите использовать, в моем примере green.
Конечно, вы можете добавить другие параметры, например, другой цвет для затенения, в моих примерах «белый» — это фиксированный параметр.

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

введите описание изображения здесь

В вашем случае эта опция on background layerне нужна, но я добавил ее, чтобы сделать изображение myshadeболее общим (чтобы избежать перезаписи области, см. следующий пример, без on background layerтекста, который mynodeбыл бы скрыт под затенением).

Просто чтобы показать, как можно использовать картинку myshadeдля затенения любых прямоугольных областей. Ограничивающий прямоугольник затенен красным, узел затенен голубым:

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

введите описание изображения здесь

решение2

Не совсем. Давайте посмотрим на руководство:

руководство

Так что вы можете попытаться притвориться, что у вас есть какое-то свечение, добавив general shadow. Если вы выберете scaleи fill colorбудете осторожны, то это будет довольно близко.

Вы также можете добавить затухание, см. его библиотеку, но он не обеспечивает масштабируемое затухание, как вам нужно (только С, З, Ю, В, круговые).

Мнение: С точки зрения читаемости, это drop shadowможет быть не так уж и плохо... если вам нужны такие эффекты, кстати. Помните, TeX/LaTeX возник из набора профессиональных документов, таких как книги. В значительной степени он все еще сопротивляется пути MS-Office... который мне нравится. Чаще всего этот более ограничительный подход помогает передавать визуальные сообщения иначе, если не лучше.

Я заменил ваш клип на достаточно большую рамку.

результат

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

Связанный контент