警告:更新文本时出错

时间:2017-09-20 19:22:32

标签: matlab text matlab-gui

MATLAB给出了一个警告如下:

Warning: Error updating Text.

Character vector must have valid interpreter syntax:
$\Theta(s) = 9.24\cdot 10^{04 }\cdot \frac{s +    0}{s^{4} +  140s^{3} + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} +    0}$

我不确定为什么语法无效。我使用以下代码:

numericTF = struct;
symbolTF = struct;

if strcmp(vars.response_type,'Position')
    typeString = 'Theta(s)';
else
    typeString = 'Omega(s)';
end

tf4thOnum = [1 I/P];
tf4thOden = [1 (b*L+R*J)/J/L (R*b+ Kb*Km)/J/L 2*Km*P/J/L I*2*Km/J/L];
tf4thOgain = 2*Km*P/J/L;
tf4thOstr = sprintf('$\\%s = %4.3g \\cdot \\frac{s + %4.3g}{s^{4} + %4.3gs^{3} + %4.3gs^{2} + %4.3gs + %4.3g}$', typeString, tf4thOgain,tf4thOnum(2:end),tf4thOden(2:end));
tf4thOsym = '\frac{k_ak_mk_p}{JL}\cdot\frac{s+\frac{k_i}{k_p}}{s^4+\frac{bL+RJ}{JL}s^3+\frac{bR+k_bk_m}{JL}s^2+\frac{k_ak_mk_p}{JL}s+\frac{k_ik_mk_ap}{JL}}$';

添加科学记数法的另一个功能:

function instring = cleanExps(instring)
        exps = findstr(instring,'e+');
        maxn = length(exps);
        if ~isempty(exps)
            for ii = 1:maxn
                if isempty(exps) break; end
                instring = strrep(instring,instring(exps(1):exps(1)+4),['\cdot 10^{' instring(exps(1)+2:exps(1)+4) '}']);
                exps = findstr(instring,'e+');
            end
        end
        exps = findstr(instring,'e-');
        maxn = length(exps);
        if ~isempty(exps)
            for ii = 1:maxn
                if isempty(exps) break; end
                instring = strrep(instring,instring(exps(1):exps(1)+4),['\cdot 10^{-' instring(exps(1)+2:exps(1)+4) '}']);
                exps = findstr(instring,'e-');
            end
        end

1 个答案:

答案 0 :(得分:1)

我从警告消息中假设您正在尝试将text object的字符串设置为以下内容(为清晰起见,我已将其划分为多行):

str = ['$\Theta(s) = 9.24\cdot 10^{04}\cdot \frac{s + 0}{s^{4} + 140s^{3}' ...
       ' + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$'];

这里至少有两件事出现错误......

首先,您需要确保文本对象的'Interpreter' property设置为'latex'而不是默认'tex',因为您使用的是LaTeX标记。

其次,您的术语的语法有两个错误,请注意:

'... + 2.35\cdot 10^{03s}^{2} + 9.24\cdot 10^{04s} + 0}$'
                        ^                        ^

这两个花括号应位于s的另一侧。第一个导致语法错误,因为10^{...}^{...}没有意义。第二个错误地将s放入指数中。

这两个错误似乎是您cleanExps函数中的错误导致的。该函数中出现的每个+4都应该是+3,以防止它在指数后包含太多字符。如果您有兴趣,可以通过regexprep调用更强大且可能更快的替代功能:

instring = regexprep(instring, 'e([+|-]+)(\d+)', '\\cdot 10^{${setdiff($1,''+'')}$2}');

修复错误并确保使用latex解释程序设置后,一切都应该正常工作。例如:

str = ['$\Theta(s) = 9.24\cdot 10^{04}\cdot \frac{s + 0}{s^{4} + 140s^{3}' ...
       ' + 2.35\cdot 10^{03}s^{2} + 9.24\cdot 10^{04}s + 0}$'];
hText = text(0.1, 0.5, str, 'Interpreter', 'latex', 'FontSize', 14);

enter image description here