LaTeX 插入高亮代码(LaTex、Python、Java、C、C++等主流语言都支持)_latex代码引用高亮-程序员宅基地

技术标签: Develop & Scientific Tools  

相信刚入门LaTeX的盆友会感觉到LaTeX的强大之处,如果你了解markdown,那么使用LaTeX之后,你会感觉markdown除了便捷之外也就没有其它的优点了,因为LaTeX太强大了,也由于LaTeX门槛比较高,如果你使用texlive编译环境的话,那么需要安装的文件将达到7G左右,当然也有简版的。
使用LaTeX也是源于自己研究生的导师,在老师的介绍下,然后不断学习,不断了解,不断使用,也慢慢有所领悟,虽然无大的建树,不过还是会一点,因为LaTeX更像一门编程语言。
废话不多说,直接进入今天的主题,如何在LaTeX中插入高亮代码?我相信当前主流的语言都是可以使用的,至少我测试的语言是可以的,如:LaTex、Python、Java、C、C++。根据我当前的测试,先选用两个包做粗略的介绍,也会附上相关的文档。如果在知乎或者CSDN你可以看到使用比较多的就是minted、lstlisting这两个包,相关一些博文大多都是copy过来的,下面就进入正文吧。
说明一下编译环境:texlive2019。

我为什么要介绍两个包?

大多情况下,如果你不引用自身的话使用一个包就可以了。但是如果你使用引用自身的话就会出错,如下代码:

