是否可以使用带有多个参数的“tikzpicture”创建“newcommand”?

是否可以使用带有多个参数的“tikzpicture”创建“newcommand”?

我创建了以下两个命令:

  • \newcommand{\pic}[1]{\begin{tikzpicture} #1 \end{tikzpicture}}
  • \newcommand{box}[1]\draw (-2,4) -- ( #1 ,4) -- ( #1 ,1) -- (-2,1) -- (-2,4) ;

以这种方式,当我调用

\pic{
\box{0}
}

我成功地看到了一个盒子。


然而,当我尝试创建

  • \newcommand{Box}[2]\draw ( #2 ,4) -- ( #1 ,4) -- ( #1 ,1) -- ( #2 ,1) -- ( #2 ,4) ;

因此调用

\pic{
\Box{0,-2}
}

我看到了大量错误。


tikzpicture问题是什么?使用 时,环境中参数的嵌套是否有限制newcommand

答案1

您的代码片段存在一些问题:

  • 命令名称中需要一个反斜杠:\newcommand{\Box}[2]...
  • 您需要用括号将命令的含义括起来:\newcommand{\Box}[2]{\draw ... ;}
  • LaTeX 不允许您创建名为的命令,\box因为已经有一个同名的命令(并且它是真的重新定义它是一个坏主意。
  • 命令的每个参数都应该用括号括起来,而不是用逗号分隔(如果你想要逗号分隔的语法,你可以看看此主题)。

语法\newcommand是:

\newcommand{\<command>}[<nargs>][<default#1>]{<definition>}

此外,正如 Torbjørn T. 指出的那样,你不需要定义,\pic因为 TiZ 已经有一个宏\tikz

也就是说,我将调用命令\mybox\myBox,然后您的定义变为:

\documentclass{article}

\usepackage{tikz}

\newcommand{\mybox}[1]{\draw (-2,4) -- ( #1 ,4) -- ( #1 ,1) -- (-2,1) -- (-2,4) ;}
\newcommand{\myBox}[2]{\draw ( #2 ,4) -- ( #1 ,4) -- ( #1 ,1) -- ( #2 ,1) -- ( #2 ,4) ;}

\begin{document}

\tikz\mybox{0};

\tikz\myBox{0}{-2};

\end{document}

更加 Ti正如 Kpym 所建议的,Zy 的方法是使用pic,它允许我们为绘图命令提供选项,以及在单个命令中放置两个框(使用上述方法无法轻松做到这一点)。您还可以使用路径rectancle命令使事情更清晰:

\documentclass{article}

\usepackage{tikz}

\tikzset{%
  pics/mybox/.style 2 args={%
    code={\draw (#1,4) rectangle (#2,1);}%
  }%
}

\begin{document}

\tikz\draw (0,0) pic{mybox={0}{-2}};

\tikz\draw (0,0) pic{mybox={0}{-2}} (2,1) pic[red]{mybox={0}{-3}};

\end{document}

另一个改进是将所有坐标作为具有一些默认值的可选参数,但我将把这留到另一天:)

相关内容