La orientación de un nodo inclinado en presencia de "permitir al revés"

La orientación de un nodo inclinado en presencia de "permitir al revés"

Considere el siguiente manuscrito de LaTeX.

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

La imagen resultante es

Un nodo en una línea

Si agregamos allow upside downa la lista de opciones del nodo, la imagen resultante es

El mismo nodo, al revés

¿Por qué TikZ decidió orientar el segundo ycomo lo hizo? ¿Por qué no está orientado como el primero? Después de todo, la opción se llama simplementepermitidoal revés, norequerido¿Al revés? De hecho, si se cambia el orden de las coordenadas, la segunda yse orienta de la misma manera que la primera.

Cuál es elreglaque TikZ usa para determinar cómo orientar el y, de modo que, conociéndolo, pueda predecir de antemano cómo será el resultado?

Respuesta1

Esto está relacionado con \pgftransformlineattimela Sección 103.2.2 para la versión manual TikZ v3.0.1a. Explicamos a grandes rasgos el caso de la línea (el caso curvo es similar):

La primera parte no está relacionada con este comportamiento, que es el concepto de que el temporizador 0 es el punto de inicio y 1 el punto final. Entonces, después de un poco de magia negra, se maneja pos=0.5(desde midway) y sabemos dónde estaría el punto de ubicación del nodo. Si slopedestá habilitado, se realiza un cálculo (x1-x0)simple .(y1-y0)

Si allow upside downestá habilitado, entonces (x1-x0)está marcado. Si la diferencia x es negativa, el signo del punto final se invierte, de lo contrario no sucede nada y se utiliza un vector normalizado que apunta al punto final y se configura una transformación de coordenadas. Entonces el nodo obedece a esa transformación.

Para los interesados, aquí está la versión en código de la historia anterior.

\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%
}

Respuesta2

A diferencia de los bordes de un rectángulo genérico, cada borde de un cuadro de texto no vacío se puede clasificar de forma única como borde izquierdo, derecho, superior o inferior del cuadro de texto, como lo induce naturalmente el flujo del texto contenido en el cuadro de texto (asumiendo un texto de direccionalidad única, a diferencia de un texto que contiene, digamos, tanto inglés como hebreo).

                                Los bordes de un cuadro de texto se pueden clasificar naturalmente como izquierdo, derecho, superior o inferior.

Los segmentos de recta no degenerados en TikZ están dirigidos: tienen un punto inicial determinado de forma única y un punto final determinado de forma única y, por tanto, una dirección determinada de forma única, es decir, desde el punto inicial hasta el punto final. Por lo tanto, un segmento de línea TikZ determina naturalmente un vector.

                                                  Un segmento de línea TikZ es un vector.

Cuando un nodo al final de un segmento de línea es sloped, su texto corre paralelo al segmento de línea: los bordes superior e inferior del cuadro de texto encapsulado por el nodo son paralelos al segmento de línea.

Si además allow upside downse especifica la opción, el cuadro de texto se orienta de manera que el flujo natural del texto de izquierda a derecha (asumiendo un idioma de izquierda a derecha como el inglés) ocurre en la dirección del segmento de línea. En otras palabras, el vector determinado por el segmento de línea apunta desde el borde izquierdo del cuadro de texto hasta el borde derecho del cuadro de texto.

                                             Orientación de un cuadro de texto en presencia de <code>permitir al revés</code>

Si allow upside downno se especifica la opción, el cuadro de texto está orientado de manera que la parte inferior del texto mire hacia la parte inferior de la imagen de TikZ. Suponiendo que no se aplicó ninguna rotación explícita ni a la imagen de TikZ ni al nodo, esto significa que un rayo imaginario que emana del centro del cuadro de texto y cruza la parte inferior del cuadro de texto en ángulo recto también eventualmente cruzará el borde inferior de la página. .

                                              Orientación de un cuadro de texto sin <code>permitir al revés</code>

información relacionada