MATLAB 中英文混排最常用、最稳定的方法就是你已经在用的这种------用 TeX 解释器的 \fontname{} 命令按段切换字体。这是国内期刊要求"中文宋体、西文和数字 Times New Roman"时的标准做法。补充一些细节和易踩的坑:
基本规则
\fontname{字体名} 会从它出现的位置开始生效,一直持续到下一个 \fontname{} 或字符串结束,只改变字体,不改变大小、粗细等其他属性。
'\fontname{Times New Roman}C\fontname{SimSun}预测值/\fontname{Times New Roman}%'
这行代码含义是:C 用 Times New Roman,预测值/ 用宋体,% 用 Times New Roman ------ 你写的完全正确。
必须满足的前提条件
-
Interpreter 必须是
'tex'(这也是大多数文本对象的默认值,但保险起见显式设置):'Interpreter', 'tex'
-
不能用
'latex'解释器------MATLAB 自带的 LaTeX 解释器不支持任意中文字体切换,中文会显示不出来或报错。 -
外层设置的
'FontName'相当于"默认字体",\fontname{}会覆盖它所在片段的字体,其余没被\fontname包裹的部分用外层 FontName。所以你在ylabel里同时写了'\fontname{SimSun}输入特征'又设置了'FontName', chineseFontName,这个外层 FontName 其实是多余的(会被\fontname{SimSun}覆盖),但不冲突,不影响效果。
常见坑
-
粗体/斜体组合 :
\fontname{Times New Roman}\bf这种写法在 TeX 解释器里是可行的,但有些 MATLAB 版本对\fontname和'FontWeight','bold'(对象属性层面设置)混用时表现不一致,建议统一用 TeX 命令控制(\bf、\it)而不是同时用对象属性。 -
特殊符号(如 ℃、°、±) :这些符号在某些中文字体(如 SimSun)里可能显示不全或字形不美观,建议像你处理
%一样单独指定西文字体,你这行已经这么做了:'\fontname{SimSun}温度预测值/\fontname{Times New Roman}℃'
是对的做法。
-
legend、title、text 等对象同理,都支持这套语法,不需要额外设置。
-
上下标混用 (如
x_1、x^2)时,\fontname{}切换要放在_/^之前,否则上下标可能跟着变成中文字体导致变形:'\fontname{Times New Roman}x_1\fontname{SimSun}值'
如果只是想省事------不严格区分字体
宋体(SimSun)本身也包含西文和数字字形,如果不是投稿格式硬性要求"中英文分字体",可以直接全用一种中文字体,不用 \fontname 切换:
ylabel(ax, 'C 预测值/%', 'FontName', 'SimSun', 'FontSize', labelFontSize)
但如果是要投中文核心期刊、对"西文用 Times New Roman"有明确格式要求,那就必须用你现在这种 \fontname{} 混排方式,这是目前 MATLAB 里做中英文混合标注最可靠的手段。