LaTeX中插入matlab代码(可添加中文注释)的几种方法

2023-11-18

最近在用LaTeX写文件时,需要插入matlab代码,但是matlab代码编写时没有注意到注释为中文所带来的不便,导致在编写LaTeX文件时总是报错。经查阅网上有关这方面的资料和自己不断地尝试之后,总结其中的方法如下:使用matlab的mcode包和仅仅使用listings与xcolor包实现对matlab代码的插入。

使用matlab的mcode插入代码的方法

代码中不包含中文

如果插入的代码中不包含有任何中文的话,可以采用如下方法(安装方法可见:美赛如何在Latex中插入Matlab代码):

\usepackage{listings}
\usepackage[framed,numbered,autolinebreaks,useliterate]{mcode} %文章开头调用宏包

\begin{lstlisting}	%正文插入代码
 function data_generate()
        Sigma = [1, 0; 0, 1];
        mu1 = [1, -1];
        x1 = mvnrnd(mu1, Sigma, 200); mu2 = [5, -4];
        x2 = mvnrnd(mu2, Sigma, 200);
        mu3 = [1, 4];
        x3 = mvnrnd(mu3, Sigma, 200); mu4 = [6, 4.5];
        x4 = mvnrnd(mu4, Sigma, 200); mu5 = [7.5, 0.0];
        x5 = mvnrnd(mu5, Sigma, 200);
        X = [x1; x2; x3; x4; x5];
        % Show the data points
        plot(x1(:,1), x1(:,2), 'ro'); hold on;
        plot(x2(:,1), x2(:,2), 'b+');
        plot(x3(:,1), x3(:,2), 'k*');
        plot(x4(:,1), x4(:,2), 'g^');
        plot(x5(:,1), x5(:,2), 'ms');
        save Softmax_regression_data X
        xlabel('x_1')
        ylabel('x_2')
        title('nnkcn' )
        end
    \end{lstlisting}

效果图如下:


这里写图片描述

如果出现报错 LaTeX Error: Command \textquotesingle unavailable in encoding OT1可以参考 Ctex插入matlab代码编译出现! LaTeX Error: Command \textquotesingle unavailable in encoding OT1

代码中包含中文

插入的代码中包含中文时,会出现各种各样的错误,这是软件本身为英文决定的。经过反复的试验,在使用mcode的基础上,找到了两种比较可行的办法:

\documentclass{ctexart}
\usepackage{listings}
  \usepackage{textcomp} % 必须加上,否则报错
  \usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}    % 添加matlab代码宏
  \usepackage{xcolor}
  \lstset{
  language=Matlab,  %代码语言使用的是matlab
  rulesepcolor=\color{red!20!green!20!blue!20},%代码块边框为淡青色
  keywordstyle=\color{blue!90}\bfseries, %代码关键字的颜色为蓝色,粗体
    numbers=left, % 显示行号
    numberstyle=\tiny,    % 行号字体
   commentstyle=\color{red!10!green!70},    % 设置代码注释的颜色
  showstringspaces=false,%不显示代码字符串中间的空格标记
  stringstyle=\ttfamily, % 代码字符串的特殊格式
  breaklines=true, %对过长的代码自动换行
  extendedchars=false,  %解决代码跨页时,章节标题,页眉等汉字不显示的问题
  escapebegin=\begin{CJK*}{GBK}{hei},escapeend=\end{CJK*},      % 代码中出现中文必须加上,否则报错
  texcl=true,}
\begin{document}
 \begin{lstlisting}
       %读入视频函数
