\tikzset für alle Thema ist als GELÖST markiert

Tabellen und Grafiken erstellen und anordnen


Holunderbaum

\tikzset für alle

Beitrag 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?

Holunderbaum

Beitrag 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]

Bartman
Forum-Meister
Forum-Meister
Beiträge: 2466
Registriert: Do 16. Jul 2009, 21:41
Wohnort: Hessische Provinz

Re: \tikzset für alle

Beitrag 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.

Holunderbaum

Beitrag 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). :)

esdd
Forum-Meister
Forum-Meister
Beiträge: 2561
Registriert: So 7. Feb 2010, 16:36

Beitrag 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}

Holunderbaum

Beitrag 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?

Antworten