「逆さまを許可」がある場合の傾斜ノードの方向

「逆さまを許可」がある場合の傾斜ノードの方向

次の LaTeX 原稿を考えてみましょう。

\documentclass[tikz,convert]{standalone}
\begin{document}
  \begin{tikzpicture}
    \draw (1,0) -- (0,1) node[midway,sloped] {$y$};
  \end{tikzpicture}
\end{document}

結果の画像は

線上のノード

allow upside downノードのオプションリストに追加すると、結果の画像は次のようになります。

同じノードを逆さまに

なぜTikZは2番目のものをyそのように配置することにしたのでしょうか?なぜ最初のもののように配置しないのでしょうか?結局のところ、このオプションは単に許可された逆さまではなく必須逆さまですか? 確かに、座標の順序を入れ替えると、2 番目はy1 番目と同じ向きになります。

何ですかルールTikZ が の向きを決定するために使用するものなのでy、それを知っていれば、結果がどのようになるか事前に予測できますか?

答え1

これは、マニュアル バージョン TikZ v3.0.1a のセクション 103.2.2 に関連しています\pgftransformlineattime。直線の場合を大まかに説明します (曲線の場合も同様です)。

最初の部分は、タイマー 0 が開始点、タイマー 1 が終了点であるという概念であるこの動作とは関係ありません。そのため、何らかの黒魔術を行った後、pos=0.5(from midway) が処理され、ノード配置のポイントがどこになるかがわかります。slopedが有効になっている場合は、単純な(x1-x0)計算(y1-y0)が実行されます。

allow upside downが有効な場合は、(x1-x0)がチェックされます。x 差が負の場合、終点の符号が反転されます。それ以外の場合は何も起こらず、終点を指す正規化されたベクトルが使用され、座標変換が設定されます。その後、ノードはその変換に従います。

興味のある方のために、上記の大まかなストーリーのコードバージョンを以下に示します。

\def\pgftransformlineattime#1#2#3{%
  \pgf@process{#2}%
  \pgf@xb=\pgf@x% xb/yb = start point
  \pgf@yb=\pgf@y%
  \pgf@process{#3}%
  \pgf@xc=\pgf@x% xc/yc = end point
  \pgf@yc=\pgf@y%
  \pgftransformshift{\pgfpointlineattime{#1}{\pgfqpoint{\pgf@xb}{\pgf@yb}}{\pgfqpoint{\pgf@xc}{\pgf@yc}}}%
  \ifpgfresetnontranslationattime%
    \pgftransformresetnontranslations%
  \fi%
  \ifpgfslopedattime%
    \advance\pgf@xc by-\pgf@xb%
    \advance\pgf@yc by-\pgf@yb%
    \ifpgfallowupsidedownattime%
    \else%
      \ifdim\pgf@xc<0pt%   
        \pgf@xc=-\pgf@xc%
        \pgf@yc=-\pgf@yc%
      \fi%
    \fi%
    \pgf@x=\pgf@xc%
    \pgf@y=\pgf@yc%
    \pgfpointnormalised{}% x/y = normalised vector
    \pgf@ya=-\pgf@y%
    \pgftransformcm%
    {\pgf@sys@tonumber{\pgf@x}}{\pgf@sys@tonumber{\pgf@y}}%
    {\pgf@sys@tonumber{\pgf@ya}}{\pgf@sys@tonumber{\pgf@x}}{\pgfpointorigin}%
  \fi%
}

答え2

一般的な四角形の端とは異なり、空でないテキスト ボックスの各端は、テキスト ボックスに含まれるテキストの流れによって自然に誘導されるとおり、テキスト ボックスの左端、右端、上端、または下端のいずれかとして一意に分類できます (たとえば、英語とヘブライ語の両方を含むテキストではなく、単一の方向性のテキストを想定)。

                                テキスト ボックスの端は、自然に左、右、上、下に分類できます。

TikZ の非退化線分は方向があります。つまり、一意に決定された開始点と一意に決定された終了点があり、したがって、開始点から終了点への一意に決定された方向があります。したがって、TikZ 線分は自然にベクトルを決定します。

                                                  TikZ 線分はベクトルです。

線分の端にあるノードが の場合sloped、そのテキストは線分と平行になります。つまり、ノードによってカプセル化されたテキスト ボックスの上端と下端は線分と平行になります。

さらにallow upside downオプションを指定すると、テキスト ボックスは、テキストの自然な左から右への流れ (英語のような左から右の言語を想定) が線分の方向に発生するように方向付けられます。つまり、線分によって決定されるベクトルは、テキスト ボックスの左端からテキスト ボックスの右端を指します。

                                             <code>allow upside down</code> がある場合のテキストボックスの方向

オプションが指定されていない場合allow upside down、テキスト ボックスは、テキストの下部が TikZ 画像の下部を向くように配置されます。TikZ 画像またはノードに明示的な回転が適用されていないと仮定すると、テキスト ボックスの中央から発せられ、テキスト ボックスの下部を直角に横切る仮想光線は、最終的にページの下端も横切ることになります。

                                              テキストボックスの向き(<code>allow upside down</code> なし)

関連情報