I am learning to use TikZ to draw things in LaTeX. One of the things that TikZ seems to use everywhere for specifying coordinates is a tuple. For example,
\begin{tikzpicture}
\node[isosceles triangle, isosceles triangle apex angle=70,
draw=black,fill=white, inner sep=0pt,anchor=lower
side,rotate=90,draw=black,
fill=white, minimum height=2 cm] (a) at (0,0) {};
\end{tikzpicture}
Creates a small isosceles triangle. Note the use of (0,0)
. Let's encapsulate making a triangle as above with the following macro.
\newcommand\Tri[3]{
\node[isosceles triangle, isosceles triangle apex angle=70,
draw=black,fill=white, inner sep=0pt,anchor=lower
side,rotate=90,draw=black,
fill=white, minimum height={#2} cm] (#1) at #3 {};}
Suppose I wanted to define a function that takes in a size and starting coordinate, and draws a "triangle" of triangles such as
\begin{tikzpicture}
\Tri{a}{1}{(-1,0)}
\Tri{b}{1}{(1,0)}
\Tri{c}{1}{(0,1.41)}
\end{tikzpicture}
The simple way to do this is to make a macro \TriTri
, such that \TriTri{a}{n}{x}{y}
creates a triangle of triangles, with bottom triangle anchored at (x,y)
.
\newcommand\TriTri[4]{
\Tri{#1}{#2}{(#3,#4)}
\Tri{#1}{#2}{(#3+2*#2,#4)}
\Tri{#1}{#2}{(#3+#2,{sqrt(2*#2*#2)})}} %% note #3+#2 = (x1 + x2)/2
%% the sqrt bit is sqrt(size^2 + size^2)
}
I have gotten this to work! But what I would like to do is instead of having x
and y
input separately, I would like to have them input as a coordinate pair. I would like to reference the coordinates as \first,\second
. So that \first(x,y) = x
. The desired effect is that
$$\first(1,2)$$
would be the same as
$$1$$
Best Answer
You can use the
xparse
package:The
\Tri
command accepts three arguments; the first and the second ones are enclosed in braces, while the third is between parentheses, soIn the body of the definition you'll use
(#3)
instead of#3
, because the parentheses are stripped off.In the case of
\TriTri
we have to split off the two coordinates, so we define four arguments; the first and the second ones are enclosed in braces; the third is what goes from(
to a comma, the final one is everything up to)
.Thus I have modified accordingly your code for
\TriTri
based on the requirements for\Tri
.