tkz-euclide 命令改变 tikzfigure 的位置 - 需要它停止

tkz-euclide 命令改变 tikzfigure 的位置 - 需要它停止

我很少会在 ChatGPT 和 Google 上寻找问题解决方案,却发现根本没有任何内容提到该问题。也许我只是搜索能力太差。

在下面的代码中,我有四个小页面显示不同类型的三角形。在等腰三角形和等边三角形(但不在不等边三角形)中使用 tkx-euclide 命令。它将这两个图都置于中心并垂直移动它们。我不希望它们居中,也不想让它们垂直移动。所以我需要解决这个问题。我认为 \tkzLabelAngle 命令导致了这个问题,但我需要一种使用该命令而不出现定位问题的方法。

谢谢

\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Scalene Triangle}}
    \newline\newline
        \begin{tikzpicture}
            \draw (0,0) -- (1,2) -- (3,1.75) -- (0,0);
        \end{tikzpicture}
\end{minipage}
\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Isosceles Triangle}}
    \newline\newline
        \begin{tikzpicture}
            \coordinate (A) at (0,0);
            \coordinate (B) at (4,0);
            \coordinate (C) at (2,1.5);
            \draw (0,0) -- (4,0) -- (2,1.5) -- (0,0);
            \tkzMarkSegment[color=black,pos=.5,mark=|](A,C)
            \tkzMarkSegment[color=black,pos=.5,mark=|](B,C)
            \tkzLabelAngle[pos=-0.33](C,A,B){$\circ$}
            \tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
        \end{tikzpicture}
\end{minipage}
\newline\newline
\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Equilateral Triangle}}
    \newline\newline
        \begin{tikzpicture}
            \coordinate (A) at (0,0);
            \coordinate (B) at (3,0);
            \coordinate (C) at (1.5,{1.5*sqrt(3)});
            
            \draw (A) -- (B) -- (C) -- cycle;
            \tkzLabelAngle[pos=-0.33](C,A,B){$\circ$}
            \tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
            \tkzLabelAngle[pos=-0.33](B,C,A){$\circ$}
        \end{tikzpicture}
\end{minipage}
\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Right Triangle}}
    \newline\newline
        \begin{tikzpicture}
            
        \end{tikzpicture}
\end{minipage}

答案1

最好将它们全部绘制在一张 tikz 图片中,scope并使用不同的值来定位它们shift。我相信负pos键值可能会导致更大的边界框。如果可能的话,最好使用正值。

\documentclass{standalone}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\begin{scope}
\draw (0,0) -- (1,2) -- (3,1.75) -- cycle;
\node at (1.5,2) [above=0.5cm] {\textsf{\textbf{Scalene Triangle}}};
\end{scope}
\begin{scope}[xshift=6cm]
\coordinate (A) at (0,0);
\coordinate (B) at (4,0);
\coordinate (C) at (2,1.5);
\draw (0,0) -- (4,0) -- (2,1.5) -- cycle;
\tkzMarkSegment[color=black,pos=.5,mark=|](A,C)
\tkzMarkSegment[color=black,pos=.5,mark=|](B,C)
\tkzLabelAngle[pos=-0.33](C,A,B){$\circ$}
\tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
\node at (C)  [above=1cm] {\textsf{\textbf{Isosceles Triangle}}};
\end{scope}
\begin{scope}[yshift=-4cm]
\coordinate (A) at (0,0);
\coordinate (B) at (3,0);
\coordinate (C) at (1.5,{1.5*sqrt(3)});
\draw (A) -- (B) -- (C) -- cycle;
\tkzLabelAngle[pos=0.33](B,A,C){$\circ$}
\tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
\tkzLabelAngle[pos=0.33](A,C,B){$\circ$}
\node at (C) [above=0.5cm] {\textsf{\textbf{Equilateral Triangle}}};
\end{scope}
\begin{scope}[shift={(6.5cm,-4cm)}]
\coordinate (A) at (0,0);
\coordinate (B) at (3,0);
\coordinate (C) at (3,{1.5*sqrt(3)});
\draw (A) -- (B) -- (C) -- cycle;
\node at (1.5,{1.5*sqrt(3)}) [above=0.5cm] {\textsf{\textbf{Right Triangle}}};
\end{scope}
\end{tikzpicture}
\end{document}

在此处输入图片描述

##############################################################################

