LaTeX代码宏包listings的使用

news2025/1/19 23:20:44

LaTeX代码宏包listings的使用

文章目录

  • LaTeX代码宏包listings的使用
  • 1 需求
  • 2 verbatim环境简介
  • 3 listings设置代码高亮
  • 4 代码样式和颜色
  • 5 为listings添加题注
  • 6 listings支持的语言格式
  • 7 附录 listings样式的自定义参数

1 需求

LaTeX \LaTeX LATEX适合用来进行结构化文档的编辑。如今,在科技论文写作上, LaTeX \LaTeX LATEX是最常用的标准化工具。对于程序员来说,当文档中需要插入代码段时,如何像Visual Studio或者PyCharm这样的IDE一样,使代码中的关键字高亮显示呢?

这就是今天我们想要讨论和实现的需求。

以下特别说明:

在兼并了ShareLaTeX之后,OverLeaf是如今最为主流的在线LaTeX编辑环境。本文也是在OverLeaf上进行相关的编辑。

本文参考的文献地址为https://www.overleaf.com/learn/latex/Code_listing#Using_listings_to_highlight_code
它介绍了 LaTeX \LaTeX LATEX中verbatim环境和listings宏包的使用方式。

2 verbatim环境简介

LaTeX \LaTeX LATEX中默认用来显示代码的工具是verbatim,这是一个用monospaced字体显示代码的工具。它的基本使用方式是:

\documentclass{article}
\begin{document}
\begin{verbatim}
Text enclosed inside \texttt{verbatim} environment 
is printed directly 
and all \LaTeX{} commands are ignored.
\end{verbatim}
\end{document}

以上代码显示的效果如下:

在这里插入图片描述

就像在引言中的示例一样,打印所有文本时都保留换行符和空格。这段代码还有一个带星标的版本,其输出和上面的例子略有不同。

\documentclass{article}
\begin{document}
\begin{verbatim*}
Text enclosed inside \texttt{verbatim} environment 
is printed directly 
and all \LaTeX{} commands are ignored.
\end{verbatim*}
\end{document}

在这里插入图片描述

在带星标的版本中,空格以一种可见的方式得到了强调。
下面让我们看看如何在行内插入代码:

\documentclass{article}
\begin{document}
In the directory \verb|C:\Windows\system32| you can find a lot of Windows 
system applications. 
 
The \verb+\ldots+ command produces \ldots
\end{document}

以上的代码生成的结果如下所示:
在这里插入图片描述

命令\verb|C:\Windows\system32|verbatim格式下,使用|作为分隔符。实际上,除字母和*以外的任意字符,都可以作为分隔符。在本例中,\verb+\ldots+使用+作为分隔符。

3 listings设置代码高亮

要使用listings环境,必须要先把以下行添加到文档的序言中:

\usepackage{listings}

下面是一个使用listings宏包中lstlisting环境的例子:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}
import numpy as np
    
def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable
    
    #compute the bitwise xor matrix
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;
                
                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)
                
                VT = np.zeros((n*m,1), int)
    
    return M
\end{lstlisting}
\end{document}

上述实例的结果为:
在这里插入图片描述

对于这一段Python代码,可以看到输出结果保留了原样的缩进效果,但除此以外,没有关键字高亮效果。
稍微修改一下代码:

\documentclass{article}
\usepackage{listings}
\begin{document}
\begin{lstlisting}[language=Python]
import numpy as np
    
def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable
    
    #compute the bitwise xor matrix
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;
                
                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)
                
                VT = np.zeros((n*m,1), int)
    
    return M
\end{lstlisting}
\end{document}

上述代码的效果如下:

在这里插入图片描述

代码中仅添加了一个参数说明,即[language=Python],则可以看到,所有Python关键字都得到了自动加粗效果。

从文件中读取代码:

由于代码通常存储在源文件中,所以如果有一条命令,能够从源文件中自动读取代码就好了!
LaTeX \LaTeX LATEX通过listings包满足你!

The next code will be directly imported from a file:

%Importing code from file
\lstinputlisting[language=Octave]{BitXorMatrix.m}

代码的效果如下:

在这里插入图片描述

\lstinputlisting[language=Octave]{BitXorMatrix.m}BitXorMatrix.m文件中直接导入了源码。\lstinputlisting指令完成了这一工作。BitXorMatrix.m是一个Octave语言编写的代码(其实就是MatLab的在线版本语言)。
如果只需要截取源码中的一段,那么只需要通过两个参数firstlinelastline进行行控制即可:

\lstinputlisting[language=Octave, firstline=2, lastline=12]{BitXorMatrix.m}

4 代码样式和颜色

