> 文章列表 > 干货分享 - MatLab || 与LaTeX的混合使用指南

干货分享 - MatLab || 与LaTeX的混合使用指南

干货分享 - MatLab || 与LaTeX的混合使用指南

目录

1、前言

2、Latex基础

3、Latex尝鲜

4、Latex在MatLab中换行

5、Latex在MatLab中小花招

6、附录1:Tex对照表

7、附录2:常用Tex字符


1、前言

LaTeX语言作为应用最广泛的Tex格式,Tex这种语言具有简单排版和程序设计的功能。

利用Latex,即使我们不会排版和程序设计也可以生成复杂的论文规格的表格和数学公式

为了更加直观的感受LaTeX的排版作用,因此查看下图的红色方框区域部分。

Latex具有强大的显示数学公式的能力,能轻松表达出复杂的数学公式且非常美观。


f=@(x)exp(-2*x);
x=0:0.1:2;plot(x,f(x),'.-k');
xlabel('{\\itx}'); ylabel('{\\ity=e^{-2x}}');
legend('f(x)=e^{-2x}');latexf=['$$f(x)=e^{-2x}$$'];
lgh=legend(latexf);
set(lgh,'interpreter','latex');

而Matlab在最新版本更新了对Tex/LaTeX的支持,使得我们在科学绘图中能够快捷方便的使用。

在用matlab对数据或模型进行计算处理之后,时常会需要输出结果呈现Latex的格式,或者能方便转换成Latex格式方便后续编辑。

可以提前给本文的内容做出一个总结:

  • MATLAB绘图时,可以使用LaTeX公式输入,前提是将相应的解释器从默认的'tex'改为'latex',使用最多还是在编写公式上,无法对一些算法图和排版进行深入的使用。

  • 无法自定义加载LaTeX的各种宏包,导致功能很受限,例如算法包,绘图包。


Matlab中使用Latex大体可分为两种类型:

  • 使用Latex公式标注Matlab生成的各类图形

  • 把Matlab的运行结果转换成Latex格式。

今天我们的内容就是好好盘点一下这些基础内容~

2、Latex基础

让我们先从基础的数学表达开始:

当我们在命令行键入: set(text,‘Interpreter’)

(部分低版本matlab为TickLabelInterpreter)

系统将返回'Interpreter'所包含的属性值:“none”||"tex"||"laTex"

可见默认值是:tex。我们可以将其设置为laTex。

在MatLab使用LaTex主要有这两种方式:

 %格式一:'$ 表达式或值 $'      %        一个公式只占一行当公式高度超过设定字符高度时会缩小公式中的字符 %格式二:'$$ 表达式或值  $$' %        一个公式能占多行公式中的每个字符都为设定的字符高度​​​​​​

常见数学符号的表达方法

在新版本的matlab中,实时脚本的内容中有插入LaTex方程的选项。

我们利用该app进行基础的学习:

部分规则请查看附录~

单个字符:

希腊字母的变量名为“\\”后面的字符串

求和符号:

卧氏大括号:

\\overbrace{x+y+z+x+a+d}

上划线和下划线:

具体公式总结请看附录内容~


3、Latex尝鲜

编写MATLAB的绘图窗口时候,我们很多时候需要在图中制作公式图。

Matlab可以在title、xlabel、ylabel、zlabel...上插入LaTeX公式。

(部分代码来自csdn,感谢各位大佬的贡献)

值得注意的是,‘interpreter’ 表示所采用的解释器语法,此时需要设置为'latex'

  • 标题 title

% 标题中添加LaTeX格式公式
x = 0.1:0.1:10;
plot(x, sin(x)./x);
title('$\\frac{sin(x)}{x}$','interpreter','latex', 'FontSize', 20);
set(gcf, 'position', [0 0 400 300]);
set(gca,'FontSize',18);

title('$\\frac{sin(x)}{x}$','interpreter','latex', 'FontSize', 20);
  • 图例 legend

K = 0.2;a1 = -0.3;a2 = 0;a3 = 0.3;t=-5:0.1:5;
f1 = K*exp(a1*t);f2 = K*exp(a2*t);f3 = K*exp(a3*t);
plot(t,f1,'b','LineWidth',4);hold on;
plot(t,f2,'r','LineWidth',4);hold on;
plot(t,f3,'k','LineWidth',4);axis([-6,6,-0.2,1.2])
set(gca,'XAxisLocation','origin');
set(gca,'YAxisLocation','origin');
legend({'$\\it{K}e^{\\alpha\\it{t}}(\\alpha < 0)$','$\\it{K}e^{\\alpha\\it{t}}(\\alpha > 0)$','$\\it{K}$'},'Interpreter','latex')

