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

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

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

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

【问题讨论】:

标签: latex


【解决方案1】:

使用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}

结果如下:

【讨论】:

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

你也可以使用逐字环境

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

【讨论】:

  • 在逐字环境中使用选项卡存在问题。如果选项卡转换为“空格”,问题就会消失。
  • 这对于显示示例文本文件内容很有用(例如,要由程序读取/处理的文本数据)。
  • 两栏文章的页边距处理不好。
【解决方案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 提供与常规铸造代码块相同的语法突出显示:

\documentclass{article}

\usepackage{minted}

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

【讨论】:

  • 对于激活关键字颜色等的内联代码有更好的方法吗?
  • 如何插入间距/制表符以使其看起来更具可读性?
【解决方案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 保证覆盖数百种其他语言。

示例:

\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】:

    使用Minted

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

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

    【讨论】:

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

    由于此处尚未提及,因此可能值得再添加一个选项,包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}
    

    【讨论】:

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

    使用Pygments

    【讨论】:

      【解决方案9】:

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

      \documentclass[11pt]{article}  
      \usepackage{pythonhighlight}
      
      \begin{document}
      
      The following is some Python code
      
      \begin{python}
      # A comment
      x = [5, 7, 10]
      y = 0
      
      for num in x:
          y += num
          
      print(y)
      \end{python}
      
      \end{document}
      

      看起来像:

      很遗憾,这只适用于 Python。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2010-11-26
        • 1970-01-01
        • 2011-05-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多