以下代码,通过调用listings宏包及颜色宏包,可以达到非常完美的效果:

\documentclass{article}
\usepackage{listings}
\usepackage{xcolor}

\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

\lstdefinestyle{mystyle}{
    backgroundcolor=\color{backcolour},   
    commentstyle=\color{codegreen},
    keywordstyle=\color{magenta},
    numberstyle=\tiny\color{codegray},
    stringstyle=\color{codepurple},
    basicstyle=\ttfamily\footnotesize,
    breakatwhitespace=false,         
    breaklines=true,                 
    captionpos=b,                    
    keepspaces=true,                 
    numbers=left,                    
    numbersep=5pt,                  
    showspaces=false,                
    showstringspaces=false,
    showtabs=false,                  
    tabsize=2
}

\lstset{style=mystyle}

\begin{document}
The next code will be directly imported from a file

\lstinputlisting[language=Octave]{BitXorMatrix.m}
\end{document}

上述代码的效果如下:

在这里插入图片描述

可以看到关键字都得到了高亮的效果,且添加了行号,代码的背景也非常合适。
如此,代码的着色和样式大大提高了可读性。

在此示例中,导入包xcolor,然后使用命令definecolor{}{}{}定义稍后将使用的rgb格式的新颜色。

对于此示例,基本上有两个命令可以生成样式:
lstdefinestyle{mystyle}{...}
定义一个名为"mystyle"的新代码列表样式。在第二对大括号内传递定义此样式的选项。其中的参数比较多,请参阅第7节。

\lstset{style=mystyle}
这条指令使能了样式"mystyle",如果需要的话,可以在文档中使用此命令切换到其他样式。

5 为listings添加题注

和浮动体(如图片和表格)一样,可以为代码添加题注。

\documentclass{article}
\usepackage{listings}

\usepackage{xcolor}

%New colors defined below
\definecolor{codegreen}{rgb}{0,0.6,0}
\definecolor{codegray}{rgb}{0.5,0.5,0.5}
\definecolor{codepurple}{rgb}{0.58,0,0.82}
\definecolor{backcolour}{rgb}{0.95,0.95,0.92}

%Code listing style named "mystyle"
\lstdefinestyle{mystyle}{
  backgroundcolor=\color{backcolour}, commentstyle=\color{codegreen},
  keywordstyle=\color{magenta},
  numberstyle=\tiny\color{codegray},
  stringstyle=\color{codepurple},
  basicstyle=\ttfamily\footnotesize,
  breakatwhitespace=false,         
  breaklines=true,                 
  captionpos=b,                    
  keepspaces=true,                 
  numbers=left,                    
  numbersep=5pt,                  
  showspaces=false,                
  showstringspaces=false,
  showtabs=false,                  
  tabsize=2
}

%"mystyle" code listing set
\lstset{style=mystyle}
\begin{document}
\begin{lstlisting}[language=Python, caption=Python example]
import numpy as np
    
def incmatrix(genl1,genl2):
    m = len(genl1)
    n = len(genl2)
    M = None #to become the incidence matrix
    VT = np.zeros((n*m,1), int)  #dummy variable
    
    #compute the bitwise xor matrix
    M1 = bitxormatrix(genl1)
    M2 = np.triu(bitxormatrix(genl2),1) 

    for i in range(m-1):
        for j in range(i+1, m):
            [r,c] = np.where(M2 == M1[i,j])
            for k in range(len(r)):
                VT[(i)*n + r[k]] = 1;
                VT[(i)*n + c[k]] = 1;
                VT[(j)*n + r[k]] = 1;
                VT[(j)*n + c[k]] = 1;
                
                if M is None:
                    M = np.copy(VT)
                else:
                    M = np.concatenate((M, VT), 1)
                
                VT = np.zeros((n*m,1), int)
    
    return M
\end{lstlisting}
\end{document}

以上代码的效果如下所示:
在这里插入图片描述

这是一段Python代码,编辑的风格也遵循了Python的经典配色及缩进。
并且在代码框的底部添加了题注。

6 listings支持的语言格式

以下表格记录了所有支持的语言类型:

支持的语言支持的语言
ABAP (R/2 4.3, R/2 5.0, R/3 3.1, R/3 4.6C, R/3 6.10)ACSL
Ada (2005, 83, 95)Algol (60, 68)
AntAssembler (Motorola68k, x86masm)
Awk (gnu, POSIX)bash
Basic (Visual)C (ANSI, Handel, Objective, Sharp)
C++ (ANSI, GNU, ISO, Visual)Caml (light, Objective)
CILClean
Cobol (1974, 1985, ibm)Comal 80
command.com (WinXP)Comsol
cshDelphi
EiffelElan
erlangEuphoria
Fortran (77, 90, 95)GCL
GnuplotHaskell
HTMLIDL (empty, CORBA)
informJava (empty, AspectJ)
JVMISksh
LingoLisp (empty, Auto)
Logomake (empty, gnu)
Mathematica (1.0, 3.0, 5.2)Matlab
MercuryMetaPost
MirandaMizar
MLModula-2
MuPADNASTRAN
Oberon-2OCL (decorative, OMG)
OctaveOz
Pascal (Borland6, Standard, XSC)Perl
PHPPL/I
PlasmPostScript
POVProlog
PromelaPSTricks
PythonR
ReduceRexx
RSLRuby
S (empty, PLUS)SAS
Scilabsh
SHELXLSimula (67, CII, DEC, IBM)
SPARQLSQL
tcl (empty, tk)TeX (AlLaTeX, common, LaTeX, plain, primitive)
VBScriptVerilog

7 附录 listings样式的自定义参数

  • backgroundcolor - 背景色. 需要外部宏包 colorxcolor .
  • commentstyle - 源语言中的注释样式.
  • basicstyle - 源码的字体、字号/family/等. (例如 basicstyle=\ttfamily\small)
  • keywordstyle - 源代码中关键字的样式 (e.g. keywordstyle=\color{red})
  • numberstyle - 行号的样式.
  • numbersep - 行号与代码的间距.
  • stringstyle - 源代码中的字符串样式.
  • showspaces - 强调代码中的空格 (true/false).
  • showstringspaces - 强调代码中的字符串 (true/false)
  • showtabs - 强调代码中的tab (true/false)
  • numbers - 行号及位置 (left/right/none, i.e. no line numbers)
  • prebreak - 分行后显示换行符 (e.g. prebreak=\raisebox{0ex}[0ex][0ex]{\ensuremath{\hookleftarrow}})
  • captionpos - 题注的位置 (t/b)
  • frame - 在代码之外显示边框 (none/leftline/topline/bottomline/lines/single/shadowbox)
  • breakatwhitespace - 设置后将只会在空格处换行
  • breaklines - 自动换行
  • keepspaces - 保持空格,对于缩进代码有效
  • tabsize - 默认的tab间隔
  • escapeinside - 特定的字符,退出源码模式到LaTeX模式 (例如 escapeinside={\%*}{*)})
  • rulecolor - 指定边框的颜色
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/152215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[5]. 最长回文子串

[5]. 最长回文子串题目算法设计:双指针算法设计:Manacher 算法题目 传送门:https://leetcode.cn/problems/longest-palindromic-substring/ 算法设计:双指针 检查回文串的通用解决方案是,双指针。 寻找回文串的思…

什么是地理围栏

一、地理围栏算法简介 地理围栏(Geo-fencing)是LBS的一种典型应用,就是用一个虚拟的栅栏围出一个虚拟地理边界。地理围栏更侧重于对区域边界的界定,不再是以某点为圆心向外等距离画圆,而是准确勾勒出小区、写字楼等特…

wpf实现FFmpeg获取摄像头实时画面