为了让图例中可以插入一些好看的公式,比如下划线之类的我们也可以使用下面的代码进行调整与混合普通文字使用

plot(rand(20, 3), 'o-');
legend({'Mean Energy Consumption', 'Mean of $u_{i}$ Value', ...'Client Selection Frequency'}, ...'location', 'northwest', ...'interpreter', 'latex');

leg1 = legend('$\\bar{x}$','$\\tilde{x}$','$\\hat{x}$');
set(leg1,'Interpreter','latex');
set(leg1,'FontSize',17);

【注】:legend语句中的 {} 不可缺少,且不可替换为 [] 

  • 坐标轴 xlabel/ylabel

alpha = 0:0.01:4*pi;
y1 = sin(alpha )+cos(alpha);
plot(alpha,y1,'r','LineWidth',3);
grid  minor
axis([0,4*pi,-4,4])
set(gca,'FontSize',18);
ylabel(['$f_{1}(\\alpha)=sin(\\alpha)+cos(t)$'],'Interpreter','latex','FontSize',18);
xlabel(['$\\alpha$'],'Interpreter','latex','FontSize',18);
box on

因此我们可以得到总结,只要需要输出科学公式或者文字的地方,几乎都能够无缝使用LaTeX进行美化排版。

因此我们来完成一个比较完整的内容

syms x y
f = y*sin(x)-x*cos(y);
fsurf(f,[-2*pi 2*pi])
a = gca;
a.TickLabelInterpreter = "latex";S = sym(a.XLim(1):pi/2:a.XLim(2));
S = sym(round(S/pi*2)*pi/2);
xticks(double(S));
labels = "$" + arrayfun(@latex,S,UniformOutput=false) + "$";
xticklabels(labels);S = sym(a.YLim(1):pi/2:a.YLim(2));
S = sym(round(S/pi*2)*pi/2);
yticks(double(S))
labels = "$" + arrayfun(@latex,S,UniformOutput=false) + "$";
yticklabels(labels);xlabel("$x$",Interpreter="latex");
ylabel("$y$",Interpreter="latex");
zlabel("$z$",Interpreter="latex");
titletext = "$" + latex(f) + "$ for $x$ and $y$ in $[-2\\pi,2\\pi]$";
title(titletext,Interpreter="latex")

4、Latex在MatLab中换行

是不是很上头?使用Lex语言编译出来的公式具有一定的美感。

想一想如果我们如果一个公式过长需要两行才能显示是否有技巧可以完成了?

目前根据我练习两年半的经验操作来看,有两类方式在MatLab中进行换行。

  • 将LaTex公式字符串改写为{'$...$', '$...$'}。单美元符号

  • 使用关键字newline进行控制,将LaTex公式字符串改写为['$...$', newline, '$...$']。美元符号

【注】:两种方式的括号不一样哦

% 换行方式一
title({'$liu:\\sin(x)+\\alpha_1(k_1+x)+\\alpha_2(k_2+x)+a_0c(k+n)+a_1c(k+n-1)$',...'$+...+\\alpha_n(k_n+x)$'},'interpreter','latex', 'FontSize', 10);
% 换行方式二
title(['$liu:\\sin(x)+\\alpha_1(k_1+x)+\\alpha_2(k_2+x)+a_0c(k+n)+a_1c(k+n-1)$',newline,...    '$+...+\\alpha_n(k_n+x)$'] ,'interpreter','latex','FontSize', 10)

5、Latex在MatLab中小花招

使用颜色修饰符 \\color 将其后尾随字符的颜色从先前的颜色更改为新颜色。​​​​​​​

title(['\\fontsize{16}liu {\\color{magenta}love '...
'\\color[rgb]{0 .5 .5}every \\color{red}red} nice girl'])

可以通过latex()函数转化成LeTeX命令格式。由于latex()函数只对符号表达式进行转换,对于数值结果一定要通过sym()函数转化成符号结果。

因此为防止对数值结果转化出错,可同时使用latex()和sym()函数:

latex(sym(表达式))

例如:​​​​​​​

syms x phi
chr = latex(x^2 + 1/x)

chr =

'\\frac{1}{x}+x^2'

利用latex函数创建数组的字符表达形式:​​​​​​​

syms x
S = [sym(1)/3 x; exp(x) x^2]

让我们使用那个神奇的命令将S转为latex字符串吧~

当然我们也可以定义一些矩阵符号表达式:​​​​​​​

