一、前言

在 LaTeX 中插入代码块很简单,但是要插入好看的代码块需要我们自己配置相关的参数,这里我介绍 listings 环境和 mcode 工具包。


二、使用 listings 环境

1. 引入包

\usepackage{caption}
\usepackage[dvipsnames]{xcolor} % 更全的色系
\usepackage{listings} % 排代码用的宏包

2. MATLAB代码风格配置

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% listings设置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\lstset{
	language = matlab,
	backgroundcolor = \color{yellow!10}, % 背景色:淡黄
	basicstyle = \small\ttfamily, % 基本样式 + 小号字体
	rulesepcolor= \color{gray}, % 代码块边框颜色
	breaklines = true, % 代码过长则换行
	numbers = left, % 行号在左侧显示
	numberstyle = \small, % 行号字体
	keywordstyle = \color{blue}, % 关键字颜色
	commentstyle =\color{green!100}, % 注释颜色
	stringstyle = \color{red!100}, % 字符串颜色
	frame = shadowbox, %(带影子效果)方框框住代码块
	showspaces = false, % 不显示空格
	columns = fixed, % 字间距固定
	%escapeinside={} % 特殊自定分隔符:
	morekeywords = {as}, % 自加新的关键字(必须前后都是空格)
	deletendkeywords = {compile} % 删除内定关键字;删除错误标记的关键字用deletekeywords删!
}

3. 使用效果

以下为 LaTeX 里插入的一段 MATLAB 代码:

\begin{lstlisting}[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;
\end{lstlisting}

效果如下:

在这里插入图片描述


三、使用 mcode 工具包

1. 下载mcode包

此包不存在于 CTeX 环境中,需要我们自行下载:

下载后我们会得到 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 代码:

\begin{lstlisting}[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;
\end{lstlisting}
\begin{lstlisting}[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
\end{lstlisting}

效果图如下:

在这里插入图片描述

在第二段代码中,使用 § § 环境可以在代码块中使用 LaTeX 命令,效果如下:

在这里插入图片描述


四、总结

不喜欢写总结。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