如何在定义的 TikZ 命令中使用旋转?

如何在定义的 TikZ 命令中使用旋转?

这是一个定义 TikZ 命令的简单文件,其中包含用于绘制选项的输入。该输入适用于虚线或点线等选项。但它忽略了旋转和缩放选项。它可以很好地运行它们,但运行起来就像它们不存在一样。

我想要绘制的实际图表要复杂得多,如果我可以使用旋转和缩放选项,效果会更好。我能以某种方式做到这一点吗?

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
     \[\begin{tikzpicture}
    \def\line[#1](#2)% Syntax: [draw options] (lefthand endpoint
      {\node at (#2) (A) {$\bullet$};
      \node at ($(#2)+(1,0)$) (B) {$\bullet$};
      \draw[#1] (A) edge[] (B);}
    \line[rotate=30,dashed](0,0);
          \end{tikzpicture}\]
\end{document}

答案1

这是一个非常快速的修复。

\documentclass{amsart}
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
     \[\begin{tikzpicture}
    \def\line[#1](#2)% Syntax: [draw options] (lefthand endpoint
      {\begin{scope}[#1]
      \node at (#2) (A) {$\bullet$};
      \node at ($(#2)+(1,0)$) (B) {$\bullet$};
      \draw (A) edge[] (B);
      \end{scope}}
    \line[rotate=30,dashed](0,0);
          \end{tikzpicture}\]
\end{document}

不过,我建议改用\newcommand

答案2

rotate 在这里不做任何事情的主要原因是它不应该做任何事情:你要求在两个明确的点(A)和之间画一条线(B),所以没有什么可以旋转的!rotatetikz\draw命令中的典型用途是当你有一个装饰或边框形状需要旋转时。如果你想画一条可以旋转的长度为 1 的线,那么你不应该使用显式命名的坐标。下面的代码产生,

在此处输入图片描述

我想这就是你想要的。代码如下:

\documentclass{amsart}
\usepackage{tikz}
\usepackage{xparse}
\NewDocumentCommand\Line{ O{} r()}{% Syntax: [draw options] (lefthand endpoint
  \draw[#1] (#2) node{$\bullet$} -- ++(1,0);
}
\begin{document}
  \begin{center}
    \begin{tikzpicture}
        \Line[rotate=30,dashed](0,0);
        \Line(2,0);
        \Line[rotate=90, blue](2,0);
    \end{tikzpicture}
  \end{center}
\end{document}

我已经使用\NewDocumentCommand解析包来定义\Line命令(我没有使用,\line因为 LaTeX 中已经有一个\line命令),这样它就需要一个可选参数和一个用括号括起来的强制参数。该线是使用++(1,0)第二点的相对坐标绘制的,因此不需要 tikz 库calc或定义坐标(A)和。最后,我在环境之外(B)定义了,以便您可以在不同的环境中使用它。\Linetikzpicturetikzpicture

相关内容