TikZ 中的 ifthenelse:不起作用

TikZ 中的 ifthenelse:不起作用

我想要得到这个:

在此处输入图片描述

我尝试使用ifthenelse内部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 是浮点数,因此必须提供公差。简单的方法\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}

相关内容