在 pgfplotsset 中进行数学运算

在 pgfplotsset 中进行数学运算

我正在声明一个环境来帮助绘制二项分布。赋予此类函数的自然参数之一是“n”,即试验次数。但是,我的绘图函数需要绘制 0 .. n-1 个样本。我发现我无法在 pgfplotsset 中执行“-1”。有人能帮我做这个吗?MWE:

\documentclass{minimal}

\usepackage{pgfplots}

\newenvironment{BinomDist}[1]{%                                                 
  \pgfplotsset{DistAxis/.style={%                                               
      samples at={0,...,#1} % Want this to say ``#1-1'' or equiv.               
    }
  }
}{}

\begin{document}

\begin{BinomDist}{8}
  \begin{tikzpicture}
    \begin{axis}[DistAxis]
      \addplot [draw=black] {x};
    \end{axis}
  \end{tikzpicture}
\end{BinomDist}

\end{document}

答案1

这很简单:samples at={0,...,\the\numexpr#1-1}

\documentclass{article}
\usepackage{pgfplots}
%\pgfplotsset{compat=1.16} %<-consider using this
\newenvironment{BinomDist}[1]{%                                                 
  \pgfplotsset{DistAxis/.style={%                                               
      samples at={0,...,\the\numexpr#1-1} 
    }
  }
}{}

\begin{document}

\begin{BinomDist}{8}
  \begin{tikzpicture}
    \begin{axis}[DistAxis]
      \addplot [draw=black] {x};
    \end{axis}
  \end{tikzpicture}
\end{BinomDist}

\end{document}

在此处输入图片描述

顺便说一句,请考虑不要使用该类minimal,并指明版本。

对于更复杂的情况,您可能需要code使用\pgfmathtruncatemacro

\documentclass{article}
\usepackage{pgfplots}
\pgfplotsset{compat=1.16} %<-consider using this
\newenvironment{BinomDist}[1]{%                                                 
  \pgfplotsset{DistAxis/.code={%   
    \pgfmathtruncatemacro{\iMax}{pow(2,#1-1)}%
     \pgfplotsset{samples at={0,...,\iMax}}%
    }
  }
}{}

\begin{document}

\begin{BinomDist}{8}
  \begin{tikzpicture}
    \begin{axis}[DistAxis]
      \addplot [draw=black] {x};
    \end{axis}
  \end{tikzpicture}
\end{BinomDist}
\end{document}

相关内容