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-код і викручується при використанні сторонніх символів Unicode. 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і досить стабільний і корисний.

Для того, щоб показати це, ось код, виділений чеканиною:

Приклад коду


Це насправді досить гарна робота. Потрібно встановити Pygmenti справді нелегко, але я впевнений, що більшість людей будуть готові це зробити.
Вінсент Рамдані

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

1
Спробувавши і списки, і карбовані / Пігменти, я вирішив, що чеканка набагато краще (більш гнучка). ЯКЩО це вимагатиме перестрибування через десяток обручів, оновлення до MiKTeX 2.8, встановлення Python, встановлення інших компонентів тощо. Вироблена документація погана, і вона не підтримує переривання довгих ліній. Але врешті-решт я отримав це, щоб відобразити Java / XML у кольорах Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon

@soundasleepful: карбована документація постійно оновлюється. ;-) Я насправді вважаю це досить обширним (звичайно, я упереджений), але я радий звертатись із будь-якими скаргами. Як відомо, розділ "вимоги", очевидно, жахливий.
Конрад Рудольф

3
mintedвстановлюється і працює як на ShareLatex, так і на Overleaf. Збережіть собі головний біль від установки Pygments;)
grofte

21

Я рекомендую Пігменти . Він приймає фрагмент коду на будь-якій мові та виводить синтаксис, виділений кодом LaTeX. Він використовує fancyvrb і кольорові пакети для отримання свого результату. Я особисто віддаю перевагу цьому пакету лістингу. Я думаю, що fancyvrb створює набагато гарніші результати.


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

Для beamerтипового документа це, мабуть, єдиний функціональний варіант. Ні, mintedні listingsкомпілювати правильно beamer.
Luís de Sousa

Так, я використовував listingsз beamer, але ви повинні вказати , що кадри , які включають в себе списки [fragile].
Супернормальний


10

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

перелік пакунків

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

Також пакет лістингу не працює добре з unicode, але ви можете виправити ці проблеми, як пояснено тут і тут .

Наступний код

\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 та пігменти . В Ubuntu ви можете перевірити свою версію python в терміналі за допомогою

python --version

і ви можете встановити пігменти за допомогою

sudo apt-get install python-pygments

Тоді, так як карбувалися робить дзвінки на pygments, ви повинні скомпілювати його з -Оболонки-бігти , як це

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.