Ist es möglich, in \foreach statt Zahlen und Konstanten auch Funktionen zu verwenden?

Open in Online-Editor
\documentclass{standalone}
\usepackage{tikz}

\begin{document}
\begin{tikzpicture}[line cap=round, line join=round, x=1cm, y=1cm, scale=1]
  \draw [->] (-1,0) -- (6,0) node[right] {$x$};
  \foreach \x/\y in {0/$0$,1/$1$,sqrt(2)/$\sqrt{2}$,pi/$\pi$,5/$5$}
  \draw [shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[font=\tiny,below] {\y};
\end{tikzpicture}
\end{document}

Die sqrt(2) klappt nicht. Ich hab schon {sqrt(2)} und $sqrt(2)$ probiert. Oder bleibt nichts übrig, als einen gerundeten Wert einzutragen?

gefragt 12 Feb '15, 13:30

tom75's gravatar image

tom75
2.2k277984
Akzeptiert-Rate: 57%


Wenn die x-Koordinate für die shift Option erst berechnet werden muss und in der Rechnung Klammern vorkommen, muss diese Berechnung der x-Koordinate in geschweiften Klammern stehen. Das hat nichts mit \foreach zu tun.

Open in Online-Editor
\documentclass[margin=10pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[line cap=round, line join=round]
  \draw [->] (-1,0) -- (6,0) node[right] {$x$};
  \draw [shift={({sqrt(2)},0)}] (0pt,2pt) -- (0pt,-2pt) node[font=\tiny,below] {$\sqrt{2}$};
\end{tikzpicture}
\end{document}

Wenn man im oben stehenden Beispiel shift={({sqrt(2)},0)} durch shift={(sqrt(2),0)} ersetzen würde, dann würde man ebenfalls die Fehlermeldung ! Package pgf Error: No shape named sqrt(2 is known erhalten. Das liegt daran, dass alles zwischen der öffnenden Koordinatenklammer und der ersten schließenden runden Klammer als Nodenamen interpretiert wird, wenn darin kein Komma vorkommt.

Verwende deshalb entweder ({\x},0) als Koordinatenangabe für shift oder {{sqrt(x)}} im Argument von \foreach, da die äußere geschweifte Klammer beim Lesen des Argumentes entfernt wird.

Also

Open in Online-Editor
\documentclass[margin=10pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[line cap=round, line join=round]
  \draw [->] (-1,0) -- (6,0) node[right] {$x$};
  \foreach \x/\y in {0/$0$,1/$1$,sqrt(2)/$\sqrt{2}$,pi/$\pi$,5/$5$}
  \draw [shift={({\x},0)}] (0pt,2pt) -- (0pt,-2pt) node[font=\tiny,below] {\y};
\end{tikzpicture}
\end{document}

oder

Open in Online-Editor
\documentclass[margin=10pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}[line cap=round, line join=round]
  \draw [->] (-1,0) -- (6,0) node[right] {$x$};
  \foreach \x/\y in {0/$0$,1/$1$,{{sqrt(2)}}/$\sqrt{2}$,pi/$\pi$,5/$5$}
  \draw [shift={(\x,0)}] (0pt,2pt) -- (0pt,-2pt) node[font=\tiny,below] {\y};
\end{tikzpicture}
\end{document}

alt text


Auch wenn Du bei der Konstruktion von Pfaden Berechnungen für die Koordinaten durchführen lässt, die Klammern enthalten, musst Du diese durch geschweifte Klammern schützen. Hier ist dazu mal noch ein Beispiel:

Open in Online-Editor
\documentclass[margin=10pt,tikz]{standalone}
\begin{document}
\begin{tikzpicture}
  \draw[help lines,step=.5cm](0,0)grid(1.5,5);
  \draw (0,0)--({sqrt(2)},0)--({sqrt(2)},pi-.5)--(0,{sqrt(2)+pi})--cycle;
\end{tikzpicture}
\end{document}
Permanenter link

beantwortet 12 Feb '15, 13:43

esdd's gravatar image

esdd
17.8k284257
Akzeptiert-Rate: 62%

bearbeitet 12 Feb '15, 14:54

Vielen Dank, du erklärst das immer super gut!

(12 Feb '15, 14:59) tom75
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:

×730
×21

gestellte Frage: 12 Feb '15, 13:30

Frage wurde gesehen: 8,489 Mal

zuletzt geändert: 12 Feb '15, 14:59