
Ich möchte mir folgendes zulegen:
Ich habe versucht, es ifthenelse
„inside“ zu verwenden foreach
, aber ich erhalte eine Fehlermeldung: Missing number, treated as zero. <to be read again> = l.9 }
.Hieresdd sagt: „ \ifthenelse
ist „normaler“ LaTeX-Code. Daher können Sie diesen Befehl nicht innerhalb einer TikZ-Pfadspezifikation verwenden.“ Ich weiß jedoch nicht, wie ich das Problem beheben kann. Hier ist mein Code:
\documentclass[border=0.2cm]{standalone}
\usepackage{tikz}
\usepackage{ifthen}
\begin{document}
\begin{tikzpicture}
\foreach \y in {0,0.2,0.4,...,1.6}{
\ifthenelse{\y==1.6}{\draw [thin,-latex] (-0.8,1.6) -- (-0.3,1.6) node [above,midway] {U};}{\draw [thin,-latex] (-0.8,\y) -- (-0.3,\y);}
}
\end{tikzpicture}
\end{document}
Antwort1
Sie können sicherlich verwenden \ifthenelse
, aber
- Der Test vergleicht nur Integer
- Es wird ein einziges
=
- wenn TikZ auf 1,6 kommt, sieht es es tatsächlich als 1,59998
Verwenden Sie ganze Zahlen und dann:
\documentclass[border=0.2cm]{standalone}
\usepackage{tikz}
\usepackage{ifthen}
\begin{document}
\begin{tikzpicture}
\foreach \y in {0,2,4,...,16}{
\ifthenelse{\y = 16}
{\draw [thin,-latex] (-0.8,1.6) -- (-0.3,1.6) node [above,midway] {U}}
{\draw [thin,-latex] (-0.8,\y/10) -- (-0.3,\y/10)}
;
}
\end{tikzpicture}
\end{document}
Antwort2
Ein alternativer Ansatz wäre die Standardkonstruktion \ifnum
in Kombination mit \pgfmathparse
. Beachten Sie, dass Sie eine Toleranz angeben müssen, da 1,6 ein Float ist. Eine einfache \pgfmathparse{\y == 1.6 ? int(1) : int(0)}
würde nicht funktionieren.
Hier ist die komplette Lösung:
\documentclass[border=0.2cm]{standalone}
\usepackage{tikz}
\begin{document}
\begin{tikzpicture}
\foreach \y in {0,0.2,0.4,...,1.6}{
\pgfmathparse{abs(\y - 1.6) < 0.001 ? int(1) : int(0)}
\ifnum\pgfmathresult=1
\draw [thin,-latex] (-0.8,\y) -- (-0.3,\y) node [above,midway] {U};
\else
\draw [thin,-latex] (-0.8,\y) -- (-0.3,\y);
\fi
}
\end{tikzpicture}
\end{document}
Antwort3
Die obligatorische xintexpr
Lösung. Dieses Mal erspare ich euch das \xintFor
, da \foreach
es zu ehrwürdig ist.
Ich weiß nicht, wie ich sagen kann, \foreach
dass zuerst das Listenargument erweitert werden soll, daher muss ich zunächst auf das Gerät TikZ
mit einer Definition aus dem Handbuch zurückgreifen \mylist
.
Die hier beschriebene Methode ist für kompliziertere Situationen gedacht, in denen Festkommaoperationen exakt sein müssen.
\documentclass[border=0.2cm]{standalone}
\usepackage{tikz}
\usepackage{xintexpr}
\begin{document}
\begin{tikzpicture}
\edef\mylist{\xinttheiexpr [1] 0..[+0.2]..1.6\relax}%
% (The [1] is to tell it to use fixed point notation
% with one digit after decimal mark, and this expands to
% 0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6 )
%
\foreach \y in \mylist
{%
\xintifboolexpr{\y = 1.6}
{\draw [thin,-latex] (-0.8,1.6) -- (-0.3,1.6) node [above,midway] {U}}
{\draw [thin,-latex] (-0.8,\y) -- (-0.3,\y)}
;
}
\end{tikzpicture}
\end{document}