定义带选项的命令

定义带选项的命令

我有两个问题。首先我不知道为什么,但是纺织机械商当我定义此命令时无法编译:

\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}

相关内容