tikz 中的坐标原点在哪里

tikz 中的坐标原点在哪里

我正在尝试使用 LaTeX 在纸上创建一个等边三角形,但我不明白 tikz(或 tikzpicture)如何选择其坐标原点 (0,0)。写完文字后,我想用以下代码在纸的右侧绘制三角形:

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}

%parameters are the following : cooX , cooY , triangleSize
\newcommand{\triangle} [3] {
\begin{tikzpicture}
\draw (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;
\end{tikzpicture}
}

\begin{document}
\normalsize
Here is my text and the triangle
\triangle {10}{0}{3}
\end{document}

这将创建:

第一个代码图像

我的目标是通过调用函数在右侧绘制 10 厘米处的三角形\三角形使用第一个参数{10}。正如你在我的代码中看到的,我希望三角形的第一个点绘制在我已经选择的坐标 (10,0) 上,这是我的新命令的参数\三角形问题是,无论我对参数做了什么,原点始终是相同的。如果我把{20}代替{10},我希望根据我的参数将其向右移动 10 或 20 厘米。另一方面,如果我在调用新命令时更改一个参数,该参数的数字不是我选择的数字,如下所示:

...
\draw (20,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;
...
\triangle {10}{0}{3}
...

(我将这段代码中的第一个 #1 改为 20,将 10 替换为 20)。

然后 tikz 考虑到这个变化并向我展示一个变形的三角形,其起点位于最右边:

第二张代码图

这就像 tikz 总是想把原点放在同一个位置,无论我向坐标添加什么常数(#1 和 #2)。我必须做什么才能根据我提供给新命令的参数移动三角形\三角形

答案1

您应该注意以下几个方面(无先后顺序)。首先让我们看一下下面的代码截图。

结果

(1) 白色三角形来自您的宏,代码本身有些不同。有一种惯例是,输入换行符(实际上是空白行)会创建一个新的行类型集。

(2) LaTeX 是排版,而不是打字,正如您可能从 Word 或其他编辑器中了解到的那样。它尝试排版实体。在您的情况下,这些是:

  • 单个字符,包括空格
  • 创造的东西\newcommand(白色三角形)
  • 还可以有更多

想象一下每个字母周围用铅制成一个方框或三角形,就像古腾堡时代或过去的当地报纸一样。

LaTeX 将继续将一个个实体粘合在一起,直到完成,试图实现它“知道”的“良好的排版结果”。

(3) 众所周知,a 中每行的最后一个字符\newcommand应以 a 结尾%(即注释掉该行的其余部分)。如果您错过了这一点,LaTeX 会尝试排版您不想要的空格(简化)。

(4)我对三角形做了两个修改,分别是青色和黄色,区别如下:

  • 青色的水平空间(你所寻求的偏移)为 7 厘米(10 厘米的差异不够明显)通过\hspace{}
  • yellow 的用途是\hfill:将“块”移至最外面。

(5)请认可我在欧洲的选择\documentclass;-)

\documentclass[12pt,a4paper]{article}
\usepackage{tikz}

%parameters are the following : cooX , cooY , triangleSize
\newcommand{\trngl}[3]{%
\begin{tikzpicture}%
\draw (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;%
\end{tikzpicture}%
}

\newcommand{\trnglA}[3]{%
\hspace{7cm}\begin{tikzpicture}% <<< 7cm to see the difference
\draw[fill=teal!20] (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;%
\end{tikzpicture}%
}

\newcommand{\trnglB}[3]{%
\hfill\begin{tikzpicture}%
\draw[fill=yellow!20] (#1,#2)--(#1+0.5*#3,#2+0.86*#3)--(#1+1*#3,#2)--cycle;%
\end{tikzpicture}%
}

% ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
\begin{document}
\normalsize
% ~~~ variations of your code: WATCH the differences ~~~~~~~~~~~~~~~~~~
Here is my text and the \textbf{triangle} on same line \trngl{10}{0}{3}

Here is my text and the \textbf{triangle} still on same line
\trngl{10}{0}{3}


Here is my text and the \textbf{triangle} on next line

\trngl{10}{0}{3}

% ~~~ using some (hopefully correct) \hspace{} ~~~~~~~~~~~~~~
Here is my text and the \textbf{triangleA} on next line

\trnglA{10}{0}{3}

% ~~~ using \hfill ~~~~~~~~~~~~~~~~~~~~
Here is my text and the \textbf{triangleB} on next line

\trnglB{10}{0}{3}

\end{document}

相关内容