Solución:
Usar nodes=rotate=
en lugar de transform shape
:
En contraste con transform shape
los nodes=rotate=
pasa solo la transformación seleccionado por su argumento (es decir rotate=
) a todos los nodos dentro del alcance.
Definiendo un nuevo estilo myrotate
como abreviatura
tikzset
myrotate/.style=rotate=#1,nodes=rotate=#1
y usando myrotate=
en lugar de rotate=
resultados en
Código:
documentclassarticle
usepackagetikz
tikzset
myrotate/.style=rotate=#1,nodes=rotate=#1
newcommand*MyDraw[1]%
draw [ultra thick, -latex] (0,0) -- (1,4)
node [midway, above, sloped, align=center] #1;
%
begindocument
begintikzpicture
MyDrawnot rotated;
endtikzpicture%
% --------------------------------- apply "rotation"
begintikzpicture
beginscope[myrotate=-25,red]
MyDrawrotated;
endscope
endtikzpicture%
% --------------------------------- apply "rotation" and "scale"
begintikzpicture
beginscope[myrotate=-15,scale=1.3, blue]
MyDrawrotated and scaled;
endscope
endtikzpicture%
% --------------------------------- apply "rotation", "scale" and "transform shape"
begintikzpicture
beginscope[myrotate=-15, scale=1.5, orange]
MyDrawrotated, scaled and \ ``transform shape";
endscope
endtikzpicture
enddocument
Solía escribir una biblioteca de álgebra lineal para TikZ (principalmente para manejar números complejos), pero desde ahora TikZ está usando Lua de manera extensiva, eso se volvió bastante obsoleto, así que lo detuve. Sin embargo, aquí hay un robo rápido de la descomposición QR de Givens para una matriz de dos por dos que separa la matriz de transformación en escala y rotación y solo usamos la parte de rotación y omitimos la parte de escala / inclinación.
Se puede usar la misma idea para cancelar la rotación y mantener la escala para responder la pregunta en los comentarios. Echaré un vistazo si puedo dedicar más tiempo.
documentclassarticle
usepackagetikz
newcommand*MyDraw[1]%
draw [ultra thick, -latex] (0,0) -- (1,4)
node [midway, above, sloped, align=center,cancel scale] #1;
%
tikzsetcancel scale/.code=pgfmathcancelscale
makeatletter
defpgfmathcancelscale%
pgfgettransformentries[email protected]
[email protected][email protected][email protected][email protected][email protected]%
pgfmathsetmacro[email protected][email protected]/veclen([email protected],[email protected])%
pgfmathsetmacro[email protected]-[email protected]/veclen([email protected],[email protected])%
pgfsettransformentries[email protected][email protected]-[email protected][email protected][email protected][email protected]%
makeatother
begindocument
begintikzpicture
beginscope[rotate=-15, scale=1.5, transform shape, orange]
MyDrawrotated, scaled and \ ``transform shape";
beginscope[rotate=40, scale=0.2, shift=(10cm,-5cm),transform shape, blue]
MyDrawrotated, scaled and \ ``transform shape";
endscope
endscope
endtikzpicture
enddocument
Como seguimiento a mi comentario, esto es lo que he intentado con esta respuesta de la pregunta Acceder a la opción de escala dentro del entorno TikZ.
Yo definiria un nuevo key Sloped
que adivina el xscale
y yscale
factor para cancelar el escalado mientras se usa sloped
y transform shape
para mantener la rotación:
tikzset
Sloped/.code=%
pgfgettransformentriesmyamybmycmydmysmyt%
tikzsetsloped, transform shape, xscale=1/mya, yscale=1/myd%
Código
documentclass[margin=0.5cm]standalone
usepackagetikz
tikzset%
Sloped/.code=%
pgfgettransformentriesmyamybmycmydmysmyt%
tikzsetsloped, transform shape, xscale=1/mya, yscale=1/myd%
%
newcommand*MyDraw[1]%
draw [ultra thick, -latex] (0,0) -- (70:5)
node [midway, above, Sloped, align=center] #1;
%
begindocument
begintikzpicture
MyDrawnot rotated;
endtikzpicture%
%--------------------------------- apply "rotation"
begintikzpicture
beginscope[rotate=-25, red]
MyDrawrotated;
endscope
endtikzpicture%
% --------------------------------- apply "rotation" and "scale"
begintikzpicture
beginscope[rotate=-15, scale=1.3, blue]
MyDrawrotated and scaled;
endscope
endtikzpicture%
% --------------------------------- apply "rotation", "scale" and "transform shape"
begintikzpicture
beginscope[rotate=-15, scale=1.5, transform shape, orange]
MyDrawrotated, scaled and \ ``transform shape";
endscope
endtikzpicture
enddocument
Producción
Problema
Como mencionó Peter Grill en el comentario, no funciona muy bien, el texto es un poco más pequeño. Elimino mi respuesta tan pronto como alguien me diga por qué no funciona 😉
Reseñas y valoraciones del tutorial
Si sostienes algún titubeo o disposición de acrecentar nuestro escrito te invitamos dejar un exégesis y con placer lo interpretaremos.