\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\draw[<->] (0,12) node[above]{$w$} |- (12,0) node[right]{$q_L$};
\draw[dotted, name path = ACL] (0,0) plot [domain=0.7:9] (\x,0.75*\x + 0.8) node[label=right:{AC$_L$ = S$_L$}](A1){};
\coordinate (H) at ($({5.6/0.75},5.6) - ({0.8/0.75},0)$);
\draw[thick, blue, name path = ACLt] let \p1 = (H) in (0,\y1) node[left, red]{$w_u$} -- (\x1,\y1) --(A1);
\end{tikzpicture}
\end{document}
我的问题如下:
- 我试图在第一行(名称路径 ACL)的末尾定义一个坐标(A1)。
- 然后我使用这个坐标(A1)作为第二行的最后一个坐标(名称路径ACLt)。
看起来坐标并不真正位于线的末端,因为虚线稍微延伸到了粗蓝线之外:
为什么会发生这种情况?
答案1
好吧,Zarko 把我的评论变成了“他的”答案,但这里再次重申:使用coordinate
而不是node
因为后者的大小是有限的(默认情况下)。我的答案和评论附带了一种可能更简单的路径构造。
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\draw[<->] (0,12) node[above]{$w$} |- (12,0) node[right]{$q_L$};
\draw[dotted, name path = ACL] (0,0) plot [domain=0.7:9] (\x,0.75*\x + 0.8)
coordinate[label=right:{AC$_L$ = S$_L$}] (A1);
\coordinate (H) at ($({5.6/0.75},5.6) - ({0.8/0.75},0)$);
\draw[thick, blue, name path = ACLt] (0,0|-H) node[left, red]{$w_u$} -- (H) --(A1);
\end{tikzpicture}
\end{document}
答案2
坐标的计算足够准确,问题在于你使用节点,用 替换节点,coordinate
结果就会变成你想要的样子:
\documentclass{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\usepackage{amsmath}
\begin{document}
\begin{tikzpicture}[scale=0.5]
\draw[<->] (0,12) node[above]{$w$} |- (12,0) node[right]{$q_L$};
\draw[dotted, name path = ACL]
plot [domain=0.7:9] (\x,0.75*\x + 0.8) coordinate[label=right:{AC$_L$ = S$_L$}] (A1);
\coordinate (H) at ($({5.6/0.75},5.6) - ({0.8/0.75},0)$);
\draw[thick, blue, name path = ACLt] let \p1 = (H) in (0,\y1) node[left, red]{$w_u$} -- (\x1,\y1) --(A1);
\end{tikzpicture}
\end{document}
node
和之间的差异coordinate
是因为节点无论是否为空都具有一定的宽度。它由的默认值决定 inner sep
。如果将其设置为零:inner sep=0pt
结果将是相同的。
离题:在您的图表中您没有使用intersections
库,因此您可以从代码中删除行名(正如我在上面所做的那样)