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, 07:30

tom75's gravatar image

tom75
1.9k1545
Akzeptiert: 83%


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, 07:43

esdd's gravatar image

esdd
14.2k53251

bearbeitet 12 Feb '15, 08:54

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

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

×492
×9

Frage gestellt: 12 Feb '15, 07:30

Frage wurde angeschaut: 1,886 Mal

Zuletzt aktualisiert: 12 Feb '15, 08:59