\documentclass{article}
\usepackage{listings}
\begin{document}
代码演示:
\begin{lstlisting}[language = tex]
\begin{lstlisting}[language=Python]
import numpy as np
print(np.ones(5)
\end{lstlisting}
\end{lstlisting}
\end{document}

理想的结果会是这样的,当然这里暂时使用的是默认样式。
理想结果

但在实际编译的过程中会出现:
实际编译过程出错
上面的理想显示结果,我是使用minted包把lstlisting代码显示出来,如下:

\documentclass{article}
\usepackage{listings}
\usepackage{minted}
\usepackage{xcolor} 
\begin{document}
code show:
\begin{minted}{tex}
\begin{lstlisting}[language=Python]
import numpy as np
print(np.ones(5)
\end{lstlisting}
\end{minted}
\end{document}

至于minted包如何使用,随后再做介绍。通过我也使用了minted包裹minted也是失败了,在StackOverflow上查找也没有找到,这里就不再赘述了。
失败总结,同一类型的包不能再包含统一类型的代码,否则会出现提前结束包的情况,导致出错。可能有解决这种错误的设置,目前经过一些测试也未成功避免,除非一种包的代码用另一种包引入,例如再minted包中插入lstlisting。当然如果同一个包的代码嵌套时,只要不出现\end{同一包名}也是可以的。好了,知道这个后,就可以单独介绍各个包了。

minted

环境配置

minted包依赖于xcolor包,依赖python环境以pygents包,在编译命令时还需要加入-shell-escape参数。Python环境以及pygents包(pip install pygents即可)配置对于有一定python基础的盆友就很简单了,对于上一节中的main.tex文件,编译的命令:xelatex -shell-escape main,别忘了要导入宏包\usepackage{minted}。如果你使用的是texstudio的话,配置起来也简单如图:
打开配置环境
由于我经常使用xelatex进行编译,所有我就修改这个命令就行了,就是加入-shell-escape,如下:
修改配置参数

基本使用

标准语法使用如下:

\begin{minted}[options]{<language>}
<code>
\end{minted}

使用\mint命令来代替该环境语法如下:

\mint{python}|import numpy as np|

该部分会占据一行。
行内使用使用语法如下:

使用\mintinline{python}{import numpy as np}导入即可

通过文件来输入需要高亮的代码语法如下:

\inputminted[<options>]{<language>}{<filename>}.

更多参数设置和使用可参照相关文档。

lstlisting

这里只作简要介绍。简单配置如下:

\usepackage{listings}
\newfontfamily\courier{Courier New}
\lstset{linewidth=1.1\textwidth,
	numbers=left, %设置行号位置 
	basicstyle=\small\courier,
	numberstyle=\tiny\courier, %设置行号大小  
	keywordstyle=\color{blue}\courier, %设置关键字颜色  
	%identifierstyle=\bf,
	commentstyle=\it\color[cmyk]{1,0,1,0}\courier, %设置注释颜色 
	stringstyle=\it\color[RGB]{128,0,0}\courier,
	%framexleftmargin=10mm,
	frame=single, %设置边框格式  
	backgroundcolor=\color[RGB]{245,245,244},
	%escapeinside=``, %逃逸字符(1左面的键),用于显示中文  
	breaklines, %自动折行  
	extendedchars=false, %解决代码跨页时,章节标题,页眉等汉字不显示的问题  
	xleftmargin=2em,xrightmargin=2em, aboveskip=1em, %设置边距  
	tabsize=4, %设置tab空格数  
	showspaces=false %不显示空格  
	basicstyle=\small\courier
} 

然后就是使用了,例如:

\begin{lstlisting}[language = tex]
\begin{minted}[frame=lines,
framesep=2mm,
baselinestretch=1.2,
fontsize=\footnotesize,
linenos]{python}
import numpy as np
print(np.ones(1))
\end{minted}
\end{lstlisting}

效果如图:

更多参数设置和使用可参照相关文档。

总结

不管你使用lstlisting还是minted,只要你想要好看的代码显示都需要对相关参数进行设置,我也在网上找到了相关的文档,具体参数也有介绍,这里就不再赘述,相关文档可在“AIAS编程有道”订阅号中回复“latex代码显示文档”即可获取,或者在CSDN中下载。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/meiqi0538/article/details/104570226

智能推荐

el-date-picker 时间控件 重新选择时间没有更新值_el-date-picker刷新选择时间-程序员宅基地

文章浏览阅读1k次。最近项目中遇到选择时间控件不能重新赋值得问题,最后解决办法就是加上一个时间清空。这样子就解决了重新选择没有更新值问题。_el-date-picker刷新选择时间

线性回归预测PM2.5值_根据上述内容,在右侧编辑器补充线性回归代码,预测18天的 pm25 值-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏23次。文章目录一、问题描述二、设计简要描述三、程序清单四、结果分析五、调试报告:六、实验总结一、问题描述希望用线性回归解决问题:给定某个地区连续9小时包括PM2.5在内的18项污染物每小时的数据,预测第10个小时的PM2.5的值。二、设计简要描述机器学习的三个基本步骤——程序设计思路——三、程序清单import pandas as pdimport numpy as np# 1 训练集处理# 1.1 读取训练集数据,big5是针对于文档中存在繁体字的编码train_data = pd_根据上述内容,在右侧编辑器补充线性回归代码,预测18天的 pm25 值

Spring AOP的—绍和5种通知类型的使用(详解)_3、说下对springaop的理解、有哪些通知?使用场景有哪些?(底层原理:两种动态代理)-程序员宅基地

文章浏览阅读2.6k次,点赞3次,收藏9次。java Spring AOP介绍与使用1、Aop的概念AOP的核心概念及术语切面(Aspect): 指关注点模块化,这个关注点可能会横切多个对象。事务管理是企业级Java应用中有关横切关注点的例子。 在Spring AOP中,切面可以使用通用类基于模式的方式(schema-based approach)或者在普通类中以@Aspect注解(@AspectJ 注解方式)来实现。连接点(Join point): 在程序执行过程中某个特定的点,例如某个方法调用的时间点或者处理异常的时间点。在Spring_3、说下对springaop的理解、有哪些通知?使用场景有哪些?(底层原理:两种动态代理)

单页面导航插件jquery.singlePageNav.min.js_单页导航 头插件-程序员宅基地

文章浏览阅读2.1k次。singlePageNav.min.js单页面导航插件用于优化导航效果,使锚点链接不在很生硬,达到平滑过渡的效果,优化用户体验下载地址singlePageNav.min.js1.使用方法引入jquery和singPageNav.min.js<script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min..._单页导航 头插件

Spring如何用“声明式事务”保护亿万数据安全?【万字解决并发冲突】_声明式安全-程序员宅基地

文章浏览阅读887次,点赞59次,收藏26次。Hello,你好呀,我是灰小猿,一个超会写bug的程序猿????!用坚持缔造技术、用指尖敲动未来!愿我们每一次敲动键盘,都能让生活变得更智能、世界变得更有趣!点外卖时,你只需考虑如何拼单;选择出行时,你只用想好目的地;手机支付时,你只需要保证余额充足。但你不知道这些智能的背后,是数以亿计的强大数据的支持,这就是数据库的力量。那么庞大数据的背后一定会牵扯到数据安全的问题,那这些意外和冲突又是如何解决的呢?今天我们来一探究竟????!今天这篇文章,我就来和大家讲一下在Spring框架的声明式事务中_声明式安全

hibernate连接多个数据库_winform hibernate-configuration 项目加载多个数据库-程序员宅基地

文章浏览阅读5.1k次。本文转自自http://blog.sina.com.cn/s/blog_49bf8585010004m6.html一、 Hibernate访问数据库时加载的过程对于大多数使用Hibernate的朋友来说,通常使用一下方式来获得Configuration实例: Configuration configure = new Configuration()._winform hibernate-configuration 项目加载多个数据库

随便推点

QCM2290 PM-3 fastboot不识别USB_pm4125-程序员宅基地

文章浏览阅读2.3k次。项目场景:在QCM2290 有两种型号的pm4125,这两种型号硬件上完全pin-to-pin,可以互换的。pm-2 仅支持mirco-usb。pm-3 支持typec-usb,通过软件兼容可以做到支持mirco-usb。问题描述:由于公司规划,后续项目都是使用pm-3,因此有客户提出pm-3的模块在fastboot 下无法识别mirco-usb。 原因分析:1.通过对比pm-2 mirco usb okpm-3 mirco usb failpm-3 typec u_pm4125

JavaSE之多线程_javase之多线程vip插队-程序员宅基地

文章浏览阅读142次。目录1.线程简介2.线程创建2.1 三种创建方式:2.2 继承Thread2.3 实现Runnable接口2.4 实现Callable接口1.线程简介1.多任务多任务处理是指用户可以在同一时间内运行多个应用程序,每个应用程序被称作一个任务.Linux、windows就是支持多任务的操作系统2.多线程多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。3.并发和并行并发:一段时间内多条线程同时进行(逻辑上是同时的)。并行:同一时刻有多条线程进行(物理上的,如_javase之多线程vip插队

Hystrix(防止服务雪崩)--服务降级_hystrix防止服务降级的方法-程序员宅基地

文章浏览阅读141次。服务降级当某一时间,服务器压力激增的情况下,下游服务主动停掉一些不太重要的业务,释放服务资源,增加响应速度当下游服务由于某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户简单来说就是,假如某一时间段A服务器访问的人数激增,B一般,C几乎没人访问,那么就先停掉C服务,把资源让给A:服务降级的实现:首先我们有一个服务:@Component@FeignClient(value = "SERVICE-OBJECT-A")public interface ServiceAF_hystrix防止服务降级的方法

云计算 ——虚拟化认识_虚拟化在计算机科学中意味着什么?虚拟化如何推动云计算?-程序员宅基地

文章浏览阅读1.2k次。云计算 ——虚拟化认识虚拟化概述 :计算机虚拟化是一个对整个信息产业有突破性的信息技术 ,是云计算的核心技术虚拟化在云计算上面的意义 :每一个应用部署的环境和物理平台是没有关系的,通过虚拟平台进行管理,扩展,迁移,备份 种种操作都通过虚拟化层次完成服务器虚拟化 :采用服务器虚拟化可以减少服务器的数量,简化服务器管理,同时提高服务器效率,网络灵活性和可靠性桌面虚拟化 :是将桌面的软件进行虚拟化改造的技术应用虚拟化 :将关键应用计算从用户设备中分离出来,通过集中化技术改善了控制力和安全性 从而提高关_虚拟化在计算机科学中意味着什么?虚拟化如何推动云计算?

大众点评数据分析_大众点评全国美食数据分析-程序员宅基地

文章浏览阅读5.6k次,点赞6次,收藏45次。大众点评数据分析项目完整流程(一)项目背景在大学的时候,每天都要面对一个世纪难题所困扰,那就是:中午吃什么?晚上吃什么?于是乎突发奇想,就想要统计一下全国一二线城市美食店的总体水平,吃不到也要看看别人家的餐桌摆的都是什么,哪些精品餐厅我还不知道,酒香不怕巷子深,我要把你们统统挖出来。(二)项目介绍本项目主要是对大众点评中全国范围内一二线城市美食信息进行分析,暂时不考虑其它线的城市。整个项目..._大众点评全国美食数据分析

万字长文爆肝Python基础入门【第二弹、超详细数据类型总结】_>>> letters=['a','b', 'c', 'a'] >>> letters. remov-程序员宅基地

文章浏览阅读6.9k次,点赞129次,收藏490次。目录一、建立一个数据火车——列表1、创建列表2、列表元素的获取3、列表元素的添加4、列表元素的删除5、列表元素的修改二、列表的亲兄弟——元组1、创建元组2、元组元素的获取3、元组和列表的差别三、数据中的魔术师——字符串1、创建字符串2、字符的获取3、字符串的处理4、字符转义5、原始字符串6、多行字符串7、列表、元组、字符串的通用操作8、列表、元组、字符串总结四、索引存储不再麻烦——字典1、创建字典2、字典键值对的添加_>>> letters=['a','b', 'c', 'a'] >>> letters. remove('a') >>> print(letters)

推荐文章

热门文章

相关标签