必要に応じて伸縮できる水平方向の陰影を定義したいと思います。これまで私が行ったのはこれです
\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
、yscale
サイズを変更します (inner 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
。