Пакет LaTeX для подсветки синтаксиса кода на разных языках


164

Я ищу пакет LaTeX, который делает подсветку синтаксиса кода. Например, сейчас я использую дословный блок для написания кода:

\begin{verbatim}
    <html>
       <head>
           <title>Hello</title>
       </head>
       <body>Hello</body>
    </html>
\end{verbatim}

И это прекрасно работает для отображения кода на моем документе. Но предположим, что я хотел выделить HTML-разметку так, как это сделала бы IDE в выходном документе? Есть ли пакет, который может помочь?

Я хотел бы сделать то же самое для различных языков, таких как Java, C #, HTML, CSS и так далее.


4
Я не доволен lstlisting. Он вообще не выделяет XML-код и портит при использовании сторонних символов Юникода. JavaScript тоже не поддерживается, как кажется. Может ли LGrind справиться с такими вещами?
webjunkie

Ответы:


157

Вы можете использовать пакет объявлений . Он поддерживает много разных языков, и есть много опций для настройки вывода.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

20
Это делает цвета по умолчанию? Я не вижу цветной вывод в моем тестовом использовании, и я не уверен, что это ошибка с моей стороны, или просто не функция.
Бенсон

12
Я нашел ответ здесь: tjansson.dk/?p=419 . Вы можете просто использовать команду lstset, чтобы установить все виды стилей для различных свойств.
Бенсон

144

После того, как задать аналогичный вопрос , я создал еще один пакет , который использует Pygments, и предлагает довольно еще несколько вариантов , чем texments. Это называется mintedи довольно стабильно и удобно.

Чтобы показать это, вот код, выделенный minted:

Пример кода


Это на самом деле довольно хорошая работа. Необходимость установки Pygments представляет собой небольшую проблему, но я уверен, что большинство людей захотят это сделать.
Винсент Рамдани

1
@Vincent: К сожалению, установка Pygments в Windows на данный момент немного сложнее (пользователь должен адаптировать PATHпеременную и создать сценарий cmd). Я надеюсь убедить сопровождающих Pygments отправлять pygmentizeс .exeоберткой, чтобы сделать этот шаг проще.
Конрад Рудольф

1
Попробовав как листинги, так и чеканку / фрагменты, я решил, что чеканка была намного лучше (более гибкой). ОДНАКО это потребует прыгать через дюжину обручей, обновиться до MiKTeX 2.8, установить Python, установить другие компоненты и так далее. Чеканка документации плохая и не поддерживает разрыв длинных строк. Но в конце концов я получил его для рендеринга Java / XML в цветах Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
Джевон

@soundasleepful: отчеканенная документация постоянно обновляется. ;-) На самом деле я нахожу это довольно обширным (конечно, я предвзятый), но я рад ответить на любые жалобы. В нынешнем виде раздел «требования», по общему признанию, ужасен.
Конрад Рудольф

3
mintedустановлен и работает как на ShareLatex, так и на Overleaf. Избавьте себя от головной боли при установке Pygments;)
grofte

21

Я рекомендую Пигменты . Он принимает фрагмент кода на любом языке и выводит синтаксис с выделенным кодом LaTeX. Это использует пакеты fancyvrb и color, чтобы произвести его вывод. Я лично предпочитаю это перечислению пакета. Я думаю, что fancyvrb создает гораздо более приятные результаты.


1
Хотя я восхищаюсь макрологией списков, я также согласен с тем, что у фрагментов есть преимущество: более приятное выделение, более легкая настройка, некоторая возможность смешивать синтаксисы и возможность вывода в форматы, отличные от латексных, например HTML.
Чарльз Стюарт

В beamerдокументе типа это, по-видимому, единственный функциональный параметр. Ни правильно, mintedни listingsскомпилировать правильно beamer.
Луис де Соуза

Да, я использовал listingsс beamer, но вы должны указать, что кадры, которые включают в себя списки [fragile].
Сверхъестественное

11

LGrind делает это. Это зрелый пакет LaTeX, который существует с тех пор, как Адам был ковбоем и поддерживает многие языки программирования.


10

Я бы использовал отчеканенный пакет, как упомянуто разработчиком Конрадом Рудольфом, вместо пакета листинга . Вот почему:

листинг пакета

Пакет листинга по умолчанию не поддерживает цвета. Для того, чтобы использовать цвета , вам нужно будет включать в себя пакет цвета и определить цветовые правила самостоятельно с \ lstset команды , как описано для MatLab кода здесь .

Кроме того, пакет листинга не работает с юникодом, но вы можете решить эти проблемы, как описано здесь и здесь .

Следующий код

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}

производит следующее изображение:

введите описание изображения здесь

мятный пакет

Пакет с надписью поддерживает цвета, Unicode и выглядит потрясающе. Однако для того, чтобы использовать его, вам нужно иметь Python 2.6 и pygments . В Ubuntu вы можете проверить свою версию Python в терминале с помощью

python --version

и вы можете установить фрагменты с

sudo apt-get install python-pygments

Затем, поскольку minted выполняет вызовы фрагментов, вам нужно скомпилировать его с -shell-escape следующим образом:

pdflatex -shell-escape yourfile.tex

Если вы используете редактор латекса, такой как TexMaker или что-то еще, я бы порекомендовал добавить пользовательскую команду, чтобы вы все еще могли скомпилировать ее в редакторе.

Следующий код

\documentclass{article}
\usepackage{minted}
\begin{document}

\begin{minted}{html}
    <!DOCTYPE html>
    <html>
       <head>
           <title>Hello</title>
       </head>

       <body>Hello</body>
    </html>
\end{minted}
\end{document}

производит следующее изображение:

введите описание изображения здесь


4

В основном я использую lstlistings в документах, но для цветного вывода (для слайдов) я использую вместо этого фрагменты.


-1

Я бы предложил определить свой собственный пакет на основе следующего текстового кода; это дает вам полную свободу. http://ubuntuforums.org/archive/index.php/t-331602.html


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