我想创建一个新的环境,以便简化绘图过程。它应该能够做到以下几点:
\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 已经给出了你问题的确切答案,但你可能想看看另一种方法。
最大的好处之一tikz
和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,
}
}
这将是默认应用到每一个 axis
环境。当然,您可以在本地覆盖任何或所有这些设置;例如,
\begin{tikzpicture}
\begin{axis}[
title={My Graph},
ylabel={$f(x)$},
]
\addplot [domain=-10:10, samples=1000] {x};
\end{axis}
\end{tikzpicture}
鼓励使用这种方法 - 它简化了代码的可读性,并且读者可以立即看出你正在使用pgfplots
包;在您自己的自定义环境中“隐藏”axis
和tikzpicture
环境可能会在将来让一些读者感到困惑。
% 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}