LaTeX tikz 绘图命令,缺失数字,视为零。,具有复杂的功能

LaTeX tikz 绘图命令,缺失数字,视为零。,具有复杂的功能

我想用 LaTeX 中的 plot 命令绘制一些物理图。然而,我在旅途中遇到了多个问题,目前陷入了困境。也许我太过苛刻地挑战了 tikz 的计算能力,但你永远不知道......我使用这种方法而不是 pgfplot 的 axis 和 \addplot 方法,因为在我看来,这种方法更具可定制性。我希望得到一些帮助。谢谢 <3(我包含了我的代码和所需的结果,用 Python 绘制。希望它能有所帮助。)

\documentclass[12pt, a4paper]{article}
\usepackage{amsmath, tikz, pgfplots, xfrac, pst-calculate}
\usepackage[top=1in, bottom=1in, left=1.25in, right=1.25in]{geometry}
\pagestyle{empty}
\pgfplotsset{compat=1.18}
\usetikzlibrary {arrows.meta}
\tikzset{every picture/.style={line width=0.25mm}}

\def\b{2.9}

%domain x1, x2, func
\newcommand{\myplot}[3]{
    \fill [pink, domain=#1:#2, variable=\x]
    (#1, 0)
    -- plot ({\x},{#3})
    -- (#2, 0)
    -- cycle;
    \draw [domain=#1:#2, variable=\x] plot ({\x},{#3});}


\begin{document}
\centering
\begin{tikzpicture}    
    \node at (0,1) {\pscalculate{(11948079.123643*((\b/2)*0.01)**2 - 2512.08363574594)/1000}};
    \node at (0,0) {\pscalculate{(11948079.123643*((\b/2-\b/6)*0.01)**2 - 2512.08363574594)/1000}};

\begin{scope}[xshift=6.5cm]
    \begin{scope}[rotate=90]%this is the problematic part:
        \myplot{\b/2}{\b/2-\b/6}{(11948.079123643*(\x*0.01)**2 - 2.51208363574594)}
    \end{scope}

    %axis
    \draw[-{Stealth}] (-1.5,0)--(1.5,0) node[right] {$\sigma_{krit}^{(1)}$[MPa]};
    \draw[-{Stealth}] (0,-2)--(0,2.5) node[left] {$z$};

    %ticks
    \foreach \x in {-1,0.5}
        \draw[xshift={\x cm}, line width=0.1mm] (0,-0.05)--(0,0.05) node[below=0.05] {$\pscalculate{\x*10}$};

    \foreach \x in {-0.5,1}
        \draw[xshift={\x cm}, line width=0.1mm] (0,-0.05)--(0,0.05) node[above=0.05] {$\pscalculate{\x*10}$};
\end{scope}

\end{tikzpicture}
\end{document}

在此处输入图片描述

更新: 以下代码对我有用:

\myplot{\b/2}{\b/2-\b/6}{(1.1948079123643*(\x)^2 - 2.51208363574594)}

在此处输入图片描述

看来我之前的方法的问题在于用了“**”而不是“^”符号。话虽如此,如果你编译下面的代码,你会得到一个奇怪的函数,它会生成一个阶梯状的图形。也许它太小了,以至于达到了 tikz 计算能力的极限。

\myplot{\b/2}{\b/2-\b/6}{(11948.079123643*(\x*0.01)^2 - 2.51208363574594)}

在此处输入图片描述 另外,我想指出的是,我没有重新绑定 \b 宏,只是因为我是个懒人,你不应该做这样的事情。谢谢你的帮助<3

答案1

我不知道您的代码想要做什么。结果似乎与您显示的图像不相关。但是,可以诊断并纠正直接问题(即错误)的原因。

**从语法上来说可以接受expl3,但 是不可接受的pgf。当你在前两个节点中使用\pst{}输出结果时,没有问题,但当你来绘制图表时,你要求pgf计算函数,而 的使用**会导致错误。

解决方案很简单,用 替换**,因为和^都支持。然后你的代码就可以编译了。expl3pgf

您还应该不是say\def\b会覆盖标准 LaTeX 宏\b。如果必须使用\def,请尝试在 内使用它,tikzpicture这样潜在危害的范围会受到限制。或者\newcommand\name{}在 之前使用\def\name{},这样如果 已经使用,您至少会收到错误\name。一般来说,应避免在受限制的自限上下文之外使用单字母宏。

您不使用pgfplots,因此请将其删除,除非您需要它用于其他用途。

从有限的意义上来说,这是“有效”的代码:(1) 编译时没有错误,并且 (2) 不会 --- 据我所知 --- 覆盖任何现有的 LaTeX 或 TeX 宏。

\documentclass[12pt, tikz]{standalone}
\usepackage{amsmath, pst-calculate}
\usetikzlibrary {arrows.meta}
\tikzset{every picture/.style={line width=0.25mm}}
\newcommand\bnew{}% check the name isn't used
\def\bnew{2.9}% if we didn't get an error, we know this is safe
% \newcommand\bnew{2.9}% two-for-one special

%domain x1, x2, func
\newcommand{\myplot}[3]{%
    \fill [pink, domain=#1:#2, variable=\x]
    (#1, 0)
    -- plot ({\x},{#3})
    -- (#2, 0)
    -- cycle;
    \draw [domain=#1:#2, variable=\x] plot ({\x},{#3});}

\begin{document}
\centering
\begin{tikzpicture}    
  \node at (0,1) {\pscalculate{(11948079.123643*((\bnew/2)*0.01)^2 - 2512.08363574594)/1000}};% keep syntax consistent
  \node at (0,0) {\pscalculate{(11948079.123643*((\bnew/2-\bnew/6)*0.01)^2 - 2512.08363574594)/1000}};
  
  \begin{scope}[xshift=6.5cm]
    \begin{scope}[rotate=90]% replace unrecognised syntax
      \myplot{\bnew/2}{\bnew/2-\bnew/6}{(11948.079123643*(\x*0.01)^2 - 2.51208363574594)}
    \end{scope}
    
    %axis
    \draw[-{Stealth}] (-1.5,0)--(1.5,0) node[right] {$\sigma_{krit}^{(1)}$[MPa]};
    \draw[-{Stealth}] (0,-2)--(0,2.5) node[left] {$z$};
    
    %ticks
    \foreach \x in {-1,0.5}
    \draw[xshift={\x cm}, line width=0.1mm] (0,-0.05)--(0,0.05) node[below=0.05] {$\pscalculate{\x*10}$};
    
    \foreach \x in {-0.5,1}
    \draw[xshift={\x cm}, line width=0.1mm] (0,-0.05)--(0,0.05) node[above=0.05] {$\pscalculate{\x*10}$};
  \end{scope}
\end{tikzpicture}
\end{document}

幸运的是,由于 Okular 的一个错误,我现在无法发布图片,这让它们都很糟糕。但是,在这种情况下,相信我,你不会错过任何东西,因为结果看起来与目标完全不同(甚至不像一个过于乐观的愿望)。

相关内容