我正在使用这种方法为 PGFplots 定义分段函数并希望明确定义端点处的函数值为 1,而不是 0。当我将<
中的更改为时,我得到and
<=
计量单位非法(插入 pt)
此 MWE产生此输出(1,1)
但正常工作时应该有黑色圆圈。
\documentclass{article}
\usepackage{amsmath}
\usepackage{pgfplots}
\newcommand{\pLabel}{
$p(x)=
\begin{cases}
x & 0 < x {\textcolor{red}{{}\leq{}}} 1\\
0 & \text{otherwise}
\end{cases}$
}
\tikzstyle{MyStyle}=[domain=-0.5:1.5, samples=100, ultra thick,blue]
\tikzstyle{pLabelStyle}=[above, yshift=25ex, xshift=-28ex]
\pgfmathdeclarefunction{p}{1}{%
\pgfmathparse{(and(#1>0, #1<1)*#1)}% This compiles with the "<"
%\pgfmathparse{(and(#1>0, #1<=1)*#1)}% This is what I want: note the "<="
}
% Compute point of interest
\newcommand*{\XValue}{1}%
\pgfmathsetmacro{\QatXValue}{p(\XValue)}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[MyStyle]{p(x)} node [pLabelStyle] {\pLabel};
\fill (axis cs: \XValue,\QatXValue) circle (4pt)
node [right, yshift=1.0ex] {$(1,p(1))$};
\end{axis}
\end{tikzpicture}
\end{document}
有简单的解决办法吗?
答案1
此问题类似于在 pgfmath 中使用 ifthenelse:这是 fpu 库的问题。作为解决方法,您可以定义一个新函数,该函数仅对该less
函数取反。您可以将这个新函数分配给运算符,例如!>
“不大于”(与“小于或等于”相同):
\documentclass{article}
\usepackage{amsmath}
\usepackage{pgfplots}
\newcommand{\pLabel}{
$p(x)=
\begin{cases}
x & 0 < x {\textcolor{red}{{}\leq{}}} 1\\
0 & \text{otherwise}
\end{cases}$
}
\tikzstyle{MyStyle}=[domain=-0.5:1.5, samples=100, ultra thick,blue]
\tikzstyle{pLabelStyle}=[above, yshift=25ex, xshift=-28ex]
\pgfmathdeclarefunction{floatnotgreater}{2}{%
\pgfmathparse{!(#1>#2)}%
}
\pgfmathdeclareoperator{!>}{floatnotgreater}{2}{infix} {250}
\pgfmathdeclarefunction{p}{1}{%
\pgfmathparse{(and(#1>0, #1!>1)*#1)}%
}
% Compute point of interest
\newcommand*{\XValue}{1}%
\pgfmathsetmacro{\QatXValue}{p(\XValue)}
\begin{document}
\begin{tikzpicture}
\begin{axis}
\addplot[MyStyle]{p(x)} node [pLabelStyle] {\pLabel};
\fill (axis cs: \XValue,\QatXValue) circle (4pt)
node [right, yshift=1.0ex] {$(1,p(1))$};
\end{axis}
\end{tikzpicture}
\end{document}