我如何在 TikZ 中使用 pgf

我如何在 TikZ 中使用 pgf

背景:據我了解,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(使用者座標)之間的差異。

相關內容