Tikz 宏计算错误

Tikz 宏计算错误

我对此很陌生,所以请耐心听我说。为了掌握宏,我想编写一个简单的命令来在 tikz 中绘制一个正方形。现在我知道有很多方法可以做到这一点,但我希望能够编写更难的宏。

我的代码如下:

\documentclass{article}
\usepackage{calc}
\usepackage{tikz}
\usetikzlibrary{positioning}
\usetikzlibrary{shapes.geometric}

\newcommand{\tikzsquare}[2]{
    \fill[blue!40!white, opacity=0.5] (#1, #2) rectangle (#1 + 2, #2 + 2);
}

\begin{document}
\begin{center}
\begin{tikzpicture}
    \draw[step=1cm,gray,very thin] (-2,-2) grid (4,4);
    \tikzsquare{0,0}
\end{tikzpicture}
\end{center}
\end{document}

我原本期望的是这样的:

预期的

相反,我得到了这个错误:

...
[Loading MPS to PDF converter (version 2006.09.02).]
)
! Argument of \XC@definec@lor has an extra }.
<inserted text>
                \par
l.14 \end
         {tikzpicture}
?
Runaway argument?
{pgfstrokecolor}{)}\ifx \reserved@a \@currenvir \else \@badend {)}\fi \ETC.
! Paragraph ended before \XC@definec@lor was complete.
<to be read again>
                   \par
l.14 \end
         {tikzpicture}
?

! LaTeX Error: \begin{tikzpicture} on input line 11 ended by \end{+}.

See the LaTeX manual or LaTeX Companion for explanation.
Type  H <return>  for immediate help.
 ...

l.14 \end
         {tikzpicture}

任何帮助都将不胜感激

答案1

你已经告诉 LaTeX\tikzsquareLaTeX参数,但只给出了它( 0,0),因此\end被抓取为#2,并产生各种奇怪的结果。你想要\tikzsquare{0}{0}

(更一般地,请注意 TeX 参数不是以逗号分隔,但必须在单独的括号组中给出。)

答案2

如果你愿意,你可以定义

\def\tikzsquare(#1,#2);{\fill[blue!40!white,opacity=0.5] (#1,#2) rectangle (#1+2,#2+2);}

然后使用\tikzsquare(0,0);具有更多 TikZ-ish 语法的语法。

相关内容