신축성 있는 음영 정의

신축성 있는 음영 정의

필요에 따라 확장할 수 있는 수평 음영을 정의하고 싶습니다. 내가 지금까지 한 일은 이것이다.

\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}
\pgfdeclarehorizontalshading{pressure}{1cm}{color(0cm)=(black!30); color(1cm)=(black!50); color(3cm)=(black!10); color(4cm)=(black!30)}
\shade[shading=pressure] (0,0) rectangle (10cm,2cm);
\end{tikzpicture}

\end{document}

하지만 그것은 작동하지 않습니다. 왜?

편집하다: 이것은~ 아니다멋진 배경에 대해. 공기 중의 압력 변화를 제시해야 하는데 직사각형을 정확하게 측정할 수는 없습니다. 직사각형( \leng) 의 정확한 치수를 알고 있었다면 0.25*\leng, 0.75*\leng\leng

답변1

매뉴얼에 설명된 대로 셰이딩의 크기가 조정되어 중간 50%가 경로를 채우는데, 이는 많은 경우에 유용하지만(특히 지나치게 직사각형이 아닌 경로 또는 회전된 셰이딩의 경우) 이 경우에는 약간 불편합니다.

그러나 이 path picture기능을 활용하고 경로 크기를 가져오고 음영 크기를 수동으로 조정할 수 있습니다. 여기에는 몇 가지 기본적인 레이어 헛소리가 포함되어 있으며 셰이딩 회전이 지원되지 않습니다(적어도 아래 예에서는). 기본 음영은 왼쪽에 있고 경로 그림 음영은 오른쪽에 있습니다.

\documentclass[tikz,border=5]{standalone}
\usetikzlibrary{calc}
\newbox\shbox
\tikzset{%
  path picture shading/.style={%
    path picture={%
%
\pgfpointdiff{\pgfpointanchor{path picture bounding box}{south west}}%
  {\pgfpointanchor{path picture bounding box}{north east}}%
\pgfgetlastxy\pathwidth\pathheight%
\pgfinterruptpicture%
   \global\setbox\shbox=\hbox{\pgfuseshading{#1}}%
 \endpgfinterruptpicture%
\pgftransformshift{\pgfpointanchor{path picture bounding box}{center}}%
\pgftransformxscale{\pathwidth/(\wd\shbox)}%
\pgftransformyscale{\pathheight/(\ht\shbox)}% \dp will (should) be 0pt
\pgftext{\box\shbox}%
%
    }
  }
}
\pgfdeclarehorizontalshading{pressure}{25bp}{color(0bp)=(red); color(25bp)=(yellow); color(50bp)=(pink); color(75bp)=(green); color(100bp)=(blue)}


\begin{document}
\begin{tikzpicture}
\node at (3,0) {\tt shading=pressure};
\node at (9,0) {\tt path picture shading=pressure};
\foreach \i in {1,...,6}{
\draw [shading=pressure] (0,\i) rectangle +(\i,1);
\draw [path picture shading=pressure] (7,\i) rectangle +(\i,1);
}
\end{tikzpicture}
\end{document}

여기에 이미지 설명을 입력하세요

답변2

쉐이딩이 아주 잘 작동해요! 음영에는 항상 숨겨진 부분이 있습니다(TikZ/PGF v3.0의 pgfmanual p.1090 참조).

전체 음영을 사용하려면 \pgfuseshading{pressure}노드의 내용으로 사용하여 크기를 조정하고 xscale원치 않는 여백을 제거할 수 있습니다.yscaleinner sep=0

편집하다:TikZ 라이브러리를 사용하면 calc배율 인수를 계산할 수 있습니다.

여기에 이미지 설명을 입력하세요

\documentclass[tikz]{standalone}
\usetikzlibrary{calc}
\pgfdeclarehorizontalshading{pressure}{1cm}{
  color(0cm)=(red);
  color(1cm)=(black!50);
  color(2cm)=(yellow!10);
  color(3cm)=(blue)
}
\begin{document}
\begin{tikzpicture}
  \node[inner sep=0,xscale=10/3,yscale=2/1]
  at (0,0) {\pgfuseshading{pressure}};
  \node[inner sep=0,xscale=10/3,yscale=.5/1]
  at (0,2) {\pgfuseshading{pressure}};

  \coordinate (a) at (-2,5);
  \coordinate (b) at (8,6);

  \path let \p1=(a), \p2=(b),
  \p3=({(\x2-\x1)/3cm},{(\y2-\y1)/1cm}),
  \p4=($(\p1)!.5!(\p2)$)
  in node[at=(\p4),inner sep=0,xscale=\x3,yscale=\y3]{\pgfuseshading{pressure}};
\end{tikzpicture}
\end{document}

답변3

당신은 항상 사용할 수 있습니다아름다운이미지를 배경으로.

\documentclass{article}
\usepackage{tikz, graphicx}

\begin{document}
\begin{tikzpicture}
\node[inner sep=0pt] (x) at (0,0)
    {\includegraphics[width=.5\textwidth]{bg.jpg}};
\node[inner sep=0pt] (y) at (5,-6)
    {\includegraphics[width=.25\textwidth]{bg.jpg}};
\draw[<->,thick] (x.south east) -- (y.north west)
    node[midway,fill=white] {Backgrounds};
\end{tikzpicture}
\end{document}

키를 사용하여 늘립니다 width.

여기에 이미지 설명을 입력하세요

관련 정보