2017-10-14 108 views
0

我写了生成矩阵的Scilab代码行。它是一个函数,其参数是一个包含两个正整数的向量,并根据某种算法返回一个尺寸为向量值的矩阵。该函数还将矩阵导出为LaTeX样式的图形,这要归功于prettyprint函数。使用xs2pdf函数在Scilab中调整图的大小

我希望将该数字导出为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输出?

回答

1

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

一种解决方法是让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 

我不知道你是否有乳胶的任何知识,所以我应该做的一些注释:

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

这里是输出: enter image description here

+0

是这是一个非常合适的替代 –