You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab设TickLabelInterpreter为latex时Y轴加粗及字体设置问题

问题根因

全局设置坐标轴TickLabelInterpreter='latex'时,Matlab会调用内置LaTeX引擎渲染全部坐标轴刻度标签,此时通过FontWeight属性配置的加粗样式会被LaTeX解释器默认排版规则覆盖:手动添加了LaTeX加粗语法的X轴标签可正常显示加粗效果,但自动生成的Y轴刻度数字未携带LaTeX加粗指令,会自动退回常规字重;同时LaTeX解释器默认字体不为Times New Roman,会导致全局字体不统一。

解决方案

方案1:分轴设置解释器(优先推荐,适配R2020b及以上版本)

R2020b及更新版本支持为X、Y轴单独配置刻度标签解释器,仅对需要LaTeX语法的X轴启用latex解释器,Y轴保留默认解释器即可让FontWeight属性正常生效,不会出现样式被覆盖的问题。
修改后的可运行代码如下:

close all;
data = [1,1,1,1;2,2,2,2;3,3,3,3;4,4,4,4];
bar(data)
hold on
grid on
xticks([1 2 3 4])
xtickangle(0)

ax = gca;
% 仅给X轴设置latex解释器,不影响Y轴样式
ax.XAxis.TickLabelInterpreter = 'latex';

% X轴刻度标签:LaTeX语法下指定Times字体+加粗,数学公式用\boldmath
xTicklabels = {'\fontfamily{ptm}\selectfont\textbf{label 1} \boldmath$E_1$', ...
    '\fontfamily{ptm}\selectfont\textbf{label 2} \boldmath$E_2$', ...
    '\fontfamily{ptm}\selectfont\textbf{label 3} \boldmath$E_3$', ...
    '\fontfamily{ptm}\selectfont\textbf{label 4} \boldmath$E_4$'};
set(gca,'XTickLabel',xTicklabels);

% 坐标轴标签配置:加粗+Times New Roman
xlabel("Different algorithms",'FontWeight','bold','FontName','Times New Roman');
ylabel("Result of schemes",'FontWeight','bold','FontName','Times New Roman');

% 图例配置
lgd = legend("1","2","3","4",'Location',"northwest");
lgd.FontWeight = "bold";
lgd.FontName = 'Times New Roman';

% 坐标轴基础样式配置
h = gca;
h.XAxis.FontWeight = 'bold';
h.XAxis.LineWidth = 1;
h.XAxis.FontName = 'Times New Roman';
h.YAxis.FontWeight = 'bold';
h.YAxis.LineWidth = 1;
h.YAxis.FontName = 'Times New Roman';
% 全局兜底字体设置
set(gca,'fontname','Times New Roman');

hold off;

说明:\fontfamily{ptm}\selectfont是Matlab内置LaTeX解释器原生支持的Times字体声明,可确保LaTeX渲染的X轴标签和其他文本字体完全一致。

方案2:手动重写Y轴刻度标签(适配R2020a及更早版本)

若使用的Matlab版本不支持分轴配置解释器,可在全局启用latex解释器的基础上,手动获取Y轴刻度值,为Y轴刻度标签也添加LaTeX加粗、Times字体声明,替换默认自动生成的标签即可。
在原有代码设置完全局ax.TickLabelInterpreter = 'latex';后,添加如下代码片段:

% 手动获取Y轴刻度,生成带LaTeX加粗和Times字体声明的标签
ytick_vals = yticks;
yTicklabels = cell(size(ytick_vals));
for i = 1:length(ytick_vals)
    yTicklabels{i} = ['\fontfamily{ptm}\selectfont\textbf{' num2str(ytick_vals(i)) '}'];
end
set(gca,'YTickLabel',yTicklabels);

其余X轴标签、坐标轴标签、图例的字体和加粗设置和方案1保持一致即可。

注意事项
  • 不要依赖全局FontWeight设置控制LaTeX解释器渲染的文本样式,所有LaTeX渲染的内容都需要在标签字符串内通过LaTeX语法(\textbf{}、\boldmath、字体声明)指定样式,否则会被解释器默认样式覆盖。
  • Matlab内置LaTeX解释器不支持自定义导入第三方字体包,ptm是内置的Times New Roman对应字族标识,可直接使用。

内容的提问来源于stack exchange,提问作者Sea_

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 17:48:21