LaTeX 能像 Excel 公式表那样进行计算吗?

LaTeX 能像 Excel 公式表那样进行计算吗?

不知道 TeX 系统有没有这个功能,比如在表格中给定一个公式,可以应用公式计算后显示数据。

答案1

有包裹spreadtab它提供了类似电子表格的功能。以下示例取自文档:

\documentclass{article}
\usepackage{spreadtab}
\begin{document}

\begin{spreadtab}{{tabular}{rr|r}}
 22       & 54       & a1+b1 \\
 43       & 65       & a2+b2 \\
 49       & 37       & a3+b3 \\
 \hline
 a1+a2+a3 & b1+b2+b3 & a4+b4
\end{spreadtab}

\begin{spreadtab}{{tabular}{|r|ccc|}}
 \hline
 @ values of $x$ & -5       &        -1 &        4 \\
 @ $f(x)=2x$     & 2*[0,-1] &  2*[0,-1] & 2*[0,-1] \\
 \hline
\end{spreadtab}

\begin{spreadtab}{{tabular}{|c|*{10}{c}|}}
 \hline
 @$\times$        & 1                     & \STcopy{>}{b1+1}  & & & & & & & & \\
 \hline
 1                & \STcopy{>,v}{!a2*b!1} &                   & & & & & & & & \\
 \STcopy{v}{a2+1} &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
                  &                       &                   & & & & & & & & \\
 \hline
\end{spreadtab}

\end{document}

在此处输入图片描述

答案2

这是一个使用 R、knitr 和 xtable 制作 LaTeX 表的简单示例。

假设您有以下文档,名为test.rnw

\documentclass{article}
\begin{document}

<<results='asis', echo=FALSE>>=
library(xtable)
sheet <- data.frame(x=c(1,2,3,4,5), y=c(10, 20, 30, 40, 50))
sheet$z <- sheet$x + sheet$y
print(xtable(sheet))
@
\end{document}

简而言之,文件中<<>>=和之间的代码被新文件中生成的 latex 输出所替换。特别是,是一个可以将数据框转换为 latex 表的包和函数。它有大量的选项,但在上面的例子中,我依赖于默认值。@rnwtexxtable

要将文件转换为 latex,然后转换为 pdf,您只需在名为的开源 R IDE 中打开 rnw 文件即可RStudio并点击“编译 PDF”。或者您也可以从命令行发出这样的命令。

Rscript -e 'library(knitr); knit("test.rnw")'
pdflatex test.tex

它会产生如下输出:

在此处输入图片描述

要运行上述示例,您需要安装:

欲了解更多信息请访问 knitr 网站:http://yihui.name/knitr/

答案3

如果您使用 LuaTeX,您可以使用任何 C 数学库扩展 TeX 并创建 Lua 绑定。

要创建必要的绑定程序 温差可以使用。下面是一个 ConTeXt 示例,它使用帕里/GP代数系统来进行计算。

生成绑定

文件:pari.i

%module pari
%{
#include "pari.h"
ulong overflow;
%}

%ignore gp_variable(char *s);
%ignore setseriesprecision(long n);
%ignore killfile(pariFILE *f);
%ignore pari_vfprintf(FILE *file, const char *fmt, va_list ap);
%ignore pari_vprintf(const char *fmt, va_list ap);
%ignore pari_vsprintf(const char *fmt, va_list ap);
%ignore out_vprintf(PariOUT *out, const char *fmt, va_list ap);

%include "pari/parisys.h";
%include "pari/paristio.h";
%include "pari/paricom.h";
%include "pari/parigen.h";
%include "pari/paridecl.h";
%include "pari/parierr.h";
%include "pari/paricast.h";
%include "pari/paritune.h";
%include "pari/pariinl.h";

%inline %{
GEN uti_mael2(GEN m,long x1,long x2)
{return mael2(m,x1,x2);}
%}

使用以下方式生成绑定

swig -lua -I/usr/include pari.i

然后编译模块

gcc -ansi -I/usr/include/pari -I/usr/include/lua5.1       -fPIC -c pari_wrap.c -o pari_wrap.o
gcc -Wall -ansi -shared -I/usr/include/pari       pari_wrap.o -lpari -lm -o pari.so

现在该模块可以在 LuaTeX 中使用require("pari")

使用库

\startluacode
  require("pari")
  pari.pari_init(4000000,500000)
  thirddata = thirddata or {}
  local function sum(X,a,b,expr,start)
    local start = start or '0.'
    local res = pari.gp_read_str(string.format(
      "sum(%s=%s,%s,%s,%s)",X,a,b,expr,start))
    res = pari.GENtoTeXstr(res)
    return res
  end
  thirddata.sum = sum
\stopluacode

\starttext

\startformula
  \sum_{k=0}^{30}\frac{4(-1)^k}{2k+1}=
    \luacode{context(thirddata.sum(
       "k",0,30,"4*(-1)^k/(2*k+1)","0"))}
\stopformula

\startformula
  \sum_{k=0}^{3}\frac{1}{x^2+k}=
    \luacode{context(thirddata.sum(
       "k",0,3,"1/(x^2+k)","0"))}
\stopformula

\stoptext

该代码的运行结果:

结果

由于此方法不使用任何 ConTeXt 功能,因此此代码只需进行少量修改即可在 LaTeX 中运行。但是,它仅适用于 LuaTeX。

此描述基于 讲话 由 Luigi Scarso 在 BachoTeX 2011 上发表。所有荣誉均归于他。

相关内容