Tikzとか余り使ったことがないので拙いコードですが、
こういうのが意外とWeb上になかったので載っけます。
特に座標の型と数値型の取り扱いにハマりました。
例えば、ベクトルvのスカラーk倍なんてのはCalcライブラリで
\pgfmathtruncate{\k}{5}; \coordinate (v) at (2,3); \node at ($k*v$){$k*v$};
なんてできるんですけど、
coordinateされたvから座標を取り出した値は「2.pt」のように単位がついて普通の数値としての計算がしにくくなります。
たとえば以下のコードはコンパイルが通りません。
\pgfmathtruncate{\k}{5}; \coordinate (v) at (2,3); \path let \p1=(v) in node at ($\x1*v$){$k*v$}; %\x1は\p1のx座標。ただし、\x1が純粋な数値でないので掛け算できません。
座標型から元の数値型のデータが取り出せたら苦労しないんですが、
どうやら方法が見当たらないんです。
そんなこんなで以下のコードのようになりました。
コンパイルはTexLive2022のLualatexでやりました。
左下からの原点の位置 \ox, \oy でグラフ内の原点の位置が決まります。
基底ベクトル e1, e2 で斜交座標の形が決まります。
そして、グラフの幅 \gx、グラフの高さ \gy でグラフのサイズが決まります。
使う場合はこのあたりを変更すれば良いです。
別のベクトルを追加する場合は、
\draw[->] (O) -- ++($2*(e1)+3*(e2)$);
のように、原点からの基底ベクトルを使った合成で座標を決めると綺麗だと思いますん。
\documentclass{ltjsarticle} \usepackage{tikz} \begin{document} \begin{tikzpicture}[scale=0.7] \coordinate (OO) at (0,0); %Origin Point coordinate \pgfmathtruncatemacro{\ox}{1}; % x \pgfmathtruncatemacro{\oy}{1}; % y %Basis Vectors \coordinate (e1) at (1,1); % x direction \coordinate (e2) at (0,1); % y direction %Graph size \pgfmathtruncatemacro{\gx}{5}; %width \pgfmathtruncatemacro{\gy}{5}; %hight %main %%Draw origin point label \path let \p1=(e1) in coordinate (e1o) at ($(\ox*\x1, \ox*\y1)$); \path let \p1=(e2) in coordinate (e2o) at ($(\oy*\x1, \oy*\y1)$); \path coordinate (O) at ($(e1o)+(e2o)$); \node at ($(OO)+0.5*(O)$) {$O$}; %Draw grid \path let \p1 = ($(e1)$) in coordinate (e1e) at ($\gx*(\p1)$); \path let \p1 = ($(e2)$) in coordinate (e2e) at ($\gx*(\p1)$); %%v line \foreach \i in {0,...,\gx}{ \draw[gray!40] let \p1 = (e2) in ($(OO) + (\i*\x1,\i*\y1)$) -- ++($(e1e)$); }; %%h line \foreach \i in {0,...,\gy}{ \draw[gray!40] let \p1=(e1) in ($(OO) + (\i*\x1,\i*\y1)$) -- ++($(e2e)$); }; %Draw axis \draw[->,thick] ($(OO) + (e2o)$) -- ++($(e1e)$); \draw[->, thick] ($(OO) + (e1o)$) -- ++($(e2e)$); %added vector \draw[->] (O) -- ++($2*(e1)+3*(e2)$)node[right]{$v$}; \end{tikzpicture} \end{document}