创建包含 tikz 环境的新环境

创建包含 tikz 环境的新环境

我想创建一个新的环境,以便简化绘图过程。它应该能够做到以下几点:

\begin{graph}
\addplot [domain=-10:10, samples=1000]{x)};
\end{graph}

因此轴是预定义的,我所要做的就是添加我想要的图。

到目前为止,我尝试了以下操作,但均未成功

\newenvironment{graph}[3]{\begin{tikzpicture}\begin{axis}[
width=8cm,  xlabel={  $ #1 $ },ylabel={$ #2 $},axis x line=left, axis y line=left, 
title={$#3 $}, xmin = 0,xmax = 10,ymin = 0,ymax = 10, xtick=\empty, ytick=\empty] 
{\end{axis}\end{tikzpicture}}

答案1

您使用三个参数定义环境,但调用时却不使用任何参数。这行不通。此外,定义中缺少一个右括号。如果您只使用一个可选参数(参见{othergraph}定义),将选项直接传递给{axis}环境,那么灵活性会更高。

\documentclass{article}

\usepackage{pgfplots}

\newenvironment{graph}[3]{%
    \begin{tikzpicture}
    \begin{axis}[
        width=8cm,
        xlabel={$#1$},
        ylabel={$#2$},
        axis x line=left,
        axis y line=left,
        title={$#3 $},
        xmin = 0,
        xmax = 10,
        ymin = 0,
        ymax = 10,
        xtick=\empty,
        ytick=\empty,
    ]
}
{
    \end{axis}
    \end{tikzpicture}%
}

\newenvironment{othergraph}[1][]{%
    \begin{tikzpicture}
    \begin{axis}[
        width=8cm,
        axis x line=left,
        axis y line=left,
        xmin = 0,
        xmax = 10,
        ymin = 0,
        ymax = 10,
        xtick=\empty,
        ytick=\empty,
        #1
    ]
}
{
    \end{axis}
    \end{tikzpicture}%
}

\begin{document}
\begin{graph}{x}{f(x)}{f(x)=x}
    \addplot [domain=-10:10, samples=1000] {x};
\end{graph}

\begin{othergraph}[
    title={My Graph},
    xlabel={$x$},
    ylabel={$f(x)$},
]
    \addplot [domain=-10:10, samples=1000] {x};
\end{othergraph}
\end{document}

顺便说一句,缩进和换行代码和定义有助于找到缺失的括号 ;-)

答案2

Tobi 已经给出了你问题的确切答案,但你可能想看看另一种方法。

最大的好处之一tikzpgfplots它们允许用户创建样式在序言中,可以在整个文档中使用。具体来说,您可以在序言中使用以下代码:

\pgfplotsset{
    every axis/.append style={
        width=8cm,
        xlabel={$x$},
        ylabel={$y$},
        axis x line=left,
        axis y line=left,
        xmin = 0,
        xmax = 10,
        ymin = 0,
        ymax = 10,
        xtick=\empty,
        ytick=\empty,
    }
}

这将是默认应用到每一个 axis环境。当然,您可以在本地覆盖任何或所有这些设置;例如,

\begin{tikzpicture}
    \begin{axis}[
            title={My Graph},
            ylabel={$f(x)$},
        ]
        \addplot [domain=-10:10, samples=1000] {x};
    \end{axis}
\end{tikzpicture}

鼓励使用这种方法 - 它简化了代码的可读性,并且读者可以立即看出你正在使用pgfplots包;在您自己的自定义环境中“隐藏”axistikzpicture环境可能会在将来让一些读者感到困惑。

% arara: pdflatex
% !arara: indent: {overwrite: on}
\documentclass{article}

\usepackage{pgfplots}

\pgfplotsset{
    every axis/.append style={
        width=8cm,
        xlabel={$x$},
        ylabel={$y$},
        axis x line=left,
        axis y line=left,
        xmin = 0,
        xmax = 10,
        ymin = 0,
        ymax = 10,
        xtick=\empty,
        ytick=\empty,
    }
}

\begin{document}

\begin{tikzpicture}
    \begin{axis}[
            title={My Graph},
            ylabel={$f(x)$},
        ]
        \addplot [domain=-10:10, samples=1000] {x};
    \end{axis}
\end{tikzpicture}
\end{document}

相关内容