![tkz-euclide 的问题](https://linux22.com/image/475717/tkz-euclide%20%E7%9A%84%E9%97%AE%E9%A2%98.png)
我从一个很好的答案中复制代码后,遇到了 TikZ 图形的问题这里:
\documentclass[11pt,a4paper]{article}
\usepackage{blindtext}
\usepackage{tkz-euclide}
\usetkzobj{all}
\usepackage{color}
\begin{document}
\begin{center}
\begin{tikzpicture}
\tkzDefPoint(0,0){M}
\tkzDefPoint(1.5,0){A}
\tkzLabelPoints[below](A)
\tkzDefPoint(12,0){N}
\tkzDefPoint(10.5,0){B}
\tkzLabelPoints[below](B)
\tkzDrawSegment(M,N)
\tkzDefPoint(9.0,7){L}
\tkzDefPoint(7,5.1){C}
\tkzLabelPoints[above](C)
\tkzDrawSegment(A,L)
\tkzDefLine[bisector](B,A,C)\tkzGetPoint{a}
\tkzDrawSegment(A,a)
\tkzDefPointWith[linear,K=0.6](A,a) \tkzGetPoint{D}
\tkzDefPointBy[projection=onto A--C](D)
\tkzGetPoint{h}
\tkzDrawSegment(D,h)
\tkzMarkRightAngle[fill=lightgray](A,h,D)
%
\tkzDefPointBy[projection=onto A--B](D)
\tkzGetPoint{g}
\tkzDrawSegment(D,g)
\tkzMarkRightAngle[fill=lightgray](A,g,D)
\end{tikzpicture}
\end{center}
\end{document}
当我尝试编译代码时出现了第一个问题。我需要评论 \usetkzobj{all}
。否则,我会收到错误消息。我尝试使用 MikTeX 包管理器更新 tkz-euclide 包,但问题仍然存在。如果有帮助,这是 MikTeX 的屏幕截图:
当文档被编译时(使用上述命令评论)我得到了下面的图片。
我不明白为什么标签会被移位。我没有对原始代码做任何改动。
为了进行比较,这是来自链接答案的图像。https://i.stack.imgur.com/VUFYR.png
此外,我想知道如何添加表示一致性的线,如下所示:
非常感谢您的任何反馈。
答案1
- 我使用了 AndréC 的代码,并做了一些修改。我删除了不必要的部分。在您的代码中,我删除了
\usepackage{tikz}
因为tkz-euclide
会自行加载它。
在 André 的代码中,我更改了该行\tkzDefPointWith[linear,K=0.6](A,a) \tkzGetPoint{D}
。它仍然有效,但\tkzDefPointWith[linear normed,K=8](A,a) \tkzGetPoint{D}
更可取,因为这样我们就知道 AD 的确切长度。
最后,最好先定义并确定点,然后作为最后一步,跟踪、标记和标记它们。
对于标签位置,有一个 .cfg 配置文件可用。根据用户的不同,它可能不同,导致位置不同。最好的解决方案是重新定义您自己的样式。
\documentclass[11pt,a4paper]{article}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
% definition
\tkzDefPoint(0,0){M}
\tkzDefPoint(12,0){N}
\tkzDefPoint(1.5,0){A}
\tkzDefPoint(9,7){L}
% calculate
\tkzDefLine[bisector](N,A,L) \tkzGetPoint{a}
\tkzDefPointWith[linear normed,K=8](A,a) \tkzGetPoint{D}
\tkzDefPointBy[projection=onto A--L](D) \tkzGetPoint{C}
\tkzDefPointBy[projection=onto A--N](D) \tkzGetPoint{B}
% drawing
\tkzDrawSegments(D,B D,C A,a A,L M,N)
% labeling
\tkzLabelPoints[below](A,B)
\tkzLabelPoints[above](C)
% marking
\tkzMarkRightAngles[fill=lightgray](A,C,D A,B,D)
\tkzMarkSegments[mark=||](C,D D,B)
\tkzMarkAngles[mark=|,size=2](B,A,D)
\tkzMarkAngle[mark=|,size=2.1](D,A,C)
\end{tikzpicture}
\end{document}
- 这是带有 tkz-elements 和 tkz-euclide 的版本。使用 lualatex 进行编译。
定义部分仅在语法上有所变化。我们定义三角形 T.ANL。这避免创建直线 L.AN 和 L.AL,它们将由 T.ANL.ab 和 T.ANL.ca 定义(ab、bc 和 ca 是三角形的三条边)。
角平分线定义了从 A 开始的角平分线。角平分线 (2) 定义了从 B 开始的角平分线,等等。
za 是直线 L.Aa 的第二点。L.Aa.pa 表示第一点,L.Aa.pb 表示第二点。
zD = L.Aa:报告(6)`将点D置于距离A 6厘米的位置。
\documentclass[11pt,a4paper]{article}
\usepackage{tkz-euclide,tkz-elements}
\begin{document}
\begin{tkzelements}
-- definition
z.M = point : new (0,0)
z.N = z.M : east (12)
z.A = point : new (1.5,0)
z.L = point : new (9,7)
T.ANL = triangle : new (z.A,z.N,z.L)
-- calculate
L.Aa = T.ANL : bisector ()
z.a = L.Aa.pb
z.D = L.Aa : report (6)
z.B = T.ANL.ab : projection (z.D)
z.C = T.ANL.ca : projection (z.D)
\end{tkzelements}
\begin{tikzpicture}
\tkzGetNodes
% drawing
\tkzDrawSegments(B,D D,C A,a A,L M,N)
% labeling
\tkzLabelPoints[below](A,B)
\tkzLabelPoints[above](C)
% marking
\tkzMarkRightAngles[fill=lightgray](A,C,D A,B,D)
\tkzMarkSegments[mark=||](C,D D,B)
\tkzMarkAngles[mark=|,size=2](B,A,D)
\tkzMarkAngle[mark=|,size=2.1](D,A,C)
\end{tikzpicture}
\end{document}
答案2
我精简了代码中不必要的命令。代码中不必要地定义了点 B、D、h 和 g。我删除了 h 和 g,并用 B 和 D 替换它们。我在角度的半径上做了一些细微的差异,因为当半径不同时,读到角度与代码相等似乎更清楚。但你可以改变这一点。
\documentclass[11pt,a4paper]{article}
\usepackage{blindtext}
\usepackage{tkz-euclide}
\usepackage{color}
\begin{document}
\begin{center}
\begin{tikzpicture}
\tkzDefPoint(0,0){M}
\tkzDefPoint(1.5,0){A}
\tkzLabelPoints[below](A)
\tkzDefPoint(12,0){N}
\tkzDrawSegment(M,N)
\tkzDefPoint(9.0,7){L}
\tkzDrawSegment(A,L)
\tkzDefLine[bisector](N,A,L)\tkzGetPoint{a}
\tkzDrawSegment(A,a)
\tkzDefPointWith[linear,K=0.6](A,a) \tkzGetPoint{D}
\tkzDefPointBy[projection=onto A--L](D)
\tkzGetPoint{C}
\tkzLabelPoints[above](C)
\tkzMarkRightAngle[fill=lightgray](A,C,D)
\tkzDefPointBy[projection=onto A--N](D)
\tkzGetPoint{B}
\tkzLabelPoints[below](B)
\tkzDrawSegments(D,B D,C)
\tkzMarkSegments[mark=||](C,D D,B)
\tkzMarkAngle[mark=|,size=2](B,A,D)
\tkzMarkAngle[mark=|,size=2.1](D,A,C)
\tkzMarkRightAngle[fill=lightgray](A,B,D)
\end{tikzpicture}
\end{center}
\end{document}