Pakiet LaTeX do podświetlania składni kodu w różnych językach

164

Szukam pakietu LaTeX, który wykonuje podświetlanie składni w kodzie. Na przykład teraz używam bloku verbatim do pisania kodu:

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

I to działa dobrze, aby wyświetlić kod w moim dokumencie. Ale przypuśćmy, że chciałbym podkreślić znaczniki HTML tak, jak IDE w dokumencie wyjściowym? Czy jest pakiet, który mógłby pomóc?

Chciałbym zrobić to samo dla różnych języków, takich jak Java, C #, HTML, CSS i tak dalej.

Vincent Ramdhanie
źródło
4
Nie jestem z tego zadowolony lstlisting. W ogóle nie podświetla kodu XML i nie działa, gdy używa się obcych znaków Unicode. Wygląda na to, że JavaScript również nie jest obsługiwany. Czy LGrind poradzi sobie z takimi rzeczami?
webjunkie

Odpowiedzi:

157

Możesz skorzystać z pakietu aukcji . Obsługuje wiele różnych języków i istnieje wiele opcji dostosowywania wyników.

\documentclass{article}
\usepackage{listings}

\begin{document}
\begin{lstlisting}[language=html]
<html>
    <head>
        <title>Hello</title>
    </head>
    <body>Hello</body>
</html>
\end{lstlisting}
\end{document}
ChrisN
źródło
20
Czy to robi domyślnie kolory? Nie widzę kolorowych wyników podczas mojego użytkowania testowego i nie jestem pewien, czy to jest błąd z mojej strony, czy po prostu nie jest to funkcja.
Benson
12
Odpowiedź znalazłem tutaj: tjansson.dk/?p=419 . Możesz po prostu użyć polecenia lstset, aby ustawić wszystkie rodzaje stylów dla różnych właściwości.
Benson,
144

Po zadaniu podobnego pytania stworzyłem kolejny pakiet, który używa Pygments i oferuje o wiele więcej opcji niż texments. Nazywa się mintedi jest dość stabilny i użyteczny.

Aby to pokazać, oto kod wyróżniony wybitym:

Przykładowy kod

Konrad Rudolph
źródło
To całkiem niezła robota. Konieczność zainstalowania Pygments stanowi spore wyzwanie, ale jestem pewien, że większość osób będzie na to gotowa.
Vincent Ramdhanie
1
@Vincent: Niestety, instalacja Pygments na Windowsie jest w tej chwili nieco bardziej skomplikowana (użytkownik musi dostosować PATHzmienną i stworzyć skrypt cmd). Mam nadzieję, że przekonam opiekunów Pygments do wysyłki pygmentizez .exeopakowaniem, które ułatwi ten krok.
Konrad Rudolph
1
Po wypróbowaniu obu aukcji i wybitych / Pigmentów zdecydowałem, że wybite są znacznie lepsze (bardziej elastyczne). JEDNAK będzie to wymagało przeskoczenia przez kilkanaście obręczy, aktualizacji do MiKTeX 2.8, zainstalowania Pythona, zainstalowania innych komponentów i tak dalej. Dokumentacja wybita jest słaba i nie obsługuje łamania długich linii. Ale w końcu udało mi się renderować Java / XML w kolorach Eclipse! jevon.org/wiki/Eclipse_Pygments_Style
jevon
@soundasleepful: wybita dokumentacja jest stale aktualizowana. ;-) Właściwie uważam, że jest dość obszerny (oczywiście jestem stronniczy), ale z przyjemnością odpowiem na wszelkie skargi. W obecnym stanie sekcja „wymagania” jest wprawdzie okropna.
Konrad Rudolph
3
mintedjest zainstalowany i działa zarówno na ShareLatex, jak i Overleaf. Oszczędź sobie bólu głowy związanego z instalacją Pygments;)
grofte
21

Polecam Pygments . Akceptuje fragment kodu w dowolnym języku i wyświetla kod LaTeX z podświetloną składnią. Używa fantazyjnych pakietów kolorystycznych i kolorowych do tworzenia swoich wydruków. Osobiście wolę to od pakietu aukcji. Myślę, że fancyvrb daje dużo ładniejsze rezultaty.

przeprogramować
źródło
1
Chociaż podziwiam makrologię stojącą za listami, zgadzam się również, że pygments mają przewagę: ładniejsze podświetlanie, łatwiejsze dostosowywanie, pewne możliwości mieszania składni i możliwość drukowania w formatach innych niż Latex, takich jak HTML.
Charles Stewart
Na beamer dokumencie typu jest to najwyraźniej jedyna funkcjonalna opcja. Ani mintednie listingskompiluj poprawnie z beamer.
Luís de Sousa
Tak, używałem listingsz beamer, ale musisz określić, że ramki zawierające aukcje są [fragile].
Supernormal
11

LGrind to robi. Jest to dojrzały pakiet LaTeX, który istnieje od czasu, gdy Adam był kowbojem i obsługuje wiele języków programowania.

ConcernedOfTunbridgeWells
źródło
10

Chciałbym użyć wybite pakiet jak wspomniano od dewelopera Konrad Rudolph zamiast pakietu notowań . Oto dlaczego:

pakiet aukcji

Pakiet aukcji domyślnie nie obsługuje kolorów. Aby użyć kolorów, musisz dołączyć pakiet kolorów i samodzielnie zdefiniować reguły kolorów za pomocą polecenia \ lstset, jak wyjaśniono tutaj dla kodu Matlab .

Ponadto pakiet aukcji nie działa dobrze z Unicode, ale możesz rozwiązać te problemy, jak wyjaśniono tutaj i tutaj .

Poniższy kod

\documentclass{article}
\usepackage{listings}

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

tworzy następujący obraz:

wprowadź opis obrazu tutaj

pakiet wybity

Pakiet wybity obsługuje kolory, Unicode i wygląda niesamowicie. Jednak aby z niego skorzystać, musisz mieć pythona 2.6 i pygments . W Ubuntu możesz sprawdzić swoją wersję Pythona w terminalu za pomocą

python --version

i możesz zainstalować pygments z

sudo apt-get install python-pygments

Następnie, ponieważ minted wywołuje pygments, musisz skompilować go za pomocą -shell-escape w ten sposób

pdflatex -shell-escape yourfile.tex

Jeśli używasz edytora lateksowego, takiego jak TexMaker lub coś w tym rodzaju, zalecałbym dodanie polecenia użytkownika, aby nadal można było je skompilować w edytorze.

Poniższy kod

\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}

tworzy następujący obraz:

wprowadź opis obrazu tutaj

Adam
źródło
4

Przeważnie używam lstlistings w papierach, ale do kolorowych wydruków (do slajdów) używam zamiast tego pigmentów.

Paul Biggar
źródło