ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

不是完全重复,但答案涵盖相同的基础:请参阅 stackoverflow.com/questions/741985/…
我在这里还有一个后续问题:stackoverflow.com/questions/3408996/…

C
Cloudanger

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

结果如下:

https://i.stack.imgur.com/wKKMy.png


我有一个与您的代码有关的后续问题。如果有机会,请看一看:stackoverflow.com/questions/3408996/…
有没有办法减少代码行之间的空间?
是否可以在代码片段下方添加小文本,类似于在 Latex 中的图形下写的文本?
@Brian我不知道这一点。也许将代码放在 figure 中可以达到效果。
我听说这个包现在已经过时了!
m
midtiby

您还可以使用逐字环境

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

在逐字环境中使用制表符存在问题。如果选项卡转换为“空格”,问题就会消失。
这有利于显示示例文本文件内容(例如,要由程序读取/处理的文本数据)。
对于两栏文章,它不能很好地处理边距。
a
alan

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

您可以使用 {\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}

对于激活关键字颜色等的内联代码有更好的方法吗?
您如何插入间距/制表符以使其看起来更具可读性?
使用 mintinline 时是否可以删除字符之间的空格?
我不确定你是什么意思。这听起来像一个字体问题。 CTAN 上的 minted 页面包含有关此类内容的完整文档:ctan.org/pkg/minted
P
Philipp

依赖 Pygments 进行格式化的专用包(例如 minted)与 listings 包相比具有多种优势。引用 minted 手册,

与传统包相比,Pygments 提供了优越得多的语法高亮显示。例如,列表基本上只突出显示字符串、评论和关键字。另一方面,Pygments 可以完全定制以突出显示源语言可能支持的任何标记类型。这可能包括字符串、数字、不同类型的标识符和奇异结构(如 HTML 标记)中的特殊格式序列。


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

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}

输出:

https://i.stack.imgur.com/mBbVD.png


c
coffeemakr

使用 Minted

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

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


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

如果您的代码在 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}

https://i.stack.imgur.com/UlQi0.png

不幸的是,这只适用于 Python。


M
MattAllegro

由于此处尚未提及,因此可能值得再添加一个选项,包 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 我编辑了我的答案:你能检查/面对缩进吗? :)
它似乎不起作用。我可以将我正在使用的代码发送给您,但格式在注释中被破坏了。顺便说一句,我使用了不同的答案并且效果很好,但我觉得这仍然应该为未来的读者解决。
T
Tarantula

使用 Pygments


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