
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
Si agregamos allow upside down
a la lista de opciones del nodo, la imagen resultante es
¿Por qué TikZ decidió orientar el segundo y
como 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 y
se 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 \pgftransformlineattime
la 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 sloped
está habilitado, se realiza un cálculo (x1-x0)
simple .(y1-y0)
Si allow upside down
está 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 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.
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 down
se 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.
Si allow upside down
no 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. .