Indagamos por diferentes espacios y así brindarte la solución para tu duda, si tienes dificultades puedes dejar la pregunta y te contestamos porque estamos para servirte.
Solución:
draw (20,12) -- ++(2,0) -- ++(0,2) -- ++(-3,0) -- ++(45:3);
Utilizar ++
antes de cada nueva coordenada incremental para hacerla relativa a la última y poner allí el lápiz.
Aquí hay un ejemplo completo:
documentclassarticle
usepackagetikz
begindocument
tikzdraw (20,12) -- ++(2,0) -- ++(0,2) -- ++(-3,0) -- ++(30:3) [rounded corners=10pt]-- ++(5,0) -- ++(0,-6) -- ++(-7,0) -- cycle;
enddocument
Por supuesto, combinando esto con -| o |- los operadores de ruta pueden simplificar el código aún más; las siguientes dos piezas de código producen el mismo resultado:
tikzdraw (20,12) -- ++(2,0) -- ++(0,2) -- ++(3,0) -- ++(0,1) -- ++(1,0) -- ++(0,-3) -- ++(2,0);parbigskip
y
tikzdraw (20,12) -| ++(2,2) -| ++(3,1) -- ++(1,0) |- ++(2,-3);
No creo que definir comandos en este caso agregue nada; de hecho, creo que reduce la funcionalidad de la sintaxis existente (que ya es simple). El ejemplo demuestra que puede usar, por ejemplo, coordenadas polares y modificar (hasta las limitaciones de TikZ) la ruta attributes a mitad de camino; incluso si la pregunta actual no requiere esto, es bueno tener la posibilidad de hacer ese tipo de modificación si es necesario.
No estoy seguro de que sea lo que se requiere, pero aquí hay un rectilinear
decoración que logra el efecto deseado:
documentclass[tikz,border=5]standalone
usetikzlibrarydecorations
pgfdeclaredecorationrectilinearstart%
statestart[width=pgfdecorationsegmentlength/2,
next state=draw above]%
pgfpathmovetopgfpointorigin%
pgfcoordinate@1pgfpointorigin%
statedraw above[width=pgfdecorationsegmentlength/2,
next state=draw below]%
pgfcoordinate@2pgfpointorigin%
pgftransformreset%
pgfpointanchor@1centerpgfgetlastxyab%
pgfpointanchor@2centerpgfgetlastxycd%
pgfpathlinetopgfqpointad%
pgfpathlinetopgfqpointcd%
pgfnodealias@1@2%
statedraw below[width=pgfdecorationsegmentlength/2,
next state=draw above]%
pgfcoordinate@2pgfpointorigin%
pgftransformreset%
pgfpointanchor@1centerpgfgetlastxyab%
pgfpointanchor@2centerpgfgetlastxycd%
pgfpathlinetopgfqpointcb%
pgfpathlinetopgfqpointcd%
pgfnodealias@1@2%
statefinal%
pgftransformreset%
pgfpointanchor@1centerpgfgetlastxyab%
pgfpointdecoratedpathlastpgfgetlastxycd%
pgfpathlinetopgfqpointad%
pgfpathlinetopgfqpointcd%
tikzsetrectilinear/.style=
decoration=rectilinear, #1, decorate
begindocument
begintikzpicture[very thick, line join=round, line cap=round]
draw [gray, postaction=rectilinear, draw=red]
(0,4) -- ++(30:2) -- ++(300:3);
draw [gray, postaction=rectilinear, draw=green!50!black]
(0,2) circle [radius=1];
draw [gray, postaction=rectilinear=segment length=0.25cm, draw=blue]
(0,0) -- (3,1) arc (90:-90:1) .. controls ++(180:1) and ++(225:1) .. cycle;
endtikzpicture
enddocument
aquí cuatro macro Start
, Goleft
, Godown
y Goup
para crear la ruta deseada.
Código
documentclass[border=5mm]standalone
usepackagetikz
usetikzlibrarycalc
tikzsetevery node/.style=inner sep=0pt,minimum size=0pt
newcommandStart[1]node (A) at #1 ;
newcommandGoleft[1]draw($(A)+( -0.5pgflinewidth ,0.5pgflinewidth)$)--+(#1,0)node(A);
newcommandGodown[1]draw($(A)+(-0.5pgflinewidth,0)$)--+(0,-#1)node(A);
newcommandGoup[1]draw($(A)+(-0.5pgflinewidth,0)$)--+(0,#1)node(A);
begindocument
begintikzpicture
Start(20,12)
Goleft2
Godown2
Goleft3
Godown1
Goleft4
Goup3
endtikzpicture
enddocument
Producción
Recuerda dar difusión a esta noticia si te ayudó.