![tkz-graph:边和环之间的不一致](https://linux22.com/image/242921/tkz-graph%EF%BC%9A%E8%BE%B9%E5%92%8C%E7%8E%AF%E4%B9%8B%E9%97%B4%E7%9A%84%E4%B8%8D%E4%B8%80%E8%87%B4.png)
我发现了这个很棒的软件包tkz-graph
,但在使用宏时遇到了一些麻烦\Loop
。
\Loop
宏与宏之间似乎存在一些不一致之处\Edge
。例如,在下面的文档中,边的标签放置方式不同。首先,循环有一个数组,但边没有。其次,\( \)
数学模式的语法仅在循环的情况下有效。
\documentclass{minimal}
\usepackage{fixltx2e}
\usepackage{tkz-graph}
\begin{document}
\begin{tikzpicture}[scale=1]
\Vertex{A}
\Vertex[x=2,y=0]{B}
\Loop[dist=1.5cm,dir=WE,label=\(x\)](A)
\Edges[label=$y$](A,B)
\end{tikzpicture}
\end{document}
第三,宏\tikzset{EdgeStyle/.append style = …}
不适用于循环,我在用户手册中没有找到解决方案。例如,\tikzset{EdgeStyle/.append style ={->}}
边缘和循环不使用相同的箭头尖端。
最后,使用style={->}
会在循环中产生与边缘不同的结果(后者的路径更粗)。以下是上述代码的输出,但使用了\tikzset{EdgeStyle/.append style ={->}}
:
答案1
抱歉,文档是法语的,但下一版我会尝试写一个英文版。问题是关于tkz-graph
而不是tkz-berge
并且tkz-berge
有英文文档!!
在我回答之前,最后要说的是,我对这些包的选项(样式)不满意,因为我用 xkeyval 编写了它们,很难获得与 Tikz 相同的选项。我将用 pgfkeys 编写下一个版本。
现在问题出现了,因为有很多方法可以改变样式。EdgeStyle
用于修改边的全局样式,LoopStyle
是循环的全局样式,样式是本地的;Loop
首先查看EdgeStyle
,然后查看,LoopStyle
最后如果此样式存在则应用本地样式。对于标签,您有LabelStyle
,然后labelstyle
代码如下
\def\tkzGR@loop[#1](#2){%
\setkeys[GR]{loop}{#1}%
\protected@edef\@tempa{%
\noexpand \draw[\cmdGR@loop@color] (#2)%
edge [EdgeStyle,LoopStyle,\cmdGR@loop@style]%
node [LabelStyle,\cmdGR@loop@labelstyle]%
{\cmdGR@loop@label} (#2)}\@tempa;%
}%
一个可能的解决方案是
\documentclass{minimal}
\usepackage{fixltx2e}
\usepackage{tkz-berge}
\tikzset{LabelStyle/.style= {fill=yellow}}
\begin{document}
\begin{tikzpicture}[scale=1]
\Vertex{A}
\Vertex[x=2,y=0]{B}
\Loop[dist=1.5cm,dir=WE,label=\(x\),
labelstyle={left=12pt,color=red,fill=white,draw}](A)
\Edges[label=$y$](A,B)
\end{tikzpicture}
\end{document}
如果您发现样式不清楚或令人困惑,我同意,但我会在下一版本中做出改进
pgfkeys
。我需要使版本兼容,因为tkz-graph
很多人都在使用它。
Count Zero 的第一个解决方案也很好
更新 :另一个解决方案是定义个人风格,并仅用于Tikz
绘制循环。始终可以使用 tikz。
答案2
您有两个选择:
或者将白色(或其他颜色,但不透明)的背景放在节点上:
\documentclass{minimal} \usepackage{fixltx2e} \usepackage{tkz-berge} \tikzset{LabelStyle/.style= {fill=white}} \begin{document} \begin{tikzpicture}[scale=1] \Vertex{A} \Vertex[x=2,y=0]{B} \Loop[dist=1.5cm,dir=WE,label=\(x\)](A) \Edges[label=$y$](A,B) \end{tikzpicture} \end{document}
或者你替换标签(这可能是一个不太优雅的黑客攻击):
\documentclass{minimal} \usepackage{fixltx2e} \usepackage{tkz-berge} \begin{document} \begin{tikzpicture}[scale=1] \Vertex{A} \Vertex[x=2,y=0]{B} \tikzset{LabelStyle/.style= {xshift=-.25cm}} \Loop[dist=1.5cm,dir=WE,label=\(x\)](A) \tikzset{LabelStyle/.style= {xshift=0cm}}% set shift back to original (0) value \Edges[label=$y$](A,B) \end{tikzpicture} \end{document}
无论你喜欢哪一个。:) 请注意,在这两种情况下,我都弄错了LabelStyle/.style=...
不是 EdgeStyle
。
编辑: EdgeStyle
接受一个labelstyle
参数,这与直接修改基本相同LabelStyle
。因此我怀疑还有其他解决方法。
附言:可惜文档只有法语版...我之所以这么说,是因为tkz
软件包系列是非常棒事实上语言障碍阻碍了很多人使用它们。