我想在某条线段旁边放置一个标签(节点),该线段是一条线与另一条线的交点之间的部分。
举个例子,看下面的图片,我希望能够把一个节点标记为C位于粗线段旁边的某处。在此示例中,我尝试使用语法将其放在中间node[midway]
。
该图片由以下代码创建
\documentclass[tikz]{standalone}
\usepackage{pgfplots}
\usetikzlibrary{fillbetween}
\begin{document}
\begin{tikzpicture}
\path[name path = line1, draw] (-1,0) .. controls (2,2) and (2,1) .. (0,-1) node {line 1};
\path[name path = line2, draw] (-1,1) -- (1,-1) node {line 2};
\draw[very thick, intersection segments={of=line1 and line2, sequence=L2}] node[midway] {$C$};
\end{tikzpicture}
\end{document}
我希望能够使用我尝试过的方式放置标签,即使用node[midway]
Ti 中解释的正常路径语法钾Z 手册的第一个教程(教程:Karl 的学生图片)第 2.21 节(添加文本)。下面的图片和代码来自手册。
\begin{tikzpicture}
\draw (0,0) .. controls (6,1) and (9,1) ..
node[near start,sloped,above] {near start}
node {midway}
node[very near end,sloped,below] {very near end} (12,0);
\end{tikzpicture}
此外,粗线并非线 1 与线 2 交点之间的线段。如果仔细观察,您会发现它只是“超出”了交点。因此,使用 创建此线段的这种方式可能intersection segments
不是可行的方法。一定存在更好的方法,但到目前为止,我在手册或通过谷歌搜索都找不到它。
答案1
通过 TikZ 库得到的交点intersections
更加精确。以下示例使用此库来获取直线和曲线的交点。在剪切处于活动状态时重新绘制粗曲线以仅获取曲线的有趣部分。
\documentclass[tikz]{standalone}
\usetikzlibrary{intersections}
\begin{document}
\begin{tikzpicture}
% \draw[help lines] (-1, -1) grid (2, 2);
\def\LineA{(-1, 0) .. controls (2, 2) and (2, 1) .. (0, -1)}
\draw[name path=line1]
\LineA
node {line 1}
;
\draw[name path=line2]
(-1, 1) -- (1, -1)
node {line 2}
;
\path[name intersections={of=line1 and line2}]
(intersection-1) -- node {$C$} (intersection-2)
;
\begin{scope}
\clip (-1, 1) -- (-1, 2) -- (2, 2) -- (2, -1) -- (1, -1) -- cycle;
\draw[very thick] \LineA;
\end{scope}
\end{tikzpicture}
\end{document}
答案2
我已编辑此答案,因为@Heiko-Oberdiek 指出他最初给出的答案比我在此处发布的答案更好。有关详细信息,请参阅此帖子下的评论。
原文如下:
@Heiko-Oberdiek 给出了我的问题答案的重要部分,即在裁剪区域内重新绘制曲线(参见他的回答)。但是,它没有将标签放在预期的位置,并且裁剪区域是手动构建的(未使用交点)。因此,我发布了一个我认为最完整的解决方案。
下图给出了想要的图片。请注意,红色虚线区域仅用于显示被剪切的区域,特别是显示它使用这些交叉点。红色虚线不是想要作为图的一部分。
图像是使用创建的
\begin{tikzpicture}
% \draw[help lines] (-1, -1) grid (2, 2);
\def\LineA{(-1, 0) .. controls (2, 2) and (2, 1) .. (0, -1)}
\draw[name path=line1]
\LineA
node {line 1}
;
\draw[name path=line2]
(-1, 1) -- (1, -1)
node {line 2}
;
\path[name intersections={of=line1 and line2}]
(intersection-1) (intersection-2)
;
\def\cliparea{(intersection-1) -- ++(0, 1) -- ++(2, 0) -- ++(0, -2) -- (intersection-2) -- cycle}
\draw[red, dashed] \cliparea;
\begin{scope}
\clip \cliparea;
\draw[very thick] \LineA node[midway] {$C$};
\end{scope}
\end{tikzpicture}
答案3
有更新spath3
它提供了在交叉点处分割路径并与结果组件协同工作的功能。
\documentclass{article}
%\url{https://tex.stackexchange.com/q/383762/86}
\usepackage{tikz}
\usetikzlibrary{spath3, intersections}
\begin{document}
\begin{tikzpicture}
\path[spath/save = line1, draw] (-1,0) .. controls (2,2) and (2,1) .. (0,-1) node {line 1};
\path[spath/save = line2, draw] (-1,1) -- (1,-1) node {line 2};
\tikzset{
spath/.cd,
split at intersections with={line1}{line2},
get components of={line1}\cpts
}
\draw[
ultra thick,
spath/restore=\getComponentOf\cpts{2}
] node[auto,pos=.5] {C};
\end{tikzpicture}
\end{document}