LaTeX 插入代码可以使用的宏包有 verbatim、fancyvrb、listings 以及 minted。个人最推荐使用 minted。

verbatim

verbatim 没有语法高亮功能,只是显示一个等宽字体的输出。查看 Overleaf 示例

% Preamble
\usepackage{verbatim}
% Body
\begin{verbatim}
Text enclosed inside \texttt{verbatim} environment
is printed directly
and all \LaTeX{} commands are ignored.
\end{verbatim}

fancyvrb

fancyvrb 是 verbatim 的增强版,增加了显示行号和代码块边框的功能。

% Preamble
\usepackage{fancyvrb}
\usepackage{xcolor} % 用到了 \color 命令
% Body
% 设置在代码块左部显示行号,用方框包围代码块,代码块显示为红色
\begin{Verbatim}[numbers=left, frame=single, formatcom=\color{black}]
#include <iostream> int main() {
std::cout << "Hello, world!" << std::endl;
return 0;
}
\end{Verbatim}

listings

listings 则更为强大,带有语法高亮、自定义风格等功能。查看 Overleaf 示例

% Preamble
\usepackage{xcolor} % 为了渲染颜色,需要使用 xcolor 包
\usepackage{listings} % 渲染代码块
% Body

% 定义颜色
\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} % 定义 listings 风格,可以定义多个
\lstdefinestyle{mystyle}{
% backgroundcolor=\color{backcolour}, % 背景色
commentstyle= \color{red!50!green!50!blue!50}, % 注释的颜色
keywordstyle= \color{blue!70}, % 关键字/程序语言中的保留字颜色
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,
frame=single % [none | single | shadowbox] 显示边框
} \lstset{style=mystyle} % 使用 listings 风格 \begin{lstlisting}[language=Python]
def main():
print("Hello, world!")
return 0
\end{lstlisting}

参考:Code listing | Overleaf

minted(推荐)

minted 是最方便好用的一款代码格式化宏包,开箱即用,只需配置目标语言即可。不过它需要 Python Pygments 包的依赖,以及需要启用 shell-escape 选项。查看 Overleaf 示例

安装 Pygments 包。以下命令选其一。

sudo apt install install python3-pygments
pip install pygments

启用 shell-escape 选项:

echo "shell_escape = t" >> /usr/local/texlive/2024/texmf.cnf

# 或者,在每次编译的时候指定 -shell-escape 选项
latexmk -shell-escape main.tex

注意将 2024 改为你当前在使用的 TeX Live 版本

如果你的编译套件不是 TeX Live,那么开启 shell-escape 选项的方法可以参考 How can I enable shell-escape? | StackExchange

% Preamble
\usepackage[outputdir=build]{minted}
% Body
\usemintedstyle{vs} % 切换风格 \begin{minted}{python}
def main():
print("Hello, world!")
return 0
\end{minted}

如果你在编译时指定了特定的输出目录,才需要在引入 minted 包时提供 outputdir 选项。这里指定的输出目录是 build

参考:Code Highlighting with minted | Overleaf

