\tkzMarkRightAngle 产生“缺少 \endcsname”

\tkzMarkRightAngle 产生“缺少 \endcsname”

我正在制作一个上面有三角形的图表。我想显示这个三角形有一个直角,我发现\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}

用 tkz 点计算

相关内容