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, 05:15

Cletus's gravatar image

Cletus
995226
Akzeptiert: 71%


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, 05:37

saputello's gravatar image

saputello
18.4k22352

bearbeitet 08 Apr, 08: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, 12:52) Ulrike Fischer
1

@Ulrike: Du darfst gerne eine entsprechende Antwort verfassen.

(08 Apr, 08:34) saputello
Deine Antwort auf die Frage (nicht auf andere Antworten)
Knebel-Vorschau

Folge dieser Frage

Per E-Mail:

Wenn Du Dich anmeldest, kannst Du Updates hier abonnieren

Per RSS:

Antworten

Antworten und Kommentare

Aktuelle Buch-Infos

LaTeX Cookbook

LaTeX Beginners Guide

Limitierter Rabatt ebook
50% Coupon code tDRet6Y

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üge einfach zwei Leerzeichen an die Stelle ein, an der die neue Zeile sein soll.
  • grundlegende HTML-Tags werden ebenfalls unterstützt

Zugeordnete Themen:

×162
×3
×2

Frage gestellt: 07 Apr, 05:15

Frage wurde angeschaut: 875 Mal

Zuletzt aktualisiert: 08 Apr, 08:39