在 PGF/TikZ 中使用数学函数

在 PGF/TikZ 中使用数学函数

例如,我想使用 ProbXpos 来定位刻度标记和线端。它似乎按我的意图进行计算,但我该如何使用计算出的值?下面的示例打印了一个示例结果值。如果我取消注释注释行,它甚至不会编译。

另外——小问题——有些功能有用吗ln 10?对我来说不起作用。

\documentclass{article} %maybe a better one?
\usepackage{tikz}
\newcommand{\ProbXpos}[1]{\pgfmathparse{ln(#1/(1-#1))/ln 10}\pgfmathresult }
\begin{document}
\begin{tikzpicture}
\draw (0,1) node {\ProbXpos{0.1} result prints ok} ;
%   \draw (\ProbXpos{.0001},0) -- (\ProbXpos{0.999},0) 
%                   node    {cannot use result numerically} ;
\end{tikzpicture}  
\end{document}

答案1

ProbXpos也许您对制作一个可以在坐标内使用的函数感兴趣。

ProbXpos(…)由于括号本身包含括号,因此需要额外的一对括号。

您还可以使用如下定义

\newcommand{\ProbXpos}[1]{{log10(#1/(1-#1))}}

也可以在坐标内部使用。
但无法修改,即(2*\ProbXpos{…}, 0),因为它已经包含括号。

再次,我们可以省略多余的一对括号,但我们需要{ }在坐标中使用。

代碼(declare function变体)

\documentclass[tikz]{standalone}
\begin{document}
\begin{tikzpicture}[declare function={ProbXpos(\x)=log10(\x/(1-\x));}]% could be global …
    \draw (0,1) node {\pgfmathparse{ProbXpos(0.1)}\pgfmathresult\ result prints ok} ;
    \draw ({ProbXpos(.0001)},0) -- ({ProbXpos(0.9999)},0);
\end{tikzpicture}  
\end{document}

代码(PGF 数学函数)

\documentclass[tikz]{standalone}
\makeatletter
\pgfmathdeclarefunction{ProbXpos}{1}{%
    \begingroup
        \pgfmathparse{log10(#1/(1-#1))}%
        \pgf@x=\pgfmathresult pt\relax
        \pgfmathreturn\pgf@x
    \endgroup
}
\makeatother
\begin{document}
\begin{tikzpicture}
    \draw (0,1) node {\pgfmathparse{ProbXpos(0.1)}\pgfmathresult\ result prints ok} ;
    \draw ({ProbXpos(.0001)},0) -- ({ProbXpos(0.9999)},0);
\end{tikzpicture}  
\end{document}

输出(declare function/PGF 数学函数)

在此处输入图片描述

代码(LaTeX 宏)

\documentclass[tikz]{standalone}
\newcommand{\ProbXpos}[1]{log10(#1/(1-#1))}
\begin{document}
\begin{tikzpicture}
    \draw (0,1) node {\ProbXpos{0.1} result prints ok} ;
    \draw ({\ProbXpos{.0001}},0) -- ({\ProbXpos{0.999}},0);
\end{tikzpicture}  
\end{document}

输出(LaTeX 宏)

在此处输入图片描述

答案2

可能存在更多的 tikz 方式,但它可以将分配移出路径语法。

  \documentclass{article} %maybe a better one?
    \usepackage{tikz}
    \newcommand{\ProbXpos}[2]{\pgfmathparse{ln(#2/(1-#2))/ln 10}\let#1\pgfmathresult }
    \begin{document}
    \begin{tikzpicture}
\ProbXpos\tmpa{.0001}
\ProbXpos\tmpb{0.999}
    \draw (0,1) node {\ProbXpos\tmp{0.1}\tmp result prints ok} ;
       \draw (\tmpa,0) -- (\tmpb,0) 
                       node    {cannot use result numerically} ;
    \end{tikzpicture}  
    \end{document}

答案3

Qrrbrbirlbel 解决方案的变体\pgfmath@smuggleone\pgfmathresult

\documentclass{scrartcl}
\usepackage{tikz}
\makeatletter
\pgfmathdeclarefunction{ProbXpos}{1}{%
\begingroup
\pgfmathparse{ln(#1/(1-#1))/ln 10}%
\pgfmath@smuggleone\pgfmathresult
\endgroup 
}%
\makeatother

\begin{document}
\pgfmathparse{ProbXpos(0.999)}\pgfmathresult

\begin{tikzpicture}
\draw (ProbXpos{.0001},0) -- (ProbXpos{0.9999},0)  ;
%or
\draw ({ProbXpos(.0001)},-1) -- ({ProbXpos(0.9999)},-1);
\end{tikzpicture}  
\end{document}

在此处输入图片描述

相关内容