У меня возникли проблемы с фигуркой 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}
. В противном случае я получаю сообщение об ошибке. Я попытался обновить пакет tkz-euclide с помощью диспетчера пакетов MikTeX, но проблема осталась. Если это поможет, вот скриншот MikTeX:
Когда документ скомпилирован (с помощью вышеупомянутой командыпрокомментировал) У меня получается следующая картина.
Не могу понять, почему метки сместились. Я не менял ни на йоту исходный код.
Для сравнения, это изображение из связанного ответа.https://i.stack.imgur.com/VUFYR.png
Кроме того, я хотел бы знать, как добавлять линии, указывающие на конгруэнтность, как показано ниже:
Большое спасибо за любые отзывы.
решение1
- Я использовал код AndréC с несколькими модификациями. Я удалил то, что было ненужным. В вашем коде я удалил,
\usepackage{tikz}
потому чтоtkz-euclide
загружает его сам.
В коде Андре я изменил строку \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 на расстоянии 6 см от A.
\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}