我有两个问题。首先我不知道为什么,但是纺织机械商当我定义此命令时无法编译:
\newcommand{\Axes}{\draw[-{Latex[length=5mm,width=2mm]}](-5,0)--(5,0)\node[below]{$x$};
\foreach \x in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[xshift=\x cm](0pt,-2pt)--(0pt,2pt);
\draw[-{Latex[length=5mm,width=2mm]}](0,-5)--(0,5)node[left]{$y$};
\foreach \y in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[yshift=\y cm](-2p,0pt)--(2pt,0pt);}
这有什么问题?如何解决这个问题?我的第二个问题是,我如何使用选项定义这个命令?我希望我的\Axes
命令看起来像这样:
\Axes[(x axis length),(y axis length)]
请帮帮我,我很少定义命令,而且我对此没有经验。谢谢。
完整代码
\documentclass[12pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz,fullpage,mathtools}
\usetikzlibrary{arrows.meta}
\newcommand{\Axes}{\draw[-{Latex[length=5mm,width=2mm]}](-5,0)--(5,0)\node[below]{$x$};
\foreach \x in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[xshift=\x cm](0pt,-2pt)--(0pt,2pt);
\draw[-{Latex[length=5mm,width=2mm]}](0,-5)--(0,5)node[left]{$y$};
\foreach \y in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[yshift=\y cm](-2p,0pt)--(2pt,0pt);}
\begin{document}
\tikz{\Axes}
\end{document}
答案1
在我看来,应该-2p
是-2pt
,但;
第一条语句之后缺少了。\draw
更新:我添加了一个新\AxesNew
版本,其中包含一个可选参数和一个拆分器辅助命令。警告:您必须将长度括在一{...}
对中!
更好的方法是使用expl3
及其分裂特征(即\seq_set_split:Nnn
但这可能太多了;-))
\documentclass[12pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{tikz,fullpage,mathtools}
\usetikzlibrary{arrows.meta}
\newcommand{\Axes}{%
\draw[-{Latex[length=5mm,width=2mm]}](-5,0)--(5,0);\node[below]{$x$};
\foreach \x in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[xshift=\x cm](0pt,-2pt)--(0pt,2pt);
\draw[-{Latex[length=5mm,width=2mm]}](0,-5)--(0,5)node[left]{$y$};
\foreach \y in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[yshift=\y cm](-2pt,0pt)--(2pt,0pt);
}
\def\ostalslittlehelper#1,#2{%
\def\ostalfirstarg{#1}%
\def\ostalsecondarg{#2}%
}
\newcommand{\AxesNew}[1][{5mm},{2mm}]{%
\ostalslittlehelper#1%
\draw[-{Latex[length=\ostalfirstarg,width=\ostalsecondarg]}](-5,0)--(5,0);\node[below]{$x$};
\foreach \x in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[xshift=\x cm](0pt,-2pt)--(0pt,2pt);
\draw[-{Latex[length=\ostalfirstarg,width=\ostalsecondarg]}](0,-5)--(0,5)node[left]{$y$};
\foreach \y in{-5,-4,-3,-2,-1,1,2,3,4}
\draw[yshift=\y cm](-2pt,0pt)--(2pt,0pt);
}
\begin{document}
\tikz{\AxesNew}
\tikz{\AxesNew[{8mm},{10mm}]}
\end{document}