部分解决方案

部分解决方案

对于TikZshadows,大括号后面的空格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 shadowoption adrop shadowoption btest1option c

相关内容