在此 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 文档中插入代码并带有缩进的主要内容,如果未能解决你的问题,请参考以下文章