我想在 latex 中执行一些计算,以便构建一个可以重复用于不同输入的图表。具体来说,它与绘制连接两个点的线和相对于这些点的弧有关。
我发现很难找到进行计算的语法,因为大多数人感兴趣的是如何生成符号来表示方程式,而不是实际进行计算。
我实际上需要这两点。
但一般来说,哪里是寻找在乳胶中编写数学函数的技巧的好地方(而不是使用乳胶来打印好看的数学方程式)?
具体来说,我想计算连接两点的斜率的反正切,其中这两个点的 x 和 y 值存储在变量中。
例如,
\def\xa{-5}
\def\ya{3}
\def\xb{4}
\def\yb{-4}
\def\rotation{60}
... 可以将这些数字用作节点的 x、y 坐标等,也可以用作节点文本或标签。我可以在 tikzpicture 上下文中对它们进行计算,例如:
\draw [dashed, thick] (\xa, \ya) -- (\xa+4, {(tan(\rotation)*4)+\xa});
但如果我尝试根据对现有变量执行的计算来定义新变量,它只会将结果作为字符串返回给我,而不是执行计算。例如,
\def\trajectoryGradient{(\earthy-\shipy)/(\earthx-\shipx)}
\def\trajectoryDeg{arctan(\trajectoryGradient)}
\node[label=below:{$\trajectoryDeg$}] at (-2, -2){};
...我得到的只是字符串版本,而不是计算结果:
我怎样才能让它在这里进行计算?也许 arctan 不是 latex 命令,但找出是否是这种情况与我的问题的第一部分有关。
答案1
您可以为命名变量设置一个框架。我使用它\?
来“评估变量”。为了打印值,请使用siunitx
功能。
\documentclass{article}
\usepackage{siunitx}
\ExplSyntaxOn
\NewDocumentCommand{\setfp}{mm}
{
\fp_zero_new:c { l_phenomniverse_var_#1_fp }
\fp_set:cn { l_phenomniverse_var_#1_fp } { #2 }
}
\NewExpandableDocumentCommand{\?}{m}
{
\fp_use:c { l_phenomniverse_var_#1_fp }
}
\ExplSyntaxOff
\begin{document}
\setfp{earthx}{-5}
\setfp{earthy}{3}
\setfp{shipx}{4}
\setfp{shipy}{-4}
\setfp{rotation}{60}
\setfp{trajectoryGradient}{(\?{earthy}-\?{shipy})/(\?{earthx}-\?{shipx})}
\setfp{trajectoryDeg}{atan(\?{trajectoryGradient})*180/pi}
\num{\?{trajectoryDeg}}
\num[round-mode=places,round-precision=0]{\?{trajectoryDeg}}
\num[round-mode=places,round-precision=2]{\?{trajectoryDeg}}
\end{document}
答案2
您可以使用Lua(LaTeX)进行计算:
%!TEX program = lualatex
\documentclass{article}
\usepackage[demo]{graphicx}
\usepackage{luacode}
\begin{document}
\newcommand\w{\directlua{tex.sprint(1/3)}}
This is my graph, it has width of \w and it looks very nice
\includegraphics[width=\w\textwidth]{}
\end{document}
示例复制自这里