考虑以下 MWE:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{graphs}
\begin{document}
\tikz \graph [nodes={empty nodes, fill, circle, inner sep=1pt, draw}]{
\foreach \i in {1,...,5} { a --[bend left={2*90/5-(\i-1)*90/5}] b; }
};
\end{document}
结果看起来相当优雅,但我实际上希望边的in
和out
角度相等。现在看来,对于所有边,尽管PGF 手册中in=180
的描述指出/tikz/bend left=<angle>
此选项设置
out=<angle>,in=180-<angle>,relative
。如果没有给出,则使用<angle>
最后给出的bend left
或角度。bend right
我做错了什么?
答案1
bend left
定义如下
\tikzoption{bend left}[]{% \def\pgf@temp{#1}% \ifx\pgf@temp\pgfutil@empty% \else% \def\tikz@to@bend{#1}% \fi% \let\tikz@to@out=\tikz@to@bend% \c@pgf@counta=180\relax% \advance\c@pgf@counta by-\tikz@to@out\relax% \edef\tikz@to@in{\the\c@pgf@counta}% \tikz@to@switch@on% \tikz@to@relativetrue% }
正如你所见,Ti钾Z 使用 TeX 算法来计算因子in
。因此您不能将数学表达式传递给它。
相反,你应该自己做算术,例如以下
\tikz \graph [nodes={empty nodes, fill, circle, inner sep=1pt, draw}]{
\foreach \i in {1,...,5} {
a --[
/utils/exec={\pgfmathsetmacro\bendangle{2*90/5-(\i-1)*90/5}},
bend left=\bendangle
] b; }
};
更新
@Ignasi 建议如下
\foreach \i [evaluate=\i as \bendangle using {2*90/5-(\i-1)*90/5}] in {1,...,5}
{ a--[bend left=\bendangle] b;}
然后我发现了以下作品
\foreach \i [evaluate={\bendangle=2*90/5-(\i-1)*90/5;}] in {1,...,5}
{ a--[bend left=\bendangle] b;}
如果有\usetikzlibrary{math}
,那么以下内容也有效
\foreach \i in {1,...,5} {
a --[
evaluate={\bendangle=2*90/5-(\i-1)*90/5;},
bend left=\bendangle
] b; }
对于第一种情况,密钥由/pgf/foreach/evaluate
和处理\pgffor@assign@@parse@old
。
对于第二种情况,密钥由/pgf/foreach/evaluate
和处理\pgffor@assign@@parse
。
对于第三种情况,密钥由/tikz/evaluate
和 然后处理\tikz@math
。