我创建了以下两个命令:
\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
因为 Ti钾Z 已经有一个宏\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}
另一个改进是将所有坐标作为具有一些默认值的可选参数,但我将把这留到另一天:)