
背景:據我了解,TikZ 是建立在 pgf 之上的。 pgf 手冊中對兩者進行了描述。但是,我一直無法找到手冊中描述兩者如何連接的部分(如果存在的話)。這對我來說是個問題,因為我喜歡 Ti 的高階構造kZ,但我注意到 pgf 中有許多有用的原語,但我不知道如何訪問。
作為一個例子,考慮這個簡單的圖片:
有兩條短的、不相交的線段。圓圈標示了延長線的交會點。線段和節點標籤是用 Ti 建立的kZ,與 pgf 的交集。
這是從手冊中摘錄並稍加修改的代碼:
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=20mm,y=20mm]
\draw
(.5,0) node[left](A){$A$} -- (1,.8) node[left]{B}
(2,0) node[left](C){$C$} -- (1.5,1) node[right](D){D};
\pgfpathcircle{%
\pgfpointintersectionoflines
{\pgfpointxy{.5}{0}}{\pgfpointxy{1}{.8}}
{\pgfpointxy{2}{0}}{\pgfpointxy{1.5}{1}}}
{2pt}
\pgfusepath{stroke}
\end{tikzpicture}
\end{document}
顯然,程式碼並不乾燥:座標在 pgf 部分中重複。但如果 A-D 點本身就是計算結果,那麼這不是一個可行的選擇。另外,我還可以畫交點,但我不能使用它在Ti的進一步工作中kZ 級。因此我的問題是:
- 我如何
\pgfpointintersectionoflines
用其他 pgf 結構可以使用的術語來表示 A-D 點?- 我如何從 pgf 世界中提取結果,以便在 Ti 中進一步使用kZ世界?
請注意,我正在尋找可以概括的答案,而不是僅適用於當前問題的駭客。
答案1
除了 Torbjørn T. 所說的之外,您還可以使用現有的節點/座標\pgfpointanchor{<name>}{<anchor>}
。
\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[x=20mm,y=20mm]
\draw
(.5,0) node[left](A){$A$} -- (1,.8) node[left](B){B}
(2,0) node[left](C){$C$} -- (1.5,1) node[right](D){D};
\pgfcoordinate{aux}{\pgfpointintersectionoflines
{\pgfpointanchor{A}{east}}{\pgfpointanchor{B}{east}}
{\pgfpointanchor{C}{east}}{\pgfpointanchor{D}{west}}}
\pgfpathcircle{\pgfpointanchor{aux}{center}}{2pt}
\pgfusepath{stroke}
\draw (aux) -- (aux|-A.south);
\end{tikzpicture}
\end{document}
答案2
我自己確實想出了另一個解決方案。它不如土撥鼠的答案那麼好,但由於它是解決相同問題的不同方法,可能會啟用一組不同的選項,因此我在這裡提供它以供記錄:
\documentclass[tikz]{standalone}
\usetikzlibrary{math}
\begin{document}
\begin{tikzpicture}[x=20mm,y=20mm]
\draw
(.5,0) coordinate(A) node[left]{$A$} -- (1,.8) coordinate(B) node[left]{B}
(2,0) coordinate(C) node[left]{$C$} -- (1.5,1) coordinate(D) node[right]{D};
\tikzmath{
coordinate \A; \A = (A);
coordinate \B; \B = (B);
coordinate \C; \C = (C);
coordinate \D; \D = (D); }
\pgfcoordinate{E}{
\pgfpointintersectionoflines
{\pgfpoint{\Ax}{\Ay}}{\pgfpoint{\Bx}{\By}}
{\pgfpoint{\Cx}{\Cy}}{\pgfpoint{\Dx}{\Dy}}}
\draw (E) circle[radius=2pt];
\end{tikzpicture}
\end{document}
在到達那裡的過程中,我了解了\pgfpoint
(畫布座標?)和\pgfpointxy
(使用者座標)之間的差異。