我正在尝试使用 pgf 中的用户定义数学函数来绘制图表。该图将由三个参数的函数给出的几条直线组成。(我知道有更简单的方法可以做到这一点,但我需要对图表进行大量注释,而 TikZ 非常适合。)下面的 MWE 说明了我正在尝试做的事情:
\documentclass[10pt]{article}
\usepackage{tikz}
\usepackage[active,tightpage]{preview}
\PreviewEnvironment{tikzpicture}
\pgfmathdeclarefunction{r51}{3}{%
\pgfmathsetmacro{gterm}{(#1+1.0)/(2.0*#1)}%
\pgfmathsetmacro{denom}{1.0+gterm*(#2-1.0)}%
\pgfmathparse{(1.0+0.5*(#2-1.0))*#3/denom+((#2-1.0)/(2.0*#1)/denom)}%
}
\newcommand{\drawline}[4]{
\draw (#3,r51(#1,#2,#3))--(#4,r51(#1,#2,#4));
}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
% axis limits
\def\xamin{- 0.25}
\def\yamin{- 0.25}
\def\xamax{ 8.25}
\def\yamax{ 7.25}
% draw grid
\draw[very thin,color=gray] (\xamin,\yamin) grid (\xamax,\yamax);
% draw axes
\draw[->] (\xamin,0.0) -- (\xamax,0.0) node[right] {$x$};
\draw[->] (0.0,\yamin) -- (0.0,\yamax) node[above] {$y$};
% draw first line
\drawline{1.4}{1.5}{0.1}{1.67}
\end{tikzpicture}
\end{document}
当我运行它时,出现以下错误:
! Missing control sequence inserted.
<inserted text>
\inaccessible
l.31 \drawline{1.4}{1.5}{0.1}{1.67}
我确信这是一个相当基本的问题,但我找不到任何其他例子可以给我提供如何修复它的线索。感谢您的帮助。
答案1
您的代码对我而言只需要进行一些小的改动就可以了:
- 代替
gterm
和denom
使用\gterm
和\denom
。 - 在定义中使用
{
和}
保护。r51(a,b,c)
\drawline
如果我理解了你的 定义r51
,那么得到一个简单的形式就更容易了。我把它叫做r52
。它们看起来一样。
\documentclass{standalone}
\usepackage{tikz}
\pgfmathdeclarefunction{r51}{3}{%
\pgfmathsetmacro{\gterm}{(#1+1.0)/(2.0*#1)}%
\pgfmathsetmacro{\denom}{1.0+\gterm*(#2-1.0)}%
\pgfmathparse{(1.0+0.5*(#2-1.0))*#3/\denom+((#2-1.0)/(2.0*#1)/\denom)}%
}
\newcommand{\drawline}[4]{
\draw (#3,{r51(#1,#2,#3)})--(#4,{r51(#1,#2,#4)});
}
\pgfmathdeclarefunction{r52}{3}{%
\pgfmathparse{(#1*#2*#3+#1*#3+#2-1.0)/(#1+#1*#2+#2-1.0)}%
}
\begin{document}
\thispagestyle{empty}
\begin{tikzpicture}
% axis limits
\def\xamin{- 0.25}
\def\yamin{- 0.25}
\def\xamax{ 8.25}
\def\yamax{ 7.25}
% draw grid
\draw[very thin,color=gray] (\xamin,\yamin) grid (\xamax,\yamax);
% draw axes
\draw[->] (\xamin,0.0) -- (\xamax,0.0) node[right] {$x$};
\draw[->] (0.0,\yamin) -- (0.0,\yamax) node[above] {$y$};
% draw first line
\drawline{1.4}{1.5}{0.1}{1.67}
\draw[red] (0.1,{r52(1.4,1.5,0.1)})--(1.67,{r52(1.4,1.5,1.67)});
\end{tikzpicture}
\end{document}