对于TikZ
库shadows
,大括号后面的空格drop shadow = { shadow...
会引发错误。如果括号后没有空格,则不会出现错误,即可以drop shadow = {shadow...
正常工作。这是一个错误还是无法容忍空格的背后有原因?
Package pgfkeys Error: I am the key '/tikz/ shadow xshift', to which
you passed '1ex', and I am going to ignore it. Perhaps you misspelled it.
平均能量损失
\documentclass[border=10]{standalone}
\usepackage[svgnames]{xcolor}
\usepackage{tikz}
\usetikzlibrary{shadows}
\tikzset{test1/.style = {drop shadow = { shadow xshift = 1ex}}}% test1 styles fail
\tikzset{
test2/.style = {% test2 styles work
drop shadow = {shadow xshift = 1ex
},
}
}
\begin{document}
\begin{tikzpicture}
\fill[test1] (0,0) rectangle (1,1);
\end{tikzpicture}
\end{document}
答案1
回复@cfr 的评论,我认为这是一个严重的问题,因为人们(至少是我)喜欢花哨的缩进:
\tikzset{ test1/.style={ drop shadow={ shadow xshift=1ex } } }
在这种情况下,Ti钾由于有换行符,Z 不可避免地出现了多余的空格。
不幸的是,这似乎是 pgfkeys 的一个深层错误。请考虑以下示例
\documentclass[tikz]{standalone}
\tikzset{
option a/.style={
#1
}
}
\tikzset{
option b/.style={
option a={
#1
}
}
}
\tikzset{
option c/.style={
option b={
red
}
}
}
\begin{document}
\tikz\fill[ red ]circle(1);
\tikz\fill[option a={red}]circle(1);
\tikz\fill[option b={red}]circle(1);
\tikz\fill[option c ]circle(1);
\end{document}
它会产生两个错误:一个在option b={red}
I do not know the key '/tikz/ red '
另一个位于option c
:
I do not know the key '/tikz/ red '
可以按如下方式累积空格
\documentclass[tikz]{standalone}
\tikzset{option a/.style={ #1 } }
\tikzset{option b/.style={option a={ #1 } } }
\tikzset{option c/.style={option b={ #1 } } }
\tikzset{option d/.style={option c={ #1 } } }
\tikzset{option e/.style={option d={ #1 } } }
\tikzset{option f/.style={option e={ #1 } } }
\tikzset{option g/.style={option f={ #1 } } }
\tikzset{option h/.style={option g={ #1 } } }
\tikzset{option i/.style={option h={ #1 } } }
\tikzset{option j/.style={option i={ #1 } } }
\tikzset{option k/.style={option j={ #1 } } }
\begin{document}
\tikz\fill[option k=red]circle(1);
\end{document}
I do not know the key '/tikz/ red '
部分解决方案
这个技巧非常脆弱,如果用} } }
或}} }
替换} }}
,相应的空格就会消失。
这可能是为什么 Ti 的源代码钾Z 包含了很多孤独%
。例如tikz.code.tex
第 1209-1215 行
\tikzset{ no marks/.style={mark=none},% no markers/.style={mark=none},% every mark/.style={}, mark options/.style={% every mark/.style={#1}% }}
附录
drop shadow
定义在tikzlibraryshadows.code.tex
\tikzset{ /tikz/drop shadow/.style={ general shadow={% shadow scale=1, shadow xshift=.5ex, shadow yshift=-.5ex, opacity=.5, fill=black!50, every shadow, #1 } } }
这里,general shadow
是option a
,drop shadow
是option b
,test1
是option c
。