Ich benötige mehrere Graphen, die in Koordinatensystemen mit ähnlichen Eigenschaften dargestellt werden sollen. Daher habe ich einen entsprechenden xparse-Befehl definiert, der als Argumente die jeweiligen Achseneinstellungen, optional eine Angabe zum Definitionsbereich und schließlich den Funktionsterm erwartet.

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\usepackage{xparse}

\NewDocumentCommand \Graph {m o m}
    {
        \begin{tikzpicture}
        \begin{axis}[axis lines=middle,xtick=\empty,ytick=\empty,#1]
        \addplot[semithick,samples=200,\IfNoValueF{#2}{domain=#2}] {#3};
        \end{axis}
        \end{tikzpicture}
    }

\begin{document}
\Graph{xmin=0,xmax=6.5,ymin=0,ymax=6}[0:6]{-53/360*(x-3)^4-1/20*(x-3)^3+437/360*(x-3)^2+9/20*(x-3)+1}
\end{document}

Das Beispiel liefert die Fehlermeldung ! Package pgf Error: Unknown arrow tip kind domain=. Was muss ich verändern?

gefragt 07 Apr '16, 11:15

Cletus's gravatar image

Cletus
1.6k45566
Akzeptiert-Rate: 75%


Das ist wieder einmal ein Expansionsproblem, es lässt sich beispielsweise lösen, indem man nicht erst in \addplot die Fallunterscheidung vornimmt, sondern bereits davor:

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\usepackage{xparse}

\NewDocumentCommand \Graph {m o m}
    {
        \begin{tikzpicture}
        \begin{axis}[axis lines=middle,xtick=\empty,ytick=\empty,#1]
        \IfNoValueTF{#2}{%
          \addplot[semithick,samples=200] {#3};
        }{%
          \addplot[semithick,samples=200,domain=#2] {#3};
        }%
        \end{axis}
        \end{tikzpicture}
    }

\begin{document}
\Graph{xmin=0,xmax=6.5,ymin=0,ymax=6}[0:6]{-53/360*(x-3)^4-1/20*(x-3)^3+437/360*(x-3)^2+9/20*(x-3)+1}
\end{document}

Hat man mehrere optionale Argumente ist es ggf. weniger aufwendig, wenn man die \addplot-Anweisung quasi stückweise expandiert:

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\usepackage{xparse}

\NewDocumentCommand \Graph {m o m}
    {
        \begin{tikzpicture}
        \begin{axis}[axis lines=middle,xtick=\empty,ytick=\empty,#1]
          \edef\localplotcommandoptions{%
            [semithick,samples=200\IfNoValueF{#2}{,domain=\unexpanded{#2}}]%
          }\expandafter\plot\localplotcommandoptions{#3};
        \end{axis}
        \end{tikzpicture}
    }

\begin{document}
\Graph{xmin=0,xmax=6.5,ymin=0,ymax=6}[0:6]{-53/360*(x-3)^4-1/20*(x-3)^3+437/360*(x-3)^2+9/20*(x-3)+1}
\end{document}

Die einfachste Lösung wäre, wenn das optionale Argument einfach als zusätzliche Optionen von \addplot definiert würde. Dann könnte man einfach wie folgt arbeiten:

Open in Online-Editor
\documentclass{article}
\usepackage{pgfplots}
\usepackage{xparse}

\NewDocumentCommand \Graph {m O{} m}
    {
        \begin{tikzpicture}
        \begin{axis}[axis lines=middle,xtick=\empty,ytick=\empty,#1]
        \addplot[semithick,samples=200,#2] {#3};
        \end{axis}
        \end{tikzpicture}
    }

\begin{document}
\Graph{xmin=0,xmax=6.5,ymin=0,ymax=6}[domain=0:6]{-53/360*(x-3)^4-1/20*(x-3)^3+437/360*(x-3)^2+9/20*(x-3)+1}

\Graph{xmin=0,xmax=6.5,ymin=0,ymax=6}{-53/360*(x-3)^4-1/20*(x-3)^3+437/360*(x-3)^2+9/20*(x-3)+1}

\end{document}
Permanenter link

beantwortet 07 Apr '16, 11:37

saputello's gravatar image

saputello
11.1k154365
Akzeptiert-Rate: 51%

bearbeitet 08 Apr '16, 14:39

2

Ich würde ja eher hinter begin{tikzpicture} \IfNoValueF{#2}{\pgfplotsset{every axis plot/.append style={domain=#2}}} einfügen. (Wobei ich wahrscheinlich gar nicht so ein optionales Argument benutzen würde, sondern [domain=0:6] eingeben würde, lesbarer und leichter zu erweitern ...)

(07 Apr '16, 18:52) Ulrike Fischer
1

@Ulrike: Du darfst gerne eine entsprechende Antwort verfassen.

(08 Apr '16, 14:34) saputello
Deine Antwort
Vorschau umschalten

Folgen dieser Frage

Per E-Mail:

Wenn sie sich anmelden, kommen Sie für alle Updates hier in Frage

Per RSS:

Antworten

Antworten und Kommentare

Markdown-Grundlagen

  • *kursiv* oder _kursiv_
  • **Fett** oder __Fett__
  • Link:[Text](http://url.com/ "Titel")
  • Bild?![alt Text](/path/img.jpg "Titel")
  • nummerierte Liste: 1. Foo 2. Bar
  • zum Hinzufügen ein Zeilenumbruchs fügen Sie einfach zwei Leerzeichen an die Stelle an der die neue Linie sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Frage-Themen:

×296
×5
×4

gestellte Frage: 07 Apr '16, 11:15

Frage wurde gesehen: 7,539 Mal

zuletzt geändert: 08 Apr '16, 14:39