使用缩进在此LaTeX文档中插入代码


426

如何将代码插入LaTeX文档?是否有类似的东西:

\begin{code}## Heading ##
...
\end{code}

我唯一需要的是缩进和固定宽度的字体。虽然绝对不是必需的,但语法突出显示可能很好。


不是一个确切的重复,但答案覆盖同样的理由:看stackoverflow.com/questions/741985/...
查尔斯·斯图尔特·

我也有一个跟进的问题在这里:stackoverflow.com/questions/3408996/...
sixtyfootersdude

Answers:


630

使用listings包装。

LaTeX标头的简单配置(在之前\begin{document}):

\usepackage{listings}
\usepackage{color}

\definecolor{dkgreen}{rgb}{0,0.6,0}
\definecolor{gray}{rgb}{0.5,0.5,0.5}
\definecolor{mauve}{rgb}{0.58,0,0.82}

\lstset{frame=tb,
  language=Java,
  aboveskip=3mm,
  belowskip=3mm,
  showstringspaces=false,
  columns=flexible,
  basicstyle={\small\ttfamily},
  numbers=none,
  numberstyle=\tiny\color{gray},
  keywordstyle=\color{blue},
  commentstyle=\color{dkgreen},
  stringstyle=\color{mauve},
  breaklines=true,
  breakatwhitespace=true,
  tabsize=3
}

您可以使用更改文档中间的默认语言\lstset{language=Java}

文档中的用法示例:

\begin{lstlisting}
// 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);
    }    
}
\end{lstlisting}

结果如下:

范例图片


3
我有一个跟您的代码有关的后续问题。看看,如果你得到一个机会:stackoverflow.com/questions/3408996/...
sixtyfootersdude

1
有没有办法减少代码行之间的空间?
sukhvir 2014年

是否可以在代码段下方添加小文本,类似于在Latex中的图形下书写的文本?
Brian J

@布莱恩我不知道。也许将代码包含在其中figure可以实现此效果。
Cloudanger 2015年

听说这个包已经过时了!
xxx ---

165

您还可以使用逐字记录环境

\begin{verbatim}
your
code
example
\end{verbatim}

57
在逐字记录环境中使用选项卡存在问题。如果将制表符转换为“空格”,问题将消失。
2010年

1
这对于显示示例文本文件内容(例如,要由程序读取/处理的文本数据)很有帮助。
nalyd88 '02

对于两列文章,它不能很好地处理页边距。
Sazzad Hissain Khan,

115

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

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

\newcommand{\code}[1]{\texttt{#1}}

另外,请注意,可以使用以下命令从其他文件加载代码块

\lstinputlisting[breaklines]{source.c}

breaklines不是必需的,但我发现它很有用。请注意,您必须为此\usepackage{ 清单 指定清单}

更新:清单软件包还包含\lstinline命令,该命令具有与\lstlisting\lstinputlisting命令相同的语法突出显示功能(有关详细配置,请参阅Cloudanger的答案)。正如在其他一些答案中提到的那样,还有铸造好的软件包,它提供了\mintinline命令。像一样\lstinline\mintinline提供与常规铸造代码块相同的语法突出显示:

\documentclass{article}

\usepackage{minted}

\begin{document}
  This is a sentence with \mintinline{python}{def inlineCode(a="ipsum)}
\end{document}

1
激活关键字颜色等的内联代码有什么更好的方法?
纳米

是。我已更新我的答案以讨论它们。
阿兰

如何插入空格/制表符以使其更具可读性?
查理·帕克

32

minted依靠Pygments进行格式化的专业化软件包(如)比该listings软件包具有多种优势。要引用minted手册,

与传统软件包相比,Pygments提供了出色的语法高亮显示。例如,清单基本上只突出显示字符串,注释和关键字。另一方面,Pygments可以完全自定义以突出显示源语言可能支持的任何令牌类型。这可能包括字符串,数字,不同类型的标识符以及诸如HTML标签之类的特殊构造中的特殊格式序列。


1
我尝试过铸造,文档非常简单。默认样式是退出良好。
user2262504

5
由于Pygmentsic需要进行外部调用,因此对于许多用户而言,这可能不是一个令人满意的解决方案。特别是,使用该-shell-escape指令调用乳胶的要求充其量只是对现有构建系统的较小修改,而最坏的情况是与某些用户的安全首选项不兼容。
KDN

12

使用Minted

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

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


但是,正如在类似答案中已经提到的那样,-shell-escape对于某些人来说可能很糟糕。
Egor Hans '18

8

铸造在workes 背页,TeX Live中和MIKTEX。

例:

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}[mathescape, linenos]{python}

# Note: $\pi=\lim_{n\to\infty}\frac{P_n}{d}$
title = "Hello World"

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

\end{minted}

\end{document}

输出:

在此处输入图片说明


6

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

\documentclass{article}
\usepackage{spverbatim}

\begin{document}

\begin{spverbatim}
  Your code here
\end{spverbatim}

\end{document}

另外,如果不需要突出显示语法,请打包alltt

\documentclass{article}
\usepackage{alltt}

\begin{document}

\begin{alltt}
  Your code here
\end{alltt}

\end{document}

1
这或多或少是我想要的,但是我似乎无法缩进制表符。您如何缩进/是否有类似的软件包可以简化缩进?
Darokrithia

1
@Darokrithia我编辑了我的答案:您可以检查/更改缩进吗?:)
MattAllegro

1
它似乎不起作用。我可以向您发送我正在使用的代码,但是格式在注释中被破坏了。顺便说一句,我使用了不同的答案,并且效果很好,但是我觉得应该仍然为将来的读者解决。
Darokrithia

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.