这里有一个例子,说明负值pos会放大边界框。同样的绘图,但负值pos会使左下角和顶角的边界框更大。

\documentclass{report}
\usepackage{tkz-euclide}
\begin{document}
\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,0);
\coordinate (C) at (1.5,{1.5*sqrt(3)});
\draw (A) -- (B) -- (C) -- cycle;
\tkzLabelAngle[pos=0.33](B,A,C){$\circ$}
\tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
\tkzLabelAngle[pos=0.33](A,C,B){$\circ$}
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}

\begin{tikzpicture}
\coordinate (A) at (0,0);
\coordinate (B) at (3,0);
\coordinate (C) at (1.5,{1.5*sqrt(3)});
\draw (A) -- (B) -- (C) -- cycle;
\tkzLabelAngle[pos=-0.33](C,A,B){$\circ$}
\tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
\tkzLabelAngle[pos=-0.33](B,C,A){$\circ$}
\draw (current bounding box.south west) rectangle (current bounding box.north east);
\end{tikzpicture}
\end{document}

在此处输入图片描述

第一行使用minipage正值pos和。输出是否符合您的预期?我使用文档类作为示例并显示页面框架。\noindentreport

\documentclass{report}
\usepackage{showframe}
\usepackage{tkz-euclide}
\begin{document}
\noindent\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Scalene Triangle}}
    \newline\newline
        \begin{tikzpicture}
            \draw (0,0) -- (1,2) -- (3,1.75) -- (0,0);
        \end{tikzpicture}
\end{minipage}
\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Isosceles Triangle}}
    \newline\newline
        \begin{tikzpicture}
            \coordinate (A) at (0,0);
            \coordinate (B) at (4,0);
            \coordinate (C) at (2,1.5);
            \draw (0,0) -- (4,0) -- (2,1.5) -- (0,0);
            \tkzMarkSegment[color=black,pos=.5,mark=|](A,C)
            \tkzMarkSegment[color=black,pos=.5,mark=|](B,C)
            \tkzLabelAngle[pos=0.33](B,A,C){$\circ$}
            \tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
        \end{tikzpicture}
\end{minipage}
\newline\newline
\begin{minipage}[t]{0.475\linewidth}
    \textsf{\textbf{Equilateral Triangle}}
    \newline\newline
        \begin{tikzpicture}
            \coordinate (A) at (0,0);
            \coordinate (B) at (3,0);
            \coordinate (C) at (1.5,{1.5*sqrt(3)});
            
            \draw (A) -- (B) -- (C) -- cycle;
            \tkzLabelAngle[pos=0.33](B,A,C){$\circ$}
            \tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
            \tkzLabelAngle[pos=0.33](A,C,B){$\circ$}
        \end{tikzpicture}
\end{minipage}
\begin{minipage}[t]{0.475\linewidth}
\textsf{\textbf{Right Triangle}}
\newline\newline
\begin{tikzpicture}
            
\end{tikzpicture}
\end{minipage}
\end{document}

在此处输入图片描述

答案2

  1. 第一个解决方案。您不需要专门使用 tkz-euclide。您可以将其与 TikZ 混合使用,这样效果不好。

您不要使用负值,因为pos正如汤姆所说:您正在使边界框变得更大。

使用 clip 你可以控制 bbox (参见 2 )

    \begin{tikzpicture}
        \tkzDefPoints{0/0/A,3/0/B}
        \tkzDefTriangle[equilateral](A,B)\tkzGetPoint{C}
        \tkzDrawPolygon(A,B,C)
        \tkzLabelAngle[pos=0.33](B,A,C){$\circ$}
        \tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
        \tkzLabelAngle[pos=0.33](A,C,B){$\circ$}
    \end{tikzpicture}
  1. 你可以使用以下方式控制 bbox\tkzClipPolygon(A,B,C)

    \begin{tikzpicture}
         \coordinate (A) at (0,0);
         \coordinate (B) at (3,0);
         \coordinate (C) at (1.5,{1.5*sqrt(3)});
         \draw (A) -- (B) -- (C) -- cycle;
         \tkzClipPolygon(A,B,C)
         \tkzLabelAngle[pos=-0.33](C,A,B){$\circ$}
         \tkzLabelAngle[pos=0.33](C,B,A){$\circ$}
         \tkzLabelAngle[pos=-0.33](B,C,A){$\circ$}
     \end{tikzpicture}
    

相关内容