![Узел в системе координат с tikz](https://rvso.com/image/461894/%D0%A3%D0%B7%D0%B5%D0%BB%20%D0%B2%20%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5%20%D0%BA%D0%BE%D0%BE%D1%80%D0%B4%D0%B8%D0%BD%D0%B0%D1%82%20%D1%81%20tikz.png)
Я хотел бы создать TikZ
команду, которая создает систему координат. Пока что я создал эту MWE:
\documentclass[12pt,a4paper, xcolor=dvipsnames]{scrartcl}
\PassOptionsToPackage{svgnames}{xcolor}
\usepackage{tikz}
\newcommand{\coordinatesystem}[4]{
\begin{tikzpicture}
\draw[step=1, gray!40] (#1,#2) grid (#3,#4);
\draw[-stealth,very thick] (#1,0) -- (#3,0);
\draw[-stealth,very thick] (0,#2) -- (0,#4);
\foreach \x in {#1,...,#3}
\foreach \y in {#2,...,#4}
{
\node[text=gray!30, below] at (\x,0) {$\x$};
\node[text=gray!30, left] at (0,\y) {$\y$};
}
\end{tikzpicture}
}
\begin{document}
\coordinatesystem{-5}{-5}{3}{4}
\end{document}
Я бы хотел, чтобы узлы оси x были немного правее, чтобы избежать столкновения с линиями системы координат. Аналогично, я бы хотел, чтобы узлы оси y были немного выше, чем сейчас. Возможно ли это?
решение1
Если вы не хотите печатать нули на шкалах xy, измените свой код следующим образом:
\documentclass[12pt,a4paper]{scrartcl}
\usepackage{tikz}
\newcommand{\coordinatesystem}[4]{
\begin{tikzpicture}
\draw[step=1, gray!40] (#1,#2) grid (#3,#4);
\draw[-stealth,very thick] (#1,0) -- (#3,0);
\draw[-stealth,very thick] (0,#2) -- (0,#4);
\foreach \x in {#1,...,#3}
\foreach \y in {#2,...,#4}
{
\ifnum \x=0
\relax%
\else %
{\node[text=gray!30, below] at (\x,0) {$\x$};}
\fi
\ifnum \y=0
\relax%
\else %
{\node[text=gray!30, left] at (0,\y) {$\y$};}
\fi
}
\node[text=gray!30] at (-.3,-.3) {$O$};
\end{tikzpicture}
}
\begin{document}
\noindent
\coordinatesystem{-5}{-5}{3}{4}\,
\coordinatesystem{-4}{-5}{4}{4}
\end{document}
Выход:
ДОБАВЛЯТЬ: В любом случае, система координат сама по себе бесполезна. С ответом выше вы не сможете поместить никакой график или диаграмму. Поэтому вам нужно иметь \begin{tikzpicture}
и \end{tikzpicture}
вне определения \newcommand и иметь, например, что-то вроде этого:
\documentclass[12pt,a4paper]{scrartcl}
\usepackage{tikz}
\newcommand{\coordinatesystem}[4]{
\draw[step=1, gray!40] (#1,#2) grid (#3,#4);
\draw[-stealth,very thick] (#1,0) -- (#3,0);
\draw[-stealth,very thick] (0,#2) -- (0,#4);
\foreach \x in {#1,...,#3}
\foreach \y in {#2,...,#4}
{
\ifnum \x=0
\relax%
\else %
{\node[text=gray!30, below] at (\x,0) {$\x$};}
\fi
\ifnum \y=0
\relax%
\else %
{\node[text=gray!30, left] at (0,\y) {$\y$};}
\fi
}
\node[text=gray!30] at (-.3,-.3) {$O$};
}
\begin{document}
\noindent
\begin{tikzpicture}
\coordinatesystem{-4}{-5}{4}{4}
\clip (-4,-5) rectangle (4,4);
\draw[cyan,line width=2pt] plot[domain=-4:4] (\x,-\x-1);
\draw[magenta,line width=2pt] plot[domain=-4:4,smooth] (\x,\x*\x-4);
\end{tikzpicture}
\end{document}
С помощью приведенного выше кода вы получите следующий результат: