为什么 TikZ 找不到所有交叉点。它们显然在那里……
\documentclass[border=10mm]{standalone}
\usepackage{tikz}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[point/.style={fill=blue,minimum size=1mm,inner sep=0pt,circle}]
% Zoom (to prevent oveflow)
\def\yzoom{100}
% Plots
\foreach \T/\xmin/\a in {%
0.27/1.538/a,
0.28/1.590/b,
0.29/1.649/c
} {
\draw [thin,name path global/.expanded={kurve \a}]
plot [raw gnuplot] function {%
set xrange [\xmin:10];
set yrange [0:0.08*\yzoom];
set samples 1000;
f(x) = \yzoom*(\T/(x-1) - 1/(x**2));
plot f(x);
};
}
% Lines
\foreach \p/\a in {%
%% T = 0.27
0.0231/a,
%% T = 0.28
0.02855/b,
%% T = 0.29
0.0338/c
}{
\draw [red,thin,name path global/.expanded={linie \a}]
(0,\p*\yzoom) -- (10,\p*\yzoom) node [fill=white,pos=0.1] {\a};
}
% Intersections points
\path [name intersections={of=kurve a and linie a,by={P1,P2,P3}}]
(P1) node [point] {} (P2) node [point] {} (P3) node [point] {};
\path [name intersections={of=kurve b and linie b,by={P1,P2,P3}}]
(P1) node [point] {} (P2) node [point] {} (P3) node [point] {};
\path [name intersections={of=kurve c and linie c,by={P1,P2,P3}}]
(P1) node [point] {} (P2) node [point] {} (P3) node [point] {};
\end{tikzpicture}
\end{document}
路径的名称似乎没有问题,但 TikZ 缺少四个交叉点。
附加问题:是否可以使用第二部分解决最后一部分(添加蓝点)\foreach
?我试过了,但出现了错误File ended while scanning use of \tikz@intersect@path@names@parse.
。
答案1
我不知道为什么 PGF 找不到这些交点,这可能与如何从值表创建的点在内部构建路径有关gnuplot
。
如果你
- 设置
set samples 100
或 - 使用原始样本设置选项
smooth
。
现已找到所有交叉点。
键of
( \tikz@intersect@path@names@parse
) 要求周围的空格and
,如果使用的话,空格显然会被剥离of=kurve \a and linie \a
,因此您需要执行of/.expanded=kurve \a\space and linie \a
或of={kurve \a} and linie \a
。
您还可能在\foreach
其中引入虚假空格:
\foreach \p/\a in {%
%% T = 0.27
0.0231/a,
%% T = 0.28
0.02855/b,
%% T = 0.29
0.0338/c % <- there’s a space!
}{
.expanded
如果您有钥匙,这个空间实际上可能会有所帮助of
,但通常会带来麻烦,因此建议避免这种情况。
(该空间也存在于另一个\foreach
循环中,但由于它在 PGFkeys 处理之前使用.expanded
,因此被剥离了。)
代码
\documentclass[convert=false,tikz]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}[point/.style={fill=blue,minimum size=1mm,inner sep=0pt,circle}]
% Zoom (to prevent oveflow)
\def\yzoom{100}
% Plots
\foreach \T/\xmin/\a in {
0.27/1.538/a,
0.28/1.590/b,
0.29/1.649/c
} {
\draw [thin,smooth,name path global/.expanded={kurve \a}]
plot [raw gnuplot] function {%
set xrange [\xmin:10];
set yrange [0:0.08*\yzoom];
set samples 1000;
f(x) = \yzoom*(\T/(x-1) - 1/(x**2));
plot f(x);
};
}
% Lines
\foreach \p/\a in {%
%% T = 0.27
0.0231/a,
%% T = 0.28
0.02855/b,
%% T = 0.29
0.0338/c%
}{
\draw [red,thin,name path global/.expanded={linie \a}]
(0,\p*\yzoom) -- (10,\p*\yzoom) node [fill=white,pos=0.1] {\a};
\path [name intersections={of={kurve \a} and linie \a, total=\t}] \foreach \s in {1,...,\t} {(intersection-\s) node[point]{}};
}
\end{tikzpicture}
\end{document}