使用 pgf 的用户定义数学函数

使用 pgf 的用户定义数学函数

我正在尝试使用 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

您的代码对我而言只需要进行一些小的改动就可以了:

  1. 代替gtermdenom使用\gterm\denom
  2. 在定义中使用{}保护。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}

相关内容