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


427

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

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

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


Не точный дубликат, но ответы охватывают одну и ту же тему: см. Stackoverflow.com/questions/741985/…
Чарльз Стюарт

У меня также есть дополнительный вопрос: stackoverflow.com/questions/3408996/…
sixtyfootersdude

Ответы:


631

Используйте 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
Есть ли способ уменьшить пространство между строками кода?
Сухвир

Можно ли добавить небольшой текст под фрагмент кода, похожий на текст, написанный под рисунком в латексе?
Брайан Джей

@ Брайан, я не знаю об этом. Возможно, наличие кода внутри figureмогло бы достичь эффекта.
Cloudanger

Я слышал, этот пакет сейчас устарел!
ххх ---

165

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

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

57
Существует проблема с использованием вкладок в дословной среде. Если вкладки преобразованы в «пробел», проблема исчезнет.
середина

1
Это хорошо для демонстрации примера содержимого текстового файла (например, текстовых данных, которые должны быть прочитаны / обработаны программой).
nalyd88

Для статьи из двух столбцов она не очень хорошо обрабатывает поля.
Саззад Хисейн Хан

115

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

Вы можете добавить встроенный код с помощью {\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}

1
Есть ли лучший способ для встроенного кода, который активирует цвета ключевых слов и т. д.?
Нано

Да. Я обновил свой ответ, чтобы обсудить их.
алан

как вы вставляете интервалы / вкладки, чтобы они выглядели более читабельными?
Чарли Паркер

32

Специализированные пакеты, такие как minted, который использует Pygments для выполнения форматирования, предлагают различные преимущества по сравнению с listingsпакетом. Цитировать из mintedруководства,

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


1
Я попробовал отчеканен, документация довольно проста. Стиль по умолчанию достаточно хорош.
user2262504

5
Это может быть неудовлетворительным решением для многих пользователей из-за внешнего вызова, необходимого для Pygmentsic. В частности, требование вызывать latex с помощью -shell-escapeдирективы является, в лучшем случае, незначительной модификацией существующих систем сборки, а в худшем случае несовместимо с настройками безопасности некоторых пользователей.
KDN

12

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

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

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


Тем не менее, как уже упоминалось в аналогичном ответе, -shell-escapeнекоторые люди могут сосать.
Егор Ганс,


6

Поскольку это еще не было упомянуто здесь, возможно, стоит добавить еще одну опцию, package 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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.