Festlegen von Stilen in tikzset

Festlegen von Stilen in tikzset

tikzsetBeim Versuch, ein Bild zu erstellen und es mit verschiedenen Variablen zu laden, treten mehrere Probleme auf .

Das Tikzset enthält Stile für:

  1. Teile des Tikz-Bildes (im Beispiel die Knoten) und
  2. Teile, die hinzugefügt werden können (im Beispiel der Pfad)

In der Zwischenzeit sollten die Bilder anders skaliert werden, was ein Problem mit meinem aktuellen Code zu sein scheint

\documentclass{article}
\usepackage{tikz,pgfplots} 
\pgfplotsset{compat=1.16}  % 
\usetikzlibrary{positioning}

\begin{document}

\tikzset{
    pics/withscope/.style n args={2}{
        code = { %
            scale=#1,
            mypathstyle/.style={line width=#2mm, ->}, 
            \begin{scope}
                [scale=#1,  
                %mypathstyle/.style would only work here if path inside scope
                every node/.append style={transform shape},
                nodestyle/.style={circle,draw=black,fill=white,thick, font=\bfseries}]
                %nodes 
                \node(1) [nodestyle] {$1$};
                \node(2) [right=of 1] [nodestyle] {$2$};
            \end{scope}
        } %code
    }, % style
    pics/withscope/.default={1}{2}
} %tikzset  


\tikzset{
    pics/thisisscopeless/.style n args={1}{
        code = { %
            %Those wont do anything
            mypathstyle/.style={line width=#1mm, ->}, 
            every node/.append style={transform shape},
            nodestyle/.style wont work

            \node(1) [circle,draw=black,fill=white,thick, font=\bfseries] {$1$};
            \node(2) [right=of 1] [circle,draw=black,fill=white,thick, font=\bfseries] {$2$};
        } %code
    }, % style
    pics/thisisscopeless/.default={1}
} %tikzset


Loading without parameter works\\[2cm]
\begin{tikzpicture}
    \pic {withscope};
\end{tikzpicture} \\

putting everything in tikzpicture works\\

\begin{tikzpicture} [scale=1.5, 
    every node/.append style={transform shape},
    nodestyle/.style={circle,draw=black,fill=white,thick, font=\bfseries},
    mypathstyle/.style={line width=0.2mm, ->}] 
    \node(1) [nodestyle] {$1$};
    \node(2) [right=of 1] [nodestyle] {$2$};
    %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above] {2};
\end{tikzpicture} \\

scale doesnt work with scope \\

\begin{tikzpicture}[scale=2,mypathstyle/.style={line width=0.5mm, ->}]
    \pic {withscope};
    %   %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {3};
\end{tikzpicture}   


without scope it works   \\

\begin{tikzpicture}[scale=2,
    every node/.append style={transform shape},
    mypathstyle/.style={line width=0.5mm, ->}]
    \pic {thisisscopeless};
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {4};
\end{tikzpicture}   

with scope the scale in tkzpicture wont work. You can hand scale through tikzset, but this isnt great\\

\begin{tikzpicture}[scale=3,mypathstyle/.style={line width=0.5mm, ->}]
    \pic {withscope={3,8}};
    %   %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {5};
\end{tikzpicture}


without mypathstyle in tikzpicture gives an error as "mypathstyle" is unknown\\

\begin{tikzpicture}%[mypathstyle/.style={line width=0.5mm, ->}]
    \pic {withscope={4,8}};
    %   %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {6};
\end{tikzpicture}   


\end{document}

Meine Probleme sind: Wenn ich scopeden Stil verwende, funktioniert es, aber nicht. Wenn ich die Stile scalenicht verwende, funktioniert es nicht, aber nicht. In beiden Szenarien funktioniert es nicht, einen Stil für etwas anderes außerhalb des Tikzsets, aber innerhalb des Tikzsets zu definieren .scopescaletikzpicture

Ich bin ziemlich sicher, dass das Problem beim letzten Teil irgendwo im Schlüssel der von mir definierten Stile liegt, aber ich kann nicht herausfinden, wie ich ihn richtig aufrufe. Hat jemand eine Idee, wie man ein Tikzset erstellt, das Stile für das Tikzpicture definiert, in dem es aufgerufen wird, und das auch Inhalte hat, die über die Tikzpicture-Umgebung skalierbar sind?

Vielen Dank

Antwort1

Es gibt zwei Probleme:

  1. Wenn Sie sagen code={...}, ...muss es ein Code sein, nicht so etwas wie key=blabla. SiedürfenDefinieren Sie Schlüssel jedoch durch Verwendung von eg \tikzset.
  2. Wenn Sie haben , müssen die beiden Argumente an die via n args=2übergeben werden und nichtpic\pic {withscope={3}{8}};\pic {withscope={3,8}};

Unter Berücksichtigung dieser Tatsache wird der MWE

\documentclass{article}
\usepackage{tikz,pgfplots} 
\pgfplotsset{compat=1.16}  % 
\usetikzlibrary{positioning}

\begin{document}

\tikzset{
    pics/withscope/.style n args={2}{
        code = { %scale=#1,
            %mypathstyle/.style={line width=#2mm, ->}, 

            \begin{scope}
                [scale=#1,  
                %mypathstyle/.style would only work here if path inside scope
                every node/.append style={transform shape},
                nodestyle/.style={circle,draw=black,fill=white,thick, font=\bfseries}]
                %nodes 
                \node(1) [nodestyle] {$1$};
                \node(2) [right=of 1] [nodestyle] {$2$};
            \end{scope}
        } %code
    }, % style
    pics/withscope/.default={1}{2}
} %tikzset  


\tikzset{
    pics/thisisscopeless/.style n args={1}{
        code = { %

            \tikzset{mypathstyle/.style={line width=#1mm, ->}, 
            every node/.append style={transform shape},}
            %nodestyle/.style wont work

            \node(1) [circle,draw=black,fill=white,thick, font=\bfseries] {$1$};
            \node(2) [right=of 1] [circle,draw=black,fill=white,thick, font=\bfseries] {$2$};
        } %code
    }, % style
    pics/thisisscopeless/.default={1}
} %tikzset


Loading without parameter works\\[2cm]
\begin{tikzpicture}
    \pic {withscope};
\end{tikzpicture} 

putting everything in tikzpicture works

\begin{tikzpicture} [scale=1.5, 
    every node/.append style={transform shape},
    nodestyle/.style={circle,draw=black,fill=white,thick, font=\bfseries},
    mypathstyle/.style={line width=0.2mm, ->}] 
    \node(1) [nodestyle] {$1$};
    \node(2) [right=of 1] [nodestyle] {$2$};
    %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above] {2};
\end{tikzpicture} 

scale doesn't work with scope \textbf{because the options are local}

\begin{tikzpicture}[scale=2,mypathstyle/.style={line width=0.5mm, ->}]
    \pic {withscope};
    %   %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {3};
\end{tikzpicture}   


without scope it works  

\begin{tikzpicture}[scale=2,
    every node/.append style={transform shape},
    mypathstyle/.style={line width=0.5mm, ->}]
    \pic {thisisscopeless};
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {4};
\end{tikzpicture}   

with scope the scale in tkzpicture won't work. You can hand scale through
tikzset, but this isnt great.

\begin{tikzpicture}[scale=3,mypathstyle/.style={line width=0.5mm, ->}]
    \pic {withscope={3}{8}}; %corrected syntax for two arguments 
    %   %path   
    \draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {5};
\end{tikzpicture}


without mypathstyle in tikzpicture gives an error as "mypathstyle" is unknown\\

\begin{tikzpicture}%[mypathstyle/.style={line width=0.5mm, ->}]
    \pic {withscope={4}{8}};%corrected syntax for two arguments 
    %   %path   
    %\draw [mypathstyle] (1) -- (2) node[pos=0.5,above]  {6};
    % doesn't work because mypathstyle is defined in scope
\end{tikzpicture}   
\end{document}

Bildbeschreibung hier eingeben

verwandte Informationen