下面的代码
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\newcommand{\opacity}{0.6}
\begin{tikzpicture}
\draw[xshift=1cm,fill=gray,draw=black,opacity=\opacity]
(0,0) -- (3,3) -- (3.2,3) -- (0.2,0) -- (0,0);
\draw[xshift=2cm,fill=gray,draw=black,opacity=\opacity]
(0,0) -- (2,2) -- (2.2,2) -- (0.2,0) -- (0,0);
\draw[xshift=3cm,fill=gray,draw=black,opacity=\opacity]
(0,0) -- (1,1) -- (1.2,1) -- (0.2,0) -- (0,0);
\end{tikzpicture}
\end{document}
产生以下输出:
如何用线连接矩形的边缘?我不想使用坐标 ( \draw (0,0) -- (2,2)
),而是使用类似
\draw (rectangle1.north east) -- (rectangle2.north west)
。
如果有如下解决方案就更好了:
\draw (A1)(0,0) -- (B1)(1,1) -- (C1)(1.2,1) -- (D1)(0.2,0) -- (E1)(0,0);
\draw (A2)(0,0) -- (B2)(1,1) -- (C2)(1.2,1) -- (D2)(0.2,0) -- (E2)(0,0);
\draw (A1) -- (C2)
答案1
像这样吗?
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\newcommand{\opacity}{0.6}
\begin{tikzpicture}
\draw[xshift=1cm,fill=gray,draw=black,opacity=\opacity]
(0,0)coordinate(A1) -- (3,3)coordinate(A2) -- (3.2,3)coordinate(A3) -- (0.2,0) coordinate(A4) -- cycle;
\draw[xshift=2cm,fill=gray,draw=black,opacity=\opacity]
(0,0)coordinate(B1) -- (2,2)coordinate(B2) -- (2.2,2)coordinate(B3) -- (0.2,0)coordinate(B4) -- cycle;
\draw[xshift=3cm,fill=gray,draw=black,opacity=\opacity]
(0,0)coordinate(C1) -- (1,1) coordinate(C2)-- (1.2,1)coordinate(C3) -- (0.2,0)coordinate(C4) -- cycle;
\draw(A4)--(B1);
\draw(B4)--(C1);
\draw(A3)--(B3)--(C3);
\end{tikzpicture}
\end{document}
使用 foreach 循环更新:
\documentclass[tikz,border=1mm]{standalone}
\usepackage{tikz}
\begin{document}
\newcommand{\opacity}{0.6}
\begin{tikzpicture}
\foreach \xs/\p/\x in{1/A/3,2/B/2,3/C/1}
{\draw[xshift=\xs cm,fill=gray,draw=black,opacity=\opacity]
(0,0)coordinate(\p1)
--(\x,\x)coordinate(\p2)
--(\x+0.2,\x)coordinate(\p3)
--(0.2,0)coordinate(\p4)
--cycle;}
\draw(A4)--(B1);
\draw(B4)--(C1);
\draw(A3)--(B3)--(C3);
\end{tikzpicture}
\end{document}
答案2
据我了解,如果给出了两个坐标,则整个形状是固定的。您的形状不是矩形,而是梯形,并且有预定义的形状可用。
\documentclass[tikz,border=3.14mm]{standalone}
\usetikzlibrary{shapes.geometric}
\begin{document}
\begin{tikzpicture}[my trapez/.style={trapezium,%inner xsep=0pt,inner ysep=0pt,
trapezium left angle=135, trapezium right angle=45,rotate=45,
minimum width={#1*sqrt(2)*1cm},minimum height={sqrt(2)*1mm},draw,fill=gray,
trapezium stretches body,anchor=west}]
\node[my trapez=3] (L) at (1,0) {};
\node[my trapez=2] (M) at (2,0) {};
\node[my trapez=1] (R) at (3,0) {};
\draw ([xshift=-sqrt(2)*1mm]L.west) -- ([xshift=sqrt(2)*1mm]R.west);
\draw ([xshift=sqrt(2)*1mm]L.east) -- ([xshift=sqrt(2)*1mm]R.east);
\end{tikzpicture}
\end{document}
如您所见,这种方法存在两个小问题:
- 至少对于这种形状来说,精确控制尺寸并非易事;
- 要精确指定位置,您需要思考一下。(Zarko 的回答也很不错。)
因此,我想提出一种不同的路线,您可以绘制和填充物品作为装饰,同时还可以命名坐标。
\documentclass[tikz,border=1mm]{standalone}
\usetikzlibrary{decorations.pathreplacing}
\tikzset{trapez width/.initial=0.2cm,
my trapez/.style={decorate,decoration={
show path construction,
lineto code={\filldraw
(\tikzinputsegmentfirst) coordinate(#1-south west)
-- (\tikzinputsegmentlast) coordinate(#1-north west)
-- ([xshift=\pgfkeysvalueof{/tikz/trapez width}]\tikzinputsegmentlast)
coordinate(#1-north east)
-- ([xshift=\pgfkeysvalueof{/tikz/trapez width}]\tikzinputsegmentfirst)
coordinate(#1-south east) -- cycle;
}}}}
\begin{document}
\begin{tikzpicture}
\begin{scope}[fill=gray,opacity=0.6]
\draw[my trapez=L] (1,0) -- (4,3);
\draw[my trapez=M] (2,0) -- (4,2);
\draw[my trapez=R] (3,0) -- (4,1);
\end{scope}
\draw (L-north east) -- (R-north east)
(L-south west) -- (R-south east);
\end{tikzpicture}
\end{document}
现在您实际上只需要指定两个坐标,它们将成为精确命名的坐标。
答案3
让我详细说明一下我的评论:
- 对于您在 mwe 中展示的绘制的形状,这是不可能的
- 这些形状没有定义的名称或锚点。
您可以通过使用每个形状角的坐标来实现这一点,但这会导致相当复杂的代码。例如对于第一个形状:
\draw[myshape] (0,0) coordinate (A1) -- (3,3) coordinate (A2) -- (3.2,3) coordinate (A3) -- (0.2,0) coordinate (A4) -- cycle;
然后画出来例如
\draw (A1) -- (A3);
简化此代码扩展的一种方法可以使用小图片:(
\pic
有关详细信息,请参阅第章18 张图片:路径上的小图片在Tikz 和 PGF 手册,v 3.0.1a,第 251 页):\documentclass[tikz,border=3mm]{standalone} \begin{document} \begin{tikzpicture}[ pics/myshape/.style = {code={ % definition of your shape \draw[fill=gray,opacity=\opacity] ( 0.0,0) coordinate (-1) -- ++ % south west ( 0.2,0) coordinate (-2) -- ++ % south east (#1,#1) coordinate (-3) -- ++ % north east, coordinate is determined by parameter #1 (-0.2,0) coordinate (-4) -- % north west cycle;}} ] \def\opacity{0.6} \pic (A) [above right] at (0,0) {myshape={3}}; % "3" is parameter which define size of shape \pic (B) [above right] at (1,0) {myshape={2}}; \pic (C) [above right] at (2,0) {myshape={1}}; \draw[very thin, red, densely dashed] (A-3) -- (B-3); % instead of \draw (rectangle1.north east) -- (rectangle2.north west). \end{tikzpicture} \end{document}
对于坐标名称,您可以选择更有意义的名称。例如,可能
-1
更适合的是-sw
,它可以将您与“西南”等联系起来。