目前,我正在使用 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。如果我们放弃长名称和索引,则可以计算相当复杂的东西。