我正在制作一个上面有三角形的图表。我想显示这个三角形有一个直角,我发现\tkzMarkRightAngle
可以用来实现这种效果。\tkzMarkAngle
也可以,但对于这个特定的图像,我需要前者,而不是后者。不幸的是,使用它只会给我一个错误:
! Missing \endcsname inserted.
<to be read again>
\tkz@ax
l.18 ...rkRightAngle[draw=black,size=0.4cm](H,G,I)
这是我的代码:
\documentclass{standalone}
\usepackage[x11names,dvipsnames]{xcolor} %Colocação de cores
\usepackage{tikz,tikz-3dplot} %Para fazer desenhos
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\coordinate (G) at (3,0);
\coordinate (H) at (5,0);
\coordinate (I) at (3,2);
\draw (G) -- (H) -- (I) -- cycle;
\tkzMarkRightAngle[draw=black,size=0.4cm](H,G,I)
\end{tikzpicture}
\end{document}
请注意,它\tkzMarkAngle
工作得很好,但并没有达到我想要的效果。让它工作的正确方法是什么?
答案1
我不懂法语,但手册中的例子表明,在使用之前,你需要适当地定义你的观点\tkzMarkRightAngle
。例如:
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(3,0){G}
\tkzDefPoint(5,0){H}
\tkzDefPoint(3,2){I}
\draw (G) -- (H) -- (I) -- cycle;
\tkzMarkRightAngle(H,G,I)
\end{tikzpicture}
\end{document}
生产
虽然tkz-euclide
基于 TikZ,但这并不意味着表面上具有与tkz
宏类似效果的 TikZ 宏可以用作替代品或反之亦然。正如您所说,\coordinate
允许您使用该库执行坐标计算calc
,而\tkzDefPoint
可能不行。
\tkzDefPoint
这是from的定义tkz-obj-points.tex
。
\def\tkzDefPoint{\pgfutil@ifnextchar[{\tkzActivOff\tkz@DefPoint}{%
\tkzActivOff\tkz@DefPoint[]}}
好的,所以我们需要看一下\tkz@DefPoint
。
\def\tkz@DefPoint[#1](#2)#{%
\tkz@parsecoordinate{#2}
\iftkz@polar
\tkz@ptStar[polar](\tkz@polarangle,\tkz@polarrad){tkz@coord@temp}
\else
\tkz@ptStar[](#2){tkz@coord@temp}
\fi
\tkz@DefPointEnd[#1]}%
\tkz@DefPointEnd
调用\coordinate
。但在此之前,代码还调用\tkz@ptStar
(用于笛卡尔坐标)。
\def\tkz@ptStar[#1](#2,#3)#{%
\pgfkeys{/tkzpt/.cd,
polar = false,%
}
\pgfqkeys{/tkzpt}{#1}
\iftkz@pt@polar%
\FPeval\tkz@x{(#3*cos(#2*\FPpi/180))}
\FPeval\tkz@y{(#3*sin(#2*\FPpi/180))}
\else
\FPeval\tkz@x{(#2)}
\FPeval\tkz@y{(#3)}
\fi
\FPadd{\ptxa}{\tkz@x}{-\tkz@init@xorigine}
\FPadd{\ptya}{\tkz@y}{-\tkz@init@yorigine}
\FPdiv{\ptxa}{\ptxa}{\tkz@init@xstep}
\FPdiv{\ptya}{\ptya}{\tkz@init@ystep}
\tkz@node
}
这会保存有关该点的大量信息,然后可以通过其他宏(如)访问这些信息\tkzMarkRightAngle
。
关键点在于,这tkz-euclide
是一个建立在 TikZ 之上的系统。其命令旨在与该系统协同工作。
您也可以使用常规的 TikZ 内容,但通常不能使用 TikZ 宏,然后使用tkz-euclide
在其基础上构建的宏,因为后者会假定您已经使用了tkz-euclide
在系统内设置内容的宏tkz-euclide
。
但是,您可以使用 TikZ 方法来操作坐标,例如,使用tkz-euclide
点,因为在定义它们时tkz-euclide
会执行\coordinate
。例如,该calc
库将很乐意与此物种合作。
\documentclass[border=10pt,multi,tikz]{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usetikzlibrary{calc}
\begin{document}
\begin{tikzpicture}
\tkzDefPoint(3,0){G}
\tkzDefPoint(5,0){H}
\tkzDefPoint(3,2){I}
\draw (G) -- (H) -- (I) -- cycle;
\tkzMarkRightAngle(H,G,I)
\draw ($(H)!1/2!(G)$) -- ($(G)!1/2!(I)$) -- ($(I)!1/2!(H)$) -- cycle;
\end{tikzpicture}
\end{document}