syms A 3 matrix
syms X [3 1] matrix
f = X.'*A*X
H = diff(f,X,X.')
chrf = latex(f)
chrH = latex(H)

因此我们日后想要快速的插入某些公式可以通过这种表达式进行快速转换。

6、附录1:Tex对照表

7、附录2:常用Tex字符

Tex字符在输出一些数学公式时经常使用,它只能由类型为text的对象创建。函数title、xlabel、ylabel、zlabel或text都能创建一个text对象,因此Tex字符转义符(带“\\”的字符串)经常作为这些函数的输入参数。

texlabel转换MATLAB表达式为等价的Tex格式字符串。

它处理希腊字母的变量名为实际显示的希腊字母字符串。希腊字母的变量名为“\\”后面的字符串

Tex字符及其函数表:​​​​​​​

  \\alpha α  \\upsilon υ   \\sim ~  \\beta β    \\phi ϕ       \\leq ≤  \\gamma γ   \\chi χ      \\infty ∞  \\delta δ   \\psi ψ      \\epsilon ϵ     \\zeta ζ    \\Gamma Γ    \\omega ω  \\eta η     \\Delta Δ    \\theta θ   \\Theta Θ    \\leftrightarrow ↔  \\vartheta ϑ   \\Lambda Λ    \\leftarrow ←  \\iota ι     \\Xi Ξ      \\uparrow ↑  \\kappa κ    \\Pi Π    \\rightarrow →  \\lambda λ   \\Sigma Σ    \\downarrow ↓  \\mu μ     \\Upsilon Υ     \\circ °  \\nu ν      \\Phi Φ       \\pm ±  \\xi ξ    \\Psi Ψ      \\geq ≥  \\pi π      \\Omega Ω    \\propto ∝  \\rho ρ     \\forall ∀     \\partial ∂  \\sigma σ    \\exists ∃     \\bullet ∙  \\varsigma ς    \\div ÷  \\tau τ      \\cong ≅     \\neq ≠  \\equiv  ≡    \\approx ≈     \\aleph ℵ  \\otimes ⊗       \\oplus ⊕    \\cap ∩       \\cup ∪       \\supseteq ⊇  \\supset ⊂      \\subseteq ⊆    \\subset ⊃  \\int ∫      \\in ∈         \\o ο  \\rfloor     \\lceil      \\nabla

具体的公式编辑命令:​​​​​​​

  1.上标用^和下表用_,希腊字母与tex一样,即\\alpha表示α。    2.求和: $$\\sum_{i=1}^{n} x_{i}$$    3.积分: $$ \\int_{0}^{1}$$  4.求极限: $$\\lim_{n \\rightarrow \\infty}$$ %n趋于无穷符号在lim正下方  $\\lim_{n \\rightarrow \\infty} $ %趋于无穷符号在lim右下角  5. 分式: $$\\frac{1}x$$ %1/x  6. 根式: $$\\sqrt{x}$$  7. 上划线: $$\\overline{x}$$  8. 下划线: $$\\underline{x}$$ %下划线在x的正下方  9.卧式花括号命令: $$\\overbrace{x+y+z+w}$$  10.仰式花括号命令: $$a+\\underbrace{b+c+d} $$    11.戴帽命令: $$\\hat{o}\\ \\ \\check{o}\\ \\ \\breve{o}$$  $$\\widehat{A+B} \\ \\ \\widetilde{a+b}$$  $$\\vec{\\imath}+\\vec{\\jmath}=\\vec{k}$$    12.堆砌命令: $$y\\stackrel{\\rm def}{=} f(x) \\stackrel{x\\rightarrow 0}{\\rightarrow} A$$  13.省略号: $\\bullet \\bullet \\bullet \\bullet \\bullet \\bullet $

关于Tex解释器的一些设置

  • Tex字符的字体设置有如下6种

     \\bf:设置字体为粗体字。  \\it:设置字体为斜体字。  \\sl:设置字体为斜体字,很少使用。  \\rm:设置字体为正常字体。  \\fontname{字体名}:设置字体名。例如:\\fontname{宋体}。  \\fontsize{字体大小}:设置字体大小。例如:\\fontsize{16}​​​​​​​
  • Tex字符的颜色设置有下面两种方法

  \\color{颜色名}颜色名:颜色名有12种,  分别为red、green、yellow、magenta、blue、black、  white、cyan、gray、barkGreen、orange和lightBlue。    例如:\\color{magenta}magenta。  \\color[rgb]{a b c}:    设置字体颜色为RGB矩阵[a b c]所表示的颜色。  a、b和c都在[0 1] 范围内。  例如:color[rgb]{0 .5 .5}
  • Tex字符的位置有2种设置

      _:表示下标。  ^:表示上标。​​​​​​​