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_
相关产品推荐
相关产品推荐

