在此 LaTeX 文档中插入代码并带有缩进

Posted

技术标签:

【中文标题】在此 LaTeX 文档中插入代码并带有缩进【英文标题】:Inserting code in this LaTeX document with indentation 【发布时间】:2011-03-11 15:30:43 【问题描述】:

如何在 LaTeX 文档中插入代码?有没有类似的东西:

\begincode## Heading ##
...
\endcode

我真正需要的是缩进和固定宽度的字体。语法高亮可能会很好,尽管它绝对不是必需的。

【问题讨论】:

不是完全重复,但答案涵盖相同的领域:请参阅***.com/questions/741985/… 我这里还有一个后续问题:***.com/questions/3408996/… 【参考方案1】:

使用listings 包。

LaTeX 标头的简单配置(\begindocument 之前):

\usepackagelistings
\usepackagecolor

\definecolordkgreenrgb0,0.6,0
\definecolorgrayrgb0.5,0.5,0.5
\definecolormauvergb0.58,0,0.82

\lstsetframe=tb,
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle=\small\ttfamily,
  numbers=none,
  numberstyle=\tiny\colorgray,
  keywordstyle=\colorblue,
  commentstyle=\colordkgreen,
  stringstyle=\colormauve,
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3

您可以使用\lstsetlanguage=Java 更改文档中间的默认语言。

文档中的使用示例:

\beginlstlisting
// Hello.java
import javax.swing.JApplet;
import java.awt.Graphics;

public class Hello extends JApplet 
    public void paintComponent(Graphics g) 
        g.drawString("Hello, world!", 65, 95);
        

\endlstlisting

结果如下:

【讨论】:

我有一个与您的代码相关的后续问题。有机会就看看:***.com/questions/3408996/… 有没有办法减少代码行之间的空间? 是否可以在代码sn-p下面添加小文字,类似于Latex中的图形下写的文字? @Brian 我不知道这一点。也许将代码放在figure 中可以达到效果。 听说这个包已经过时了!【参考方案2】:

你也可以使用逐字环境

\beginverbatim
your
code
example
\endverbatim

【讨论】:

在逐字环境中使用选项卡存在问题。如果选项卡转换为“空格”,问题就会消失。 这对于显示示例文本文件内容很有用(例如,要由程序读取/处理的文本数据)。 两栏文章的页边距处理不好。【参考方案3】:

以下是添加内联代码的方法:

您可以使用\tt code \texttt code 添加内联代码。如果要格式化内联代码,最好自己编写命令

\newcommand\code[1]\texttt#1

另外,请注意,代码块可以从其他文件加载

\lstinputlisting[breaklines]source.c

breaklines 不是必需的,但我觉得它很有用。请注意,您必须为此指定 \usepackage listings

更新:列表包还包括\lstinline 命令,它具有与\lstlisting\lstinputlisting 命令相同的语法突出显示功能(有关配置详细信息,请参阅Cloudanger 的答案)。正如其他一些答案中提到的,还有 minted 包,它提供了 \mintinline 命令。与\lstinline 一样,\mintinline 提供与常规铸造代码块相同的语法突出显示:

\documentclassarticle

\usepackageminted

\begindocument
  This is a sentence with \mintinlinepythondef inlineCode(a="ipsum)
\enddocument

【讨论】:

对于激活关键字颜色等的内联代码有更好的方法吗? 如何插入间距/制表符以使其看起来更具可读性?【参考方案4】:

minted 等专用包依赖于 Pygments 进行格式化,与listings 包相比具有多种优势。引用minted手册,

与传统包相比,Pygments 提供了更出色的语法高亮显示。例如,listing 基本上只高亮字符串、cmets 和关键字。另一方面,Pygments 可以完全自定义以突出显示源语言可能支持的任何标记类型。这可能包括字符串中的特殊格式序列、数字、不同类型的标识符和诸如 html 标签之类的奇异结构。

【讨论】:

我试过 minted,文档很简单。默认样式是很好。 这对于许多用户来说可能是一个不满意的解决方案,因为需要对 Pygmentsic 进行外部调用。特别是,使用-shell-escape 指令调用latex 的要求充其量是对现有构建系统的微小修改,最坏的情况是与某些用户的安全偏好不兼容。【参考方案5】:

Minted,无论来自 GitHub 还是 CTAN, the Comprehensive TeX Archive Network,都可以在 Overleaf、TeX Live 和 MiKTeX 中使用。

需要安装Python包Pygments;这在上述任一来源的文档中都有解释。尽管 Pygments 将自己标榜为 Python 语法荧光笔,但 Minted 保证覆盖数百种其他语言。

示例:

\documentclassarticle
\usepackageminted
\begindocument

\beginminted[mathescape, linenos]python

# Note: $\pi=\lim_n\to\infty\fracP_nd$
title = "Hello World"

sum = 0
for i in range(10):
 sum += i

\endminted

\enddocument

输出:

【讨论】:

【参考方案6】:

使用Minted。

这是一个使用强大的Pygments 库在 LaTeX 中促进表达语法高亮的包。该软件包还提供了使用 fancyvrb 自定义突出显示的源代码输出的选项。

它比任何其他软件包都更加进化和可定制!

【讨论】:

但是,正如在类似答案中已经提到的,-shell-escape 可能对某些人来说很糟糕。【参考方案7】:

由于此处尚未提及,因此可能值得再添加一个选项,包spverbatim(无语法高亮显示):

\documentclassarticle
\usepackagespverbatim

\begindocument

\beginspverbatim
  Your code here
\endspverbatim

\enddocument

另外,如果不需要语法高亮,包alltt:

\documentclassarticle
\usepackagealltt

\begindocument

\beginalltt
  Your code here
\endalltt

\enddocument

【讨论】:

这或多或少是我想要的,但我似乎无法使用制表符缩进。你如何缩进/是否有类似的包可以更容易缩进? @Darokrithia 我编辑了我的答案:你能检查/面对缩进吗? :) 它似乎不起作用。我可以将我正在使用的代码发送给您,但是格式在 cmets 中被破坏了。顺便说一句,我使用了不同的答案,效果很好,但我觉得这仍然应该为未来的读者解决。【参考方案8】:

使用Pygments!

【讨论】:

【参考方案9】:

如果您的代码在 Python 中,我不必安装 Python 包,那么一种非常简单的方法如下:

\documentclass[11pt]article  
\usepackagepythonhighlight

\begindocument

The following is some Python code

\beginpython
# A comment
x = [5, 7, 10]
y = 0

for num in x:
    y += num
    
print(y)
\endpython

\enddocument

看起来像:

很遗憾,这只适用于 Python。

【讨论】:

以上是关于在此 LaTeX 文档中插入代码并带有缩进的主要内容,如果未能解决你的问题,请参考以下文章

latex中脚注第一行为啥会向右缩进两个字

LaTeX详细教程+技巧总结

LaTex缩进问题

数字后的段落没有缩进? [关闭]

latex:等式中的缩进(方框而不是数字)

如何更改新添加的脚本标签内容的缩进