Вставлення коду в цей документ LaTeX з відступом


426

Як вставити код у документ LaTeX? Чи є щось на кшталт:

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

Єдине, що мені справді потрібно - це відступ та шрифт фіксованої ширини. Підсвічування синтаксису може бути приємним, хоча це точно не потрібно.


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

У мене також є простеження питання тут: stackoverflow.com/questions/3408996 / ...
sixtyfootersdude

Відповіді:


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

Чи можна додати під фрагмент коду невеликий текст, подібний до тексту, написаного під малюнком у Латексі?
Брайан Дж.

@Brian Я цього не знаю. Можливо, наявність коду всередині а figureможе досягти ефекту.
Cloudanger

Я чув, що цей пакет застарілий!
xxx ---

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 про деталі конфігурації). Як вже згадувалося в кількох інших відповідях, є також відрізаний пакет, який забезпечує \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посібник,

Пігменти надають значно покращене підсвічування синтаксису порівняно зі звичайними пакунками. Наприклад, списки в основному висвітлюють лише рядки, коментарі та ключові слова. З іншого боку, пігменти можна повністю налаштувати, щоб виділити будь-який маркер, який може підтримувати мова-джерело. Це може включати спеціальні послідовності форматування всередині рядків, чисел, різні види ідентифікаторів та екзотичні конструкції, такі як HTML-теги.


1
Я спробував карбувати, документація досить прямо. Стиль за замовчуванням - це добре.
користувач2262504

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

12

Використовуйте карбовану .

Це пакет, який сприяє виразному підкресленню синтаксису в LaTeX за допомогою потужної бібліотеки Pygments . Пакет також пропонує варіанти налаштування виділеного вихідного вихідного коду за допомогою fancyvrb .

Це набагато більш розвинене та налаштоване, ніж будь-який інший пакет!


Однак, як уже згадувалося у подібній відповіді, -shell-escapeдля деяких людей це може бути смоктанням.
Егор Ганс


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
Це більш-менш те, що я хочу, але я не можу здатися відступом вкладками. Як ви відступаєте / чи є подібний пакет, який дозволяє полегшити відступ?
Дарокритія

1
@Darokrithia Я відредагував свою відповідь: чи можна перевірити / протистояти відступам? :)
MattAllegro

1
Це, здається, не працює. Я можу надіслати вам код, який я використовую, але форматування руйнується в коментарях. До речі, я використав іншу відповідь, і вона спрацювала нормально, але я вважаю, що це все одно слід виправити для майбутніх читачів.
Дарокритія

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.