• 1.12 LaTex插入代码


    语法高亮

      实际应用中,我们都会遇到插入代码的需求。而代码不同语法块,使用不同的颜色与字体进行高亮是毋庸置疑的。因为语法高亮后,看起来更加舒服,读者的注意力,可以更加集中。
      LaTex的语法高亮,使用listings包。用法比较简单,如以下代码:

    \documentclass[utf8]{paper}
    \usepackage{ctex}
    \usepackage{listings}
    \usepackage{xeCJK}
    
    
    \begin{document}
    	\title{Heap算法}
    	\author{醒过来摸鱼}
    	\maketitle
    	\abstract{Heap算法的Python实现}
    	\begin{lstlisting}[language=python]
    		
    		
    		def recursive(array, last, result):
    			if last == 0:
    				result.append(array[:])
    			return
    		
    			for i in range(0, last + 1):
    			recursive(array, last - 1, result)
    			before = array[:]
    			if last & 1 == 0:
    				array[0], array[last] = array[last], array[0]
    			else:
    				array[i], array[last] = array[last], array[i]
    		
    		
    		def permutations(array):
    			result = []
    			recursive(array, len(array) - 1, result)
    			return result
    		
    		
    		if __name__ == '__main__':
    			result = permutations(['A', 'B', 'C', 'D'])
    			for x in result:
    				print(x)
    	\end{lstlisting}
    	
    \end{document}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

      但是编译后的效果并不好,如下图:
    在这里插入图片描述

    控制缩进

      从上面的效果看,缩进得太厉害了,整体排版效果太难看了。这时候就需要加一个包了,lstautogobble,然后在选项里加上autogobble,如以下代码:

    \documentclass[utf8]{paper}
    \usepackage{ctex}
    \usepackage{listings}
    \usepackage{lstautogobble}
    \begin{document}
    	\title{Heap算法}
    	\author{醒过来摸鱼}
    	\maketitle
    	\abstract{Heap算法的Python实现}
    	\begin{lstlisting}[language=python,autogobble]
    		
    		
    		def recursive(array, last, result):
    			if last == 0:
    				result.append(array[:])
    			return
    		
    			for i in range(0, last + 1):
    				recursive(array, last - 1, result)
    				before = array[:]
    				if last & 1 == 0:
    					array[0], array[last] = array[last], array[0]
    				else:
    					array[i], array[last] = array[last], array[i]
    		
    		
    		def permutations(array):
    			result = []
    			recursive(array, len(array) - 1, result)
    			return result
    		
    		
    		if __name__ == '__main__':
    			result = permutations(['A', 'B', 'C', 'D'])
    			for x in result:
    				print(x)
    	\end{lstlisting}
    	
    \end{document}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39

      这样编译,效果就非常好了:
    在这里插入图片描述

    支持中文

      我们中国人写代码,代码及注释中有中文在所难免,但是LaTex代码段中有中文就无法编译,怎么办呢?如下面代码,注释里有中文:

    \documentclass[utf8]{paper}
    \usepackage{ctex}
    \usepackage{listings}
    \usepackage{lstautogobble}
    \begin{document}
    	\title{Heap算法}
    	\author{醒过来摸鱼}
    	\maketitle
    	\abstract{Heap算法的Python实现}
    	\begin{lstlisting}[language=python,autogobble]
    		
    		
    		def recursive(array, last, result):
    			if last == 0:
    				result.append(array[:])
    			return
    		
    			for i in range(0, last + 1):
    				recursive(array, last - 1, result)
    				before = array[:]
    				# 奇偶区别处理,是Heap算法的核心
    				if last & 1 == 0:
    					array[0], array[last] = array[last], array[0]
    				else:
    					array[i], array[last] = array[last], array[i]
    		
    		
    		def permutations(array):
    			result = []
    			recursive(array, len(array) - 1, result)
    			return result
    		
    		
    		if __name__ == '__main__':
    			result = permutations(['A', 'B', 'C', 'D'])
    			for x in result:
    				print(x)
    	\end{lstlisting}
    	
    \end{document}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40

      编译就不通过了,报错信息很多:
    在这里插入图片描述
      这个时候需要配置编译器为XeLaTex,如下图所示,打开菜单栏里的Options->Configure TexStudio:
    在这里插入图片描述
      再编译就好了,效果如下:

    在这里插入图片描述

    代码样式

      仔细看还是有问题的,虽然整体缩进改了,但是内部的缩进太大了。这时候就需要修改一下了。利用lstset指令可以修改代码内部的缩进,如以下例子:

    \documentclass[utf8]{paper}
    \usepackage{ctex}
    \usepackage{listings}
    \usepackage{lstautogobble}
    \lstset{
    	tabsize=4
    }
    
    \begin{document}
    	\title{Heap算法}
    	\author{醒过来摸鱼}
    	\maketitle
    	\abstract{Heap算法的Python实现}
    	\begin{lstlisting}[language=python,autogobble]
    		
    		
    		def recursive(array, last, result):
    			if last == 0:
    				result.append(array[:])
    			return
    		
    			for i in range(0, last + 1):
    				recursive(array, last - 1, result)
    				before = array[:]
    				if last & 1 == 0:
    					array[0], array[last] = array[last], array[0]
    				else:
    					array[i], array[last] = array[last], array[i]
    		
    		
    		def permutations(array):
    			result = []
    			recursive(array, len(array) - 1, result)
    			return result
    		
    		
    		if __name__ == '__main__':
    			result = permutations(['A', 'B', 'C', 'D'])
    			for x in result:
    				print(x)
    	\end{lstlisting}
    	
    \end{document}
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43

      编译效果,可以看到缩进再也不是8个字符了,代码漂亮多了:
    在这里插入图片描述

  • 相关阅读:
    &((type *)0)->member的用法
    Python+大数据-Spark技术栈(一) SparkBase环境基础
    用Python做一个软件,你想看的视频可以能看 ~ 当然必须是正经的
    猿创征文 |【算法入门必刷】数据结构-栈(六)
    Kubernetes(K8s)从入门到精通系列之十八:使用 Operator Lifecycle Manager(OLM) 安装operator
    VSCode将一份代码同步到多台服务器的解决方案
    Mask RCNN 网络详解
    java毕业设计仓库管理系统Mybatis+系统+数据库+调试部署
    获取推荐商品列表(淘宝)
    用红黑树封装map和set
  • 原文地址:https://blog.csdn.net/m0_66201040/article/details/125557391