也许我很笨,我看了很多例子,这些例子以某种方式显示了坐标的工作,但我不明白。简单的例子-我有:
\begin{tikzpicture}
\coordinate [label=left:$D$] (D) at (0.3,0.5);
\end{tikzpicture}
现在我想在下一个 \draw 命令中使用我的坐标的 x 部分,但我不知道如何简单地提取它。
\draw[name path=my_line, gray] (**x-part of D coordinate**,0) node[below, red]{$c$} -- (0.75,1.1);
我希望我的问题是显而易见的。谢谢!
答案1
您可以使用let
语法(参见章节14.15 Let 操作手册);另一种选择(由敲击在注释中)的方法是使用|-
语法(手册第 131 页)。以下示例包含两种可能性:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc,intersections}
\begin{document}
\begin{tikzpicture}
\coordinate [label=left:$D$] (D) at (0.3,0.5);
\draw[name path=my_line, gray] let \p1=(D) in (\x1,0) node[below, red] {$c$} -- (0.75,1.1);
\end{tikzpicture}
\begin{tikzpicture}
\coordinate [label=left:$D$] (D) at (0.3,0.5);
\draw (D |- {{(0,0)}}) node[below, red] {$c$} -- (0.75,1.1);
\end{tikzpicture}
\end{document}
引用手册中的话:
的意思
(p-|q)
是“通过 p 的垂直线与通过 q 的水平线的交点”。
答案2
您还可以调整解决方案提取 TikZ 中任意点的 x,y 坐标\ExtractCoordinate{D}
在您需要该点的坐标之前调用并,然后在需要该值的地方使用\XCoord
或。\YCoord
下面的代码产生的输出与 Gonzalo Medina 的答案相同。
代码:
\documentclass{article}
\usepackage{tikz}
\usetikzlibrary{calc}
%% https://tex.stackexchange.com/questions/86897/recover-scaling-factor-in-tikz
\newcommand*\getscale[1]{%
\begingroup
\pgfgettransformentries{\scaleA}{\scaleB}{\scaleC}{\scaleD}{\whatevs}{\whatevs}%
\pgfmathsetmacro{#1}{sqrt(abs(\scaleA*\scaleD-\scaleB*\scaleC))}%
\expandafter
\endgroup
\expandafter\def\expandafter#1\expandafter{#1}%
}
\makeatletter
% https://tex.stackexchange.com/questions/33703/extract-x-y-coordinate-of-an-arbitrary-point-in-tikz
\newdimen\@XCoord
\newdimen\@YCoord
\newdimen\XCoord
\newdimen\YCoord
\newcommand*{\ExtractCoordinate}[1]{%
\getscale{\@scalefactor}%
\path [transform canvas] (#1); \pgfgetlastxy{\@XCoord}{\@YCoord};%
\pgfmathsetlength{\XCoord}{\@XCoord/\@scalefactor}%
\pgfmathsetlength{\YCoord}{\@YCoord/\@scalefactor}%
}
\makeatother
\begin{document}
\begin{tikzpicture}[scale=2]
\coordinate (D) at (0.3,0.5);
\ExtractCoordinate{D}
\fill [red] (D) circle (1pt);
\draw[gray] (\XCoord,0) node[below, red] {$c$} -- (0.75,1.1);
\end{tikzpicture}
\end{document}
答案3
为了完整性和将来的参考,如果您已经(a)
定义了一个点,则可以定义一个(b)
依赖于坐标的(a)
新点let
,如下所示:
\path let \p1 = (a) in coordinate (b) at (2*\x1,\y1/2);
由于\coordinate
是的别名,如果您想使用来定义坐标,\path coordinate
则必须使用上述代码。let