15 tkz-euclide 宏包中如何合理地排布多个图形

发布于 2025-08-12 19:15:50

有一个问题困扰我很久了,在没有学习用tkz-euclide宏包前就有了。如果题目中有几个图,需要并排放在一起,感觉总不很协调。

接着这几天学习用tkz-euclide宏包,一起来请教一下大佬们。

image.png

上面是这几天遇到的一个压轴题,请教大家怎么绘制。

查看更多

关注者
1
被浏览
111
Sagittarius Rover
我要成为Typst糕手/(ㄒoㄒ)/~~
上面是这几天遇到的一个压轴题,请教大家怎么绘制。

其实也还是和tkz-euclide有些关系的

Code

先上完整代码:

\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}

image.png

大致思路

图一:基本问题点在于确定D和E的位置,在文档中找到:

image.png

image.png

所以核心代码是:

\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}

图二:基本难点在于「根据B向CD作垂线」

之前的问题也介绍过了,有projection方法:

image.png

\tkzDefPointBy[projection=onto C--D](B) 
\tkzGetPoint{G}

图三:难点在于「根据CM作等边三角形」

但其实你用了tkz-euclide也不难....熟知等边三角形的英文为equilateral,在文档中搜索即可:

image.png

\tkzDefTriangle[equilateral](M,C) 
\tkzGetPoint{N}

P.S.1 如果没有@u26254 老师的回答,我是万万不会想到用scope的(哭)

P.S.2 最好不要不做任何尝试就提问,单独画每一个图都不算难....

2 个回答
shadow
shadow 1天前
这个人懒得不得了,竟然啥也没写

本质上与 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}

image.png

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览