我想用 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)}
答案1
我不知道您的代码想要做什么。结果似乎与您显示的图像不相关。但是,可以诊断并纠正直接问题(即错误)的原因。
**
从语法上来说可以接受expl3
,但 是不可接受的pgf
。当你在前两个节点中使用\pst{}
输出结果时,没有问题,但当你来绘制图表时,你要求pgf
计算函数,而 的使用**
会导致错误。
解决方案很简单,用 替换**
,因为和^
都支持。然后你的代码就可以编译了。expl3
pgf
您还应该不是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 的一个错误,我现在无法发布图片,这让它们都很糟糕。但是,在这种情况下,相信我,你不会错过任何东西,因为结果看起来与目标完全不同(甚至不像一个过于乐观的愿望)。