使用 xs2pdf 函数在 Scilab 中调整图形大小

Adjust figure size in Scilab with xs2pdf function

我已经编写了生成矩阵的 Scilab 代码行。根据某种算法,它是一个函数,其参数是一个包含两个正整数的向量,returns 是一个大小为向量值的矩阵。由于 prettyprint 函数,该函数还将矩阵导出为 LaTeX 样式的图形。

我想将该图导出为 PDF 文件,为此我使用了函数 xs2pdf。它几乎可以正常工作。问题是,在实现其预期目的时,该函数会生成一个大小约为 40x40 的矩阵,而且它永远放不下页面。在我看来,创建的 PDF 文档甚至不是 A4。

我没有包括完整的代码,您只需要知道代码生成一个名为 z 的矩阵,然后我有以下几行:

//just for this post

z=rand(40,40)

//export to figure

A=prettyprint(z) ;

clf ;

xstring(0,0,A) ;

//export to PDF

xs2pdf(0, '_path_to_pdf_file') ;

这里创建矩阵z是为了模拟我的程序实际生成的矩阵。如果你 运行 这个代码,填入 '_path_to_pdf_file' 位,你会得到一个像样的 PDF 输出吗?

我可以重现同样的问题。有时甚至不会生成 PDF 输出,Scilab returns 出错。

一种解决方法是让 Scilab 创建一个新的 TeX 文件并在 Scilab 外部使用 pdflatex 编译它。好的部分是您可以 运行 来自同一个 Scilab 脚本的所有内容。当然,您需要安装 LaTeX 发行版。

r = 40; c = 40;
z = rand(r,c);
A = prettyprint(z) ;

texfile = "\documentclass{standalone}" + ...
          "\usepackage{graphics}" + ...
          "\usepackage{amsmath}" + ...
          "\setcounter{MaxMatrixCols}{"+ string(c) +"}" + ...
          "\begin{document}" + ...
          A + ...
          "\end{document}"

filename = "matrix.tex";
write(filename,texfile)     //write() cannot overwrite a file
dos("pdflatex " + filename) //use unix() instead of dos() in case you're not on Windows

不知道大家对LaTeX有没有了解,做几点说明:

  • 输出到当前的 Scilab 目录。 LaTeX 生成的所有辅助文件也将在那里创建。
  • 它使用 standalone class,它将 PDF 输出精确地裁剪为 .tex 文件中描述的任何内容。在这种情况下,只打印矩阵,没有边距。要使用此 class,您需要用于 LaTeX 的 standalone 包。
  • prettystring()输出矩阵使用pmatrix环境,需要amsmath包,所以你也需要安装这个。
  • 如果您的矩阵超过 10 列,则需要行 \setcounter{MaxMatrixCols}{c}

这是输出: