在 LaTeX 宏中进行数学运算的最佳方法是什么?

在 LaTeX 宏中进行数学运算的最佳方法是什么?

我有兴趣编写一个小的个人包(或者如果它真的有用的话就分享它)来加速三角函数的排版。我想要这样的命令

\triangle{\alpha}{\beta}{\theta}{a}{b}{c}{30}{60}{90}
%% (label angles, label sides, absolute angles) 

反复绘制工作表/笔记所需的简单图形。此外,我还希望在文档中\solvedegtan{24}显示诸如这样的命令。tan(24°) = 0.445

我知道我可能可以使用python.sty(我过去曾经这样做过)来完成此操作,但是让 LaTeX 进行绘图计算(我将在 TikZ 中进行实际绘图)和求解的正确方法是什么?

答案1

以下是基于LuaLaTeX的设置宏的方法\solvedegtan{24}

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\newcommand\solvedegtan[1]{%
    \directlua{ tex.sprint ( math.tan ( math.rad (#1) ) ) }}
\begin{document}
\solvedegtan{24}
\end{document}

在处理对%TeX 和 Lua 来说都是“特殊”的字符(但方式不同)时,可以在使用该\directlua函数时“转义”百分号。但是,从编码角度来看,加载luacode包并设置单独的 Lua 端和 TeX 端代码块通常更方便。(在环境中luacode,只\需要转义(反斜杠)字符。)

以下示例说明了该string.format函数的操作,设置为显示小数点后 5 位数字。(Lua 函数是该函数string.format的前端;因此,如果需要,会应用舍入。)Csprintf

在此处输入图片描述

% !TEX TS-program = lualatex
\documentclass{article}
\usepackage{luacode} % for 'luacode' environment

%% Lua-side code
\begin{luacode}
function solvedegtan(x,prec)
    return( tex.sprint ( 
       string.format( "%."..prec.."f", math.tan ( math.rad (x) ) ) ) )
end
\end{luacode}

%% TeX-side code
\newcommand\solvedegtan[2]{\directlua{ solvedegtan(#1,#2) }}

\begin{document}
\solvedegtan{24}{5}
\end{document}

答案2

pgf加载的数学例程提供tikz纯 LaTeX 计算:

示例输出

\documentclass{article}

\usepackage{tikz}
\newcommand\solvedegtan[1]{\pgfmathparse{tan(#1)}\(
  \tan(#1^\circ) = \pgfmathresult \)}

\begin{document}

\solvedegtan{24}

\end{document}

还有一个你应该研究的定点算术库和一个用于编程构造的数学库。以下是第一个库的示例

样本 FPA

\documentclass{article}

\usepackage{tikz,fp}
\usetikzlibrary{fixedpointarithmetic}

\newcommand\solvedegtan[1]{\pgfkeys{/pgf/fixed point arithmetic}%
  \pgfmathparse{tan(#1)}\(
  \tan(#1^\circ) = \pgfmathresult \)}

\begin{document}

\solvedegtan{24}

\end{document}

以下是使用该tikz math库的原始代码:

\documentclass{article}

\usepackage{tikz}
\usetikzlibrary{math}
\newcommand\solvedegtan[1]{\(
  \tan(#1^\circ) = \tikzmath{ \t = tan(#1); print \t;} \)}

\begin{document}

\solvedegtan{24}

\end{document}

答案3

\solvedegtan你可以在 TeX 需要小数的每个地方使用这个实现,甚至在类似

\setlength{\textheight}{\solvedegtan{60}\textwidth}

以下是代码

\documentclass{article}
\usepackage{xparse}

\ExplSyntaxOn
\DeclareExpandableDocumentCommand{\solvedegtan}{O{5}m}
 {
  \fp_eval:n { round ( tand (#2) , #1 ) }
 }
\ExplSyntaxOff

\begin{document}

$\tan 45^\circ=\solvedegtan{45}$

$\tan 88^\circ=\solvedegtan[2]{88}$

\end{document}

可选参数指定四舍五入的最大小数位数。

在此处输入图片描述

与 Mico 的优秀 LuaTeX 解决方案相比,其优势在于它可以适用于任何 TeX 引擎。

相关内容