Bei folgendem Beispiel musste ich die Elemente so eingeben

\foreach \x in {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0}

die Eingabe

\foreach \x in {0.1,0.2,...,1.0}

führte zu einem seltsamen Ergebnis (siehe Bild).

Wie kann ich das beheben?

alt text

Open in Online-Editor
\documentclass[]{scrartcl}
\usepackage{tikz}

\begin{document}

\begin{tikzpicture}[
%font=\footnotesize, 
>=latex, 
scale=0.65,
x=10cm, y=10cm, 
]

%KoSy
%Gitternetzlinien
%\draw[very thin,color=gray] (-2,-4) grid (3,4);
%Achsen
\draw[->] (-0.05,0) -- (1.075,0) node[right, below] {Re};
\draw[->] (0,-0.05) -- (0,1.075) node[above, left] {Im};
%Achsenbeschriftung
%Zahlen auf x-Achse
\foreach \x in {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0} {
\if\x0\else
  \draw (\x,2pt) -- (\x, -2pt) node[below, font=\footnotesize] {$\x$};
\fi}

%Zahlen auf y-Achse
\foreach \y in {0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0} {
\if\y0\else
  \draw (2pt,\y) -- (-2pt,\y) node[left, font=\footnotesize]{$\y$};
\fi}

%Ursprung
\node[below left] {$0$};

%Funktionen
\def\a{0.3482759645}
\def\b{0.6517240354}

\coordinate(O) at (0,0);
\coordinate(Z) at (\a,\b);
\coordinate(W) at (\b,\a);
\coordinate(ZplusW) at (\a+\b,\b+\a);
\coordinate(absZi) at (0,\a^2+\b^2);

%z=a+ib
\draw[red, thick, ->] (O) -- (Z) node[sloped, above, midway, text=black, font=\sffamily]{(a1)} node[left]{$z$};
\end{tikzpicture}

\end{document}

gefragt 12 Nov '15, 17:45

cis's gravatar image

cis
5.4k860169
Akzeptiert: 68%

bearbeitet 12 Nov '15, 19:14


Das ist ein Rundungsproblem, das in der pgf/tikz-Anleitung bei der Erklärung zu \foreach in Abschnitt 83 (derzeit Seite 902) sogar ausdrücklich erwähnt ist. Man kann das Problem aber mit \pgfmathprintnumber lösen:

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

\begin{document}

\begin{tikzpicture}[
%font=\footnotesize, 
>=latex, 
scale=0.65,
x=10cm, y=10cm, 
]

%KoSy
%Gitternetzlinien
%\draw[very thin,color=gray] (-2,-4) grid (3,4);
%Achsen
\draw[->] (-0.05,0) -- (1.075,0) node[right, below] {Re};
\draw[->] (0,-0.05) -- (0,1.075) node[above, left] {Im};
%Achsenbeschriftung
%Zahlen auf x-Achse
\foreach \x in {0.1,0.2,...,1} {
  \pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=1}
  \draw (\x,2pt) -- (\x, -2pt) node[below, font=\footnotesize] {$\pgfmathprintnumber{\x}$};
}

%Zahlen auf y-Achse
\foreach \y in {0.1,0.2,...,1.0} {
  \pgfkeys{/pgf/number format/.cd,fixed,fixed zerofill,precision=1}
  \draw (2pt,\y) -- (-2pt,\y) node[left, font=\footnotesize]{$\pgfmathprintnumber{\y}$};
}

%Ursprung
\node[below left] {$0$};

%Funktionen
\def\a{0.3482759645}
\def\b{0.6517240354}

\coordinate(O) at (0,0);
\coordinate(Z) at (\a,\b);
\coordinate(W) at (\b,\a);
\coordinate(ZplusW) at (\a+\b,\b+\a);
\coordinate(absZi) at (0,\a^2+\b^2);

%z=a+ib
\draw[red, thick, ->] (O) -- (Z) node[sloped, above, midway, text=black, font=\sffamily]{(a1)} node[left]{$z$};
\end{tikzpicture}

\end{document}

Korrekte Abbildung

Ohne die Einstellung einer festen Anzahl an Nachkommastellen einschließlich Füllung mit Nullstellen via \pgfkeys würde übrigens die 1 ohne Nachkommastelle ausgegeben. Wenn es für alle ausgegebenen Zahlen gelten soll, kann man das auch einmal global machen.

Ich habe in dem Beispiel außerdem die Fallunterscheidung, ob \x bzw. \y Null ist entfernt, da der Wertebereich jeweils von 0,1 bis 1 geht und somit Null nicht im Wertebereich liegt und daher der getestete Sonderfall nie auftreten kann.

Permanenter link

beantwortet 13 Nov '15, 01:57

saputello's gravatar image

saputello
18.4k22352

bearbeitet 13 Nov '15, 02:03

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 Nov '15, 17:45

Frage wurde angeschaut: 1,330 Mal

Zuletzt aktualisiert: 13 Nov '15, 02:03