Ich habe eine Parabelgrafik gezeichnet y = 0.5 - a x^2
, die die x-Achse an den "Wurzel"-Punkten schneidet 0.75
und -0.75
bei der Koordinate einen Knick hat (0, 0.5)
. Und ich möchte einen Punkt auf der Parabel markieren, der eine Koordinate 0.33 * \rootPosition
auf der x-Achse hat. (Hier \rootPosition
ist eine Zahl 0.75
). Ich habe den folgenden Code geschrieben
\documentclass[tikz]{standalone}
\usepackage{tikz, pgfmath}
\begin{document}
\begin{tikzpicture} [scale=3, >=stealth]
\def\bendPosition{0.5};
\def\rootPosition{0.75};
\def\coeffA{\pgfmathdivide{\bendPosition}{\pgfmathpow{\rootPosition}{2}}};
\draw[thick] (-\rootPosition,0) parabola bend (0, \bendPosition) (\rootPosition, 0);
\def\arbitraryPosition{0.33 * \rootPosition};
\coordinate (arbitrary_point) at (\arbitraryPosition, \bendPosition - \coeffA* \pgfmathpow{\arbitraryPosition}{2}));
\filldraw[black] (arbitrary_point) circle(0.4pt);
\end{tikzpicture}
\end{document}
Aber wenn ich diesen Code kompiliere, erhalte ich den Fehler
! Incomplete \iffalse; all the text ignored after line 14
, wobei Zeile 14 mit\coordinate (arbitrary_point)..
Was ist falsch?
Antwort1
Sie sollten in Makronamen keinen Unterstrich verwenden, auch wenn TikZ ihn in den meisten Fällen ausreichend gut handhabt. Der Unterstrich ist ein Mathmode-Indexbefehl und kann bei anderen Typen problemlos vermieden werden.
Das Hauptproblem besteht darin, dass mathematische Operationen nicht zu einem Ergebnis erweitert werden, wenn sie auf dem Pfad gefunden werden. Sie speichern das Ergebnis in einem aufgerufenen Makro \pgfmathresult
und der Parser muss dieses sehen, aber nicht die mathematischen Operatoren.
\begin{tikzpicture} [scale=3, >=stealth]
\def\bendPosition{0.5};
\def\rootPosition{0.75};
\pgfmathsetmacro\coeffA{\bendPosition/(\rootPosition)^2}
\draw[thick] (-\rootPosition,0) parabola bend (0, \bendPosition) (\rootPosition, 0);
\pgfmathsetmacro\arbitraryPosition{0.33 * \rootPosition}
\coordinate (arbitrary_point) at (\arbitraryPosition, {\bendPosition - \coeffA* (\arbitraryPosition)^2});
\filldraw[black] (arbitrary_point) circle(0.4pt);
\end{tikzpicture}