使用 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}
。
这是输出:
我已经编写了生成矩阵的 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}
。
这是输出: