在这个问题,我提供了一个代码来以外部节点作为参考,并得到了令人满意的答案。
使用这些答案从内联节点绘制我使用了以下代码:
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node (oo){} node [xshift=0cm, yshift=0cm] {oo} (oo.center-|0,0) node [xshift=0cm, yshift=0cm] {y} -| (oo.center|-0,0) node [xshift=0cm, yshift=0cm] {x};
\end{tikzpicture}
要得到
当在此代码中省略命名起点节点时
\draw [thick, violet, dotted] (4,3) node [xshift=0cm, yshift=0cm] {o} |- (0,0) node [xshift=0cm, yshift=0cm] {y} -| (0,0) node [xshift=0cm, yshift=0cm] {x};
我有
如何修复此问题?
这是我使用的完整代码:
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usepackage{pgfplots}
\begin{document}
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node (oo){} node [xshift=0cm, yshift=0cm] {oo} (oo.center-|0,0) node [xshift=0cm, yshift=0cm] {y} -| (oo.center|-0,0) node [xshift=0cm, yshift=0cm] {x};
\end{tikzpicture}
\end{frame}
\begin{frame}[fragile,t]
\frametitle{}
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node [xshift=0cm, yshift=0cm] {o} |- (0,0) node [xshift=0cm, yshift=0cm] {y} -| (0,0) node [xshift=0cm, yshift=0cm] {x};
\end{tikzpicture}
\end{document}
答案1
在您的代码中:
\draw[thick,violet,dotted](4,3)node[xshift=0cm, yshift=0cm]{o}|-(0,0) node[xshift=0cm, yshift=0cm]{y}-|(0,0)node[xshift=0cm, yshift=0cm]{x}
不带节点时等效于:
\draw[draw_styles]
(4.3) %Initial path coordinate
-|(0,0) % (4.3) Linked to (0,0) using cornered link (-|)
-|(0,0); % (0.0) Linked to (0,0)
在之前的代码中你:
\draw(4,3)node (oo){} node [xshift=0cm, yshift=0cm] {oo} (oo.center-|0,0) node [xshift=0cm, yshift=0cm] {y} -| (oo.center|-0,0) node [xshift=0cm, yshift=0cm] {x};
其无节点等效代码为:
\draw[draw_styles]
(4.3) %Initial path coordinate <nothing is drawn, but you use to put a text named node>
(4.3 -| 0,0) % That gives a new coordinate (4,0) <4.3 is the equivalent of node_name.center.>
-|(0,0 |- 4.3); % (4,0) Linked to (0,3) using cornered link (-|)
(A-|B)
这两段代码都没有从 (4.3) 点绘制相应的线;可以做到这一点的代码是使用边和坐标,以便在使用或(A|-B)
计算交点时不重写坐标。
初始坐标有一个带有文本的文本节点{o}
,但还有一个label
位于45度位置的,然后将坐标分配给P
常量符号,然后绘制两个边到点(P -| 0,0)
和(P |- 0,0)
;将文本节点按边放置在线中的代码写在边和坐标之间;但必须指定从0到1的位置,即线的极限,就像文本节点可以包含标签一样。
结果:
梅威瑟:
\documentclass[border=10pt]{standalone}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}
\begin{document}
\begin{tikzpicture}[
font=\sffamily,
>={Stealth[inset=0pt,length=6pt]},
]
\draw [thick,->](0,0) -- (5,0);
\draw [thick,->](0,0) -- (0,4.);
%Option using edge
\draw [thick, violet, dotted] (4,3) node[label=45:o,inner sep=-3pt]{o} coordinate (P)
edge node[pos=1,label=180:y,inner sep=-3pt]{y} (P -| 0,0)
edge node[pos=1,label=-90:x,inner sep=-3pt]{x} (P |- 0,0) ;
\end{tikzpicture}
\end{document}
答案2
我建议使用两个绘制命令,而不是一个,并且命令\currentcoordinate
来自这个答案。
\documentclass{standalone}
\usepackage{tikz}
% Taken from https://tex.stackexchange.com/a/132926/110998
\makeatletter
\newcommand\currentcoordinate{\the\tikz@lastxsaved,\the\tikz@lastysaved}
\makeatother
\begin{document}
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, violet, dotted] (4,3) node {o} -- (\currentcoordinate-|0,0) node {y};
\draw [thick, violet, dotted] (4,3) -- (\currentcoordinate|-0,0) node {x};
\end{tikzpicture}
\end{document}
答案3
calc
通过使用该库并结合命令即可实现您想要的效果let
。
您可以在路径定义中的某处使用let \p1 = (<coordinate>) in
,让其与\p1
路径定义中任何地方的坐标相对应。此外,您还可以将x
和y
坐标用作\x1
和,\y1
这样就不需要和符号-|
了|-
。
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\begin{frame}[t]
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, orange,dotted] let \p1 = (4,3) in {
(\p1) -- node[above]{x} (0,\y1)
(\p1) -- node[right]{y} (\x1,0)
(\p1) node[above right]{oo}};
\end{tikzpicture}
\end{frame}
\end{document}
结果:
下面的例子表明,仅通过改变 的坐标就可以起作用\p1
。
\documentclass{beamer}
\beamertemplatenavigationsymbolsempty
\usepackage{tikz}
\usetikzlibrary{calc}
\begin{document}
\foreach \t in {0,10,...,359}{
\begin{frame}[t]
\begin{tikzpicture}
\draw [thick,-latex](0,0) -- (5,0);
\draw [thick,-latex](0,0) -- (0,4.);
\draw [thick, orange,dotted] let \p1 = ({3+cos(\t)},{2+sin(\t)}) in {
(\p1) -- node[above]{x} (0,\y1)
(\p1) -- node[right]{y} (\x1,0)
(\p1) node[above right]{oo}};
\end{tikzpicture}
\end{frame}
}
\end{document}
其结果是
最后我想说的是,对于这个简单的情况,这个let
命令可能有点过度,但我猜不出你会用它做什么。