
背景:私はTiけZ は pgf の上に構築されています。どちらも pgf マニュアルに記載されています。しかし、この 2 つがどのように接続されているかを説明するセクション (そもそも存在するかどうかはわかりません) をマニュアルで見つけることができませんでした。これは私にとって問題です。私は Ti の高レベルな構造を楽しんでいるからです。けZ、しかし、pgf にはアクセス方法が分からない便利なプリミティブがいくつかあることに気づきました。
例として、次の簡単な図を考えてみましょう。
交差しない短い線分が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
(ユーザー座標)の違いを学びました。