TiKz и \pgfmathifthenelse

TiKz и \pgfmathifthenelse

Кто-нибудь знает, почему при использовании следующего кода моя синяя линия не переходит из точки (0,0) в точку (0.5,0)?

По моему мнению, абсциссу 1 следует умножить на 0,5, что определено как \pgfmathresult, результат условия \pgfmathifthenelse, но это не так...

\documentclass{standalone}
\usepackage{tikz}
\usepackage{pgfplots}
\usetikzlibrary{positioning}
\usetikzlibrary{calc}

\newcommand{\origin}{
\node (O) at (0,0){$\times$};
\node at (1,0){$\times$};
\node at (O){O};}

\begin{document}
\begin{tikzpicture}
\origin
\pgfmathifthenelse{1}{"0.5*"}{}
\draw[blue] (0,0)--++(\pgfmathresult1,0);
\end{tikzpicture}
\end{document}

решение1

Я бы определенно держался подальше от такого использования, но здесь проблема в том, что \pgfmathresultопределение не выживает так долго. Поэтому его текущее значение нужно использовать быстро. Потому что многие команды рисования также используют его внутренне.

\pgfmathsetmacro\mytemp{ifthenelse(1,"0.5*",)};
\draw[blue] (0,0)--++(\mytemp1,0);

работает. Вместо этого гораздо более интуитивно понятный и также без какого-либо расширения-проблемного кода

\pgfmathsetmacro\mytemp{ifthenelse(1,0.5,1)};
\draw[blue] (0,0)--++(\mytemp*1,0);

Это также эквивалентно

 \draw[blue] (0,0) --++({ifthenelse(1,0.5,1)*(1cm)},0);

введите описание изображения здесь

Связанный контент