gitee地址如下源码地址如何获取摄像头验证码和ip首先获取摄像头底部的验证码及ip(测试使用的是萤石摄像头,需要PC下载萤石客户端查看ip)未连接之前可以通过VLC进行测试在左上角(媒体)--》(流)--》(网络&…

openGauss中Schema赋权小试

目录 概述 1.关于public的权限要点: 2.关于用户同名的schema的权限要点: 3.关于普通schema的权限要点: 概述 下面是openGauss官网对Schema的介绍: Schema又称作模式。通过管理Schema,允许多个用户使用同一数据库而…

MATLAB-二维线性插值运算

二维插值在图像处理和数据可视化方面得到了大量的应用,二维插值的基本原理与一维插值一样,但二维插值是对两个变量进行函数的插值。在MATLAB中,主要使用interp2()函数进行二维插值的实现,其调用格式如下,zi interp2(z,…

Nodejs也能做文本数据处理了,快来看看吧!

随着汉语言的广泛应用,中文信息处理成了一个重要的研究课题,常见于搜索引擎:信息检索、中外文自动翻译、数据挖掘技术、自然语言处理等领域。在处理的过程中,中文分词是最基础的一环。 nodejieba 简介 nodeJieba 是结巴中文分词…

安装thinkphp

[TOC]目录 1. 安装composer 方法:https://www.kancloud.cn/manual/thinkphp6_0/1037481 官网教程中安装composer 2. 配置文件 在命令行中 阿里云: composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ 华为云&#x…

axios基础学习——通过 Vue + axios 获取接口数据的小demo

文章目录 📋前言 🎯关于axios概要 ❓什么是axios 🧩axios特性 🧩axios浏览器支持情况 🎯axios安装与使用 🧩axios请求方法 🧩axios的使用方法(以get为例子) &am…

[C语言]进一步的来了解指针(多多多图详解)

本文章进一步的来讲解指针,如果是第一次接触指针的可以先看一下对于指针的初步理解 : [C语言]初步的来了解一下指针(多图详解)_HY_PIGIE的博客-CSDN博客 目录 1.字符指针 2.指针数组 2.1指针数组:char*类型举例说明 2…

Thawte旗下通配符SSL证书都有什么区别

Thawte由南非Mark Shuttleworth创立,Thawte SSL证书产品占据了全球SSL数字证书市场的40%,是全球第三大数字证书颁发机构(CA)。随后VeriSign于2000年2月1日以5.75亿美元对Thawte换股完成收购,互相合作&#…

GDI对象泄漏导致程序UI界面绘制异常的问题排查

目录 1、问题说明 2、初步分析 3、查看任务管理器,并使用GDIView工具分析 5、采用历史版本比对法,确定初次出现问题的时间点,并查看前一天的代码修改记录 6、将修改的代码与测试现象结合起来,最终定位问题 7、事后的思考 8…

Simulating Content Consistent Vehicle Datasets with Attribute Descent(略读)

提出了一个大型的3D合成数据集VehicleX。其中各个3D模型都有现实世界的车型对应。整个数据集有1362个id,其中包括11种主流车型。 论文:https://arxiv.org/pdf/1912.08855.pdf 摘要 本文使用图形引擎来模拟带有免费注释的大量训练数据。 在合成数据和真…

回归预测 | MATLAB实现RF随机森林多输入单输出回归预测(含回归树,误差柱状图,多指标)

回归预测 | MATLAB实现RF随机森林多输入单输出回归预测(含回归树,误差柱状图,多指标) 目录 回归预测 | MATLAB实现RF随机森林多输入单输出回归预测(含回归树,误差柱状图,多指标)效果分析基本介绍输出结果程序设计学习总结参考资料效果分析

Mars3D Studio平台发布

近日我们基于提供丰富及智能化功能,助力团队做出精美的交互场景的理念,研发了Mars3D Studio平台,于2023年1月10日正式发布上线!欢迎大家访问http://studio.mars3d.cn/ 网站进行体验。一、资源广场团队公开的丰富资源数据&#xff…

LeetCode题目笔记——1658. 将 x 减到 0 的最小操作数

文章目录题目描述题目难度——中等方法一:反向思考,双指针求最长子数组代码/Python代码/C方法二:滑动窗口代码总结我把这篇也归到面试题那一栏,因为觉得这题的思路和思考方式还挺好的,或许能用到其他题上 题目描述 给…

基于Node.js Vue清新严选助农电商平台/电商平台/购物平台

摘 要网络技术的快速发展给各行各业带来了很大的突破,也给各行各业提供了一种新的管理模块,对于清新严选助农电商将是又一个传统管理到智能化信息管理的改革,设计清新严选助农电商平台的目的就是借助计算机让复杂的购买商品操作变简单&#x…

gcc和gdb的使用——Linux

Linux学习全部合集点击即可订阅 “人生得意须尽欢” 这里是目录标题gcc的基本操作gcc处理代码的步骤预处理编译汇编链接头文件和库静态库动态库gdb调试makefile什么是makefile?进度条的实现缓冲区回车和换行git的使用.gitigonregcc的基本操作 编写代码的最基本操作…

【工具Share】用VBA获取批量文件中的同一个单元格内容

最近鼓捣了个工具,可以批量从固定文件夹的excel中获取同一个单元格中的具体内容(当然,你也可以根据自己的需要,进行多个单元格内容的取得) 可能这么说比较抽象,举例来说比如你在多个相同模板的excel中定义了…

java循环结构的概述

在之前的文章中,已经给大家详细地介绍过变量相关的内容,比如变量的概念、命名规范、变量的定义及底层原理等内容。但其实变量还有作用范围的概念,并且根据作用范围的不同,变量还可以分为成员变量、局部变量等内容。在我们今天开始…

Nacos config 配置中心详解

Nacos 提供用于存储配置和其他元数据的 key/value 存储,为分布式系统中的外部化配置提供服务器端和客户端支持。使用 Spring Cloud Alibaba Nacos Config,您可以在 Nacos Server 集中管理你 Spring Cloud 应用的外部属性配置。Spring Cloud Alibaba Naco…