Ghostscript ps2pdf не работает правильно из MATLAB - PullRequest
0 голосов
/ 31 октября 2018

У меня есть файл .tex, который я пытаюсь записать из среды MATLAB (2017b), используя сначала латекс, затем dvips и, наконец, ps2pdf для создания файла PDF. Файл PDF правильно создается, когда я запускаю его через TeXWorks, но при попытке запустить его выдает ошибку из ps2pdf. Я не совсем уверен, что не так с тем, как я посылаю его в командную строку. Вот скрипт, который я пытаюсь запустить.

    set(groot, 'defaultAxesTickLabelInterpreter','latex'); 
set(groot, 'defaultLegendInterpreter','latex');
set(0,'defaultTextInterpreter','latex');

addpath('C:\Program Files (x86)\MiKTeX\miktex\bin\x64')
exampledir='\\our\server\';
examplefilename='test';

texdoc=fullfile(exampledir,strcat(examplefilename,'.tex'));
auxdoc=fullfile(exampledir,strcat(examplefilename,'.aux'));
logdoc=fullfile(exampledir,strcat(examplefilename,'.log'));
dvidoc=fullfile(exampledir,strcat(examplefilename,'.dvi'));
psdoc=fullfile(exampledir,strcat(examplefilename,'.ps'));
pdfdoc=fullfile(exampledir,strcat(examplefilename,'.pdf'));


fileID = fopen(texdoc,'w');

textext=['\documentclass[twoside]{article} %Two-sided document. Required for fancyhf left and right page numbering scheme current.' newline ...
    '\usepackage{graphicx}' newline ...
    newline ...
    '\usepackage{fancyhdr} %Use the package fancy header/footer' newline ...
    newline ...
    '\usepackage[letterpaper,margin=0.5in,bottom=0.75in,top=0.7in]{geometry} %Ensure the paper is letterpaper.' newline ...
    '\usepackage{grffile}' newline ...
    '\usepackage{caption}' newline ...
    '\usepackage{float} %Float used to position graphics.' newline ...
    '\usepackage{lastpage209} %For last page' newline ...
    newline ...
    '\DeclareGraphicsExtensions{.PDF,.jpg} %Notify LaTeX what type of graphics extensions to expect.' newline ...
    newline ...
    '\renewcommand{\headrulewidth}{0pt} % remove the header rule' newline ...
    newline ...
    '\fancyhf{} % clear all header and footers' newline ...
    newline ...
    '\pagestyle{fancy} %Use the fancy pagestyle, which will include the fancy header and footer options we defined above.' newline ...
    newline ...
    '\setlength\headheight{38pt} ' newline ...
    newline ...
    '\fancyhead[L]{{Page \thepage}  of \pageref{LastPage}} %Left side on even pages; right side on odd pages.' newline ...
    '\fancyhead[R]{\includegraphics[trim={0.3in 0.26in 0.05in 0.26in},clip,width=0.4in]{{\\our\server\mypicture}}}' newline ...
    newline ...
    '\begin{document} %This will be the actual document and what goes into it.' newline ...
    newline ...
    '\begin{figure}[h] %Make a figure...' newline ...
          newline ...
    '       \includegraphics[trim={0.25in 0 0 0},clip,width=7.5in]{{\\our\server\mypicture}}' newline ...
    newline ...
    '   \captionsetup{labelformat=empty}' newline ...
    newline ...
    '\end{figure}' newline ...
     newline ...
    '\end{document}'];

fprintf(fileID,'%s',textext);

fclose(fileID);

%           latex               dvips            ps2pdf
%   text.tex -------> text.dvi -------> text.ps --------> text.pdf

[~,cmdoutlatex] = system(['latex.exe -interaction=nonstopmode -output-directory ' exampledir '\ ' texdoc]);

if contains(cmdoutlatex,'Sorry, but latex.exe did not succeed.')

    %Do some kind of check and fix things.
end

[~,cmdoutdvips] = system(['dvips.exe -q* -o ' psdoc ' ' dvidoc]);

if contains(cmdoutdvips,'!')

    %Do some kind of check and fix things.
    error(['Error: ' cmdoutdvips])
end

[~,cmdoutps2pdf] = system(['ps2pdf ' psdoc ' ' pdfdoc ' -sDEVICE=pdfwrite']);

if contains(cmdoutps2pdf,'Error','IgnoreCase',true)

    %Do some kind of check and fix things.
    error(cmdoutps2pdf)
end

1 Ответ

0 голосов
/ 01 ноября 2018

Согласно предложению @Cris Luengo перейти на pdflatex вместо использования команд latex / dvips / ps2pdf, это сработало. Вот пример кода того, что сработало для системной команды.

[~,pdflatexout] = system(['pdflatex.exe -output-directory ' strrep(exampledir,'\','/') ' ' texdoc]);

%Check for errors.
if contains(pdflatexout,'Sorry, but pdflatex.exe did not succeed.') || ...
        contains(pdflatexout,'error','IgnoreCase',true)

    %Deliver the error code.
    error(pdflatexout)
end

Я поместил это после fclose(fileID) в исходном коде и удалил все, что изначально было после этой строки.

...