'거꾸로 허용'이 있는 경우 경사 노드의 방향

'거꾸로 허용'이 있는 경우 경사 노드의 방향

다음 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가 두 번째 방향을 정하기로 결정한 이유는 무엇입니까?yTikZ가 두 번째 방향을 그렇게 ? 왜 첫 번째 것과 같은 방향이 아닌 거죠? 결국 옵션은 단순히허용된거꾸로, 아니필수의상하 반전? 실제로 좌표의 순서가 바뀌면 두 번째도 y첫 번째와 같은 방향으로 향하게 됩니다.

이것은규칙TikZ가 방향을 지정하는 방법을 결정하는 데 사용하므로 y이를 알면 결과가 어떻게 보일지 미리 예측할 수 있습니까?

답변1

\pgftransformlineattime이는 수동 버전 TikZ v3.0.1a의 섹션 103.2.2 와 관련이 있습니다 . 선의 경우를 대략 설명합니다(곡선의 경우도 비슷합니다).

첫 번째 부분은 타이머 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>거꾸로 허용</code>이 있는 경우 텍스트 상자 방향

옵션 allow upside down을 지정하지 않으면 텍스트 하단이 TikZ 그림 하단을 향하도록 텍스트 상자 방향이 지정됩니다. TikZ 그림이나 노드에 명시적인 회전이 적용되지 않았다고 가정하면 이는 텍스트 상자 중앙에서 방출되어 텍스트 상자 하단을 직각으로 가로지르는 가상의 광선이 결국 페이지 하단 가장자리도 가로지르게 됨을 의미합니다. .

                                              <code>거꾸로 허용</code>이 아닌 텍스트 상자 방향

관련 정보