TikZ 内の ifthenelse: 動作しない

TikZ 内の ifthenelse: 動作しない

これを入手したいです:

ここに画像の説明を入力してください

ifthenelseinsideを使用しようとしましたforeachが、エラーが発生しました: Missing number, treated as zero. <to be read again> = l.9 }ここesdd は\ifthenelse「通常の」LaTeX コードです。したがって、このコマンドを TikZ パス指定内で使用することはできません。」と言いますが、この問題を解決する方法がわかりません。これが私のコードです:

\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}

答え1

は確かに使えます\ifthenelseが、

  1. テストは整数のみを比較する
  2. 単一の=
  3. TikZが1.6になると、実際には1.59998として認識されます。

整数を使用する場合は、次のようになります。

\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}

ここに画像の説明を入力してください

答え2

\ifnum別の方法としては、 と組み合わせた標準構造があります\pgfmathparse。1.6 は float なので、許容値を指定する必要があることに注意してください。単純な は\pgfmathparse{\y == 1.6 ? int(1) : int(0)}機能しません。

完全な解決策は次のとおりです。

\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}

答え3

必須の解決策。今回は、あまりにも由緒あるので、xintexpr皆さんには省略します。\xintFor\foreach

最初にリスト引数を展開する方法がわからないため、最初に定義のあるマニュアル\foreachのデバイスに頼る必要があります。TikZ\mylist

ここでの方法は、固定小数点演算が正確でなければならない、より複雑な状況向けです。

\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}

関連情報