Аналог в TikZ для команды \psshadowbox из PSTricks

Аналог в TikZ для команды \psshadowbox из PSTricks

В PSTricks следующий код:

\documentclass{article}
\usepackage[usenames]{pstcol}
\usepackage{pst-plot}
\usepackage{pst-grad}

\begin{document}

\noindent
\psshadowbox[linecolor=Green,framearc=0.5,linewidth=0.3pt,fillstyle=gradient,
gradbegin=ForestGreen, gradend=GreenYellow,framesep=5pt,
shadowcolor=SpringGreen,
gradmidpoint=1]%{$\mathcal{P}_{113}$}\\[2.9cm]
{\huge{\textbf{P 113}}}\\
\psshadowbox[linecolor=Green,framearc=0.5,linewidth=0.3pt,fillstyle=gradient,
gradbegin=ForestGreen, gradend=GreenYellow,framesep=5pt,
shadowcolor=SpringGreen,
gradmidpoint=1]%{$\mathcal{P}_{113}$}\\[2.9cm]
{\Large{\textbf{P 113}}}\\

\end{document}

генерирует следующую фигуру (увеличение 300%):

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

Есть ли способ сделать такую ​​же фигуру с помощью TikZ? Я нашел шаблон, с помощью которого я могу сделать что-то похожее, но с фиксированной шириной:

\documentclass[svgnames]{article}
\usepackage{tikz}
\usepackage{array}
\usetikzlibrary{shadows}
\newcommand{\pbox}[4]{%
  \begin{tikzpicture}
    \node[#3] {\begin{minipage}[t][#2][t]{#1}%
      #4
    \end{minipage}};
  \end{tikzpicture}}

\begin{document}

\pbox{0.21 \textwidth}{}{rectangle,drop shadow, fill=Red,rounded corners=5pt,inner sep=6pt, 
shade,top color=ForestGreen, bottom color=GreenYellow, draw=Green}
{\centering{\Huge{\textbf{P 113}}}}
\pbox{0.13 \textwidth}{}{rectangle,drop shadow, fill=Red,rounded corners=5pt,inner sep=6pt,
             shade,top color=ForestGreen, bottom color=GreenYellow, draw=Green}
             {\centering{\Large{\textbf{P 113}}}}

 \end{document}

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

Я хочу, чтобы ширина поля автоматически адаптировала текст (как с \psshadowbox) без необходимости изменять дробь \textwidthиндивидуально. С другой стороны, я бы изменил цвет тени, сделанной с помощью TikZ, чтобы он был максимально похож на сделанный с помощью блока PSTricks.

решение1

По умолчанию ширина TikZ \nodeравна естественной ширине его содержимого плюс некоторые inner sepотступы с обеих сторон, так что, по сути, все, что вам нужно было сделать, это избавиться от minipage:

\documentclass[svgnames]{article}
\usepackage{tikz}
\usetikzlibrary{shadows}

\definecolor{topColor}{RGB}{0,250,0}
\definecolor{botColor}{RGB}{170,255,46}
\definecolor{shaColor}{RGB}{180,234,90}

\tikzset{
mybox/.style={
  rectangle,
  drop shadow, 
  rounded corners=5pt,
  inner sep=6pt,
  draw=topColor,
  shade,
  top color=topColor, 
  every shadow/.append style={fill=shaColor}, 
  bottom color=botColor, 
  draw=Green
  }
}

\begin{document}

\begin{tikzpicture}
\node[mybox]
  {\Huge\textbf{P 113}};
\node[mybox] at (0,2)
  {Some other longer test};
\end{tikzpicture}

\end{document}

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

Или, определяя команду:

\documentclass[svgnames]{article}
\usepackage{tikz}
\usetikzlibrary{shadows}

\definecolor{topColor}{RGB}{0,250,0}
\definecolor{botColor}{RGB}{170,255,46}
\definecolor{shaColor}{RGB}{180,234,90}

\tikzset{
mybox/.style={
  rectangle,
  drop shadow, 
  rounded corners=5pt,
  inner sep=6pt,
  draw=topColor,
  shade,
  top color=topColor,
  every shadow/.append style={fill=shaColor}, 
  bottom color=botColor, 
  draw=Green
  }
}

\newcommand\MyBox[2][]{%
  \tikz\node[mybox,#1] {#2}; 
}

\begin{document}

\MyBox{\Huge\textbf{P 113}}\par\medskip
\MyBox{Some other longer test}

\end{document}

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

Кстати, \Hugeэтонеткоманда с аргументами; это переключатель шрифта, который следует использовать как {\Huge <text>}или {\Huge <text>\par}, если необходимо.

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