使用 \pgfkeys 设置传递给 tkz-euclide 的样式参数

使用 \pgfkeys 设置传递给 tkz-euclide 的样式参数

我已经使用pstricks很长时间了,感觉非常熟悉。但是,最近我决定要学习,tikz因为它似乎与 Beamer 集成得更好。但是,我不断遇到障碍。虽然手册很有用,但它也让我很头疼,因为在 中,这些操作很简单,pstricks但在 中却有完全不同(对我来说,不直观)的方法tikz

例如,我想使用 来pgfkeys设置点的样式参数:它们的颜色、它们的填充颜色、它们的大小。但我的调用\pgfkeys似乎被忽略了。我尝试了各种方法。有些会导致错误,有些则不起作用。以下是我第一次尝试的结果,但预期的结果并未生效。

\documentclass{article} 
\usepackage[dvipsnames]{xcolor} 
\usepackage{tkz-euclide} 
\pagestyle{empty}
\begin{document}

I would like something that looks like:\vspace{1cm}\par
\begin{tikzpicture}[scale=0.25] 
    \tkzDefPoint(0,0){A}
    \tkzDefShiftPoint[A](70:8){B}
    \tkzDefShiftPoint[A](30:5){C}
    \tkzDefShiftPoint[A](-30:10){D}
    \tkzDefShiftPoint[A](-130:7){E}

    %% first scope
    \begin{scope}[line width=4]
        \tkzDrawPoints[color=blue,fill=red](A,B,C)
    \end{scope}

    %% second scope
    \begin{scope}[line width=2]
        \tkzDrawPoints[color=red,fill=yellow](D,E)
    \end{scope}
\end{tikzpicture}

Here the code is set up more along the lines of how I would like to write
it, but the results are not what I expected.\vspace{1cm}\par
\begin{tikzpicture}[scale=0.25] 
    \tkzDefPoint(0,0){A}
    \tkzDefShiftPoint[A](70:8){B}
    \tkzDefShiftPoint[A](30:5){C}
    \tkzDefShiftPoint[A](-30:10){D}
    \tkzDefShiftPoint[A](-130:7){E}

    %% first scope
    \begin{scope}[line width=4]
        \pgfkeys{/drawpoint/.style={color=blue,fill=red}}
        \tkzDrawPoints(A,B,C)
    \end{scope}

    %% second scope
    \begin{scope}[line width=2]
        \tkzDrawPoints[color=red,fill=yellow](D,E)
    \end{scope}
\end{tikzpicture}

\end{document}

产生

在此处输入图片描述

我尝试在这里发布的问题中寻找答案pgfkeys。但是,我变得非常迷茫和困惑。

答案1

阿兰·马特斯是 的作者tkz-collection。他可能还没有出现,所以我会尝试回答。

查看 1.16c 版本的文件,我们可以看到astkz-obj-points.tex的定义\tkzDrawPoints

\def\tkzDrawPoints{\pgfutil@ifnextchar[{\tkz@drawpts}{\tkz@drawpts[]}} 
%<--------------------------------------------------------------------------–> 
\def\tkz@drawpts[#1](#2){%
\begingroup
\pgfkeys{/drawpoint/.cd}
\pgfqkeys{/drawpoint}{#1}        
\foreach \point in {#2}{%
   \node[point style] at (\point) {};}
\endgroup 
}

我们还看到

\pgfkeys{/drawpoint/.cd, 
  size/.code    = {\tikzset{point style/.append style={%
                   minimum size = #1*\pgflinewidth}}},
  color/.code    = {\tikzset{point style/.append style={%
                   draw = #1}}}, 
  shape/.code    = {\tikzset{point style/.append style={%
                   shape=#1}}},
  fill/.code    = {\tikzset{point style/.append style={%
                   fill=#1}}}                                     }

因此,\pgfkeys{/drawpoint...每次使用时,对 的调用都会被覆盖,\tkzDrawPoints因为此命令在内部使用相同的\pgfkeys drawpoint键。您应该改用\tikzset以下方式来设置点的样式:

%% first scope
    \begin{scope}[line width=4]
        \tikzset{point style/.style={fill=red,draw=blue,minimum size=0.9cm,shape=circle}}
        \tkzDrawPoints(A,B,C)
    \end{scope}

或者你可以坚持以下定义\tkzDrawPoints

    %% first scope
    \begin{scope}[line width=4]
%       \tikzset{point style/.style={fill=red,color=blue,minimum size=0.9cm,shape=circle}}
        \tkzDrawPoints[fill=red,color=blue,shape=circle](A,B,C)
    \end{scope}

还请注意,您可以将size用作 的选项\tkzDrawPoints。我必须承认,line width在本用例中使用 和 选项组合时,我得到了不可预测的结果size

编辑1

key point style您可以在中看到以下定义tkz-base.cfg

\tikzset{point style/.style={draw         = \tkz@euc@pointcolor,
                             inner sep    = 0pt,
                             shape        = \tkz@euc@pointshape,
                             minimum size = \tkz@euc@pointsize*\pgflinewidth,
                             fill         = \tkz@euc@pointcolor!50}} 

您可以根据自己的喜好设置选项。示例如下tkz-base手册。请注意, 不是tkz-collection的正式组成部分tikz。相反,它是基于 的软件包的集合tikz。以下是来自 的示例第 42 页手册内容:

\begin{tikzpicture}
\tikzset{point style/.style={%
draw = blue,
inner sep = 0pt,
shape = circle,
minimum size = 6pt,
fill = red!20}}
\tkzDefPoint(1,3){A}
\tkzDefPoint(4,1){B}
\tkzDefPoint(0,0){O}
\tkzDrawPoint(A)
\tkzDrawPoint(B)
\tkzDrawPoint(O)
\end{tikzpicture}

在此处输入图片描述

这是您的用例。

%% first scope
\begin{scope}[line width=4]
    \tikzset{point style/.style={%
    draw = blue,
    inner sep = 0pt,
    shape = circle,
    minimum size = 24pt,
    fill = red!20}}
    \tkzDrawPoints[fill=red,color=blue,shape=circle](A,B,C)
\end{scope}

在此处输入图片描述

使用 的定义\tkzDrawPoint,您还可以指定其他形状。以下是来自page 43

\begin{tikzpicture}[scale=.5]
\tkzDefPoint(1,3){A}
\tkzDefPoint(4,1){B}
\tkzDefPoint(0,0){O}
\tkzDrawPoint[shape=cross out,size=12,color=red](A)
\tkzDrawPoint[shape=cross,size=12,color=blue](B)
\tkzDrawPoint[size=12,color=green](O)
\tkzDrawPoint[size=12,color=blue,fill=yellow]({2,2})
\end{tikzpicture}

在此处输入图片描述

当然,你也可以设置point style选项来影响所有的点。

相关内容