Вставка кода в этот документ LaTeX с отступом

Как вставить код в документ LaTeX? Есть ли что-то вроде:

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

Единственное, что мне действительно нужно, это отступ и шрифт фиксированной ширины. Подсветка синтаксиса может быть хорошей, хотя это определенно не требуется.

Ответ 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}

Вот результат:

Example image

Ответ 2

Вы также можете использовать среду verbatim

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

Ответ 3

Вот как добавить встроенный код:

Вы можете добавить встроенный код с помощью {\tt code } или \texttt{ code }. Если вы хотите отформатировать встроенный код, лучше всего создать собственную команду

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

Также обратите внимание, что блоки кода можно загружать из других файлов с помощью

\lstinputlisting[breaklines]{source.c}

breaklines не требуется, но я считаю это полезным. Имейте в виду, что для этого вам нужно будет указать \usepackage{ списки }.

Обновление: Пакет списков также включает команду \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, которые полагаются на Pyigs для форматирования, предлагают различные преимущества перед пакетом listings. Чтобы указать из руководства minted,

Пигменты обеспечивают гораздо более сильную подсветку синтаксиса по сравнению с обычными пакетами. Например, в списках в основном выделяются строки, комментарии и ключевые слова. Пигменты, с другой стороны, могут быть полностью настроены, чтобы выделить любой токен, который может поддерживать исходный язык. Это может включать специальные последовательности форматирования внутри строк, чисел, различных типов идентификаторов и экзотических конструкций, таких как HTML-теги.

Ответ 5

Используйте чеканку.

Это пакет, который облегчает выразительную подсветку синтаксиса в LaTeX, используя мощную библиотеку Pygments. Пакет также предоставляет опции для настройки выделенного вывода исходного кода с помощью fancyvrb.

Это гораздо более развитый и настраиваемый, чем любой другой пакет!

Ответ 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}

Ответ 7

Используйте Pygments!

Ответ 8

Чеканка работает в Overleaf, 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}

Выход:

enter image description here