Problem mit der Skalierung jedes Bildes (Winkel, Tikzlibrary)

Problem mit der Skalierung jedes Bildes (Winkel, Tikzlibrary)

Hallo zusammen, ich muss ein Tikzbild skalieren, also habe ich es gemacht, \begin{tikzpicture}[scale=<factor>]aber die Bilder werden nicht entsprechend skaliert (Es steht im TikzManualAbschnitt 18.2 Die Pic-Syntax). Ich möchte auch Bilder skalieren, also habe ich die Syntax ausprobiert, \begin{tikzpicture}[scale=0.4,every pic/.style={transform shape}]aber es hat nicht funktioniert. Verwenden von Transform Shape als Option für jedes einzelne Bild, d. h., \pic[angle radius=5.3cm,transform shape]es ist ok, aber ich möchte es nicht für jede einzelne Option von \pics verwenden. Vielleicht ist es nur ein Problem mit der Winkelbibliothek (ich habe es nicht mit anderen Bildern versucht). Hier sind meine MWEs, das funktioniert nicht wie erwartet

    \documentclass[border=1cm]{standalone}
    \usepackage{tikz}
    \usetikzlibrary{calc,angles}
    \begin{document}
    %rotate vectors
\begin{tikzpicture}[vector/.style={thick,-stealth},scale=0.4,every pic/.style={transform shape}]
%drawing help lines
\newcommand*{\xmin}{-3}\newcommand*{\xmax}{4}
\newcommand*{\ymin}{-5}\newcommand*{\ymax}{1}
\draw[help lines](\xmin,\ymin)grid(\xmax,\ymax);
%vector coordinates and labels
\coordinate[label={above:$v$}] (O)at (0,0);
\coordinate (vec1)at (1,-2);
\coordinate (vec2)at(4,-1);
\draw[vector] (O)--(vec1)coordinate[label={[below]$u_1$}](u1);
%sum (vec1)+(vec2)  
\draw[vector,very thick,blue](O)--($(vec1)+(vec2)$)coordinate(u1+u2);
%rotated sum (u1)+(u2) -> u'1+u'2
\draw[vector,very thick,orange](O)--([rotate=-90]u1+u2)coordinate(u'1+u'2);
%rotated vectors 
\draw[red,vector] (0,0)--([rotate=-90]vec1)coordinate[label={[left]$u'_1$}](u'1); 
%
\draw[red,vector] (0,0)--([rotate=-90]vec2)coordinate[label={[below]$u'_2$}](u'2);
%angles between vectors by angles library, issue with angle radius=  
%default angle radius=1cm and it does not scale accordingly
\pic[draw=gray] {angle = u'1--O--u'2};  
% rotation traces 
\pic[draw=red,dashed,<-,angle radius=1.8cm]{angle=u'1--O--vec1}; 
\pic[draw=blue,dashed,<-,angle radius=5.3cm,]  {angle=u'1+u'2--O--u1+u2}; 
%vector sums labels 
\coordinate[label={below:$w$}]() at(u1+u2);
\coordinate[label={below:$w'$}] ()at(u'1+u'2);
  % outgoing vector scaled accordingly but I'd rather prefer not
    \path[draw,fill=white] (O)circle[radius=2pt];
    \path[fill] (O)circle[radius=1pt];
    \end{tikzpicture}\end{document}

Gestrichelte Bögen sollten skaliert werden, damit sie zu den Pfeilen passen

Das Folgende funktioniert einwandfrei,

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc,angles}
\begin{document}
%
%rotate vectors
\begin{tikzpicture}[vector/.style={thick,-stealth},scale=0.4 ] %every pic/.append style={transform shape}
%drawing help lines
\newcommand*{\xmin}{-3}\newcommand*{\xmax}{4}
\newcommand*{\ymin}{-5}\newcommand*{\ymax}{1}
\draw[help lines](\xmin,\ymin)grid(\xmax,\ymax);
%vector coordinates and labels
\coordinate[label={above:$v$}] (O)at (0,0);
\coordinate (vec1)at (1,-2);
\coordinate (vec2)at(4,-1);
\draw[vector] (O)--(vec1)coordinate[label={[below]$u_1$}](u1);
%sum (vec1)+(vec2)  
\draw[vector,very thick,blue](O)--($(vec1)+(vec2)$)coordinate(u1+u2);
%rotated sum (u1)+(u2) -> u'1+u'2
\draw[vector,very thick,orange](O)--([rotate=-90]u1+u2)coordinate(u'1+u'2);
%rotated vectors 
\draw[red,vector] (0,0)--([rotate=-90]vec1)coordinate[label={[left]$u'_1$}](u'1); 
%
\draw[red,vector] (0,0)--([rotate=-90]vec2)coordinate[label={[below]$u'_2$}](u'2);
%angles between vectors by angles library, issue with angle radius=  
%default angle radius=1cm and it does not scale accordingly
\pic[transform shape,draw=gray] {angle = u'1--O--u'2};  
% rotation traces 
\pic[draw=red,dashed,<-,angle radius=1.8cm,transform shape]{angle=u'1--O--vec1}; 
\pic[transform shape,draw=blue,dashed,<-,angle radius=5.3cm,]  {angle=u'1+u'2--O--u1+u2}; 
%vector sums labels 
\coordinate[label={below:$w$}]() at(u1+u2);
\coordinate[label={below:$w'$}] ()at(u'1+u'2);

    % outgoing vector scaled accordingly but I'd rather prefer not
    \path[draw,fill=white] (O)circle[radius=2pt];
    \path[fill] (O)circle[radius=1pt];
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Vielleicht gibt es einen besseren Weg, das zu erreichen. Ich bin dafür offen, würde meinen Code aber nicht von Grund auf ändern.

Ich habe es versucht, every pic/.append style={transform shape}aber ohne sichtbares Ergebnis. Als Nebeneffekt der Radius vonausgehender Vektorin den letzten Zeilen des Codes wird skaliert, was ich nicht möchte.

Antwort1

Da Sie jedem einen Stil anhängen möchten \pic{angle}, könnten Sie Folgendes festlegen pics/angle/.append style={/tikz/transform shape}(Sie müssen den Pfad explizit angeben, da Sie sich \pichier im „Pfadverzeichnis“ von befinden):

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, angles}

\begin{document}
%rotate vectors
\begin{tikzpicture}[
    vector/.style={thick,-stealth}, 
    scale=0.4, 
    pics/angle/.append style={/tikz/transform shape}
]
    %drawing help lines
    \newcommand*{\xmin}{-3}\newcommand*{\xmax}{4}
    \newcommand*{\ymin}{-5}\newcommand*{\ymax}{1}
    \draw[help lines] (\xmin,\ymin) grid (\xmax,\ymax);
    %vector coordinates and labels
    \coordinate[label={above:$v$}] (O) at (0,0);
    \coordinate (vec1) at (1,-2);
    \coordinate (vec2) at (4,-1);
    \draw[vector] (O) -- (vec1)
        coordinate[label={[below]$u_1$}] (u1);
    %sum (vec1)+(vec2)  
    \draw[vector,very thick,blue] (O)--($(vec1)+(vec2)$)
        coordinate (u1u2);
    %rotated sum (u1)+(u2) -> u'1+u'2
    \draw[vector,very thick,orange] (O)--([rotate=-90]u1u2)
        coordinate (u'1u'2);
    %rotated vectors 
    \draw[red,vector] (0,0) -- ([rotate=-90]vec1)
        coordinate[label={[left]$u'_1$}] (u'1);
    %
    \draw[red,vector] (0,0) -- ([rotate=-90]vec2)
        coordinate[label={[below]$u'_2$}] (u'2);
    %angles between vectors by angles library, issue with angle radius=  
    %default angle radius=1cm and it does not scale accordingly
    \pic[draw=gray] {angle={u'1--O--u'2}};
    % rotation traces 
    \pic[draw=red, dashed, <-, angle radius=1.8cm] {angle={u'1--O--vec1}};
    \pic[draw=blue, dashed, <-, angle radius=5.3cm] {angle={u'1u'2--O--u1u2}};
    %vector sums labels 
    \coordinate[label={below:$w$}] (w) at (u1u2);
    \coordinate[label={below:$w'$}] (w') at (u'1u'2);
    % outgoing vector scaled accordingly but I'd rather prefer not
    \path[draw, fill=white] (O) circle[radius=2pt];
    \path[fill] (O) circle[radius=1pt];
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

Ich habe einige der Koordinatennamen geändert, da ich mir nicht sicher bin, ob ein +in einem Namen eine gute Idee ist. Sie können sich gerne daran halten oder nicht.


Wenn Sie nicht möchten, dass die Kreise bei (O)skaliert werden, erstellen Sie \picdaraus ein . Wir wissen, dass \pics von der Skalierung nicht betroffen sind und mit haben wir nur auf die pics/angle/.append style={/tikz/transform shape}angewendet .transform shape\pic{angle}

\documentclass[border=1cm]{standalone}
\usepackage{tikz}
\usetikzlibrary{calc, angles}

\begin{document}
%rotate vectors
\begin{tikzpicture}[
    vector/.style={thick,-stealth}, 
    scale=0.4, 
    pics/angle/.append style={/tikz/transform shape},
    pics/origin/.style={
        code={
            \path[draw, fill=white] (0,0) circle[radius=2pt];
            \path[fill] (0,0) circle[radius=1pt];
        }
    }
]
    %drawing help lines
    \newcommand*{\xmin}{-3}\newcommand*{\xmax}{4}
    \newcommand*{\ymin}{-5}\newcommand*{\ymax}{1}
    \draw[help lines] (\xmin,\ymin) grid (\xmax,\ymax);
    %vector coordinates and labels
    \coordinate[label={above:$v$}] (O) at (0,0);
    \coordinate (vec1) at (1,-2);
    \coordinate (vec2) at (4,-1);
    \draw[vector] (O) -- (vec1)
        coordinate[label={[below]$u_1$}] (u1);
    %sum (vec1)+(vec2)  
    \draw[vector,very thick,blue] (O)--($(vec1)+(vec2)$)
        coordinate (u1u2);
    %rotated sum (u1)+(u2) -> u'1+u'2
    \draw[vector,very thick,orange] (O)--([rotate=-90]u1u2)
        coordinate (u'1u'2);
    %rotated vectors 
    \draw[red,vector] (0,0) -- ([rotate=-90]vec1)
        coordinate[label={[left]$u'_1$}] (u'1);
    %
    \draw[red,vector] (0,0) -- ([rotate=-90]vec2)
        coordinate[label={[below]$u'_2$}] (u'2);
    %angles between vectors by angles library, issue with angle radius=  
    %default angle radius=1cm and it does not scale accordingly
    \pic[draw=gray] {angle={u'1--O--u'2}};
    % rotation traces 
    \pic[draw=red, dashed, <-, angle radius=1.8cm] {angle={u'1--O--vec1}};
    \pic[draw=blue, dashed, <-, angle radius=5.3cm] {angle={u'1u'2--O--u1u2}};
    %vector sums labels 
    \coordinate[label={below:$w$}] (w) at (u1u2);
    \coordinate[label={below:$w'$}] (w') at (u'1u'2);
    % outgoing vector scaled accordingly but I'd rather prefer not
    \pic at (O) {origin};
\end{tikzpicture}
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen