执行类似电子表格的计算并显示公式和结果

执行类似电子表格的计算并显示公式和结果

目前,我正在使用 excel 进行计算,并使用在线 LaTeX 公式编辑器手动格式化它们以便打印。最终结果如下所示: 在此处输入图片描述

您可能可以想象,这需要对参数进行大量重复处理,并且如果任何变量发生变化,则必须重新输入所有内容。有没有什么方法可以直接通过 LaTeX 实现类似的输出?

我希望能够定义变量(其中一些变量是从其他变量计算出来的),并显示公式,同时显示参数和值。我不需要进行任何复杂的数学运算。通常只需要 +、-、*、/ 和指数,尽管基本函数(sin、ln、log)也可能有用。

答案1

我在 JPi 回答之前就开始研究这个问题了,所以无论如何我都会发布我的解决方案。

LuaTeX 非常适合这种情况。例如,这是使用 ConTeXt 的解决方案(将其转换为 LaTeX 应该很容易)。

\startluacode
  userdata = userdata or {}
  userdata.variables = 
    {
      m = 10,
      Cp = 30,
      T1 = 15,
      T2 = 20,
    }

  variables = userdata.variables

  variables.DeltaT = variables.T2 - variables.T1
  variables.Q = variables.m*variables.Cp*variables.DeltaT

  local function showRow(a,b,c)
      context("\\NC %s \\NC %s \\NC %s \\NC \\NR", a, b, c)
  end

  local function singleRow(a)
      context("\\NC[nc=3, align=middle] %s \\NC \\NR", a)
  end

  local format = string.format

  userdata.ShowVariables = function()
    context.startTABLE{setups="table:variables"}
    showRow("Parameter Value", "Units", "Description")
    showRow("$m$", format("\\unit{%s KiloGram}", variables.m), "Mass")
    showRow("$Cp$", format("\\unit{%s KiloJoule/Celsius KiloGram}", variables.Cp), "Heat Capacity")
    showRow("$T_1$", format("\\unit{%s Celsius}", variables.T1), "Initial Temperature")
    showRow("$T_2$", format("\\unit{%s Celsius}", variables.T2), "Final Temperature")
    singleRow(format("$ΔT = T_2 - T_1 = %s - %s = %s~[\\unit{Celsius}]$", variables.T2, variables.T1, variables.DeltaT))
    showRow("$ΔT$", format("\\unit{%s Celsius}", variables.DeltaT), "Temperature Difference")
    singleRow(format("$Q = m × Cp × ΔT = %s × %s × %s = %s~[\\unit{KiloJoule}]$", variables.m, variables.Cp, variables.DeltaT, variables.Q))
    showRow("$Q$", format("\\unit{%s KiloJoule}", variables.Q), "Heat")
    context.stopTABLE()
  end
\stopluacode

\startsetups table:variables
  \setupTABLE[frame=off, offset=0.25em]
  \setupTABLE[column][3][width=12em] 
  % Width needed, otherwise column span doesn't work
\stopsetups

\define\ShowVariables{\ctxlua{userdata.ShowVariables()}}

\starttext
\ShowVariables
\stoptext

这使

在此处输入图片描述

我使用单独的命名空间userdata来避免与现有变量名冲突。

答案2

轻松lualatex:

%% compile with lualatex
\documentclass{article}

\usepackage{luacode}

\begin{luacode*}
 function celsius(t)
  tex.sprint((t-32)*5/9)
  end
\end{luacode*}
\newcommand{\celsius}[1]{\luadirect{celsius(\luastring{#1})}}

\begin{document}

\begin{tabular}{rr}
 50 & \celsius{50}\\
 -40 & \celsius{-40}
 \end{tabular}

 \end{document}

在此处输入图片描述

答案3

  • 目前,我正在使用 Excel 进行计算,并使用在线 LaTeX 公式编辑器手动格式化它们以便打印。

  • 安宁,如果我们谈论 LaTeX 的数学部分,LaTeX 本身就是数学表达式的图形表示系统。大多数使用 LaTeX 执行计算的程序都需要使用特殊规则输入 LaTeX 文本。每个程序都有自己的规则。然后,这样的程序会解析文本,识别变量及其值并进行计算。作为一种算法,它总是像以下操作的顺序:
  • Typset 是特殊类型的 LaTeX 文本,其中有专门指定的数据,如变量、它们的值、输出格式等;
  • 启动执行计算的程序。
  • 我希望提供一个不同的解决方案。似乎这正是您正在寻找的。那就是构建数学表达式的 LaTeX 字符串的程序,您可以轻松地以纯文本形式输入该字符串。它使用变量执行计算,将结果保存到文件,分析不仅与错误语法相关的错误,而且还有助于查找甚至避免以下错误相关性(准确性)的丧失,以及意外结果的可能性(无穷大,不是数字)。
  • 该计划是简易计算器。输入任意搜索引擎(不带空格)你都会找到很多可以下载的文件存储服务器。

您也可以在开发者的网站上找到它: http://steamandwater.od.ua/AnEasyCalc/index.html

  • 此演示版本不受使用时间限制,但功能有限。主要限制是字符串长度不能超过 32。如果我们放弃长名称和索引,则可以计算相当复杂的东西。

祝你好运)

相关内容