用循环(\foreach)定义的函数使 tikz 图片走得很远

用循环(\foreach)定义的函数使 tikz 图片走得很远

在以下 MWE 中,tikz 图片超出了纸张范围。当我用更大的数字替换 10 时,图片会进一步向右移动。有什么想法吗?

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}

\pgfmathdeclarefunction{myfunction}{1}{
    \let\x\pgfmathresult
    \pgfmathsetmacro\ret{0}
    \foreach \i in {1,...,10}{
        \pgfmathsetmacro\ret{\ret + \x^\i}
        \xdef\ret{\ret}
    }
    \pgfmathparse{\ret}
}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[axis lines=middle, domain=-1:1]
        \addplot[domain=-1:1, blue, samples=10] {myfunction(x)};
    \end{axis}
\end{tikzpicture}

\end{document}

答案1

正如评论中提到的,添加百分号。(由于 TeX 规则,在这种情况下可以省略其中一个百分号而不会造成任何损害,但在这种特殊情况下,也可以全部保留百分号。)

\documentclass{article}

\usepackage{tikz}
\usepackage{pgfplots}

\pgfmathdeclarefunction{myfunction}{1}{%
    \let\x\pgfmathresult
    \pgfmathsetmacro\ret{0}%
    \foreach \i in {1,...,10}{%
        \pgfmathsetmacro\ret{\ret + \x^\i}%
        \xdef\ret{\ret}%
    }%
    \pgfmathparse{\ret}%
}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[axis lines=middle, domain=-1:1]
        \addplot[domain=-1:1, blue, samples=10] {myfunction(x)};
    \end{axis}
\end{tikzpicture}

\end{document}

或者使用 expl3 语法,但这会忽略所有空间并做了一些其他的改变,所以请确保您知道自己在做什么。

\ExplSyntaxOn
\pgfmathdeclarefunction{myfunction}{1}{
    \let\x\pgfmathresult
    \pgfmathsetmacro\ret{0}
    \foreach \i in {1,...,10}{
        \pgfmathsetmacro\ret{\ret + \x^\i}
        \xdef\ret{\ret}
    }
    \pgfmathparse{\ret}
}
\ExplSyntaxOff

相关内容