我已经得到了我想要的外观,但应该有更简单的方法。我原本想用 \foreach 来制作重复的箭头,但也许有一种方法可以定义 \draw (a) -- (b),它会自动将箭头放置在多边形路径的顶点之间?
如果这可以在 3D 环境下运行就更好了。
\documentclass{article}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}[ultra thick, lightgray]
\draw[->] (0,0) -- (1,0);
\draw[->] (1,0) -- (2,0);
\draw[->] (2,0) -- (2,1);
\draw[->] (2,1) -- (2,2);
\draw[->] (2,2) -- (2,3);
\draw[->][purple][->] (0,0) -- (2,3);
\end{tikzpicture}
\end{document}
答案1
这是\pic
(第一种)方法。我制作了一个\pic
按顺序绘制 x、y、z 分量然后绘制矢量的程序。需要注意的是:仅适用于整数坐标。这是 3D 版本,但我认为很容易修改为 2D 版本。
代码:
\documentclass[tikz,border=1.618mm]{standalone}
\usetikzlibrary{perspective}
\tikzset
{%
pics/vector basis/.style n args={3}{code=%
{% x component
\pgfmathtruncatemacro\myabs{abs(#1)}
\ifnum\myabs>0
\pgfmathtruncatemacro\mysgn{\myabs/#1}
\foreach\i in {1,...,\myabs}
\draw[-latex,gray] ({\mysgn*(\i-1)},0,0) --++ (\mysgn,0,0);
\fi
% y component
\pgfmathtruncatemacro\myabs{abs(#2)}
\ifnum\myabs>0
\pgfmathtruncatemacro\mysgn{\myabs/#2}
\foreach\i in {1,...,\myabs}
\draw[-latex,gray] (#1,{\mysgn*(\i-1)},0) --++ (0,\mysgn,0);
\fi
% z component
\pgfmathtruncatemacro\myabs{abs(#3)}
\ifnum\myabs>0
\pgfmathtruncatemacro\mysgn{\myabs/#3}
\foreach\i in {1,...,\myabs}
\draw[-latex,gray] (#1,#2,{\mysgn*(\i-1)}) --++ (0,0,\mysgn);
\fi
% vector
\draw[-latex,pic actions] (0,0,0) -- (#1,#2,#3);
}},
}
\begin{document}
\begin{tikzpicture}[3d view={120}{20}]
\draw[-latex] (0,0,0) -- (2,0,0) node[left] {$x$};
\draw[-latex] (0,0,0) -- (0,2,0) node[right] {$y$};
\draw[-latex] (0,0,0) -- (0,0,3) node[above] {$z$};
\pic[red] {vector basis={-2}{0}{3}};
\pic[blue] {vector basis={1}{2}{3}};
\end{tikzpicture}
\end{document}