[filename,pathname,fileindex]=uigetfile('*.avi','请选择一个Avi文件');
video_info=aviinfo([pathname filename]);
LEN=video_info.NumFrames; %获得视频长度
for k=1:LEN
    video_videotape(k)=aviread(video_info.Filename,k);
    video_image=video_videotape(k).cdata;
    if k<10
        imwrite(video_image,strcat('0000',int2str(k),'.bmp'),'bmp');% 把每帧图像存入硬盘
    elseif k>=10 & k<100
        imwrite(video_image,strcat('000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    elseif k>=100 & k<1000
        imwrite(video_image,strcat('00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    elseif k>=1000 & k<1000
        imwrite(video_image,strcat('0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    else
        imwrite(video_image,strcat(int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    end
end
    \end{lstlisting}
\end{document}

效果图为:


这里写图片描述

另一种方法为,如果代码中出现中文,则用特殊字符【 】引号括起来(英文输入法下,数字1键的左侧一个键,不需要按下shift键,直接按下即可)。具体的模板为【颜色标注的部分是必须要加上的,否则会报错】:

\documentclass{ctexart}
  \usepackage{geometry} %使用 geometry 宏包可以方便地调整页边距
  \usepackage{listings}
  \usepackage{textcomp} % 必须加上,否则报错
  \usepackage[framed,numbered,autolinebreaks,useliterate]{mcode}    % 添加matlab代码宏
\begin{document}
    \lstset{numbers=left, numberstyle= \tiny, escapeinside=``}
    \begin{lstlisting}

A = input('Please Input A: ');
b = input('Please Input b: ');
format long;

[n,m] = size(A);
if n ~= m
    disp('`{错误!A矩阵不合法!}`');
    return;
end
n = length(b);
if n ~= m
    disp('`{错误!A矩阵与b矩阵不匹配!}`');
    return;
end

disp('------------------------');
fprintf('det(A) = %f\n', det(A));
fprintf('cond(A) = %f\n', cond(A));

x = gaussLinearEquation(A,b);
disp('------------------------');
disp('Ax = b `{的解为:}`')
x
disp('------------------------');
\end{lstlisting}
\end{document}

效果图为:


这里写图片描述

使用listings与xcolor包插入代码的方法

这种方法不需要使用mcode包,是一种比较通用的方法,不会因为对mcode包不熟悉或者另外再添加代码设置而报错。模板为:

\documentclass{ctexart}
    % 代码段设置
  \usepackage{listings}
  \usepackage{xcolor}
  \lstset{
  language=Matlab,  %代码语言使用的是matlab
  frame=shadowbox, %把代码用带有阴影的框圈起来
  rulesepcolor=\color{red!20!green!20!blue!20},%代码块边框为淡青色
  keywordstyle=\color{blue!90}\bfseries, %代码关键字的颜色为蓝色,粗体
  commentstyle=\color{red!10!green!70}\textit,    % 设置代码注释的颜色
  showstringspaces=false,%不显示代码字符串中间的空格标记
  numbers=left, % 显示行号
  numberstyle=\tiny,    % 行号字体
  stringstyle=\ttfamily, % 代码字符串的特殊格式
  breaklines=true, %对过长的代码自动换行
  extendedchars=false,  %解决代码跨页时,章节标题,页眉等汉字不显示的问题
  escapebegin=\begin{CJK*}{GBK}{hei},escapeend=\end{CJK*},      % 代码中出现中文必须加上,否则报错
  texcl=true}
\begin{document}
    \lstset{language=Matlab}%代码语言使用的是matlab
    \lstset{breaklines}%自动将长的代码行换行排版
    \lstset{extendedchars=false}%解决代码跨页时,章节标题,页眉等汉字不显示的问题
    \begin{lstlisting}
    %读入视频函数
[filename,pathname,fileindex]=uigetfile('*.avi','请选择一个Avi文件');
video_info=aviinfo([pathname filename]);
LEN=video_info.NumFrames; %获得视频长度
for k=1:LEN
    video_videotape(k)=aviread(video_info.Filename,k);
    video_image=video_videotape(k).cdata;
    if k<10
        imwrite(video_image,strcat('0000',int2str(k),'.bmp'),'bmp');% 把每帧图像存入硬盘
    elseif k>=10 & k<100
        imwrite(video_image,strcat('000',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    elseif k>=100 & k<1000
        imwrite(video_image,strcat('00',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    elseif k>=1000 & k<1000
        imwrite(video_image,strcat('0',int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    else
        imwrite(video_image,strcat(int2str(k),'.bmp'),'bmp');%把每帧图像存入硬盘
    end
end
\end{lstlisting}
\end{document} 

效果为:


这里写图片描述

其中,关于 \lstset{},即插入代码的设置部分,可以从以下代码中按需进行设置:

\usepackage{listings}
  \usepackage{xcolor}
  \lstset{tabsize=4, %
  frame=shadowbox, %把代码用带有阴影的框圈起来
  commentstyle=\color{red!50!green!50!blue!50},%浅灰色的注释
  rulesepcolor=\color{red!20!green!20!blue!20},%代码块边框为淡青色
  keywordstyle=\color{blue!90}\bfseries, %代码关键字的颜色为蓝色,粗体
  showstringspaces=false,%不显示代码字符串中间的空格标记
  stringstyle=\ttfamily, % 代码字符串的特殊格式
  keepspaces=true, %
  breakindent=22pt, %
  numbers=left,%左侧显示行号
  stepnumber=1,%
  numberstyle=\tiny, %行号字体用小号
  basicstyle=\footnotesize, %
  showspaces=false, %
  flexiblecolumns=true, %
  breaklines=true, %对过长的代码自动换行
  breakautoindent=true,%
  breakindent=4em, %
  escapebegin=\begin{CJK*}{GBK}{hei},escapeend=\end{CJK*},
  aboveskip=1em, %代码块边框
  fontadjust,
  captionpos=t,
  framextopmargin=2pt,framexbottommargin=2pt,abovecaptionskip=-3pt,belowcaptionskip=3pt,
  xleftmargin=4em,xrightmargin=4em, % 设定listing左右的空白
  texcl=true,
  % 设定中文冲突,断行,列模式,数学环境输入,listing数字的样式
  extendedchars=false,columns=flexible,mathescape=true
  % numbersep=-1em
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LaTeX中插入matlab代码(可添加中文注释)的几种方法 的相关文章

随机推荐

  • 【Linux中shell脚本】Linux中shell脚本回车换行问题

    背景 windows下编辑shell脚本 报错 syntax error near unexpected token r 问题产生原因 因为windos与linux换行符不同导致 notepad 中 视图 gt 显示符号 gt 显示所有符号
  • Qt技术重绘QtableView方法

    在项目过程中需要在列表中用图形显示磁盘的使用情况 这用Qt自身的QTableview控件不能完全实现 需要用委托进行重绘 创建一个委托类继承QItemDelegate类 然后实现void paint QPainter painter con
  • 研报精选230410

    目录 行业230410西南证券 医药行业2023年4月投资月报 看好创新药和中药行情 行业230410国信证券 汽车行业4月投资策略 3月新能源乘用车批发销量预计同比增长32 持续关注板块年报季报行情 行业230410西南证券 医药行业周报
  • java------int=20是存在堆里还是栈里

    如果方法里的局部变量 就会存在栈帧里的局部变量表中 如果是成员变量则存在于堆中 它属于int类的一个实例 存放在堆中开辟的空间
  • 【Mo 人工智能技术博客】图卷积网络概述及其在论文分类上的应用

    近年来 深度学习在计算机视觉 自然语言处理等领域大放异彩 这些领域所面对的数据都是结构化的 如图像 音频 文本等 它们内部都有明确的排列规则 结构化的数据由于具有这些确定的规则而方便处理 但是在现实生活中 非结构化的关系数据才是主流 我们无
  • Ubuntu 18.04换国内源 中科大源 阿里源 163源 清华源

    国内有很多Ubuntu的镜像源 包括阿里的 网易的 还有很多教育网的源 比如 清华源 中科大源 我们这里以中科大的源为例讲解如何修改Ubuntu 18 04里面默认的源 编辑 etc apt sources list文件 在文件最前面添加以
  • 华为OD机试 - 跳格子1(Java)

    题目描述 小明和朋友玩跳格子游戏 有 n 个连续格子 每个格子有不同的分数 小朋友可以选择以任意格子起跳 但是不能跳连续的格子 也不能回头跳 给定一个代表每个格子得分的非负整数数组 计算能够得到的最高分数 输入描述 给定一个数列 如 1 2
  • 3D游戏设计大作业

    Unity大作业 粒子系统效果 一 前言 1 此篇文章记录了2022年第二学期中山大学软件工程3D游戏与编程的大作业 本次大作业可选择范围众多 最终我选择了粒子系统效果作为了本次大作业的主题 2 一个粒子系统可以模拟并渲染许多称为粒子的小图
  • CRC校验总结

    事实上网上很多CRC校验算法 在接收端进行CRC校验时 余数不为零 这往往是因为CRC校验算法本身是有问题的 但不妨碍我们进行校验 接收端可以对需要校验的字段带入CRC校验算法 计算得到校验值 并与发送数据中的校验值进行比较 如果两者相等
  • 生信技能树R语言学习

    一 数据类型和向量 1 数据类型 1 1 判断数据类型class 1 2 按Tab键自动补全 1 3 数据类型的判断和转换 1 is 族函数 判断 返回值为TRUE或FALSE is numeric 123 is character a i
  • 32位/64位WINDOWS驱动之-突破进程保护映射的方法进行跨进程读内存2

    32位 64位WINDOWS驱动之 突破进程保护映射的方法进行跨进程读内存2 一 在过保护读写筛选器中添加 读写驱动2 c 驱动层 代码如下 include
  • 黑马头条 热点文章实时计算、kafkaStream

    热点文章 实时计算 1 今日内容 1 1 定时计算与实时计算 1 2 今日内容 kafkaStream 什么是流式计算 kafkaStream概述 kafkaStream入门案例 Springboot集成kafkaStream 实时计算 用
  • cout 格式化输出

    将 cout 的 flag 保存到变量 以便修改后的恢复 ostream fmtflags old cout flag 无参将返回当前 flag 值 cout flag old 恢复到原先保存的值 将 bool 值以 literals 输出
  • 第六章课后习题及答案

    第六章习题答案 转载于 https www cnblogs com hhdn archive 2007 05 27 761356 html
  • Mysql字段设置默认值

    方法一 select 默认值 字段名 from 表名 方法二 SELECT 默认值 as 字段名 FROM 表名 以上方法 将默认值和表名互换 则可以产生给表名去别名的作用
  • 计算分组后的记录行数(count group)

    小弟有这样一个问题 想用hql计算分组之后的总记录行数 语句如 from aTable a left outer join bTable b group by a f1 b f1 现在要计算它的总记录数 select count from
  • 对useReducer的理解

    useReducer是React提供的一个高级Hook 它不像useEffect useState useRef等必须hook一样 没有它我们也可以正常完成需求的开发 但useReducer可以使我们的代码具有更好的可读性 可维护性 可预测
  • Android通用流行框架大全,零基础入门学习android

    Picasso transformations 一个为Picasso提供多种图片变换的库 Glide transformations 一个为Glide提供多种图片变换的库 Android gpuimage 基于OpenGL的Android过
  • Jenkins持续集成项目实践 —— 基于Python Selenium自动化测试(二)

    上一篇讲了如何搭建jenkins 这篇主要讲 怎么将自动化代码与jenkins衔接起来 jenkins上运行的两种方式 第一种 在jenkins上面运行本地代码 操作如下 新建项目 项目名称根据自己项目情况填写并选择自由模式 进行配置根据如
  • LaTeX中插入matlab代码(可添加中文注释)的几种方法

    最近在用LaTeX写文件时 需要插入matlab代码 但是matlab代码编写时没有注意到注释为中文所带来的不便 导致在编写LaTeX文件时总是报错 经查阅网上有关这方面的资料和自己不断地尝试之后 总结其中的方法如下 使用matlab的mc