我正在使用 tikz 来帮助我工作。我想制作一份考试成绩单,其中每个学生都有不同的数字结果(有一个自由参数,即每个学生的字母顺序)。通常它可以工作,但有时 tikz 无法评估某些结果。通常是在数字很大的时候。我有以下消息
!尺寸太大。\pgfmath@x l.97 } 我无法处理大于 19 英尺的尺寸。继续,我将使用我能使用的最大值。
这来自以下代码
\documentclass{article}
\usepackage{tikz}
\PreviewEnvironment{tikzpicture}
\setlength\PreviewBorder{1pt}%
\begin{document}
\begin{tikzpicture}
\pgfmathsetseed{5511}
\node[scale=3]at(6,26){Soluzioni primo esercizio};
\node[scale=2]at(6,25){$\alpha$};
\node[scale=2]at(8,25){$v_0$};
\node[scale=2]at(10,25){$y_{max}$};
\node[scale=2]at(12,25){$x_{max}$};
\foreach \k/\nome in {1...25}
{
\pgfmathsetmacro{\y}{(25-\k)}
\node[]at(0,\y){\nome};
\node[]at(2,\y){$\gamma=\k$};
\pgfmathsetmacro{\g}{9.81}
\pgfmathsetmacro{\tvolo}{72}
\pgfmathsetmacro{\angolo}{18*\k/5}
\pgfmathsetmacro{\vzero}{\tvolo*\g/(2*sin(\angolo))}
\pgfmathsetmacro{\seno}{sin(\angolo)}
\pgfmathsetmacro{\ymax}{\vzero*\vzero*sin(\angolo)*sin(\angolo)/(2*\g)}
\pgfmathsetmacro{\xmax}{\vzero*\vzero*sin(2*\angolo)/\g}
\node[]at(6,\y){$\angolo^\circ$};
\node[]at(8,\y){$\vzero$};
\node[]at(10,\y){$\ymax$};
\node[]at(12,\y){$\xmax$};
}
\end{tikzpicture}
\end{document}
Tikz 无法计算 y_max(最大高度)和 x_max(水平位移),特别是当 k=1 时,必须找到
- 角度 = 3.5999°
- 初速度 = 5624.58 米/秒
- y_max = 6356 米
- x_max = 404209 米
但 tikz 却无法重现正确的结果。为什么?
答案1
的数值能力pgf
有限,您可能超出了限制。但是xfp
,包及其\fpeval
可以处理更大的数字。下面是一个相当简单的实现。我还曾经siunitx
打印过这些值,并稍微改变了节点的坐标。
\documentclass{standalone}
\usepackage{tikz}
\usepackage{xfp} % for fpeval
\usepackage{siunitx} % for \num, number printing
\begin{document}
\begin{tikzpicture}[y=0.7cm]
\sisetup{
round-mode=places,
round-precision=1
}
\pgfmathsetseed{5511}
\node[scale=3]at(5.5,26.5){Soluzioni primo esercizio};
\node[scale=2]at(3,25){$\alpha$};
\node[scale=2]at(5,25){$v_0$};
\node[scale=2]at(7.4,25){$y_{\max}$};
\node[scale=2]at(10,25){$x_{\max}$};
\foreach \k/\nome in {1,...,25}
{
\pgfmathsetmacro{\y}{(25-\k)}
\node at (0,\y){\nome};
\node at (1,\y){$\gamma=\k$};
\pgfmathsetmacro{\g}{9.81}
\pgfmathsetmacro{\tvolo}{72}
\edef\angolo{\fpeval{18*\k/5}}
\edef\vzero{\fpeval{\tvolo*\g/(2*sind(\angolo))}}
\edef\seno{\fpeval{sind(\angolo)}}
\edef\ymax{\fpeval{\vzero*\vzero*sind(\angolo)*sind(\angolo)/(2*\g)}}
\edef\xmax{\fpeval{\vzero*\vzero*sind(2*\angolo)/\g}}
\node [left] at (3.5,\y) {$\SI{\angolo}{\degree}$};
\node [left] at (5.5,\y) {$\num{\vzero}$};
\node [left] at (8,\y) {$\num{\ymax}$};
\node [left] at (11,\y) {$\num{\xmax}$};
}
\end{tikzpicture}
\end{document}