我有兴趣编写一个小的个人包(或者如果它真的有用的话就分享它)来加速三角函数的排版。我想要这样的命令
\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
的前端;因此,如果需要,会应用舍入。)C
sprintf
% !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}
还有一个你应该研究的定点算术库和一个用于编程构造的数学库。以下是第一个库的示例
\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 引擎。