我对此很陌生,所以请耐心听我说。为了掌握宏,我想编写一个简单的命令来在 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\tikzsquare
LaTeX二参数,但只给出了它一( 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 语法的语法。