Matlab - интервал латексного формата

Я создаю легенду так,

theta = [90 120 80 120];
phi   = [120 120 180 180];


for i=1:length(theta)
    plot_legend{i} = sprintf('\\theta=%3d\\circ\\phi=%3d\\circ',theta(i),phi(i))
end

Это дает мне желаемый результат

plot_legend = 
'\theta= 90\circ\phi=120\circ'
'\theta=120\circ\phi=120\circ'
'\theta= 80\circ\phi=180\circ'
'\theta=120\circ\phi=180\circ'

Но когда это интерпретируется интерпретатором TeX, начальный пробел игнорируется, что меня немного раздражает. Есть ли простой способ TeX гарантировать, что интервал сохраняется?

Но интервал не сохраняется при вызове через легенду.

legend(plot_legend,'interpreter','latex')

person Ash    schedule 24.03.2015    source источник
comment
\ (косая черта, за которой следует пробел) — это один из способов создания пробелов в LaTeX, вы также можете попробовать \,, полный список см. в этом ответ на TeX.se, хотя некоторые из них могут не работать с интерпретатором Matlab LaTeX.   -  person David    schedule 25.03.2015
comment
Но мне нужен пробел только для 2-значного случая, а не для 3-значного?   -  person Ash    schedule 25.03.2015
comment
Вы хотите добавить пробелы в отображаемую легенду? Или в командном окне при оценке plot_legend?   -  person David    schedule 25.03.2015


Ответы (1)


Вот общее решение для замены первых нулей заполнения пробелами, интерпретируемыми LaTeX:

% --- Definition
theta = [5 120 80 120];
phi   = [120 120 180 180];

% --- The function handle that does the job
f = @(x, n) regexprep(num2str(x, ['%0' num2str(n) 'i']), '^(0+)', '${repmat(''\\hspace{0.5em}'', [1 numel($0)])}');

% --- Create a plot and the legend

hold on
for i = 1:length(theta)

    % Fake curve
    ezplot(['x^' num2str(i)]);

    plot_legend{i} = ['$\theta=' f(theta(i),3) '^\circ,\ \phi=' f(phi(i),3) '^\circ$'];
end

legend(plot_legend, 'interpreter', 'latex')

И результат:

введите здесь описание изображения

Вы можете указать длину числа вторым параметром дескриптора функции. Обратите внимание, что это работает только с целыми значениями.

Лучший,

person Ratbert    schedule 25.03.2015
comment
Насколько я понимаю, вы используете regexprep для замены каждой пропущенной цифры на /hspace ? - person Ash; 25.03.2015
comment
Да, регулярное выражение заменяет все нули пробелами. - person Ratbert; 25.03.2015
comment
Я только что столкнулся с уникальным случаем, когда тета = 0. Есть ли способ, чтобы регулярное выражение не заменяло единицы измерения на /hspace и оставляло тот же входной символ? - person Ash; 30.03.2015
comment
Я просто изменил регулярное выражение, чтобы вместо этого напечатать ведущие «x» и заменить их. Спасибо за идею! - person Ash; 30.03.2015