2016-11-29 18 views
1

Я хочу включать фигуры Matlab в латекс, предпочтительно с векторизованными форматами, но с шрифтами LaTeX MATLAB для всего текста. Я использовал функцию MATLAB matlab2tikz, которая работала идеально для простых фигур, но теперь у моих цифр слишком много точек данных, которые вызывают ошибку. Так что matlab2tikz не подходит.Создайте фигуры Matlab в LaTeX с использованием matlabfrag или альтернатив

Я искал matlabfrag, который, как я думаю, выполнит то, что я хочу, но когда я запустил скрипт в LaTeX, как описано в руководстве пользователя, он имеет ошибку File not found.

Это мой код:

\documentclass{article} 
\usepackage{pstool} 
\begin{document} 
\psfragfig{FileName} 
\end{document} 

Где FileName это имя из .eps и .tex, что matlabfrag создает. Кто-нибудь сталкивался с этой проблемой? Или рекомендуется использовать другие функции/методы?

Я использую Texmaker на ОС Windows 7.

ответ

0

Мой совет будет пересмотреть свой рабочий процесс.

Вместо того, чтобы повторно использовать код Matlab для построения фигур и быть dissappointed при постоянно меняющихся выходов с matlab2tikz, начать повторное использование вашего латекса код для построения фигуры и не беспокоиться о заговоре в Matlab больше (по крайней мере, не для красивых участков).

matlab2tikz всего лишь генерирует латексный код на основе латекс-пакета pgfplots. Понять работу этого пакета довольно легко, так как он должен быть похож на Matlab.

Итак, зачем беспокоиться и всегда позволять matlab2tikz выполнять эту работу? Потому что снова и снова вы не будете полностью довольны результатами. Просто попробуйте написать pgfplots-code с нуля и просто загрузите данные из Matlab.

Вот удобная функция, которую я написал, чтобы создать латексные готовые текстовые файлы:

function output = saveData(filename, header, varargin) 

in = varargin; 

numCols = numel(in); 

if all(cellfun(@isvector, in)) 
    maxLength = max(cellfun(@numel, in)); 
    output = cell2mat(cellfun(@(x) [x(:); NaN(maxLength - numel(x) + 1,1)],in,'uni',0)); 
    fid = fopen(filename, 'w'); 
    fprintf(fid, [repmat('%s\t',1,numCols),'\r\n'], header{:}); 
    fclose(fid); 
    dlmwrite(filename,output,'-append','delimiter','\t','precision','%.6f','newline', 'pc'); 
else 
    disp('saveData: only vector inputs allowed') 
end 

end 

Что, например, может выглядеть следующим образом, в случае Боде диаграммы:

w G0_mag G0_phase GF_mag GF_phase  
10.000000 40.865743 -169.818991 0.077716 -0.092491 
10.309866 40.345290 -169.511901 0.082456 -0.101188 
10.629333 39.825421 -169.196073 0.087474 -0.110690 
10.958700 39.306171 -168.871307 0.092787 -0.121071 
11.298273 38.787575 -168.537404 0.098411 -0.132411 

В ваш tikzpicture вы можете просто загрузить файл на

\pgfplotstableread[skip first n=1]{mydata.txt}\mydata 

и хранить т в переменную \mydata.

Теперь проверьте pfgplots, как построить ваши данные. Вы найдете основную команду участка \addplot

\addplot table [x expr= \thisrowno{0}, y expr= \thisrowno{3} ] from \mydata; 

, где вы непосредственно получить доступ к столбцам вашего текстового файла \thisrowno{0} (запутанный, я знаю).


Что касается вашей проблемы с многих точек данных: pgfplots предлагает ключ each nth point={ ... } чтобы ускорить процесс. Но я предпочел бы фильтровать/децитировать данные уже в Matlab. Также возможен другой способ, если у вас есть несколько точек данных, ключ smooth разглаживает все.

 Смежные вопросы

  • Нет связанных вопросов^_^