Seite 1 von 1

\tikzset für alle

Verfasst: Di 11. Dez 2018, 16:42
von Holunderbaum
Hallo,

ich frage mich aktuell, ob es möglich ist, Optionen via \tikzset für alle \draw[->] zu setzen, die aber auch nur genau dann ausgeführt werden und nicht z.B. auch für normale Linien oder andere Pfeilarten. (Wobei ich aktuell keine anderen Pfeilarten verwende.)

Hintergrund ist der, dass ich gerne alle Pfeile ein wenig kürzen möchte, normale Linien aber nicht gekürzt werden sollen. Ob dies im weiteren Verlauf noch andere Eigenschaften betrifft, weiß ich aktuell noch nicht.

Einen eigenen "myArrow" Style zu definieren, wäre zwar möglich, aber etwas umständlicher, da ich den dann jedem \draw[->,myArrow] mitgeben müsste. Daher frage ich mich, ob das nicht irgendwie geht...

Am Ende möchte ich einen Style "myStyle" definieren, da die besagten Änderungen nur auf manche Bilder angewandt werden soll.

Hier ein kleines Minimalbeispiel:
\documentclass{scrartcl}

\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\tikzset{>=Stealth[round]}

% Ich suche etwas wie
% \tikzset{...bitte nur "->"...={shorten >=4.2pt,>=Stealth[round]}}

% Bzw. eigentlich:
% \tikzset{
%     myStyle/.style={
%         ...bitte nur "->"...={shorten >=4.2pt,>=Stealth[round]}}
%     }
% }

\begin{document}
    \begin{figure}[h!]
        % So sollen normale Linien sein (kein Abstand)
        \begin{tikzpicture}
            \node[draw] (A) at (0, 0) {$A$};
            \node[draw] (B) at (2, 0) {$B$};

            \draw (A) -- (B);
        \end{tikzpicture}\\

        % So sollen Pfeile nicht sein (kein Abstand)
        \begin{tikzpicture}%[myStyle]
            \node[draw] (A) at (0, 0) {$A$};
            \node[draw] (B) at (2, 0) {$B$};

            \draw[->] (A) -- (B);
        \end{tikzpicture}\\

        % So sollen Pfeile sein (mit Abstand), aber ohne einen extra
        % style definieren zu müssen
        \begin{tikzpicture}[myArrow/.style={shorten >=4.2pt}]
            \node[draw] (A) at (0, 0) {$A$};
            \node[draw] (B) at (2, 0) {$B$};

            \draw[->,myArrow] (A) -- (B);
        \end{tikzpicture}
    \end{figure}
\end{document}

Vielen Dank!

Holunderbaum

PS: Ich sehe oft ein zusätzliches Paar { } um >=Stealth[round] herum, also >={Stealth[round]}. Sind die wirklich notwendig?

Verfasst: Di 11. Dez 2018, 16:44
von Holunderbaum
Hm, ich sehe gerade, dass das Forum den Titel gekürzt hat. Dieser war ursprünglich
\tikzset für alle "->", aber nicht für andere Linienarten
[/quote]

Re: \tikzset für alle

Verfasst: Di 11. Dez 2018, 17:54
von Bartman
Holunderbaum hat geschrieben:PS: Ich sehe oft ein zusätzliches Paar { } um >=Stealth[round] herum, also >={Stealth[round]}. Sind die wirklich notwendig?
Das ist der Fall, wenn Du ein optionales Argument in einem optionalen Argument angeben möchtest.

Verfasst: Mi 12. Dez 2018, 14:47
von Holunderbaum
Ah, stimmt, das muss ich dann übersehen haben. Vielen Dank!


Hoffentlich kennt noch jemand eine Lösung für das eigentliche Problem, aber der Titel des Themas ist ja jetzt nicht so aussagekräftig geworden (dank des Bugs). :)

Verfasst: Do 13. Dez 2018, 10:04
von esdd
Das folgende scheint zu tun, was Du möchtest:
\documentclass{scrartcl}
\usepackage{tikz}
\usetikzlibrary{arrows.meta}

\tikzset{
  >=Stealth[round],
  myStyle/.style={
    my<-my>/.tip=>,
    my>-my< /.tip = >[reversed],
    ->/.style={shorten >= 4.2pt,-my>},
    <-/.style={shorten <=4.2pt,my<-},
    <->/.style={shorten <=4.2pt,shorten >=4.2pt, my<-my>}
  }
}

\begin{document}
\begin{figure}[hb]
  \begin{tikzpicture}[myStyle]
    \node[draw] (A) at (0, 0) {$A$};
    \node[draw] (B) at (2, 0) {$B$};
    \draw (A) -- (B);
  \end{tikzpicture}
  \par\bigskip
  \begin{tikzpicture}[myStyle]
    \node[draw] (A) at (0, 0) {$A$};
    \node[draw] (B) at (2, 0) {$B$};
    \draw[->] (A) -- (B);
  \end{tikzpicture}
  \par\bigskip
  \begin{tikzpicture}[myStyle]
    \node[draw] (A) at (0, 0) {$A$};
    \node[draw] (B) at (2, 0) {$B$};
    \draw[<->] (A) -- (B);
  \end{tikzpicture}
\end{figure}
\end{document}

Verfasst: Fr 14. Dez 2018, 12:00
von Holunderbaum
Vielen Dank! Ja, das scheint zu funktionieren. Was mir dazu noch nicht ganz klar ist:

1) Warum muss ich extra die Pfeilspitzen als my<-my> speichern? Bzw. warum funktioniert es nicht auch ohne diesem Schritt?

Die Idee, den Style "->" zu editieren, hatte ich auch mal, aber ohne das mit den Pfeilspitzen und deshalb funktionierte es nicht.

2) Wenn ich es richtig verstehe, wird hiermit -> überschrieben und nicht erweitert, was ja bedeuten sollte, dass alle Definitionen von -> weg sind. Ist das dann in der Form "sicher" oder werden durch das ursprüngliche -> noch andere Eigenschaften definiert, die ich mit definieren müsste in meinem eigenen Style, damit sie nicht verloren gehen?