LaTeX 插入代码的更多相关文章

  1. Bootstrap css栅格 + 网页中插入代码+css表格

    设计达人 http://www.shejidaren.com/30-minimal-app-icons.html CSS栅格: <!DOCTYPE html> <html lang= ...

  2. 使用Markdown在博客里插入代码

    今天尝试了一下在线使用Markdown编辑器写博客,发现想要实现下面这样的效果还真得折腾一会儿. <html> <head> <meta charset="ut ...

  3. sphinx插入代码

    示例的Python源代码或者交互界面都可以使用标准reST模块实现.在正常段落后面跟着 :: 开始,再加上适当缩进. 交互界面需包含提示及Python代码的输出. 交互界面没有特别的标记. 在最后一行 ...

  4. 怎样在Word中插入代码并保持代码原始样式不变

    怎样在Word中插入代码并保持样式不变 我们有时候需要在word中添加一段我们写的代码,但是把代码粘贴到word文档中之后就发现所有的代码的样子都变了,我们可以采用下边的方法来实现保持代码原来的样式和 ...

  5. PE头的应用---插入代码到EXE或DLL文件中

    三.代码实现(DELPHI版本),采用第三种方式实现代码插入. 1. 定义两个类,一个用来实现在内存中建立输入表:一个用来实现对PE头的代码插入. DelphiCode: const MAX_SECT ...

  6. 编程算法 - 有序双循环链表的插入 代码(C)

    有序双循环链表的插入 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 有序双循环链表的插入, 须要找到插入位置, 能够採用, 两个指针, 一个在前, 一 ...

  7. xhEditor实现插入代码功能

    如果大家经常使用CSDN或者其他技术博客,都会有插入程序代码或脚本功能 开源中国 CSDN 这里介绍xhEditor实现插入代码功能,对xhEditor进行插件扩展 一.首先定义插件样式 <st ...

  8. 在word中如何美观地插入代码

    打开这个网站 http://www.planetb.ca/syntax-highlight-word 进去后我们看到下面的界面 中间的空白文本框,可以插入代码,下面可以选择代码种类,最后点击Show ...

  9. LATeX 插入脚注

    LATeX 插入脚注: 使用  \footnote{...注释内容} 命令: To maximize the lower-bound $ we employ conjugate gradient me ...

  10. 在word中优雅地插入代码

    PlanetB:带行号 http://www.planetb.ca/syntax-highlight-word   Pygments(推荐):不带行号,多种样式可选 http://pygments.o ...

随机推荐

  1. 【论文阅读】Pylot: A Modular Platform for Exploring Latency-Accuracy Tradeoffs in Autonomous Vehicles

    参考与前言 resource 代码:https://github.com/erdos-project/pylot 论文地址:https://www.ionelgog.org/data/papers/2 ...

  2. 3568F-视频开发案例

  3. InvocationTargetException和UndeclaredThrowableException异常介绍

    今天来介绍了两个陌生又熟悉的异常类,熟悉是因为我们经常会遇到它们,陌生是好像又从来不知道它们是做什么的 假定读者已经清楚了Java的异常分类: 一是程序不能处理的错误(Error), 二是程序应该避免 ...

  4. linux scp自动填充密码脚本

    在linux上使用scp命令传输文件时,每传输一次,都要填写目标服务器的登录密码,十分麻烦. 配置系统密钥又比较复杂,于是想到的使用expect写一个自动填充密码的脚本,脚本内容如下: scp.sh ...

  5. eclipse注释取消注释

    方法一:使用Ctrl+/快捷键   1 第1步:在Eclipse中拖动鼠标,选中需要注释的代码,通常为连续多行代码. 2 第2步:按住Ctrl+/快捷键,如图所示. 3 第3步:会发现所选代码被&qu ...

  6. MySQL中为什么要使用索引合并(Index Merge)?

    本文分享自华为云社区<[华为云MySQL技术专栏]MySQL中为什么要使用索引合并(Index Merge)?>,作者:GaussDB 数据库. 在生产环境中,MySQL语句的where查 ...

  7. JavaScript '&&' 与 '||' 操作符

    "&&" 操作符 1.如果第一个操作数是对象,则返回第二操作数 var res = {} && "Hello";//Hello ...

  8. 广州大学第十八届ACM大学生程序设计竞赛(同步赛)——题解

    这套题我答的很失败.没有按照题目的难度去答题,前期浪费了不少时间. 题目: A-字符画 题解:思维.模拟.这道题我的通过率为62.5,没有过的原因是因为对细节的处理和把控不到位,对一些点忽视,我也记录 ...

  9. 如何查询MySQL存储的树形结构,层次结构

    表定义如下 如果我们需要在表中查询这个树状结构,通过SQL语句,有两种查询方法: 1.通过inner自连接查询,适用于简单的结构 SELECT * FROM course_category AS on ...

  10. 《最新出炉》系列入门篇-Python+Playwright自动化测试-56- 多文件上传 - 下篇

    1.简介 前边的两篇文章中,宏哥分别对input控件上传文件和非input控件上传文件进行了从理论到实践地讲解和介绍,但是后来又有人提出疑问,前边讲解和介绍的都是上传一个文件,如果上传多个文件,Pla ...