有一个问题困扰我很久了,在没有学习用tkz-euclide
宏包前就有了。如果题目中有几个图,需要并排放在一起,感觉总不很协调。
接着这几天学习用tkz-euclide
宏包,一起来请教一下大佬们。
上面是这几天遇到的一个压轴题,请教大家怎么绘制。
上面是这几天遇到的一个压轴题,请教大家怎么绘制。
其实也还是和tkz-euclide
有些关系的
先上完整代码:
\documentclass[border=3pt]{standalone}
\usepackage{libertine}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}[scale=1.5,thick,line cap=rounded]
\tkzDefPoints{-1/0/B,1/0/C,0/sqrt(3)/A}
\tkzDefPointWith[linear,K=.35](A,B)\tkzGetPoint{D}
\tkzDefPointWith[linear,K=.35](C,A)\tkzGetPoint{E}
\tkzInterLL(D,C)(B,E) \tkzGetPoint{F}
\tkzDrawPolygon(A,B,C)
\tkzDrawSegments(C,D B,E)
\tkzLabelPoints[left](A,B,D)
\tkzLabelPoints[right](C,E)
\tkzLabelPoints[below](F)
\node at (0,-.5) {Figure 1};
\begin{scope}[xshift=3cm]
\tkzDefPoints{-1/0/B,1/0/C,0/sqrt(3)/A}
\tkzDefPointWith[linear,K=.35](A,B)\tkzGetPoint{D}
\tkzDefPointWith[linear,K=.35](C,A)\tkzGetPoint{E}
\tkzInterLL(D,C)(B,E) \tkzGetPoint{F}
\tkzDrawPolygon(A,B,C)
\tkzDrawSegments(C,D B,E)
\tkzLabelPoints[left](A,B,D)
\tkzLabelPoints[right](C,E)
\tkzLabelPoints[below](F)
%%%%%%%%%%%%%%%%%%%%
\tkzDefPointBy[projection=onto C--D](B) \tkzGetPoint{G}
\tkzDrawSegments(B,G A,G)
\tkzLabelPoints[right](G)
\node at (0,-.5) {Figure 2};
\end{scope}
\begin{scope}[xshift=6cm]
\tkzDefPoints{-1/0/B,1/0/C,0/sqrt(3)/A,0/0/H,0/-0.2/l}
\tkzDrawLine(A,H)
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints[right](l)
%%%%%%%%%%%%%%%%%%%%
\tkzDefPointWith[linear,K=.3](A,H)\tkzGetPoint{M}
%%%%%%%%%%%%%%%%%%%%
\tkzDefTriangle[equilateral](M,C)
\tkzGetPoint{N}
\tkzDrawSegments(B,N A,N)
\tkzDrawPolygon(C,M,N)
\tkzLabelPoints[below left](B,H)
\tkzLabelPoints[below right](C)
\tkzLabelPoints[left=-3pt](M)
\tkzLabelPoints[right=-2pt](N)
\tkzLabelPoints[above left](A)
\node at (0,-.5) {Figure 3};
\end{scope}
\end{tikzpicture}
\end{document}
所以核心代码是:
\tkzDefPointWith[linear,K=.35](A,B)\tkzGetPoint{D}
\tkzDefPointWith[linear,K=.35](C,A)\tkzGetPoint{E}
这里的K=0.35
是可供调整的参数,我不懂初中几何,算不出来...算得出来准确比例直接写会更准确...
至于求交点,在之前的回答里也已经用过了:
\tkzInterLL(D,C)(B,E) \tkzGetPoint{F}
之前的问题也介绍过了,有projection
方法:
\tkzDefPointBy[projection=onto C--D](B)
\tkzGetPoint{G}
但其实你用了tkz-euclide
也不难....熟知等边三角形的英文为equilateral,在文档中搜索即可:
\tkzDefTriangle[equilateral](M,C)
\tkzGetPoint{N}
P.S.1 如果没有@u26254 老师的回答,我是万万不会想到用scope
的(哭)
P.S.2 最好不要不做任何尝试就提问,单独画每一个图都不算难....
本质上与 tkz-euclide 无关,给几个简单的办法:
\documentclass{article}
\usepackage{lipsum,tikz,tkz-euclide}
\usetikzlibrary{scopes}
\begin{document}
\lipsum[1][1-3]
\vskip2em
% 方法一 scopes
\begin{tikzpicture}
{[]
\tkzDefPoint(0,0){A}
\tkzDefPoint(2.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
}
{[xshift=3.5cm]
\tkzDefPoint(0,0){A}
\tkzDefPoint(3.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
}
{[xshift=8cm]
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
}
\end{tikzpicture}
\vskip2em
\lipsum[1][1-3]
\vskip2em
% 方法二 tabular
\begin{tabular}{ccc}
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(2.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
&
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(3.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
&
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(3,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\end{tabular}
\vskip2em
\lipsum[1][1-3]
\vskip2em
% 方法三 \hfill
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(1.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(1.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(1.5,0){B}
\tkzDefPoint(1.5,2){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\hfill
\begin{tikzpicture}
\tkzDefPoint(0,0){A}
\tkzDefPoint(1.5,0){B}
\tkzDefPoint(1.5,1.5){C}
\tkzDrawPolygon(A,B,C)
\tkzLabelPoints(A,B,C)
\end{tikzpicture}
\end{document}
请教大佬是不是在
VSCode
上面有插件,可以规格化LaTeX
代码的插件啊?@u10189 好像有,但我没用过...我只是为了看的清晰自己加的缩进...
@u70550
\node at (0,-.5) {Figure 1};
这条语句的作用是在下面加标注,您在这里横坐标定义为0
,正好处于图片的下方居中。我把您的所有原始代码贴进去编译,就和您编译的结果是一样的。但自己在作图时遇到了一个问题:如果画的图里面有坐标系存在,横坐标定义为
0
就是可以正好处于图片的下方居中;如果画图时没有坐标系,那么就位于了图片下方左侧。请问是不是
\begin{tikzpicture}[scale=1.5,thick,line cap=rounded]
的选项里面控制了这个细节?另外,上面的语句里的
thick
是不是想使图中所有绘制的线加粗?我发现好像这样用的时候也没有加粗。求指点!谢谢!
@u10189
这里的坐标系指的是
axis
环境吗?我不是太理解。在
tkz-euclide
里,默认会把(0,0)
作为原点(?)关于
thick
,参考:thick
作为tikzpicture
的全局选项,在使用tkzDraw...
时确实会失效...我也不知道为什么,不妨新开一个问题(?)
@u70550 是的?就是我绘图的时候用了坐标系,就可以把
\node
的横坐标写成0
。代码和图如下:如果图里面没有坐标系,得把
\node
的横坐标写成非零,还得简单测算下。代码和图如下:我看到您就随意地定义
\node
,就正好居中了。现在有点糊涂了。@u10189 注意看你的两份代码中原点
(0,0)
所在的位置第一份
第二份
还有要注意的是,
\begin{scope}[xshift=4cm]...\end{scope}
中的\node at (1.8,-.8) {图 2};
实际上在主画布中的位置为
(5.8,-.8)
@u70550 (⊙o⊙)哦!这样子!是和自己开始定义点的坐标关联的。O(∩_∩)O谢谢