使用公式生成表格的最简单、最通用的方法是什么?最强大的最少代码量。我只想生成一个值表,其中的值由数学公式生成。我不想花比手工编写表格更多的时间来编写表格,否则就毫无意义了。
答案1
这是nicematrix
使用浮点数expl3
(符合 IEEE754)进行数学计算的一种方法。
\documentclass{article}
\usepackage{nicematrix}
\begin{document}
\ExplSyntaxOn
\NewDocumentCommand { \MyFunction } { m m }
{ \myfunction:nn { \int_use:c { c@#1 } } { \int_use:c { c@#2 } } }
\cs_new_protected:Nn \myfunction:nn
{
\fp_eval:n
{
trunc(
sqrt(#1*7)*(2+#2) % <---- function here
, 3)
}
}
\ExplSyntaxOff
$\pAutoNiceMatrix[code-before = \cellcolor{red!15}{3-3}]{6-6}{\MyFunction{iRow}{jCol}}$
\end{document}
答案2
有几种可能性,这里有一个简单的循环,显示设置平方和表和乘法表
\documentclass{article}
\newcount\zi
\newcount\zj
\newcommand\zz[1]{%
\makebox[1.2cm][r]{$\the\numexpr#1\relax$}%
\ifnum\zj=9
\zj=0
\advance\zi 1
\par
\else
\advance\zj 1
\fi
\ifnum\zi<10 \afterfi\zz{#1}\fi}
\def\afterfi#1\fi{\fi#1}
\begin{document}
\begin{center}
\zz{\zi*\zi+\zj*\zj}
\end{center}
\begin{center}
\zz{\zi*\zj}
\end{center}
\end{document}
答案3
这是 lualatex 贡献的 MWE。
% !TeX TS-program = lualatex
\documentclass{article}
\usepackage{luacode}
\begin{luacode*}
function trigtable ()
for t=0, 45, 3 do
local x=math.rad(t)
sf =[[%2d$^{\circ}$ & %1.9f & %1.9f & %1.9f & %1.9f \\]]
tex.print(string.format(sf, t, x, math.sin(x), math.cos(x), math.tan(x)))
end
end
\end{luacode*}
\begin{document}
\newcommand{\trigtable}{\luadirect{trigtable()}}
\begin{tabular}{rcccc}
\hline
& $x$ & $\sin(x)$ & $\cos(x)$ & $\tan(x)$ \\
\hline
\trigtable
\hline
\end{tabular}
\end{document}
从
PracTEX 期刊,2013 年,第 1 期 使用 LuaLATEX 的数值方法、Juan I. Montijano、Mario Pérez、Luis Rández 和 Juan Luis Varona
使用 Lua 作为编程语言和 LuaLaTeX,您可以从格式中划分计算表格内容的任务。
例如,要从前面显示的相当粗糙的表格到要发布的最终表格,需要
- 更大的标题、拉伸的单元格、交替的行颜色(最好在 LaTeX 中完成)
和
- 从 0 度到 120 度,每 5 度为一个步长,小数点后 4 位四舍五入(不截断!),并处理 tan(90 度)(最好在 Lua 中完成)
Lua 部分的改动很小。
nicematrix
对于 LaTeX 格式化,我使用了允许使用指令进行格式化的包,而无需触及表格单元格和最少的编码。
% !TeX TS-program = lualatex
\documentclass{article}
\usepackage{nicematrix}
\usepackage{luacode}
\begin{luacode*}
function trigtable()
local t
for t = 0, 120, 5 do
local x=math.rad(t)
if t == 90 then
sf =[[%2d$^{\circ}$ & %1.4f & %1.4f & %1.4f & \infty \\]]
else
sf =[[%2d$^{\circ}$ & %1.4f & %1.4f & %1.4f & %1.4f \\]]
end
tex.print(string.format(sf, t, x, math.sin(x), math.cos(x), math.tan(x)))
end
end
\end{luacode*}
\begin{document}
\newcommand{\trigtable}{\luadirect{trigtable()}}
\begin{NiceTabular}{rcccc}[
first-row,
code-for-first-row = \Large,
code-before = \rowcolors{1}{blue!3}{},
cell-space-top-limit = 5pt,
cell-space-bottom-limit = 5pt
]
\hline
& $x$ & $\sin(x)$ & $\cos(x)$ & $\tan(x)$ \\
\hline
\trigtable
\hline
\end{NiceTabular}
\end{document}