有一个名为pgfsweave
R 的包。它可以将 R 代码编入 LaTeX 文档。我发现我们可以从这种方法中获得一些好处。
- 该报告文档可复制。
- 图中的字体与文档的主字体保持一致。
我认为“sweave”代码是面向数据的报告(尤其是对于LaTeX)的最佳方法。通过sweave,我们可以将数据(或图形)从文档中分离出来,通过LaTeX,我们可以将内容与文档样式分离。
不幸的是,我没有找到针对 matlab 和 mathematica 的相应包或一些等效方法。
我知道一些软件包,比如psfrag
或matlab2tikz
,效果很好。但我们需要一个更强大的工具来做到这一点,它可以改变我们的工作流程,让我们的生活更轻松。
这可能吗?你如何解决这个问题?它符合 matlab 或 mathematica 的理念吗?
答案1
有三种方法可以实现此目的:
做编织在应用程序(Matlab、Mathematica、R)端。也就是说,应用程序应该知道 TeX 格式并忽略除
\begin{code}
...\end{code}
片段之外的所有内容。这就是 Sweave 和 literate haskell 的工作方式。做编织在 TeX 端,即让 TeX 调用外部应用程序(使用适当的开关),然后显示结果。这是ConTeXt 中的
R
和模块遵循的方法。gnuplot
对于第二种方法,我编写了一个 ConTeXt 模块,筛选,它允许您将程序的内容传递给外部程序并读回结果。例如,您可以使用以下方法复制 sweave 的功能:
\usemodule[filter]
\defineexternalfilter
[R]
[filtercommand={R CMD BATCH -q --save --restore \externalfilterinputfile\space \externalfilteroutputfile},
output=\externalfilterbasefile.out,
readcommand=\typefile,
continue=yes]
然后,使用
\startR
...
\stopR
将使用 执行结果代码R
并显示 生成的输出R
。使用
\startR[read=no]
....
\stopR
将使用执行代码R
但不显示输出。同样的方法也适用于 Matlab 或 Mathematica,只需filtercommand
用对 Matlab/Mathematica 的适当调用替换即可。这种方法可用于其他目的以及