我已经使用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
选项来影响所有的点。