此示例在角度大于 5 度时可以正常工作,但如果角度小于 5 度,则编译将失败。
\documentclass{standalone}
\usepackage{tkz-euclide}
\usetkzobj{all}
\begin{document}
\begin{tikzpicture}
\def\angle{5}
\def\r{2cm}
\coordinate (O) at (0,0);
\coordinate (A) at (\angle:\r);
\coordinate (B) at (0:\r);
\foreach \x/\y in {O/A,O/B} {
\draw (\x) -- (\y);
}
%\tkzMarkAngles(A,O,B);
\tkzMarkAngles(B,O,A);
\foreach \x in {O,A,B} {
\node [circle,fill=red,minimum size=1pt,inner sep=0,label=below:{$\x$}] at (\x) {};
}
\end{tikzpicture}
\end{document}
我知道角度太小,调用 \tkzMarkAngles 意义不大,但当我尝试创建一个动画时,调试需要花费很多时间,因为动画会动态地改变角度。
错误信息:
(/usr/local/texlive/2016/texmf-dist/tex/latex/latexconfig/epstopdf-sys.cfg))
! Dimension too large.
<to be read again>
\relax
l.15 \tkzMarkAngles(B,O,A)
;
? x
No pages of output.
错误消息(尺寸太大)也让我感到困惑!为什么它太大,它应该太小:-)。
答案1
解决方案!几种可能性:借助 xfp 包或借助 lua,使用新的 veclen 命令,如下面的示例所示。我在宏中使用“decoration” \tkzMarkAngles
,而这个库在处理较小值的“veclen”时存在问题。另一种可能性是缩放 (4) 图片。我在新版本的 tkz-euclide v2.42 中使用此版本的“veclen”
这里
\documentclass{standalone}
\usepackage{tkz-euclide,xfp}
\usetkzobj{all}
\makeatletter
\let\pgfmath@function@veclen\relax
\pgfmathdeclarefunction*{veclen}{2}{%
\begingroup%
\pgfmath@x#1pt\relax%
\pgfmath@y#2pt\relax%
\pgf@xa=\pgf@x%
\pgf@ya=\pgf@y%
\edef\tkz@temp@a{\fpeval{\pgfmath@tonumber{\pgf@xa}}}
\edef\tkz@temp@b{\fpeval{\pgfmath@tonumber{\pgf@ya}}}
\edef\tkz@temp@sum{\fpeval{%
(\tkz@temp@a*\tkz@temp@a+\tkz@temp@b*\tkz@temp@b)}}
\edef\tkz@xfpMathLen{\fpeval{sqrt(\tkz@temp@sum)}}
%\edef\pgfmath@tmp{\fpeval{round(\tkzFPMathLen,6)}}
%\pgfmath@tmp %
\pgfmath@returnone\tkz@xfpMathLen pt%
\endgroup%
}
\makeatother
\begin{document}
\begin{tikzpicture}[scale=.75]
\def\angle{5}
\def\r{2cm}
\coordinate (O) at (0,0);
\coordinate (A) at (\angle:\r);
\coordinate (B) at (0:\r);
\foreach \x/\y in {O/A,O/B} {
\draw (\x) -- (\y);
}
%\tkzMarkAngles(A,O,B);
\tkzMarkAngles(B,O,A);
\foreach \x in {O,A,B} {
\node [circle,fill=red,minimum size=1pt,inner sep=0,label=below:{$\x$}] at (\x) {};
}
\end{tikzpicture}
\end{document}
答案2
为了注释目的,更简单的解决方案如下:
\documentclass[tikz]{standalone}
\usetikzlibrary{arrows, calc,angles,quotes}
\begin{document}
\begin{tikzpicture}
\def\angle{5}
\def\r{2cm}
\coordinate (O) at (0,0);
\coordinate (A) at (\angle:\r);
\coordinate (B) at (0:\r);
\foreach \x/\y in {O/A,O/B} {
\draw (\x) -- (\y);
}
\pic [draw] {angle = B--O--A};
\foreach \x in {O,A,B} {
\node [circle,fill=red,minimum size=1pt,inner sep=0,label=below:{$\x$}] at (\x) {};
}
\end{tikzpicture}
\begin{tikzpicture}
\def\angle{30}
\def\r{2cm}
\coordinate (O) at (0,0);
\coordinate (A) at (\angle:\r);
\coordinate (B) at (0:\r);
\foreach \x/\y in {O/A,O/B} {
\draw (\x) -- (\y);
}
\pic [draw,"$\theta$",angle eccentricity=1.5] {angle = B--O--A};
\foreach \x in {O,A,B} {
\node [circle,fill=red,minimum size=1pt,inner sep=0,label=below:{$\x$}] at (\x) {};
}
\end{tikzpicture}
\end{document}