
Estou aprendendo como usar o TikZ e quero aprender maneiras de escrever um código TikZ mais conciso. Sinto que uso muito mais linhas do que outras pessoas precisam para obter os mesmos resultados. Em particular, quero aprender uma técnica ou prática para escrever código conciso que possa usar em todos os meus documentos TikZ.
Como exemplo, considere esta imagem:
… que foi criado com o código abaixo (o espaçamento é fornecido para facilitar a leitura). Observe que pode ser necessário atualizar o TikZ e o pgf para executar este código, já que as bibliotecas angles
e quotes
são relativamente novas em maio de 2014.
\documentclass[tikz]{standalone}%
\usetikzlibrary{calc}
\usetikzlibrary{intersections}
\usetikzlibrary{angles}
\usetikzlibrary{quotes}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0, 0);
\coordinate (B) at (3, 0);
\coordinate (C) at (3, 2);
\draw[name path = tri] (A) -- (B) -- (C) -- cycle pic["$\alpha$", -stealth,
draw, angle radius = 1cm, angle eccentricity = 1.25] {angle = B--A--C};
\path[name path = line] (0, 1.4) -- +(2.9, 0);
\path[name intersections = {of = line and tri, by = P1}];
\path (P1) -- ($(P1)!.25cm!-90:(A)$) coordinate (cylinder);
\path[name path = line2] (cylinder) -- +(1.05, 0);
\path[name intersections = {of = line2 and tri}];
\draw (cylinder) circle[radius = 0.25cm];
\draw[dashed, gray] (cylinder) -- (intersection-1);
\draw[stealth-stealth] (3.15, 2) -- ($(intersection-1) + (.15, 0)$);
\draw (3.1, 2) -- (3.2, 2);
\draw ($(intersection-1) + (.1, 0)$) -- +(.1, 0);
\draw (cylinder) -- +(45:.25);
\pgfmathsetmacro{\angle}{atan(2/3)};
\pgfmathsetmacro{\ppi}{\angle + 180}
\begin{scope}[rotate = \angle]
\clip ($(cylinder) + (0, .4)$) rectangle ($(cylinder) + (-.4, 0)$);
\draw[name path global = rotation] (cylinder) circle[radius = .395cm];
\end{scope}
\path[name path = line3] (cylinder) -- +(\ppi:.4);
\path[name intersections = {of = line3 and rotation, by = P2}];
\end{tikzpicture}
\end{document}
Responder1
Algum encurtamento sem a seta angular. Mas isso pode ser feito com angle
a biblioteca de qualquer maneira. É possível alterar o ângulo.
\documentclass[tikz]{standalone}%
\begin{document}
\begin{tikzpicture}
\def\myang{35}
\draw (0,0) coordinate(o) --+(\myang:1cm) +(1,0)arc (0:\myang:1cm)
node[right,midway]{$\alpha$}--(\myang:3cm) coordinate (a)
node[minimum size=5mm,circle,draw,pos=0.4,anchor={-90+\myang}] (b) {}--(o-|a)
(b.center)--(b.\myang) (b.210)++(210:1mm) arc (210:120:3.5mm);
\draw[dashed] (b.center) -- (a|-b);
\draw[>=latex,|<->|] ([xshift=2mm]a|-b) -- ([xshift=2mm]a);
\end{tikzpicture}
\end{document}
Responder2
Isso é mais conciso (e não menos legível que a maioria dos códigos tikz :-)
\documentclass[tikz]{standalone}\usetikzlibrary{calc,intersections,
angles,quotes}\def\c{\coordinate}\def\d{\draw}\def\p{\path}
\def\pp#1#2#3#4#5{\p[name path=#1](#2)--+(#3);\p[name intersections={of=#1
and #4,#5}];}\let\q\pgfmathsetmacro
\begin{document}\def\z#1#2#3#4#5#6#7#8{\begin{tikzpicture}
\c(A)at(0,0);\c(B)at(3,0);\c(C)at(3,2);\d[name path=#7](A#6(B#6(C#6cycle
pic["$\alpha$",-#3,draw,#1 #4=1cm,#1 eccen#7city=1.25]{#1=B--A--C};\pp
{#8}{0,1.4}{2.9,0}{#7}{by=P1}\p(P1#6($(P1)!.25cm!-90:(A)$)coordinate(#2);
\pp{#82}{#2}{1.05,0}{#7}{}\d(#2)circle[#4=0.25cm];\d[dashed,gray](#2#6(#5-1);
\d[#3-#3](3.15,2#6($(#5-1)+(.15,0)$);\d(3.1,2#6(3.2,2);\d($(#5-1)+(.1,0)$#6+
(.1,0);\d(#2#6+(45:.25);\q{\angle}{atan(2/3)};\q{\ppi}{\angle+180}\begin
{scope}[rotate=\angle]\clip($(#2)+(0,.4)$)rect#1($(#2)+(-.4,0)$);
\d[name path global=rotation](#2)circle[#4=.395cm];\end{scope}\pp{#83}{#2}
{\ppi:.4}{rotation}{by=P2}\end{tikzpicture}}\z{angle}{cylinder}{stealth}
{radius}{intersection}{)--}{tri}{line}\end{document}
Responder3
Ainda é muito curto em uma animação.
\documentclass[pstricks,border=12pt]{standalone}
\usepackage{pst-eucl}
\psset
{
CurveType=polygon,
PointName=none,
PointSymbol=none,
LabelSep=.5,
MarkAngleRadius=1,
}
\begin{document}
\multido{\n=3.14+.10}{50}{%
\begin{pspicture}(8,6)
\pstGeonode{A}(7,0){B}(7,6){C}
\pstMarkAngle[arrows=->]{B}{A}{C}{$\alpha$}
\pnode([offset=.5,nodesep=\n]{C}A){P}
\pscircle(P){.5}
\rput{(C)}(P){\psarc(P){.6}{90}{180}\psline(P)([nodesep=.5,angle={!\n\space 4 mul Pi add 2 div neg RadtoDeg}]P)}
\pcline[offset=.5]{|*-|*}(C)(C|P)
\pcline[linestyle=dashed,nodesepB=-.5](P)(C|P)
\end{pspicture}}
\end{document}