LaTeX中插入MATLAB风格的代码块
Posted Z.Q.Feng
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LaTeX中插入MATLAB风格的代码块相关的知识,希望对你有一定的参考价值。
文章目录
一、前言
在 LaTeX 中插入代码块很简单,但是要插入好看的代码块需要我们自己配置相关的参数,这里我介绍 listings
环境和 mcode
工具包。
二、使用 listings 环境
1. 引入包
\\usepackagecaption
\\usepackage[dvipsnames]xcolor % 更全的色系
\\usepackagelistings % 排代码用的宏包
2. MATLAB代码风格配置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% listings设置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\\lstset
language = matlab,
backgroundcolor = \\coloryellow!10, % 背景色:淡黄
basicstyle = \\small\\ttfamily, % 基本样式 + 小号字体
rulesepcolor= \\colorgray, % 代码块边框颜色
breaklines = true, % 代码过长则换行
numbers = left, % 行号在左侧显示
numberstyle = \\small, % 行号字体
keywordstyle = \\colorblue, % 关键字颜色
commentstyle =\\colorgreen!100, % 注释颜色
stringstyle = \\colorred!100, % 字符串颜色
frame = shadowbox, % 用(带影子效果)方框框住代码块
showspaces = false, % 不显示空格
columns = fixed, % 字间距固定
%escapeinside= % 特殊自定分隔符:
morekeywords = as, % 自加新的关键字(必须前后都是空格)
deletendkeywords = compile % 删除内定关键字;删除错误标记的关键字用deletekeywords删!
3. 使用效果
以下为 LaTeX 里插入的一段 MATLAB 代码:
\\beginlstlisting[caption=A Sample, language=matlab]
m = 128; n = 256;
% 128x256矩阵,每个元素服从Gauss随机分布
A = randn(m, n);
% 精确解mu只有10%元素非零,每一个非零元素也服从高斯分布
% 可保证mu是方程组唯一的非零元素最少的解
u = sprandn(n, 1, 0.1);
b = A * u;
\\endlstlisting
效果如下:
三、使用 mcode 工具包
1. 下载mcode包
此包不存在于 CTeX
环境中,需要我们自行下载:
- 官网:https://cn.mathworks.com/matlabcentral/fileexchange/8015-m-code-latex-package
- 没有 MathWorks 账号的也可以下载我上传的资源:LaTeX-mcode,MATLAB代码块风格补足文件
下载后我们会得到 mcode.sty
文件。
2. 引入包
注意这个包会和上述 listings
环境冲突,两个使用一个即可(记得把设定 listings 代码风格那段也删掉)
\\usepackage[framed,numbered,autolinebreaks,useliterate]/home/zq/mcode
这里我把 mcode.sty
文件放在 /home/zq/mode
目录下,所以采用了一个绝对路径引用,也可将其添加到 TEXMF 目录下,这样就不需要添加路径:
cd /usr/local/texlive/2021/texmf-dist/tex/latex # 我的TEXMF目录
sudo mkdir mcode
sudo cp /home/zq/mcode.sty ./mcode
可以使用 texhash
命令查看你的 TEXMF 路径,接着刷新 LaTeX 的包数据库:
sudo texhash
我们便可以引用 mcode
时不加路径了:
\\usepackage[framed,numbered,autolinebreaks,useliterate]mcode
3. 使用效果
给出了两段 MATLAB 代码:
\\beginlstlisting[caption=A Sample, language=matlab]
m = 128; n = 256;
% 128x256矩阵,每个元素服从Gauss随机分布
A = randn(m, n);
% 精确解 §$\\mcommentfont\\mu$§ 只有10%元素非零,每一个非零元素也服从高斯分布
% 可保证 §$\\mcommentfont\\mu$§ 是方程组唯一的非零元素最少的解
u = sprandn(n, 1, 0.1);
b = A * u;
\\endlstlisting
\\beginlstlisting[caption=MATLAB Sample]
for i = 1:3
if i >= 5 && a ~= b % literate programming replacement
disp('cool'); % comment with some §\\mcommentfont\\LaTeX\\ in it: $\\mcommentfont\\pi x^2$§
end
[:,ind] = max(vec);
x_last = x(1,end) - 1;
v(end);
really really long really really long really really long really really long really really long line % blaaaaaaaa
ylabel('Voltage (V)');
end
\\endlstlisting
效果图如下:
在第二段代码中,使用 § §
环境可以在代码块中使用 LaTeX 命令,效果如下:
四、总结
不喜欢写总结。
以上是关于LaTeX中插入MATLAB风格的代码块的主要内容,如果未能解决你的问题,请参考以下文章