TikZ内からpgfを使用するにはどうすればいいですか

TikZ内からpgfを使用するにはどうすればいいですか

背景:私はTiZ は pgf の上に構築されています。どちらも pgf マ​​ニュアルに記載されています。しかし、この 2 つがどのように接続されているかを説明するセクション (そもそも存在するかどうかはわかりません) をマニュアルで見つけることができませんでした。これは私にとって問題です。私は Ti の高レベルな構造を楽しんでいるからです。Z、しかし、pgf にはアクセス方法が分からない便利なプリミティブがいくつかあることに気づきました。

例として、次の簡単な図を考えてみましょう。

2つの線分とその延長線の交点

交差しない短い線分が2つあります。円は延長された線が交わる点を示します。線分とノードラベルはTiで作成されました。Z、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}

明らかに、このコードはDRYではありません。座標はpgfセクションで繰り返されています。しかし、ポイントA〜D自体が計算の結果である場合、これは実行可能なオプションではありません。また、描く交差点ですが、使用Tiでのさらなる研究Zレベル。そこで私の質問は次のようになります。

  • ポイント A ~ D を\pgfpointintersectionoflines、 およびその他の pgf 構成要素が使用できる用語で表現するにはどうすればよいでしょうか?
  • そして、Tiでさらに使用するために、pgfワールドから結果を抽出するにはどうすればよいでしょうかZワールド?

私が探しているのは、現在の問題だけに当てはまるハックではなく、一般化できる答えであることに注意してください。

答え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

私は別の解決策を自分で思いつきました。それは marmot の答えほど良いものではありませんが、同じ問題に対する別のアプローチであり、おそらく別のオプション セットを有効にするため、記録のためにここで提示します。

\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(ユーザー座標)の違いを学びました。

関連情報