我已经使用 TikZ 制作了几个图形,但我看不出这个片段有什么问题:
\documentclass[a4paper,10pt,twoside]{scrbook}
\usepackage[utf8x]{inputenc}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\def\groundwidth{8.0cm}
\def\streetwidth{2.0cm}
\def\gw{0.5*(\groundwidth-\streetwidth)}
\fill[color=green!75!black] (0, 0) -- (\gw,0) -- (\gw,\gw) -- (0,\gw) -- cycle;
\end{tikzpicture}
\end{document}
使用 pdftex 编译它,会产生以下错误消息:
! Package pgf Error: No shape named 0 is known.
See the pgf package documentation for explanation.
Type H <return> for immediate help.
...
l.11 ...ll[color=green!75!black] (0, 0) -- (\gw,0)
-- (\gw,\gw) -- (0,\gw) -...
我猜想其中肯定存在问题\gw
,但我不知道如何修复。您有什么建议或可以给出解释该问题的文档链接吗?
答案1
解决方案是\def\gw{{0.5*(\groundwidth-\streetwidth)}}
\documentclass[a4paper,10pt,twoside]{scrbook}
\usepackage[utf8x]{inputenc}
\usepackage{tikz}
\begin{document}
\def\groundwidth{8.0cm}
\def\streetwidth{2.0cm}
\def\gw{{0.5*(\groundwidth-\streetwidth)}}
\begin{tikzpicture}
\fill[color=green!75!black] (0, 0) -- (\gw,0) -- (\gw,\gw) -- (0,\gw) -- cycle;
\end{tikzpicture}
\end{document}
你也可以使用
\fill[color=green!75!black] (0, 0) -- ({\gw},0) -- ({\gw},{\gw}) -- (0,{\gw}) -- cycle;
代替
\def\gw{{0.5*(\groundwidth-\streetwidth)}}
答案2
原因是,在解析出\gw
全部内容之前,似乎就将其展开了,因此:( )
(0, 0) -- (\gw,0)
被视为:
(0, 0) -- (0.5*(\groundwidth-\streetwidth),0)
因为圆括号( )
不像大括号那样匹配{ }
,所以第一个圆括号)
被当作结束圆括号,所以 TikZ 认为0.5*(\groundwidth-\streetwidth
是内容。根据 TikZ 的解析规则,这看起来不像坐标,因为没有包含,
或:
。因此它被视为节点名称。语法是node name.anchor
,即它认为0
是节点名称和5*(\groundwidth-\streetwidth
锚点名称。这导致错误No shape named 0 is known
(这里的 shape 表示节点)。
解决方案是,正如 Altermundus 已经指出的那样,用 括住整个\gw
表达式。这会迫使 TeX在进一步寻找 之前先{ }
寻找结尾,从而使内部对 起作用。}
)
( )