Частичное изменение цвета текста в текстовом поле - PullRequest
0 голосов
/ 30 августа 2018

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

Таблица создана с использованием табличной разметки и разметки LaTeX. По некоторым причинам некоторые команды из TextBox Properties , такие как \it, работают, в то время как, например, \color{red} не работает. Вы знаете, как сделать его цветным?

figure
str = '\begin{tabular}{lr} $\it test$ & A \\  $\color{magenta} test$ & A\end{tabular}';  
h = annotation('textbox',[.15 .15 .2 .28],...  
            'Interpreter', 'latex',...
            'FitBoxToText','on',...
            'EdgeColor','black',...
            'BackgroundColor', [1 1 1]);
set(h, 'String', str);

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Проблема, с которой вы сталкиваетесь, заключается в том, что раскраска текста поддерживается только в том случае, если для свойства Interpreter установлено значение 'tex', а табличная среда поддерживается только в том случае, если переводчик настроен на 'latex'. Ваш лучший обходной путь, вероятно, заключается в использовании опции jLabel, предложенной Zep .

Единственный способ сделать это иначе - использовать интерпретатор 'tex' и самостоятельно управлять разносом горизонтальных элементов. Вы можете использовать массив ячеек из строк для создания многострочного текста:

str = {'{\it test}   A', '{\color{magenta} test}   A'};
set(h, 'Interpreter', 'tex', 'String', str);

enter image description here

0 голосов
/ 30 августа 2018

Вы можете обмануть и использовать недокументированный объект jLabel, который поддерживает разметку HTML.

figure
str = '<HTML><FONT color="red">Hello</Font></html>';  
jLabel = javaObjectEDT('javax.swing.JLabel',str);
[hcomponent,hcontainer] = javacomponent(jLabel,[100,100,40,20],gcf);

Вы также можете создавать HTML-таблицы:

str = ['<HTML><FONT color="red">Here is a table</Font>'...
       '<table><tr><th>1</th><th>2</th><th>3</th></tr>'...
       '<tr><th>4</th><th>5</th><th>6</th></tr></html>'];  
jLabel = javaObjectEDT('javax.swing.JLabel',str);
[hcomponent,hcontainer] = javacomponent(jLabel,[100,200,150,250],gcf);

Подробнее о компонентах jLabel можно прочитать в Matlab здесь , а о HTML здесь . Кредит идет в блог Яир Альтман.

...